프로그래밍에서의 가르침과 배움
- Posted at 2005/09/21 22:09
- Filed under 분류없음
나는 최근 여러해 동안 나의 기술적 수준에 대해 많은 의문점을 가져 왔었다.
해외의 유명한 개발자가 쓴 책이나 코드 또는 오픈 소스를 볼 때면 유치원 수준 정도의 비참함을 느꼈다.
반면에 국내 프로젝트에 투입되어 개발을 진행 할때면 역시 난 천재야 할 정도로 뛰어난 감각을 발휘하기도 했다.
프로젝트에서는 일명 "코딩 머신"이라는 별명과 함께 남들보다 월등한 속도와 높은 품질의 코드를 만들어 내곤 했다.
내 자신의 이력서에 남길 수 있는 많은 단어들이 있음을 발견할 때 나의 기술적 수준은 적어도 우리나라에서는 남들보다 뛰어나다고 스스로 평가해본다.
이렇게 나의 기술 수준에 대해 말하고 있는 이유는 이번글에서 개발자의 교육 또는 학습에 대해 말하고자 하기 위함이다.
여러해 동안 주변에 있는 여러 개발자들(프로젝트에 신규 투입되는 단기간의 개발자, 같은 부서내에서의 후배 사원, 교육 기관에서의 불특정 다수의 개발자)을 대상으로 내가 알고 있는 단편한 기술적 지식에서부터 프로젝트의 노하우까지 가르쳐 왔었다.
하지만 많은 개발자를 대상으로 교육을 하였지만 그들에게는 단순히 문법적 지식을 전달하는 그 이상의 효과를 찾을 수는 없었다.
나 : 이론에 대해 어쩌고 저쩌고를 한참 설명
나 : 이런 이유 때문에 실제 코드를 보면 A -> B -> C 와 같은 형태로 개발됩니다.
교육생 : 실습을 한다.... (음 몇명을 제외하곤 어느정도 따라서 구현한다.)
나 : 실습으로 코드가 어떻게 만들어지는지 확인했으니 이제 한번 더 왜 그렇게 만들어야 되는지를 설명하겠습니다. 어쩌구 저쩌구(만들어진 코드를 조목조목 짚어가며) 여러분들의 프로젝트에서도 이점을 고려하여 개발을 진행해야 합니다.
프로젝트에 투입된 교육생 : 무조건 A → B → C 로 만든다.
나 : (프로젝트의 다른 부분에서는 이를 조금만 응용하여 A → D → C 로 만들면 훨씬 더 좋은 상황을 발견하고 개발자에게 질문한다.) 이렇게 만든 이유가 있읍니까?
교육생 : 그렇게 배웠기 때문에...
(또는 원래 이렇게 만들어져 있었기 때문에...)
나 : -_-
처음에는 내가 가르치는 방법이 잘못되었거나, 교재 또는 선수 지식의 부족 등 다른 곳에서 원인을 찾았지만 "실용주의 프로그래머" 라는 책의 역자 서문에 김창준씨가 작성한 문구에서 조금이나마 해답을 찾을 수 있었다.
"기술습득의 단계를 규칙, 격언, 직관(드레이퍼스, Hubert Dreyfus)의 단계로 진행된다. 초창기에는 규칙을 배우고, 그 다음 원리를 찾게 되고, 격언을 이해/응용하게 되며 마지막으로 이성보다는 직관에 따라 행동하게 된다"고 하였다.
내가 새로운 기술을 배우고 사용하는 패턴을 보면 이와 유사하다.
책이나 매뉴얼에는 설명되어 있지 않는 또 다른 무엇을 찾아내어 잘 적용하곤 한다. 이것은 말로는 설명할 수 없고 그 당시 상황에 따라 그때 그때 나타나는 것이다.
이런 학습의 단계에서 지금까지 내가 가르쳐 온 내용들은 단순히 규칙에 지나지 않았다. 물론 조금 더 나아가 교재에 없었지만 경험에서 우러나오는 내용을 가르친 것은 격언 정도를 가르쳤지만 배우는 입장에서는 단순히 규칙만 배운 것이다.
규칙만 가지고 개발할 때에는 소프트웨어를 잘 만들수 없다. 물론 초보 개발자에게서 규칙 이상의 수준을 원하는 것은 무리가 있다.
하지만 내가 가르쳤던 많은 개발자들은 초보 개발자가 아니라 3 ~ 5년 이상 경험이 있는 개발자들이다.
3 ~ 5년 정도 경험의 개발자면 최소한 위에서 말하는 격언(조금 더 욕심을 부리면 한 분야에서만 이라도 직관을 가지고) 정도는 가지고 소프트웨어를 만들어야 하며, 초보 개발자들에게 자신의 격언을 주는 수준은 되어야 한다고 나는 생각한다.
내가 본 많은 개발자들은 프로그램을 처음 시작했을 때나 그 후 1년이 지났을 때나 3년이 지났을 때의 기술수준에 전혀 변화가 없었다.(물론 조금 더 많은 API를 알고 있었지만) 이것은 단순이 규칙만을 외우고 적용함으로써 발생된 문제가 아닐까 생각한다.
나는 좋은 소프트웨어는 코드 한줄 한줄에 개발자의 철학이 담겨 있어야 한다고 생각한다. 자신이 만든 소스에 철학을 심기 위해서는 직관을 가지고 자신의 의지대로 코드를 만들 수 있는 능력이 있어야만 가능한 일이다.
지금 자신의 기술 수준을 진정으로 높이고 싶은 개발자가 있으면 단순히 규칙만 익히지 말고 직관적으로 생각할 수 있는 능력을 키우기 바란다.
그렇다면 직관을 가지기 위해서는 어떨게 해야 할까?
이것은 쉽게 이루어 지는 것이 아니며 오랜 시간 지속적인 수련을 필요로 한다. 그리고 대부분은 혼자서 이루기 어려우며, 이미 장인의 경지에 이른 개발자와 같이 일을 함으로써 습득할 수 있는 것이다.
나는 불행하게 주변에 장인이라고 할 수 있는 사람들을 최근에야 만나게 되었다. 그것도 장인의 경지에 이를 수 있는 방법을 알고 나서였다.
나의 주변에 이것을 가르쳐주는 장인이 없어 15년의 세월을 보낸 후에야 알게된 것이다.(15년이라고 하니 나이가 많은 것 같지만 대학교 입학 때부터이다. 대학 입학후 부터 프로그램에 관심이 많아 책을 보거나 책에 있는 내용을 적용해 보는데 많은 시간을 보냈다.)
지금 개발자로의 길로 들어 섰거나 주변에 자신에게 이러한 길을 가르쳐 주는 사람이 없는 개발자라면 빨리 자신만의 장인을 찾기 바란다. 장인을 찾을 수 없다면 그 개발자는 불행할 수 밖에 없다. 많은 노력을 기울여 스스로 직관을 가질 수 있는 능력을 키우든지 아니면 기술 향상의 꿈을 포기하고 규칙만을 적용한 단순한 개발자로 남는 것이 더 행복할 수 있다.
그럼 나는 직관을 가질수 있도록 도움을 줄 수 있는 장인일까? 라는 의문이 든다.나 스스로 답을 내리자면 자신이 만드는 코드에는 직관을 이용할 수 있지만 이것을 다른 개발자에게 전파할 수 있는 수준은 안되는 개발자라고 할 수 있다.
규칙만이 아닌 격언을 이해/응용하는 수준의 개발자에게는 나의 경험을 가르쳐 직관을 가질수 있도록 도움을 줄 수는 있을 것 같다.
2005.09.05
P.S 첫번째 블로그를 작성하기 시작했다. 첫 글이 나의 기술에 대한 의문심에서 시작한 이유는 지금까지 개발자로서 경험하면서 하고 싶었던 많은 말들을 정말로 내가 말할 수 있는 자격이 있을까라는 자격지심일지도 모른다.
이제 이런 자격지심은 벗어버리고자 한다. 그래 나는 적어도 대한민국에서는 남들에게 인정받는 기술자라고 생각하기로 했다.
그리고 이제부터는 나의 철학이 담긴, 지금까지 나의 모든 개발 경험이 담겨있는 소프트웨어를 만들고자 한다.
해외의 유명한 개발자가 쓴 책이나 코드 또는 오픈 소스를 볼 때면 유치원 수준 정도의 비참함을 느꼈다.
반면에 국내 프로젝트에 투입되어 개발을 진행 할때면 역시 난 천재야 할 정도로 뛰어난 감각을 발휘하기도 했다.
프로젝트에서는 일명 "코딩 머신"이라는 별명과 함께 남들보다 월등한 속도와 높은 품질의 코드를 만들어 내곤 했다.
내 자신의 이력서에 남길 수 있는 많은 단어들이 있음을 발견할 때 나의 기술적 수준은 적어도 우리나라에서는 남들보다 뛰어나다고 스스로 평가해본다.
이렇게 나의 기술 수준에 대해 말하고 있는 이유는 이번글에서 개발자의 교육 또는 학습에 대해 말하고자 하기 위함이다.
여러해 동안 주변에 있는 여러 개발자들(프로젝트에 신규 투입되는 단기간의 개발자, 같은 부서내에서의 후배 사원, 교육 기관에서의 불특정 다수의 개발자)을 대상으로 내가 알고 있는 단편한 기술적 지식에서부터 프로젝트의 노하우까지 가르쳐 왔었다.
하지만 많은 개발자를 대상으로 교육을 하였지만 그들에게는 단순히 문법적 지식을 전달하는 그 이상의 효과를 찾을 수는 없었다.
나 : 이론에 대해 어쩌고 저쩌고를 한참 설명
나 : 이런 이유 때문에 실제 코드를 보면 A -> B -> C 와 같은 형태로 개발됩니다.
교육생 : 실습을 한다.... (음 몇명을 제외하곤 어느정도 따라서 구현한다.)
나 : 실습으로 코드가 어떻게 만들어지는지 확인했으니 이제 한번 더 왜 그렇게 만들어야 되는지를 설명하겠습니다. 어쩌구 저쩌구(만들어진 코드를 조목조목 짚어가며) 여러분들의 프로젝트에서도 이점을 고려하여 개발을 진행해야 합니다.
프로젝트에 투입된 교육생 : 무조건 A → B → C 로 만든다.
나 : (프로젝트의 다른 부분에서는 이를 조금만 응용하여 A → D → C 로 만들면 훨씬 더 좋은 상황을 발견하고 개발자에게 질문한다.) 이렇게 만든 이유가 있읍니까?
교육생 : 그렇게 배웠기 때문에...
(또는 원래 이렇게 만들어져 있었기 때문에...)
나 : -_-
처음에는 내가 가르치는 방법이 잘못되었거나, 교재 또는 선수 지식의 부족 등 다른 곳에서 원인을 찾았지만 "실용주의 프로그래머" 라는 책의 역자 서문에 김창준씨가 작성한 문구에서 조금이나마 해답을 찾을 수 있었다.
"기술습득의 단계를 규칙, 격언, 직관(드레이퍼스, Hubert Dreyfus)의 단계로 진행된다. 초창기에는 규칙을 배우고, 그 다음 원리를 찾게 되고, 격언을 이해/응용하게 되며 마지막으로 이성보다는 직관에 따라 행동하게 된다"고 하였다.
내가 새로운 기술을 배우고 사용하는 패턴을 보면 이와 유사하다.
책이나 매뉴얼에는 설명되어 있지 않는 또 다른 무엇을 찾아내어 잘 적용하곤 한다. 이것은 말로는 설명할 수 없고 그 당시 상황에 따라 그때 그때 나타나는 것이다.
이런 학습의 단계에서 지금까지 내가 가르쳐 온 내용들은 단순히 규칙에 지나지 않았다. 물론 조금 더 나아가 교재에 없었지만 경험에서 우러나오는 내용을 가르친 것은 격언 정도를 가르쳤지만 배우는 입장에서는 단순히 규칙만 배운 것이다.
규칙만 가지고 개발할 때에는 소프트웨어를 잘 만들수 없다. 물론 초보 개발자에게서 규칙 이상의 수준을 원하는 것은 무리가 있다.
하지만 내가 가르쳤던 많은 개발자들은 초보 개발자가 아니라 3 ~ 5년 이상 경험이 있는 개발자들이다.
3 ~ 5년 정도 경험의 개발자면 최소한 위에서 말하는 격언(조금 더 욕심을 부리면 한 분야에서만 이라도 직관을 가지고) 정도는 가지고 소프트웨어를 만들어야 하며, 초보 개발자들에게 자신의 격언을 주는 수준은 되어야 한다고 나는 생각한다.
내가 본 많은 개발자들은 프로그램을 처음 시작했을 때나 그 후 1년이 지났을 때나 3년이 지났을 때의 기술수준에 전혀 변화가 없었다.(물론 조금 더 많은 API를 알고 있었지만) 이것은 단순이 규칙만을 외우고 적용함으로써 발생된 문제가 아닐까 생각한다.
나는 좋은 소프트웨어는 코드 한줄 한줄에 개발자의 철학이 담겨 있어야 한다고 생각한다. 자신이 만든 소스에 철학을 심기 위해서는 직관을 가지고 자신의 의지대로 코드를 만들 수 있는 능력이 있어야만 가능한 일이다.
지금 자신의 기술 수준을 진정으로 높이고 싶은 개발자가 있으면 단순히 규칙만 익히지 말고 직관적으로 생각할 수 있는 능력을 키우기 바란다.
그렇다면 직관을 가지기 위해서는 어떨게 해야 할까?
이것은 쉽게 이루어 지는 것이 아니며 오랜 시간 지속적인 수련을 필요로 한다. 그리고 대부분은 혼자서 이루기 어려우며, 이미 장인의 경지에 이른 개발자와 같이 일을 함으로써 습득할 수 있는 것이다.
나는 불행하게 주변에 장인이라고 할 수 있는 사람들을 최근에야 만나게 되었다. 그것도 장인의 경지에 이를 수 있는 방법을 알고 나서였다.
나의 주변에 이것을 가르쳐주는 장인이 없어 15년의 세월을 보낸 후에야 알게된 것이다.(15년이라고 하니 나이가 많은 것 같지만 대학교 입학 때부터이다. 대학 입학후 부터 프로그램에 관심이 많아 책을 보거나 책에 있는 내용을 적용해 보는데 많은 시간을 보냈다.)
지금 개발자로의 길로 들어 섰거나 주변에 자신에게 이러한 길을 가르쳐 주는 사람이 없는 개발자라면 빨리 자신만의 장인을 찾기 바란다. 장인을 찾을 수 없다면 그 개발자는 불행할 수 밖에 없다. 많은 노력을 기울여 스스로 직관을 가질 수 있는 능력을 키우든지 아니면 기술 향상의 꿈을 포기하고 규칙만을 적용한 단순한 개발자로 남는 것이 더 행복할 수 있다.
그럼 나는 직관을 가질수 있도록 도움을 줄 수 있는 장인일까? 라는 의문이 든다.나 스스로 답을 내리자면 자신이 만드는 코드에는 직관을 이용할 수 있지만 이것을 다른 개발자에게 전파할 수 있는 수준은 안되는 개발자라고 할 수 있다.
규칙만이 아닌 격언을 이해/응용하는 수준의 개발자에게는 나의 경험을 가르쳐 직관을 가질수 있도록 도움을 줄 수는 있을 것 같다.
2005.09.05
P.S 첫번째 블로그를 작성하기 시작했다. 첫 글이 나의 기술에 대한 의문심에서 시작한 이유는 지금까지 개발자로서 경험하면서 하고 싶었던 많은 말들을 정말로 내가 말할 수 있는 자격이 있을까라는 자격지심일지도 모른다.
이제 이런 자격지심은 벗어버리고자 한다. 그래 나는 적어도 대한민국에서는 남들에게 인정받는 기술자라고 생각하기로 했다.
그리고 이제부터는 나의 철학이 담긴, 지금까지 나의 모든 개발 경험이 담겨있는 소프트웨어를 만들고자 한다.
Posted by 김형준
- Response
- No Trackback , 1 Comment
Trackback URL : http://www.jaso.co.kr/trackback/2






