프로그래머가 되기 위해 기초 과목은 어느 시점, 어떤 방법으로 학습하는 것이 좋을까?

2013-04-19 09:34

대부분의 컴퓨터 관련 전공을 보면 실무 프로젝트를 진행하기 전에 다음과 같은 기초 과목을 수강하도록 커리큘럼이 구성되어 있다. NHN NEXT 또한 이 기초 과목을 이수한 후에 프로그래밍 언어를 배우고 실무 프로젝트를 진행하는 형태로 짜여져 있다. 대표적인 기초 과목을 예로 들면 다음과 같다.

  • 자료구조 및 알고리즘
  • 이산수학
  • 확률과 통계

일반 대학에서는 컴파일러부터 더 많은 기초과목이 있을 것으로 생각한다. 이 같은 커리큘럼에 의문을 가지고 이슈를 제기한 친구가 있고, 그에 대한 반론이 있어 공유해 본다. 이에 대한 경험 많은 선배 개발자들의 의견을 듣고 싶다. 나 또한 끊임 없이 고민하는 주제이고, 아직까지 이것이 맞다라는 결론을 내리지 못하고 있다. 물론 개인적으로 생각하는 방향은 있다. NEXT 속에서만 논의하기에는 아까운 주제라 공론화 해본다.

먼저 현재 커리큘럼에 대한 이슈 제시한 친구의 이야기를 들어보자. 원글은 더 길고, 더 구체화되어 있지만 아래 내용이 핵심이라 생각해 발췌해 본다.


망치질을 배우는 것을 예로 들어 볼께요. 우리가 처음에 망치질을 배울때, 망치의 구성, 모루의 강도, 못의 길이에 따른 적정 각도, 재료의 결, 못을 박는 방향에 대해서 고민하고 망치질을 배우지 않아요. 일단 해보면서 배우게 됩니다. 그리고 망치질을 진지하게 익히면서 강도나 못의 길이, 재료의 결에 대해서 익히는게 아주 '자연'스러운 학습입니다.

사실 Software도 별로 다르지 않다고 생각해요. ( NEXT에서 computer engineer를 양성하려는 것이 아니라면 특히 ) 사실 해 보면서 배울 수 있는 부분이 충분하고 그 부분이 더 재미있습니다. 물론 기초과목들이 중요하지 않다거나 하는 이야기는 아닙니다. 당연히 중요한것이 기술의 레벨을 올릴때 필요한 것이라는 것은 더더욱 잘 알고 있습니다.

커리큘럼상에서는 모든 과목을 수강하기 전에 저 과목들을 먼저 듣는것을 전제로 하고 있지만, 기초 과목들 역시 순서를 바꿔서 나중에 들을 수 있는 부분이라는 생각이 듭니다. 먼저 실제 눈으로 빠르게 feedback받을 수 있는 프로그램을 직접 만들어 보고, 재미를 느끼는것도 충분히 중요하다고 생각합니다.

직접 만들다보면 더 체계적으로 만들고 싶은 생각이 들면 소프트웨어 공학 수업을 듣게 되는 것이고, 내가 사용하는 툴이나 코드들에 대해서 더 자세히 알고 싶다면 자료구조 알고리즘 수업을 들으면서 그 부족한 부분을 메울 수 있는 부분이 있다고 생각합니다

---- 위 친구 글에 대한 반론의 글이다.

저는 또 한명의 전공자로써 이 의견에는 반대합니다. 물론 아직까지도 기초과목들의 동기가 확실하게 전달되지 못하는것 같은 느낌은있지만 자료구조도 모르고 언어를 배워본다? 저는 이건 컴퓨터 학원 다니는것과 별 다를게 없다고 생각하거든요 1학기만 참아보세요. 이 이후로는 상당히 실용적인 커리를 담고있다고 생각합니다. 그리고 위의 기초과목들에 대한 동기는 저는 그렇게 생각합니다. 좋은 개발자면 좋은 알고리즘을 생각하게 됩니다. 좋은 알고리즘을 짜기 위해서는 자료구조 들도 중요하지만 어떠한 노테이션, 어떠한 수학적 표현들에 대한 설명과 설득이 매우 중요하게 생각할거라고 생각합니다.

어떤 알고리즘을 짜는것에 대해 there exist 로 시작하는 노테이션이 말 몇번하는것보다 더 쉽게 이해하는 그런 상황이 올텐데 이런걸 모르고 있다면 좋은 개발자라고 할수없지 않겠습니까ㅎㅎ. 그렇게 언어만 가르치고 하는법만 가르치면 저는 단순히 전산실 코딩 노예 밖에 될수없다고 생각하고 주도적인 아이디어를 낼수있는 리더형 개발자가 되기위해 이런 기초과목을 배우고 있다고 저는 생각하고있습니다


위 글에 컴퓨터 학원과 코딩 노예와 같은 말이 나오는데 이 단어들에 너무 거부감을 가지지는 말고 이 학생들이 이야기하려는 본질에 접근했으면 좋겠다.

0개의 의견 from FB

BEST 의견 원본위치로↓
2013-04-19 22:46

"좋은" 사람이런 정확히 뭔지는 잘 모르겠지만, 나름대로 기준을 세워봅시다. 남을 배려할 줄 알면서도 자기 주관이 뚜렷하고, 정확하게 의사 소통하며, 스스로 자기 자신의 경제적 삶을 책임질 수 있는 사람이라고 쳐 보죠. 어라?? 애기가 태어났는데 말도 못하고, 똥오줌도 못가리고 엄마 아빠 힘들게 아무때나 빽빽 울어대고, 스스로 벌어먹기는 커녕 허구한날 젖달라고 징징대기만 하네요. "좋은" 사람이 못되는군요. 이제 부터는 좋은 사람이 아닌 경우에는 아예 태어나지도 못하게 하고, 엄마 뱃속에서 "좋은" 사람의 자격 조건을 갖춘 뒤에 태어나게 합시다. -- 제 결론이 뭐냐면.. "좋은" 프로그래머가 되기 전에 먼저 "프로그래머"가 돼야 하지 않을까요? 정말 나한테 맞는 일이고, 재미를 느낄 수 있는 일인지 느끼게 되면 저절로 자연스럽게 더 나은 프로그래머 "좋은" 프로그래머가 되려는 노력을 기울이게 될 것 입니다.

그리고 프로그래밍이란게 저는 머리로 하는 것이라고 생각하지 않습니다. 손으로 하는거지. 백날 운전면허 시험 문제 풀며 공부한 사람과 한 열댓번 옆에 누구 앉히고 시내 주행한 사람 중... 누가 더 좋은 운전기사가 될 자질이 있을까요?(다시 저는 프로그램은 먼저 손으로 익히고, 그 뒤에 머리로 채워나가는 것이라고 생각합니다.)

4개의 의견 from SLiPP

2013-04-19 09:44

저도 사실 이것이 의문인것이 필요한 것은 맞지만, 처음으로 소화하기엔 부담되는 것이 사실이에요. 학부시절에 간단한 코딩의 즐거움과 결과물을 보는 즐거움부터 시작했다면 모를까.. 저런 과목들로 인해서 처음부터 숨이 턱턱 막혀서 아예 포기해버리게 되는 경우가 많더라구요. 물론 기초학문이 필요한 것은 맞지만, 왜 필요한지에 대한 이해부터 하고 덤볐다면 더 즐겁게 배우지 않았을까 싶어요 ~~ 말을 배울 때 , 주어 동사 보어가 어쩌고 형태소가 어쩌고 ~ 이런 것부터 배우지 않는것처럼요...

2013-04-19 09:55

프로그래밍에 대한 동경을 갖고 열정으로만 접근하다가 이런저런 고생을 한 후 기초과목에 대한 필요성을 느끼고 접근하게 되는게 최상이라 봅니다. 학창시절에 주먹구구로 프로그래밍을 하다가 체계적인 접근을 해야겠다고 컴퓨터 공학과를 입학한 학생 정도랄까요. 공부가 삽질을 줄여준다고 느끼는 시점에 쉽고 필요한 과목부터가 좋다고 생각합니다.

2013-04-19 10:41

기초학문중에 사실 자료구조 빼고는 뭘 배웠는지 기억이 잘 안나네요 ㅎㅎ 오히려 알고리즘적인 생각을 할 때 마이크로프로세스에서 배웠던게 생각날때도 있고..

가령 모래뺏기 게임을 하기 위해 모래가운데 기둥을 세울 때.. 전자는 기둥을 세운채로 모래를 기둥주변으로 모으는 것이고, 후자는 모래를 우선 봉긋하게 쌓고 그 가운데 기둥을 찔러넣는 것과 비슷할것 같은데.. 결론은 전자나 후자나 뭐가 다르냐에요.. ^^ 그렇게 같은데 왜 따로 배워야 하나요? 그냥 언어를 배우면서 자료구조도 좀 구현해보고.. 그렇게 둘을 유기적으료 연동하여 배우면 안되는건가요? ㅎㅎ

2013-04-19 22:46

"좋은" 사람이런 정확히 뭔지는 잘 모르겠지만, 나름대로 기준을 세워봅시다. 남을 배려할 줄 알면서도 자기 주관이 뚜렷하고, 정확하게 의사 소통하며, 스스로 자기 자신의 경제적 삶을 책임질 수 있는 사람이라고 쳐 보죠. 어라?? 애기가 태어났는데 말도 못하고, 똥오줌도 못가리고 엄마 아빠 힘들게 아무때나 빽빽 울어대고, 스스로 벌어먹기는 커녕 허구한날 젖달라고 징징대기만 하네요. "좋은" 사람이 못되는군요. 이제 부터는 좋은 사람이 아닌 경우에는 아예 태어나지도 못하게 하고, 엄마 뱃속에서 "좋은" 사람의 자격 조건을 갖춘 뒤에 태어나게 합시다. -- 제 결론이 뭐냐면.. "좋은" 프로그래머가 되기 전에 먼저 "프로그래머"가 돼야 하지 않을까요? 정말 나한테 맞는 일이고, 재미를 느낄 수 있는 일인지 느끼게 되면 저절로 자연스럽게 더 나은 프로그래머 "좋은" 프로그래머가 되려는 노력을 기울이게 될 것 입니다.

그리고 프로그래밍이란게 저는 머리로 하는 것이라고 생각하지 않습니다. 손으로 하는거지. 백날 운전면허 시험 문제 풀며 공부한 사람과 한 열댓번 옆에 누구 앉히고 시내 주행한 사람 중... 누가 더 좋은 운전기사가 될 자질이 있을까요?(다시 저는 프로그램은 먼저 손으로 익히고, 그 뒤에 머리로 채워나가는 것이라고 생각합니다.)

의견 추가하기

연관태그

← 목록으로