프로그래밍 전문가가 되기 위한 Dicajohn의 7가지 방법

저자: 이종훈(dicajohn @ hotmail.com)

프로그래머란 일종의 장인정신을 가진 예술가라고 생각합니다. 혼신의 힘 또는 정열을 바쳐 한 작품을 위해 정성을 들여야 한다는 점이 그런 것 같습니다. 제가 전공이 컴퓨터이지만 신입생때는 컴맹 수준이었습니다. 책을 읽어도 영어 사전을 찾아봐도 이해가 되지 않는 단어들이 너무 많았습니다. 뜻이 변한 단어들 CALS(Computer-Aided Logistic Support → Commerce At Light Speed), 게다가 별칭 Windows NT(No thanks, 사양하겠음), 비슷한 말들 Object(Instance, Entity) 등이 너무 어려웠습니다. 어떤 분야에서는 비슷한 의미였던 말이 또 다른 분야에서는 완전히 다른 의미가 되어버리는 미묘한 IT 용어 구분을 잘 하는 것이 초보자에게 중요한 것 같습니다. 그래야 책이나 매뉴얼도 빨리 이해할 수 있거든요.

학원에서 강의를 듣는 것이 실력을 빨리 기르기 위해서 가장 좋은 방법일 것 같습니다. 제가 다닌 학원은 구호가 '상위 1% 전문가 교육' 입니다. 그들 중에서는 정말 열심히 스터디 하며 강의를 듣고 실력을 쌓아가는 사람도 있지만 그렇지 못한 사람도 많습니다. 학원을 다닐 때에도 하고자 하는 의지가 중요합니다. 처음 의지가 끝까지 변하지 않는 자세가 사랑이나 프로그래밍에서도 필요한 것 같습니다.

개발자가 부족하여 여기저기서 학원이 생겨나고, 프로그래머 수준이 하향 평준화하고 있다고 합니다. IT를 공부하는 사람은 많지만, 실무에서 필요한 고급인력은 절대적으로 부족합니다. 자신이 하는 분야에서 최고가 되어 봅시다. 자바가 유망하다고 해서 그 언어를 할 필요는 없습니다. 지금은 자바가 절대적이라고 생각할지라도 언제 코볼과 같은 날이 올는지 아무도 예측할 수 없습니다. 트렌드에 휩쓸리지 말고 자신이 하고자 하는 분야에 적합한 언어를 선택하여 목적을 가지고 하나씩 공부해 봅시다.

프로그래밍 전문가가 되기 위한 Dicajohn의 7가지 방법

1. 책을 많이 읽자.

관심 분야의 책을 많이 읽어보세요. 처음엔 소설책처럼 속독하고, 이해가 되지 않는 부분은 표시만 해두고 넘어갑니다. 그 다음 자신의 것으로 만들기 위해 이해가 될 때까지 정독합니다. 고등학교 시절, 수학 정석을 공부한 시절을 떠올려 봅시다. 다른 부분은 다 틀리곤 해도 교집합, 합집합은 완벽하게 해서, 시험에 집합 문제만 나왔으면 하고 생각했던 기억이 있을 것입니다. 컴퓨터 서적도 이와 마찬가지입니다. 책 서론은 과감하게 속독하여 앉은 자리에서 독파해 보세요. 모르는 부분은 가볍게 넘어가세요. 처음에 접하는 분야는 한글책으로 먼저 읽고, 배경지식을 쌓은 다음 최신판 원서를 읽어봅시다. 책에 있는 중요한 내용을 간단히 정리해 봅시다. 모르는 IT 용어는 관련사전이나 인터넷을 이용합니다. 새로운 IT 용어와 영어에 대한 학습은 전문가로 가는 필요 충분 조건이 아닐까요?

2. 책에 있는 소스를 코딩해 보고, 공개 소스를 분석하자.

'백문이 불여일타' - 책을 읽으면서 관련 소스를 직접 코딩하며 실행하여 봅시다. 소스를 타이핑하고 컴파일하면서 에러 메세지를 확인해 보세요. 실행결과를 확인하며 조금씩 코드를 수정해 봅시다. 프로그램이 생각한 대로 화면에 출력되는 것이 신기하고 즐거울 겁니다. 좋아하는 일은 흥미도 있지만, 그 분야에서 성공할 가능성이 높습니다. '오타쿠'가 되어 보세요. 전혀 즐겁지 않나요? 그럼 진로를 다른 방향으로 바꿔보세요. 우뇌가 발달한 사람은 감각적 창의력에 뛰어난 반면, 좌뇌가 발달한 사람은 논리적인 숫자에 뛰어난 특성을 갖고 있습니다. 코딩은 노가다라고 비관하지말고 그래픽 디자이너, 음악담당자 등 다른 분야를 찾아보세요. 인터넷에 공개되어 있는 오픈 소스에 주석을 달아보는 것도 실력 향상에 도움이 됩니다.

3. 가르치는 것이 최고의 배움이다.

코딩을 하다가 막혀서 진행되지 않으면 궁금해서 다른 사람에게 질문도 해보고, 프로그래밍 '질문과 답변' 게시판에 글도 올려보고 답답했던 경험이 있을 겁니다. 질문을 할 때는 구체적으로 모르는 부분의 요점을 적고, 질문이 여러 개일 때에는 번호를 매겨보세요. 오늘부터 인터넷 게시판에 당신이 아는 질문에 답변을 5개씩 매일 해 봅시다. 머리 속에 어렴풋이 떠돌던 지식들이 정리가 되면서 자신만의 지식으로 정립됩니다. 답변은 되도록 간단하게 하세요. 자신이 어려웠던 시절을 생각하며 자세하게 설명하지 말고, '고기' 잡는 방법을 알려줍시다. 하지만 게시판에는 매일 같은 질문들이 되풀이 됩니다. 검색어로 '답변'을 입력해서 차례대로 답변 글들만 읽어봅시다. 자신이 모르는 부분은 대개 남들도 잘 모릅니다. 자신과 비슷한 실력을 가진 분의 답변 글을 이용하세요. 또는 친구나 프로그래밍 동호회 회원들과 스터디 그룹을 조직해서 함께 공부해 봅시다. 혼자서 공부할 때보다 그것의 시너지 효과는 엄청날 것입니다. 남을 가르칠 수 있을 때 비로소 내가 활용할 수 있는 지식일 것입니다.

4. 항상 아이디어를 메모하라.

숀 패닝은 60시간 뜬눈으로 냅스터 프로그램 개발에 몰두했습니다. 그의 머리 속에는 손에 잡힐 것 같은 아이디어가 떠올라 있었습니다. 윈도우 API 표준규약(프로토콜)과 유닉스 서버 명령어를 다듬어 새로운 애플리케이션 프로그램을 만들어내는 게 그의 아이디어였습니다. 패닝에게는 친구도, 가족도 없고, 제대로 먹지도 못했지만 마음 속으로는 만족감을 느끼고 있었습니다. 냅스터는 음악 비즈니스를 바꿨을 뿐만 아니라 고객을 기반으로 한 인터넷 소프트웨어인P2P(PC2PC, Peep2 Peep)의 시대를 열었습니다. 자신이 사업성이 있다고 여겨지는 아이디어를 지금 이 순간 다른 사람이 개발하고 있을 수도 있다는 얘기입니다. 만일 그 아이디어를 자신이 하고싶은 일을 먼저 하고 뒷전으로 팽개쳐 놓았으면 그누텔라, 프리네트, 소리바다와 같은 P2P 회사들이 시장을 선점했을 겁니다. 아이디어는 정말 중요합니다. 좋은 아이디어를 메모해놓지 않아서 생각이 나지 않아 고민했던 적은 없나요? 펜과 수첩을 항상 휴대하며 생각나는 아이디어를 정리해 봅시다. 그리고 최단시간에 자신감을 가지고 구현해 봅시다. 당신의 우선순위는 어떤 것인지 먼저 생각해 봅시다.

5. 주석을 달고, 소스 백업을 잘하자.

직접 코딩한 것도 시간이 지나면 이해가 되지 않는 경우가 있지요? 주석은 많을수록 좋습니다. 주석은 자세한 설명도 좋지만 자신만의 기호를 만들어 사용해 보면 어떨까요? 예를 들면 [] : 콘솔의 출력(모니터), -- 콘솔의 입력(키보드) 등 이모티콘을 활용해 봅시다. 복잡한 환경에서 우연히 발생한 버그는 재현이 쉽지 않아 원인을 파악하기 어렵습니다. 대부분의 버그는 순간의 부주의로 인한 것입니다. 프로그래밍할 때 최선을 다해 성의껏 해야 합니다. 함수는 간단하게 만드는 것이 좋습니다. 그래야 함수에서 문제가 생겼을 때 디버깅 및 관리가 편해집니다. 소스 관리도 주의를 기울여야 합니다. 단 한 줄을 고치더라도 백업하는 것을 잊지 맙시다. 제 컴퓨터가 다운되서 지금 이문서도 처음부터 다시 도큐먼테이션 하고 있습니다.

6. 스스로 레퍼런스를 참고해서 익혀라.

'Know How'보다 'Know Where'가 새로운 패러다임으로 정착하고 있습니다. 구현해야 할 많은 부분을 표준 라이브러리(API)에서 대부분 지원해 주고 있습니다. 정보를 레퍼런스에서 찾는 방법이 중요해 진 것입니다. 하지만 라이브러리를 잘 사용하는 것은 실력이 좋고 나쁨을 평가할 수 없습니다. 복잡한 알고리즘을 직접 언어로 구현해 보세요. 자신만의 알고리즘을 적어도 하나 이상은 가지고 있어야 합니다. 타인이 작성한 라이브러리만 사용한다면 종속적인 프로그래머가 될 것 입니다.

'파이썬'처럼 더 쉽고 간편한 언어를 찾기 보다 알고리즘 개발에 좀더 많은 시간을 투자합시다. Tip 같은 잔기술을 이용하며 다른 방법은 고려하지 않는 프로그램 작성은 타성에 젖게 합니다. 기존의 지식을 바탕으로 자신만의 방법을 터득해 가는 사람이 창의적인 프로그래머로 성장합니다.

7. 프로그래머 마인드를 가져라.

마음의 영웅을 찾아보세요. 빌 게이츠? 숀 패닝? 당신의 마음속에 닮고 싶은 영웅을 찾아봅시다. 여러 사람의 장점만을 파악해서 자신에게 적용해 보세요. 초보자와 전문가는 종이 한 장 차이입니다. 전문가라고 해서 모든걸 아는 것은 아닙니다. 당신의 노력 여하에 따라 전문가가 될 수도 있습니다. 플랫폼이나 언어에 얽매이지 말고 간단한 프로그램(명함, 주소 관리/ 테트리스)을 구현해 봅시다. 당신보다 더 초보일지 모를 사용자를 위해 쉬운 인터페이스(User-frienldy GUI)를 염두에 둡시다.

각각의 언어는 나름대로의 장점을 갖고 있습니다. 필요에 따라 적절한 툴을 사용합시다. 비주얼(IDE)툴만의 사용으로 너무 쉽게 성의없이 프로그램을 만드는 것은 버그를 가질 확률이 높아 집니다. 다양한 환경을 접하고 자신에게 적절한 분야를 찾아서 전문가가 되기 위해 노력하세요

'삽질 > Com' 카테고리의 다른 글

트리  (0) 2009.12.06
이중연결리스트  (0) 2009.12.06
빙고게임  (0) 2009.12.06
주석 삭제 프로그램  (0) 2009.12.06
행맨게임  (0) 2009.10.24
프로그래밍 전문가가 되기 위한 Dicajohn의 7가지 방법  (0) 2009.10.24