컴퓨터 공학과 입학시 일어날 일들 정리
무엇을 배우는가
과목은 크게 두 분류로 나뉜다
1. 시스템 과목 (OS , 컴파일러, 시스템 프로그래밍, 자료구조, 알고리즘 등)
이론을 배우고 실습을 한다. 실습은 대부분 과제로 수행한다. 이런 과목들은 실 생활에서 사용하는 앱을 개발하지는 않는다.
실생활에서 사용하는 프로그램과 괴리감이 있다 보니 흥미를 덜 느낄수가 있는데 현업에서 메모리 최적화 또는 속도 최적화와 관련된 업무를 할 경우 유용하게 사용할 수 있는 지식들이 있다.
사실 이론 과목은 앱개발, 웹개발을 할 때 크게 도움이 되지는 않을 수도 있다. 시스템 프로그래밍과 관련된 내용은 주로 시스템 엔지니어들에게 필요한데 당신이 시스템 엔지니어링 관련 업무를 담당할 확률은 글쎄 그리 크지 않을 것이라 생각한다.
자료구조와 알고리즘은 현업에서 외부 라이브러리를 가져다 쓰는 경우가 대부분므로 직접 구현할 일은 거의 없다. 그런 이유로 자료구조와 알고리즘의 무용론을 주장할 수도 있으나 구현할 일이 없어도 유용하다.
솔루션을 스스로 구현해 본 개발자는 그렇지 않은 개발자 대비 코드를 이해하는 속도나 구현 속도 등에서 더 나은 퍼포먼스를 보여준다.
사실 이론과목은 컴퓨터 공학과를 다닌 사람과 학원출신 및 독학생들과의 가장 차별화 되는 부분이다. 학교에서 강제로 공부할 여건을 마련해주지 않으면 공부할 수 있는 기회가 거의 없다.
2. 프로그래밍 언어 과목 / 실습 과목
C, 자바등의 언어에 대해 배우고 배운 언어로 팀 프로젝트 등을 수행한다. 실습은 대부분 과제로 수행한다. 과제는 주로 응용 프로그램을 개발하는데 대부분은 여기서 개발에 흥미를 느낄 것이다. 반대로 개발해야 할 분량에 압도되어 좌절하거나 그릇된 삽질을 통해 프로젝트를 갈아업거나 팀원과의 크고작은 분쟁이 지속될 경우 개발에 흥미를 잃을 수도 있다.
상위권 대학에서 메리트를 얻을 수 있는가
일반적으로 상위권 대학으로 갈 수록 선택할 수 있는 과목의 종류가 다양하다. 그리고 최신기술이 학부 과목으로 개강되는 경우가 하위권 대학에 비해 많다. 예를 들어 함수형 프로그래밍, 머신러닝, 데이터 사이언스 등이 있다.
그리고 학부내 동아리가 발달되어 있어 학부생 중에서도 프로그래밍에 관심이 많은 사람들끼리 모여 추가 스터디를 진행하거나 대회에 나가기도 한다.
다양한 종류의 프로젝트를 많이 경험하고 대회에 많이 나가보는 것이 실력 향상에 가장 큰 도움이 될 것이라고 생각한다.
학과내용을 충실히 따라가기만 하면 프로그래밍을 잘하게 되는가
어떤 분야의 프로그래밍을 하는지에 따라 다르지만 시스템 최적화를 진행하는 경우가 아닌 대부분의 경우 큰 상관관계는 없다고 말해주고 싶다. 컴공과 과목 수강 그 자체에 의의는 거의 없다고 생각한다.
굳이 학과에 한정해서 말하자면 시험을 잘 보는 것 보다는 괴제를 충실이 이행하는 정도에 따라서 실력이 엇갈린다. 과제를 하며 얻을 수 있는 내용이 수업시간에 강의를 들으면서 얻을 수 있는 내용보다 훨씬 많다.
일부 과제는 시중에 족보도 많이 돌아다니는데 그런 식으로 과제를 처리한들 수강에 의미가 없다. 학기가 끝나면 머릿속이 백지가 되어있을 것이다.
교수들이 잘 가르치는가
학교 수업에 대한 기대는 버려라. 이건 국내 모든 대학을 통틀어서 하는 말이다.
일단 수업에 비중을 두고 티칭 방법은 연구하는 교수는 거의 없다. 한 학과에 많아봐야 한두명이다. 상위권 대학이던 지방대던 예외가 없다.
교수도 샐러리맨이고 돈을 버는 일이 최우선 과제인데 강의를 잘한다고 인센티브를 받지는 않는다. 교수들이 관심을 가지는 영역은 따로 있다.
교수들은 저마다 하나씩 연구실을 운영한다. 연구실에서는 박사학위 전공과 관련된 심화 프로젝트를 운영하는데 성과가 좋아 대내외적으로 인정을 받게되면 정부나 기업에서 연구자금을 받게 된다. 대부분 억단위로 돌아가는 연구자금이라 교수 입장에서는 솔깃할 수밖에 없다.
이 때문에 수업과는 관계없는 본인 프로젝트에만 관심이 매몰되어 있는 교수가 대부분이다.
본인이 직접 PPT를 만드는 경우도 드물다. 대부분의 수업은 PPT로 진행되는데 외국대학교 수업에서 진행하는 PPT를 가져다 수정해서 쓰거나 출판사에서 교재의 참고자료로 사용하는 PPT를 그대로 가져다 쓰는 경우가 대부분이다.
본인 수업에 다른 사람이 만든 PPT를 가져다 쓰는데 무엇을 더 말하겠는가. 수업에 대한 기대는 버리는 게 좋다.
상위권 대학으로 가면 학생들의 공부에 대한 열의가 다른가
상위권 대학으로 가도 프로그래밍에 관심이 없는 사람은 기계적으로 학과목을 이수할 뿐이다. 그리고 모든 대학에서 그런 사람들이 대다수다.
개중에는 개발에 흥미가 있어 수업에 배운 내용 외의 내용을 찾아보기도 하고 과제도 아닌데 스스로 지인들을 모아 프로젝트를 하는 소수의 사람들이 있다.
어느 집단을 가던지 이런 사람들은 소수다. 하지만 상위권 대학으로 갈 수록 이런 사람들이 많아지는 것은 맞다. 개발을 잘 하고 싶으면 이런 사람들과 어울리는 것이 맞지만 성격이 맞지 않으면 같이 어울리기도 쉽지 않다. 애초에 어떤 목적을 위해서 사람을 사귄다는 게 쉬운일이 아니다.
높은 학점이 의미가 있는가
학점이 높으면 장학금이 나온다는 의의는 있다. 하지만 그것뿐이라 생각한다.
대부분의 기업은 개발자 채용시때 학점을 비중있게 보지 않는다
학점이 3점이든 4점이든 인사담당자는 크게 신경쓰지 않는다.
이는 시험을 잘 보는 것과 개발실력이 큰 상관관계가 없다는 것을 반증하기도 한다.
굳이 비중을 따지면 얼마나 많은 프로젝트를 경험했는지를 더 우선시 하는 것 같다.
학점이 큰 의미가 없다는 점은 수강과목 선택시에 중요하게 작용한다. 과목 중에는 공부량이 많거나 과제가 버거워 학생들이 기피하는 과목이 있다. 주로 이론 과목들이 그러한데 과제가 적고 학점이 잘 나오는 과목 위주로 선택했다가는 컴공과를 다니는 의의가 크게 줄어들 것이다.
사실 컴공은 이론 과목을 배우는데 의의가 있다고 생각한다. 애플리케이션 개발은 학과 외적으로 본인이 시간을 들여 개발하면 되지만 이론 과목은 수업 외적인 시간에 공부하는 게 힘들다. 외부에서 강제적으로 공부하는 환경을 만들어 주지 않으면 공부하지 않게 되는 과목들이다.
비전공과 출신과 차별화를 주고 싶으면 이론과목을 충실히 이행하는 게 최선의 방법이라고 생각한다.
졸업 후 어떤 학생들이 프로그래밍을 잘 하게 되는가
본인 경험으로는 학점과는 큰 상관관계가 없는 것 같다. 수업 외적인 자유시간에 추가로 개발을 많이 해보는 사람이 잘 하는 것 같다. 네이버, 카카오, NC 같은 대기업에도 그런 친구들이 주로 입사한다.
사실 자유시간에 게임, 유튜브 등을 하지 않고 프로그래밍을 하는 것은 말처럼 쉽지 않다. 개발이 그렇게 재미있는 일은 아니다.
스스로의 의지만으로는 한계가 있기 때문에 동아리를 가입하고 대외활동에 참여하는 게 아니겠는가.
이런 집단에 가입하여 활동하는 게 많은 이익을 가져다 줄 것이다.
혼자 개발하는 것에 흥미가 있다면 혼자 해도 되겠지만 당신이 그런 사람일 가능성은 거의 없을 것이다.