https://www.youtube.com/watch?v=UHCoupSANo4
안녕하세요 파일입니다. 사실 이런 글을 쓸지 말지 고민을 많이했습니다만, 마침 시험도 끝나고 시간도 무료하게 남아서 지금까지 4년제 대학 생활 절반을 마치며 일종의 회고록이자, 컴공과에 대한 팁 글을 써보도록 하겠습니다.
* 본 글은 방황하는 1학년 또는 컴공과에 입학하고 싶은 신입생 분들을 위해 작성합니다.
* 절대 자랑글이 아닙니다. (진짜임..)
* 아무래도 여러 대학에 옮겨가면서 다닌건 아니라 대학마다 사정이 다를 수 있고 편협한 내용도 있을 수 있습니다.
* 제 주관적 생각이 매우 매우 담겨있습니다.
불편 하신 분들은 바로 뒤로가기 클릭!
우선 저는 인서울 중위~중하위권의 공대를 재학중이며 SW학과(컴퓨터공학과)에서 2학년까지 수료하였습니다.
좀 부끄럽지만 전체 평점과 전공 평점은 다음과 같습니다.
사실 저는 하고 싶은 공부만 해서 그런가 하기 싫은 교양 공부는 꾸역 꾸역 하기가 정말 어려웠습니다.. ㅠㅠ 그게 조금 반영이 되지 않았나 싶습니다.
암튼 이제 컴공과에 대한 이야기를 좀 해보겠습니다.
컴공과에 왜 가는가?
사실 저는 진로를 초등학교때부터 잡은 흔치않은 케이스입니다 ㅎㅎ. 어렸을때부터 컴퓨터 만지고 노는게 취미였고 C언어책도 초등학교 6학년때 처음 사서 공부해봤습니다. 대학교 1학년때나 제대로 배우는걸 초6이 이해할리는 없어서... 그 당시엔 때려쳤고 오토핫키, 비주얼 베이직 같은걸 가지고 놀면서 조금씩 진화해 나갔습니다.
중학교때는 VB6.0의 최신판(?)인 VB.NET 을 공부하면서 여러 프로그램을 뽑아내봤고 C# 까지 다루게 되면서 저는 항상 일편단심 컴공만 간다고 생각했었습니다. (사실 이것말고도 컴퓨터로 해본게 굉~장히 많습니다. 중학교땐 올리디버거로 프로그램 리버싱 실습도 해봤구요.) 솔직히 말하면 컴퓨터를 하는게 너무 즐거웠고 지금도 마찬가지입니다. 여기에 인생을 갈아 넣는다는 생각으로 컴공을 선택했습니다. 그리고 입시는 개같이 망했습니다.
사실 주저리 주저리 뭔가 많이 써놨는데 위에 프로그래밍 언어에 관련된 내용은 관심없으면 무시하시구요, 실제로 컴퓨터에 대한 관심이나 특히 애정만 있다면 컴공과는 충분히 가볼만 합니다.
중요한건 자기가 컴퓨터에 대해 흥미가 있고, 컴퓨터를 할 때 즐거울 수 있냐 생각해봐야 합니다.
당연하지만 컴퓨터를 만지는게 너무 재미없고 컴퓨터에 대해 여러 가지를 공부해볼 흥미가 없다면 컴공과를 선택 안하시는게 좋습니다.
예를 들어 자기가 컴퓨터로 게임하는게 너무 좋은데, 내가 게임을 직접 만들어 볼까? 하는 생각이 들면 컴공과에 와도 괜찮습니다. 근데 그냥 게임이나 하지 그런 머리 아픈건 싫다~ 라는 생각이 들면 컴공과에 오면 고통받습니다.
단순히 컴퓨터로 문서 작업도 해봤고 게임좀 해봤는데 재밌더라? 정도로 생각하고 컴공을 오면 지옥을 맛볼 가능성이 매우 큽니다. 요새는 학교에서 간단하게 코딩 수업도 하니깐 여기서 흥미를 느꼈는지 잘 생각해봐야 합니다.
대학 선택이 다 그렇지만, 웬만하면 성적으로 맞춰서 가는것보단 대학 레벨을 좀 낮추더라도 자기가 좋아하는 과로 선택을 해서 공부하는게 더 좋습니다. 전과를 하는게 생각보다 쉽지 않거든요. 자율전공학부 같은 특수한 케이스가 아니면요...
컴공과는 개인적으로 무조건 적성이라고 생각합니다. 자기가 와서 컴퓨터에 대한 지식을 4년동안 배워도 재밌을지, 프로그래밍 하는게 즐거울지, 도움이 될 지 생각해보시고 선택하시길 바랍니다.
컴공과에선 뭘 배우나요?
위에서 단순히 '컴퓨터에 대한 지식' 정도로만 설명했는데 컴공과에 와서 정확히 뭘 배우는지 궁금하신 분들이 많을겁니다. 보통은 컴공과 하면 우와 ~ 코딩 잘하겠다, 프로그래밍 잘하겠네? 이런 정도 인식이 강합니다. 사실 틀린말은 아닙니다 ㅋㅋㅋ 컴공과 오면 대부분 프로그래밍은 당연히 잘하게 됩니다.
정확히 컴공에서 배우는건 컴퓨터에 대한 이론적인 지식들입니다. 실무적인 내용이 아닙니다.
여기서 이론적인 지식은 대부분 프로그래밍 언어에 대한 지식과, 그에 대한 추가적인 내용들입니다.
좀 와닿지 않을거니깐.. 몇 가지 예를 들어서 설명해보도록 하겠습니다.
예를 들어서 C언어를 혼자 공부한다고 하면 printf("Hello World") 라고 코드를 입력하면 Hello World 가 출력되는 프로그램을 만들 수 있다~ 라고 하는 정도의 내용을 배우게 될 것입니다.
그러나 컴공과에선 C언어에 대한 기초를 전부 공부함과 동시에, printf(...) 함수를 이용하면 컴퓨터가 어떻게 이 데이터를 처리하여 내부적으로 화면에 Hello World 라는 글자를 찍는지에 대한 이론적인 내용을 학습합니다. 즉, 사용의 입장이 아닌, 이해의 입장이 되는 것입니다.
또 C언어던, Java를 배운다하던 컴퓨터 앞에서 보통 코드를 치면서 실습하기보단 PDF(PPT) 교안 하나 틀어놓고 이 코드가 어떻게 동작해서 어떤 출력이 나오는지에 대한 이론적인 내용을 보통 "머리로만" 학습합니다. 실행결과는 머리속에서 예측하고, 머리속에서 실행합니다. 말 그대로 인간 컴파일러가 되야 합니다.
어라? 그럼 이 코드들이 실제로 동작하는지 실행해보는 실전 연습은 언제 해보나요? 라고 물어볼 수 있는데 이런건 보통 과제로 출제합니다. 이론적인 내용을 7할 정도로 배우고 나머지 3할은 과제로 실전 코딩하는 정도의 비중이라고 생각하시면 됩니다. 그래도 직접 앞에서 코딩하고 있는 시간보단 머리속으로 구조나 원리를 생각하고 있는 시간이 더 길껍니다. 근데 과제가 졸라 어려워서 여기서 시간을 더 뺏길수도 있습니다.
물론 컴퓨터에 대한 이론적인 지식이 프로그래밍 언어만을 이야기하는건 아닙니다. 전공 과정 이해를 위해 '도구' 로써 배우는 프로그래밍 언어는 C, C++, Java 정도로 보통 1~2학년때쯤에 마무리하고 이제 이 프로그래밍 언어 지식을 기반으로, 3, 4학년때는 우리가 컴퓨터에서 사용하는 OS의 구조나 원리, 자료구조, 컴파일러에 대한 학습이 이루어집니다.
운영체제(OS) 같은걸 배운다고 해도 당연히 코딩은 하게 됩니다. 과제로 OS 기능을 C언어로 구현하라는 과제를 받으면 당연히 C언어에 대한 지식 + 운영체제에 대한 지식을 총 동원해서 구현해야겠죠.
자료구조도 배우고, 컴파일러도 배우면서 컴퓨터에 대한 이해도는 점점 높아져 가고 이제 코딩을 하더라도 이런 기본적인 전공 지식과 이해를 바탕으로 남들보다 훨씬 좋은 코드를 작성할 수 있는겁니다.
(이게 보통 전공자와 고졸자를 가르는 큰 차이가 되게 됩니다.)
솔직히 말하면 그냥 코딩해서 프로그램 만드는건 중고등학생도 충분히 할 수 있습니다. (저도 실제로 많이 해봤구요) 그러나 동작이 똑같아 보일지 몰라도 구조적으로 좋은 코드를 작성하는것과 , 그렇지 않은건 매~우 큰 차이가 있습니다.
우리가 한국에서 나고 자라서 한국어를 할 수 있는건 당연하지만, 말을 조리있고 논리있게 잘하는건 또 다른 영역이지요. 공부해야 합니다.
정리해서 컴공과에서 코딩하는건 당연히 기본적으로 깔고 들어가는데, 추가적으로 컴퓨터에 대한 이론적 지식도 깊고 나름 폭넓게 배우면서 레벨을 높일 수 있다는 겁니다. 대부분 실습보다는 이론적으로 배우는게 훨씬 많고 그게 대부분입니다.
컴공과에서 공부하면 장점과 단점은?
<장점>
1. 어려운 컴퓨터 관련 지식들을 쉽게 배울 수 있다. 학교 내용만 잘 따라가도 대부분 다 떠먹여준다.
=> 구글링 했을때 블로그에 현학적이고 어렵게 쓰여진 글을 읽는것보다 수 십년간 공부한 교수들한테 배우는게 더 도움이 됩니다. 강의력이 좋은 교수를 만난다면 어려운 컴퓨터 지식을 쉽게 배울 수 있다는 장점이 있습니다. 또 믿을만한 사람에게 질문해서 답을 얻을 수 있다는건 아주 큰 메리트죠.
ex) 개인적으로 구글링해서 나오는 한국 자료들은 누구를 위해 '설명' 하거나 교육의 목적이라기 보다는 자기가 공부한걸 정리해두는 경향이 크다고 생각합니다. 특히 velog 관련 자료들은 그게 심한거 같아요...
저는 이런 글들을 싫어해서 최대한 사전지식이 없어도 글을 보면 완전히 이해할 수 있도록 글을 쓰게 노력하는 편입니다.
2. 프로그래밍을 대학교때 처음해도 충분히 고수가 될 수 있다.
=> 위 1번의 연장선상으로 코딩 및 컴퓨터 지식들을 다량으로 떠먹여주기 때문에 자기가 능동적으로 잘만 학습한다면 대1때 처음 프로그래밍을 접한다고해도 충분히 고수가 될 수 있습니다.
<단점>
1. 강의 내용이 최신 트렌드를 반영하지 않을 수 있다.
=> 아무래도 대학교에서 배우는 내용들 자체는 시대의 흐름에 따라 바뀌는 아주 트렌드한 내용을 가르치기가 어렵습니다. 왜냐면 이런 이런걸 가르쳐줬는데, n년 뒤에 와보니 완전히 새롭게 바뀌어서 기존에 배운 내용이 무용지물이 되는 경우가 많기 때문입니다.
컴공에서 보통 C를 꼭 가르치는 이유가 C언어 자체가 프로그래밍에 기초가 되고, 대부분의 프로그래밍 언어에 많은 영향을 끼쳤다는 특징때문에 그런 것도 있지만 언어 특성이 잘 안바뀌는것도 있습니다. 뭐 C11이나 C18 같은 최신 업데이트도 있는데 언어의 근본적인 문법들이 업데이트 때마다 마구 바뀌지 않습니다. 그래봤자 C로 코딩하는건 거의 대부분 C99라고 1999년도에 업데이트 된 버전입니다. 이것도 최신이라고 표현하는 마당이죠 -.- (근데 C++ 이놈은 업데이트 때마다 매번 바뀝니다.)
2. 실무적인 프로그래밍 경험이 부족해질 수 있다.
=> 솔직히 과제로 코딩 실습을 해본다 해도 실제로 이것만 가지고는 실전 연습이 턱도 없이 모자랍니다. 대부분 학교 수업만 따라가는 컴공과 학생들이 실제로 무언가 만들어 보라고 하면 못만드는 경우가 매우 많습니다. 자신이 무언가 주제를 잡고 그 주제에 맞춰서 프로그램을 직접 구현해보는 '프로젝트' 경험을 항상 쌓고 있어야 합니다.
보통 컴공과에서 언어를 배우는건 이론적인 내용 + 콘솔창에서 출력하는 형태라 눈에 보이는 GUI 형태의 무언가를 만들기가 생각보다 어렵습니다.
>> 이런 경우에 추천드리는건 Java는 JavaFX나 Swing, C# 의 WinForm, Python의 PyQT, QTDesigner로 데스크탑 GUI 프로그래밍 하는걸 알아보세요.
>> 또 웹 (HTML,CSS,JS) 을 배워보는것도 좋습니다. 그러나 웹은 제대로 된 멋진 서비스를 만들려면 저 앞에 3개만 배워서는 턱도 없이 모자랍니다. 그러니깐 제가 추천하는건 위에 3개 프레임워크를 이용해서 GUI로 프로그램 하나 개발해보는거 추천드립니다. 아니면 안드로이드 앱 만들어보셔두 좋구요.
개인적으론 C# Winform 추천합니다 ㅎㅎ 근데 보통 컴공과에서 국룰로 배우는건 C, C++, Java 정도라서 C#을 모든 학교에서 다 다루는진 모르겠네요. 따로 공부해도 사실 Java랑 C#은 거의 문법이 똑같은 언어라 어렵지 않을겁니다.
3. 가르치는 교수들에 따라 케바케가 심하다
=> 교수님들 자체가 정말 많이 공부하신 분들은 맞습니다만, 인간의 군상이란게 정말 천차만별이라 이게 교수가맞나? 싶을정도로 강의력이나 인성이 파괴적인 사람들이 꼭 있습니다. 처음 배울수록 잘배워야하는데 처음부터 이상한 사람한테 배우면 햇갈리기만 하고 제대로 학습도 안됩니다. 이건 뭐,.. 에타 수강평 보시고 잘 수강 신청하세요!!
컴공과 노트북 태블릿 둘 중에 뭐살까요?
이건 뭐.. 공부 방법에 따라 다르긴 한데 저는 솔직히 돈만 있으면 둘 다 추천합니다. 근데 둘중에 하나 고르라면 전 태블릿 고릅니다. 기본적으로 컴공이 이론수업이라 저의 경우 태블릿에 PDF 띄어두고 필기하면서 머리속으로 생각하는게 훨씬 도움이 됐습니다. 어짜피 노트북으로 코드 직접 치면서 실습하진 않으니깐... 물론 노트북 띄어놓고 머리속으로 생각하면서 수업듣는 분들도 있을 것이니 이건 본인의 공부 성향에 맞기겠습니다.
컴공과에서 배우는것 중요한가요?
당연히 중요합니다.
제가 스마일 게이트 (로스트아크 만든 회사) 다니시는 능력자분을 한 분 알고 있는데 이분이 이직 준비하면서 면접관한테 개발자 볼 때 뭘 제일 중요하냐고 여쭤봤는데 모든 임원분들이 대학교에서 배운 기초 라는 대답을 하셨답니다.
솔직히 쓰레드, 뮤텍스, 세마포어, 스케줄링 이런거 재미도 없고 잘 와닿지도 않을 수 있는데 잘 공부해두시는걸 추천드립니다. 왜냐면 이런 이론적인 내용을 알고 프로그래밍 하는거랑 모르고 프로그래밍하는게 굉장히 크게 다가오거든요 -.-
제가 고딩때 C#으로 코딩할 때 쓰레드가 뭔지도 모르고, 그냥 GUI 작업할 때 Blocking없이 병렬 작업을 해주는 놈인가보다 하고 코딩을 자주 했었는데 이제 대2까지 마치면서 쓰레드나 동기화 개념에 대해 이해하면서 조금더 수준 높은 코드를 작성할 수 있게 되었습니다.
어떻게 공부해야 할까요
이것 역시 개인의 공부법이 여러가지가 있어서 객관적으로 말씀드리긴 어렵지만.. 제 공부방법을 소개하자면
1. 태블릿으로 PDF 띄어놓고 수업때 이해한 내용 녹음 + 열심히 필기한다.
2. 시험기간 오면 코드를 딸딸 외우진 않고 정독하면서 코드 출력과 내용들을 정독하면서 하나 하나 머리속에 복습한다.
(여기서 잘 이해가 안되는 내용 있으면 녹음된 내용 다시 틀고 복습한다.)
위에 일단 2개는 기본적으로 하고 아래는 제가 추가로 한 것들 입니다.
* 코드 무지성 암기는 솔직히 비추합니다. 이해해야 합니다. 무작정 암기는 의미도 없고 성적도 오르지 못할 가능성이 큽니다.
1. 블로그에 책 읽으면서 강의글 작성하기.
저는 고2때 C언어 책 정독하면서 블로그에 C언어 강의글 작성했습니다.
https://pgh268400.tistory.com/5
연재에 무려 2년이 걸렸습니다..
사실 꼭 강의글이 아니여도 자기가 공부한 내용을 반드시 "문서화" 하는 편입니다. 머리속에 기억된 내용은 영원히 입력되지 않지만, 이런 내용이 남아있을때 문서화 하게 된다면 텍스트 파일로 블로그 서버에 영원히 남게 됩니다. 까먹으면 나중에 들어와서 또 보면 됩니다.
2. 여러 대외 활동, 프로젝트 진행하기
사실 방구석에서 공부하는것도 중요한데 이런거만 해선 재미없잖아요 ㅎㅎㅎ
밖에서 하는 여러 축제나 행사도 참여해보시고, 꼭 프로젝트 진행해서 자기 아이디어를 프로그램으로 옮겨보세요.
이런건 사실 중학교때부터 해와서 지금까지 제 아이디어로 직접 뽑아낸 프로그램이 200~300개가 넘는거 같습니다. 그런데 제가 Git의 정확한 사용법을 대학교 2학년 초에서나 처음 배워서 ㅋㅋㅋ;; 제대로 작품으로 남긴건 저 저장소에 있는 35개 정도입니다.
저는 프로젝트 진행을 전부 제 흥미, 필요 위주로해서 만든 프로그램도 거의 대부분이 제가 필요해서 만든 프로그램 밖에 없습니다.
https://github.com/pgh268400/E.Z-Subtitles
https://github.com/pgh268400/Dcinside_Explorer
위 2개 정도가 인기가 많아서 제가 관리하고 있는 저장소 목록입니다.
그리고 또 알바를 해보는것도 좋습니다. 컴퓨터에 관련된게 아니여도 사회 경험을 쌓기 위해 좋다고 생각합니다. 저는 운이 좋아서 지금 3학년 캐나다 유학생을 대상으로, C언어 과외 알바를 시간당 5만원 받고 하고 있습니다. 강의 교안은 제가 고2때부터 대1때까지 열심히 연재한 C언어 블로그 강의 글을 대상으로 합니다. 아마 저 강의글 안썼으면 C언어 개인 과외는 어려웠을 거 같습니다.
단순히 C언어 강의글만 쓰고선 몰랐는데 남들한테 가르치는 활동까지 하니깐 C언어에 대한 이해도와 실력이 배로 늘었습니다. 교육 활동이 정말 도움이 되더라구요.
컴공과 오시면 방구석에서 컴퓨터랑 대화하는 시간이 늘어날건데 꼭 사람들하고 열심히 대화하면서 사회활동 하시길 바랍니다!! 저는 사실 컴퓨터 좋아해서 컴공과 온것도 있지만 제 사랑을 찾고자 간 목적도 있습니다. 아직 운명의 사람은 나타나지 않았지만 저처럼 방에서 컴퓨터랑 하루종일 대화하면서 인간 컴파일러가 되지 마시고, 밖에서 사람들하고 대화도 많이 하고 친구들하고 추억도 많이 쌓으면서 청춘을 즐기세요. 그럼 좋은 결과가 나오실겁니다. 오늘과 같은 날은 내일 다신 오지 않으니깐요.
중간 중간 술마시면서 무슨 내용을 쓴지도 잘 모르겠습니다만 도움이 되셨길 바랍니다.
(이 글은 언제든지 비공개 또는 삭제될 수 있습니다.)
'정보 > 기타' 카테고리의 다른 글
[2023] Musescore Pro 멤버쉽 구독없이 무료로 악보 다운로드 받기 (18) | 2023.05.02 |
---|---|
ChatGpt가 갑자기 작동하지 않을 때 (0) | 2023.01.09 |
슈의 라면가게를 TAS로 플레이하는 영상 (0) | 2022.07.02 |
Quizlet 결제 없이 무료로 열람하기 [Quizlet Bypass] (0) | 2022.04.04 |
VMware Workstation Pro 16 라이선스 키 (시리얼 번호) (0) | 2022.03.26 |