728x90
1 프로그래밍은 경험이다 #
마지막으로 필자가 초보 프로그래머와 보다 고급 프로그래밍을 하고자 하는 개발자에게 해줄 수 있는 몇 가지 조언을 해보도록 하겠다. 다분히 개인적이고 주관적인 내용이기 때문에 모든 독자들이 공감하리라고 생각하지는 않는다. 그래도 1985년부터 프로그램을 짜온 한 프로그래머의 이야기니 들어봐 주기 바랄 뿐이다.
먼저 권장하고 싶은 것은 보다 많은 경험을 해보라고 권하고 싶다. 필자의 주관 하에 프로그래밍은 경험이라고 말하고 싶다. 보다 많은 프로그래밍 경험을 갖고 있는 사람은 주어진 문제를 보다 빨리 해결할 능력을 갖고 있다. 말을 좋게 해서 경험이지 속된 말로 '닥치는 대로 프로그램을 짜보라'고 권하는 것이다. 아무리 프로그램이 작더라도 직접 작성해 본 것과 그렇지 않은 것은 매우 큰 차이가 난다. 작은 연습 프로그램을 많이 작성해 본 사람은 큰 프로그램도 잘 짜기 마련이다. 큰 프로그램도 결국은 작은 모듈들의 집합이기 때문이다.
경험을 늘리는 방법 중 하나는 다른 사람이 작성해 놓은 예제를 분석해 보는 것도 좋은 방법이다. 하지만 반드시 그리고 정말 중요한 것은 예제를 분석하는 것에 그치지 말고 스스로 비슷하거나 진보된 예제를 작성해 보라는 것이다. 필자가 2000년 말 닷넷과 C#을 처음 접한 이후로 지금까지 작성한 예제 코드들이 수백 가지이며 7만여 라인이 넘는다면 믿겠는가? '믿거나 말거나'지만 필자는 이렇게 많은 코드들을 작성해 보면서 닷넷 플랫폼과 C#이라는 언어를 이해할 수 있게 됐다. 독자들은 어떠한가?
필자는 왜 이렇게 프로그래밍 경험을 중요시할까? 경험에 관련된 필자의 후배 이야기를 하고자 한다. 필자의 한 대학 후배는 대학교에 들어와 처음으로 프로그래밍을 시작했다. 상당히 성실했고 머리도 매우 좋아 프로그래밍을 빠르게 배워갔다. 필자가 보기에도 짧은 기간에 빠르게 프로그래밍을 배우는 것 같았다. 하지만 그 후배는 프로그램을 작성하다 예사하지 못한 문제에 부딪히면 그 문제를 해결하는데 상당한 시간을 소비하고 있었다. 후배가 부딪힌 문제들은 대게 경험 많은 개발자라면 손쉽게 해결할 수 있는 것이었다. 여기서 프로그래밍의 경험의 차이가 조금씩 나타나기 시작했다. 그 후배는 프로그래밍을 배운지 얼마 안돼 어느 경지에 이르게됐지만 그 이후부터는 성장이 크게 둔화됐다는 것이다. 그 이후의 고급 프로그래머 나아가서 컨설턴트가 되기까지는 많은 경험을 요구하고 있었던 것이다. 짧은 기간에 그러한 경험을 쌓기는 아무래도 무리가 있었나 보다.
비단 프로그래밍이 아니더라도 어느 경지까지는 학원이나 책, 다른 사람의 도움을 통해 열심히 공부해 다다를 수 있다. 그 이후부터는 부단히 많은 경험을 쌓아가면서 다듬는 과정이라고 할 수 있다. 경험은 곧 실력과 연결되며 그것은 곧 프로그래머로서의 자신의 가치를 높이는 일이다. 경험을 쌓아가는 좋은 방법은 실제적인 코드를 작성해 보는 것이다. 실제 프로젝트가 있다면 매우 좋겠지만 항상 그럴 수는 없을 것이다. 또한 자신의 관심사와는 다른 프로젝트를 수행 할 수도 있을 것이다. 이럴 때에 수십 라인에서 수백 라인 정도의 샘플들을 작성해 보는 것은 자신의 경험을 축적하는 좋은 방법이 될 것이라 필자는 생각한다.
[edit]
2 한 기술에 정통하려고 노력하자 #
보다 넓은 경험 외에 한 가지 더 추천하고 싶은 것은 한 가지를 깊이 파고들라는 것이다. 한 가지 기술에 정통한 사람은 다른 기술에도 쉽게 적응할 수 있다. 대부분 기술의 뿌리가 비슷하거나 같기 때문이다. 이 규칙이 가장 잘 적용되는 것은 아마도 프로그래밍 언어 분야일 것이다. 한 가지 언어에 정통한 사람은 다른 프로그래밍 언어도 쉽게 배운다. 그것도 초보적인 수준이 아닌 고급 수준에 쉽게 다다를 수 있다. C++에 정통한 사람은 델파이에서 사용하는 오브젝티브 파스칼(Objective Pascal)을 어렵지 않게 습득할 수 있다. 비슷하게 자바에 정통한 사람 역시 C#, 오브젝티브 파스칼 등의 언어에 쉽게 접근할 수 있다. 이유는 프로그래밍 언어들의 기저에 깔려 있는 기술, 사상, 구현이 서로 비슷하기 때문이다.
프로그래밍 언어뿐만 아니라 분산객체 기술 역시 한 가지 기술에 정통하면 나머지 역시 어렵지 않게 접근할 수 있다. 분산 객체의 기본 사상이 서로 비슷해 한 가지 기술을 마스터한 사람은 자기가 알고 있는 기술과 배우고자 하는 기술의 차이점 위주로 지식을 습득하기 때문에 시간을 절약할 수 있다. 게다가 한 기술을 마스터하면서 쌓은 노하우와 경험은 대부분 새로운 기술에도 비슷하게 적용될 수 있기 때문에 빠른 시간에 고수 반열에 오를 수 있는 것이다. CORBA 고급 엔지니어와 COM 고급 엔지니어가 의사 소통하는데 별 어려움이 없는 것은 이런 맥락에서 풀어 볼 수 있겠다.
필자는 98년부터 지금까지 COM 에 대해 공부하고 실제 프로젝트를 수행해 왔다. 이제 COM 컴포넌트나 엑티브X 컨트롤을 만드는 일은 C++, VB, 델파이 등의 다양한 언어로 작성할 수 있게 됐고 다양한 분야에 COM 기술을 응용할 수 있게 됐다. 그리고 1년 전에 등장한 새로운 기술인 닷넷으로 이전하는 데는 그다지 긴 시간을 요구하지 않았다. COM이나 닷넷의 뿌리가 비슷했기 때문이다.
현 세대의 IT 기술은 세분화돼 있으며 정말 다양한 분야가 존재한다. 그리고 많은 기술들의 깊이는 수년에 걸쳐 상당히 심화돼 있다. 개인이 이렇게 다양한 분야의 기술에 모두 정통할 수 없을 것있은 너무나 자명하다. 그렇다면 한 가지 기술을 마스터할 정도로 깊숙이 파고드는 것은 중요하다고 볼 수 있다. 물론 모든 것을 다 할 수 있다면 금상첨화겠지만 그러게 할 수 없기에 한 가지만이라도 깊숙하게 그 기술을 파고들라는 것이다. 남들이 대부분 알고 있는 정도를 내가 알고 있다면 그것은 그 기술을 심화했다고 할 수 없다. 내가 알고 있고 자유자재로 남들에게 설명할 수 있는 내용이 다른 사람들이 잘 모르고 있다면 그는 어느 정도의 수준에 올랐다고 볼 수 있을 것이다. 한 가지 기술을 파고들어야 한다면 어떤 기술을 파고들어야 할까? 닷넷인가? 자바인가? 아니면 새로운 그 무엇인가? 만일 자바라면 자바에 대한 모든 것을 깊이 파고들 것인가? 아니면 JSP, EJB 등의 세부 분야에 대해 파고들 것인가? 이것이 선택의 갈림길이며 어려운 부분 중에 하나이다. 이 선택은 순전히 독자들의 몫이다. 기술이 지금까지 발전돼 온 방향과 앞으로 발전 방향을 고려하며 자신의 진로 역시 고려해야 할 것이다. 다만 현재 상황으로 C#과 자바 중 어느 것을 선택하더라도 향후 몇 년 동안은 후회하지 않을 것 같다.
[edit]
3 원리를 파악하자 #
마지막으로 독자들에게 권고하고 싶은 사항은 원리를 파악하라는 것이다. 원리를 파악하는 것만큼 중요한 것은 없다. HTTP의 원리나 TCP/IP의 원리를 모르고 ASP나 JSP를 코딩하는 것과 알고 코딩하는 것은 많은 차이를 드러낸다. 원리를 알고 코딩하는 사람은 다양한 응용이 가능하며, 문제가 발생했을 때 그 문제의 원인이 무엇인지 빨리 알아내고 해결책 역시 빨리 찾아낼 가능성이 높다. 반면 원리를 잘 이해하지 못한 사람들은 응용은 둘째치고 문제가 발생하면 문제의 원인조차 파악해 내지 못하는 경우가 많다. 기초를 건실하게 다져가면 새로운 기술들이 등장하더라도 빠르게 대처할 수 있다. 앞서 제시한 한 가지 기술을 깊게 파고드는 것과 비슷한 맥락으로 한 기술을 깊게 파고들면 그 원리를 터득하게 되는 것은 당연한 결과로 볼 수 있겠다.
그렇다고 지금부터 운영체제, 컴파일러, TCP/IP 네트워킹 원리를 공부하라는 얘기는 아니다. 자신이 사용하는 기술을 단순히 '사용'하는 방법만 아는데 그치지 말고 '그 원리가 어떤 것일까' 라는 호기심을 갖고 알아보라는 애기다. ASP 개발자라면 HTTP라는 것이 어떤 프로토콜인가 한번 찔러보고, HTTP가 TCP/IP를 사용한다던데 하면서 TCP/IP도 한번 찔러 보라는 얘기다. 이런 식으로 원리를 파악하려고 자주 시도하고 실제로 원리를 파악해 내는 것이 중요하다. 원리만을 위해서라면 다시 학교로 돌아가야 할 것이다.
지금까지 필자의 경험을 바탕으로 프로그래밍에 대한 몇 가지 이야기를 소개했다. 황당 에피소드라는 제목 하에 정말 황당한 이야기를 재미있게 했어야 하는데 필자의 글발로는 무리가 있었던 것 같다. 아무쪼록 프로그래밍의 고수가 되는 길은 자신의 부단한 노력과 상당한 시간이 필요함에는 틀림없다.
728x90
'프로그래밍 > 프로그래밍' 카테고리의 다른 글
fileZilla 서버 디렉토리가 보이지 않을 때 (0) | 2013.10.22 |
---|---|
unknown host exception (0) | 2013.07.11 |
디자인 패턴이란? (0) | 2013.07.10 |
[안철수 컬럼] 경쟁력 있는 프로그래머의 조건 (0) | 2013.07.01 |
log4j 파일로 남겨서 로그프로그램 연동하기 (0) | 2013.04.10 |