안양대학교와 한양대학교에서 학부생, 대학원생을 대상으로 강의하고 외부 강의도 하고, 또 마침 IT회사도 운영하면서, 전공자가 했으면 하는 것이 몇 가지 생겼다.
솔직히 말하면 학교의 접근성이나 학생들의 사바사도 있어, 모두 같은 노력으로 해낼 수 있는 건 아니겠지만, 그럼에도 했으면 하는 것들이다.
CS
CS라고 하면 Computer Science 이다. 대부분 컴퓨터 전공 학과에 있는 전공과목을 말한다. 더 정확히는 Science가 붙어서 보통 이론에 가깝다. 이론과 기술이 모호해진 지금, 아직도 이렇게 구분하는지 모르겠지만 자료구조, 운영체제, 컴퓨터 구조, 알고리즘 등을 말한다.
몇 가지 들었던 얘기가 있다. 대학원을 가기 위해 학점을 잘 받아야 해서 어려운 전공과목은 안 들었다는 얘기. 과제가 너무 많은 수업이라 그 전공과목은 안 들었다는 얘기. 들었었는데 이해가 안 돼서 대충 이수만 했다는 얘기.
여기서 말하는 과목은 대부분 CS 과목이었다. 운영체제를 배웠는데 Journaling Filesystem을 모르는 경우도 있고, 컴퓨터 구조를 배웠는데 PC를 모르는 경우나 Virtual Memory를 모르는 경우도 있다. 내 경우에도 학부 시절에 제대로 배우지 못했고, 대학원에 가서 학부생 수업을 청강하거나 연구실에서 혼나면서 배웠었다.
CS를 학부에서 하고 왔으면 좋겠다고 생각한 이유는, 결국 어차피 언젠가 필요한 공부인데, 학부 시절이 가장 효율적인 시기이기 때문이다.
사실 다른 공부를 더 하고 CS를 미뤄두어도, 개발 센스가 좋아서 인지 웹이나 앱 개발을 뚝딱 해내는 사람은 많다. 그렇게 남들보다 빠르게 일을 시작할 수도 있고 사업을 할 수도 있을 것이다. 그리고 시간이 흘러 아키텍트가 되고 싶다거나, 여태껏 만나지 못했던 어려운 문제를 해결해야 하거나, 비슷한 상황에 놓이게 되면 결국 CS는 필요하다. 그런데 이미 시간이 흐른 뒤에 쓰는 시간은 어렸을 때 쓰는 시간보다 훨씬 비싸고, 비효율적이다.
심지어 CS 기반이 좋다면 그렇지 않은 사람보다 분야 선택의 폭이 훨씬 넓을 것이다.
포트폴리오 프로젝트
대부분 전공생은 3학년에 데이터베이스를 배우고, 이때 과제로 간단한 프로젝트를 하게 된다. 프로그래밍 언어를 배웠고 DB를 배우면서 둘을 연결하는 것이 이 시점인데, 이때부터 프로젝트를 꾸준히 해야 한다. 여기서 말하는 프로젝트는 클론 코딩을 포함하기는 하지만, 클론 코딩 강의를 들으면서 그대로 따라 하는 걸 말하진 않는다.
결국 컴퓨터 전공이면 프로그램을 만들어야 한다고 생각한다. 사실 정말 뛰어난 일부 소수를 제외하면 학부 시절에 만드는 프로그램은 거창하지 않았던 것 같다. 요새는 상향 평준화되었다고 하지만, 그래도 사실 일부 소수라고 생각한다. 그렇다면 그렇게 거창하지 않지만 필요하다고 하는 이유는 결과보다 과정에 있다.
프로젝트를 어떤 튜토리얼이나 강의를 따라가지 않고, 스스로 처음부터 마지막까지 만든다는 것은 그렇게 쉬운 일이 아니다. 익숙하지 않은 사람이라면, 첫 보일러 플레이트를 만드는 것 까지도 꽤 곤욕일 수 있다.
이 과정을 한번 겪고, 심지어 마무리까지 해본 사람이라면 취업 시장에서 평가가 "가능"하다고 생각한다. 그렇지 않으면 애초에 평가를 못하지 않을까 생각한다.
더 나아가 가능하다면 운영해 보는 것이 좋다. 이건 사실 쉬운 얘긴 아니지만, 운영하면서 겪는 이슈는 개발 과정보다 훨-씬 많다. 이전에 블로그에서 본 로그 full 관련된 내용도 그렇고, 트래픽이 몰릴 때 발생할 수 있는 이슈라든지, 왜 캐시를 고민하게 되는지 등 많은 것들이 운영 과정에서 학습하게 된다. 물론 이런 것들은 "나아가 가능하다면" 하는 것이 좋을 뿐, 어렵다고 생각한다.
퀴즈 풀기
이 부분은 프로그래밍 언어를 처음 배우고 난 뒤 얘기이다. 보통 1학년 1학기나 2학기에 첫 언어를 배우니 그 이후가 되겠다. 최근 유튜브 쇼츠를 보던 중, 정승제 선생님 짤을 본 적이 있다.
(문제 해설 후)
정승제 선생님: 자, 이제 이해 되지?
학생: 이해는 돼요.
정승제 선생님: 이해는 된다는 게 무슨 말이야?
학생: 이해는 되는 데, 혼자서는 못할 것 같아요.
정승제 선생님: 당연하지. 그걸 연습해서 혼자 할 수 있게 하는 게 공부인데, 공부해야지.
정확한 워딩은 기억나지 않지만, 비슷한 얘기였다. 프로그래밍도 마찬가지라고 생각한다. 배웠으면 계속 써야 한다.
어려운 문제가 아니더라도 계속 작은 문제를 풀어가면서 익숙해져야 하는 것 같다.
극단적인 표현일 수도 있지만, 4학년이 될 때까지 학점은 어찌저찌 잘 받았으나, 수업, 과제 외 프로그래밍을 한번도 하지 않은 학생을 가정해보자. 이 학생은 대부분의 테크기업 입사 코딩 테스트 1차 문제 중 정답률이 80%가 넘어가는 것도 못풀 확률이 높다.
이 얘기는 사실 컴퓨터 전공이 앞서 얘기한 CS도 중요하지만 결국 Engineering 영역도 명확히 있다는 것이다. 그러니 Computer Science & Engineering이라고 하는 것 같다. 기술로서 연습하고 체득해야 하는 부분도 있다는 것이다.
내가 기술이 뛰어난 사람이면 더 어려운 문제를 풀면서 강화하고, 못하는 사람이라면 쉬운 문제를 풀면서 체득해가면 되는 것이다.
뭐 이렇게 4년 동안 빡세게 공부해야 하냐고 할 수도 있지만, 현실은 안 하는 사람이 훨씬 많다. 그리고 그 사람들은 우리 눈에 잘 안 보인다.
결국 잘하는(잘하게 될) 전문직은 쉬울 리 없다는 것이다.
이 글을 쓴 이유는, "어떻게든 되겠지~"라고 생각하는 학생들이, 학부 시절까지는 앞서 얘기한 것들로 채우고 난 후에 "어떻게든 되겠지"를 했으면 좋겠다는 생각이 들어서이다. 그 이후부터는 "어떻게든"에 더 많은 옵션이 포함될 것이다.