프로그래밍 실력을 늘리려면

|
 
일단 결론부터 말하면 왕도는 없습니다. 그리고 프로그래밍 언어를 마스터한다는 말은 함부로 하는 것도 아닙니다. 문법 익혔다고 끝이 아니란 얘기죠.
그러니 "저 C 책 다 떼고 Java 공부하려는데 책 좀 추천해 주세요" 이런 분들은 자신의 실력에 대해 다시 한 번 고민해 보시기 바랍니다. -_-
간혹 중2병의 변종이 아닌가 싶을 때도 있습니다. 예전에 채팅했던 한 분은(대학생) C++은 조금 할 줄 안다길래 클래스 만들 줄 아냐고 물어봤더니 '아니오'라더군요 ㅡㅡ;;;

당연한 얘기지만 문법 뗐다고 언어를 다 공부한 건 아닙니다. 스타크래프트 시나리오 모드 다 해봤다고 프로게이머로 나서려는 것과 별 차이가 없습니다 -_-;
소설가가 되려고 한다고 생각해 봅시다. 한글 다 배웠으니 이젠 소설 써도 될까요? -_-;;;
일단 글 쓰는 연습을 많이 해야겠죠. 그래서 이것저것 짜보는게 일단 첫번째입니다. 그래야 기본 기법이나 명령어 등등이 손에 익습니다.
이건 사실 많은 분들이 알고 계신 부분이겠죠.

그래서 두번째에 대한 얘기로 바로 넘어가겠습니다. 아까의 소설가에 대한 예에서, 혼자서 습작만 열심히 써보면 실력이 늘까요?
물론 늘기야 하겠지만 한계가 있을 겁니다. 그리고 그 점은 프로그래밍도 마찬가지입니다. 자신이 하던 방법에만 익숙해지면 별로 좋지 못한 코드까지도 익숙해져버릴 위험이 많습니다.
단순해 보이는 퀵소트도, 링크드 리스트도 사람 따라 제품 따라 구현은 천차만별입니다. 학부 숙제 수준 코드로도 물론 잘 돌아가겠지만 필요에 따라 상황에 따라 고려해야 될 부분이 많아지기 때문입니다. 다시 말하면 일반적으로 입문서 같은 데서 보게 되는 예제 코드들은 말 그대로 '돌아가는' 수준일 뿐입니다.
두번째 방법이 무엇이냐면... 이것도 어떻게 보면 당연한 것이지만 의외로 실천하는 사람은 별로 없습니다. 바로 '남의 소스를 많이 보기'인데요.
뭐 다른 사람의 소스를 구한다는게(그것도 자기가 필요한 부분만) 그렇게 쉽지는 않긴 합니다만 우리에겐 오픈 소스가 있지요 ^^; 제가 오픈 소스를 지지하는 이유 중의 하나이기도 합니다.

좋은 소스를 보는 것은 본인이 짜보는 것 이상으로 이득이 많습니다. 잘 모르던 함수나 기술 등의 좋은 적용 사례를 볼 수도 있고, 자신이 짜보았던 로직이 얼마나 더 튜닝이 될 수 있는지도 보고 한 차원 높은 깨달음을 얻을 수도 있습니다. 또는 생각지도 못했던 테크닉을 만나게 될 수도 있지요.
제가 자주 드는 예입니다만, 퀵 소트는 반드시 recursive로 작성된다는 고정관념이 보통 있는데 GNU libc의 quicksort() 구현을 보면 그렇지만도 않다는 것을 알 수 있습니다.
다른 예를 들면 인터넷에서 바이너리 트리의 소스를 구하는 것은 아마 쉬울겁니다. 하지만 AVL tree같은 건 찾기가 꽤 힘들죠. B+ tree는 예제 소스 같은 건 아예 본 적이 없습니다. 그렇지만 Berkley DB나 SQLite, MySQL, PostgresSQL 등등의 소스를 보면 B+ tree의 구현을 볼 수 있습니다(저도 저것들을 다 본 건 아닙니다만 -_-).

하지만 사실 소스를 구한다 해도 또 배경 지식이 없이 완전한 제품의 소스를 뜯어 본다는게 또한 쉽지는 않습니다(역으로 말하면 프로그래밍을 잘 한다는 것은 정말 쉬운 일이 아닙니다).
그래서 세번째를 말씀드립니다. 언어 좀 깔짝거려봤다고 끝이 아닙니다. 끊임없이 필요한 부분을 공부하세요 -_-;
예를 들면 C 프로그래밍 책은 열혈강의 뭐 이런게 전부가 아닙니다. 쓰레드에 대한 책도 있고 네트웍 프로그래밍에 대한 책도 있고 좋은 구조나 패턴을 만들기 위한 책도 있습니다.

프로그래밍 언어를 좀 안다고 해서 할 수 있는 것은 거의 없습니다. 알고리즘과 자료구조? 물론 알아야겠지만 이것도 사실 기본에 속합니다. DB를 만들려면 수많은 자료구조와 파일처리, 문자열 토크나이징/파싱, SQL 최적화에 대해 알아야 하며 메신저를 만든다면 각종 네트웍 프로그래밍 방법과 프로토콜에 대해서 공부해야 하겠죠.

한국은 참 프로그래머가 되기 쉬운 나라입니다. 학원 몇 개월만 다녀도 프로그래머가 될 수 있으니까요. 취직이 잘 되는 지는 둘째치고...;
하지만 그렇기 때문에 S/W 기술 수준은 사실 별로 높지 않습니다. 그럼에도 불구하고 어느덧 프로그래머는 개나소나 조금만 배우면 할 수 있는 직업처럼 인식이 된 탓에 이 글 처음에 썼던 저런 질문들이 당연시 되는 분위기입니다(사실 자신이 프로그래밍을 잘 하는지는 10년 이상 프로그래밍에 매달려 본 다음에 생각해 보는게 낫지 않을까 싶군요).

결론입니다. 많은 고민과 공부와 경험이 합쳐져야만 좋은 프로그래머가 됩니다. 왕도는 없습니다.
책 한 권 떼셨다구요. 이제 기어다니기 시작하셨군요. 어느 분야든 실력은 쉽게 얻을 수 있는게 아닙니다.
프로그래밍 언어는 도구이긴 하지만 잘 다루기에는 상당히 힘든 도구이기도 합니다.

그러므로... 공부하세요 -_-;

'Programming Story' 카테고리의 다른 글

Languages of Google Codejam  (0) 2011.07.13
프로그래밍 실력을 늘리려면  (19) 2010.02.27
아이폰 & 안드로이드  (5) 2010.01.27
프로그래밍 커뮤니티의 존재 가치  (6) 2009.12.18
Trackback 0 And Comment 19