Thoughts2013.12.16 09:55

세상이 단순했던 시절이 있었습니다. C/C++ 말고는 언어가 없다고 생각해도 괜찮았던 (응?) 그런 시절이 있었죠. 그러나 지금은... 아마 그렇게 얘기하면 많은 분들이 고개를 흔들 겁니다. 지금이야말로 프로그래밍 언어의 춘추전국시대라고 말해도 과언이 아닐 지경이죠. 그러니 프로그래머라면 알아야 할 언어의 가짓수도 보통 2개 이상인 형편인데요. 새로운 언어를 빨리 받아들이려면 어떻게 해야 하는 걸까요?


1. 한 가지 언어에 무불통달하라 


새로운 언어를 빨리 배우는 가장 좋은 방법 중 하나는, (좀 이상하게 들리겠지만) 지금 아는 언어를 막힘없이 쓸 줄 알게 되는 것입니다. 요즘 널리 사용되는 많은 언어들이 객체지향적이기 때문에 (C++, Java, Python, Objective-C 등등) 한 가지 언어를 능숙하게 사용할 줄 알면, 다른 언어도 쉽게 배울 수 있습니다. 일례로, 저는 대학시절부터 C++을 사용해 왔는데, Java로 프로그램을 작성하기까지 일주일이 걸리지 않았습니다. 


2. 최소 2년마다 하나씩 새로운 언어를 배우라 


새로운 언어를 배운 경험은, 다른 새로운 언어를 배우는 데도 긍정적으로 작용합니다. C++과 Java로 프로그래밍을 할 줄 알게 된 사람이라면, Python을 배우는 것이 그렇게 어렵지 않을 겁니다. ({과 }가 없는 프로그래밍 언어에 대한 두려움만 극복한다면 말이죠.) 물론 실제로 어렵지 않아서 어렵지 않다고 느끼는 것은 아니고, 보통은 자신감이 커졌기 때문에 '쉽다'고 느끼는 것이긴 하지만 말이죠. (JavaScript는 처음에는 쉬울지 몰라도, 배우면 배울 수록 어려운 언어 가운데 하나죠.) 


3. 다양한 자원을 활용하라 


이 글을 읽으시는 분들 가운데 http://www.codecademy.com/ 를 알고 계시는 분들이 아마 계실 텐데요. 저는 Python을 이 웹사이트를 통해서 배웠습니다. 요즘에는 온라인에 이런 도구들이 정말 많습니다. 이런 도구들을 소개한 기사도 있는데요. http://thenextweb.com/dd/2012/10/21/so-you-want-to-be-a-programmer-huh-heres-25-ways-to-learn-online/#!pYqX7 여기를 방문해 보시기 바랍니다. 



실제 Python 강의가 진행되는 화면



이런 도구들의 장점은 (1) 시간 제약 없이 배울 수 있고 (2) 컴퓨터가 있으면 어디서든 배울 수 있으며 (3) 잘못된 점을 확인하기도 쉽다는 겁니다. 게다가, 온라인 강의를 제공하는 사이트들을 활용하면 전 세계의 수많은 개발자들과 함께 공부하는 드문 경험을 할 수 있게 되기도 하죠. 가령 여러분이 새로 Android 개발을 공부하는 사람이라면, 분명 Google의 Code University에 깊은 인상을 받게 될 겁니다. https://developers.google.com/university/ (그러나 이런 사이트들을 손쉽게 이용하려면 영어 능력이 반드시 갖춰져야 한다는 것은 안습) 


4. 프로그래밍 언어와 관계 없는 지식에 깊이를 더하라


그러나 이런 저런 프로그래밍 언어를 배운다고 해서 Guru가 될 수 있는 것은 아닌 법. '좋은 프로그래머'와 '나쁜 프로그래머'를 나누는 가장 결정적인 기준은 오히려 프로그래밍 언어가 아닙니다. 그것은 코딩 스타일의 문제이며, 알고리즘의 문제이고, 수학의 문제입니다. 팀웍의 문제이고, 시간관리의 기술이며, 가치를 전달하는 방법입니다. 


이런 부분에 대한 지식을 갖추는 것은 대체적으로 '프로그래밍 언어'를 습득하는 것 보다 어렵습니다. 하지만 일단 틀이 잡히면, 프로그래밍 언어를 더 빨리 습득할 수 있도록 해 줄 뿐 아니라, 그렇게 배운 언어들로 더 빨리 생산적인 작업을 진행할 수 있도록 만듭니다. (아는 알고리즘이 bubble sort밖에 없는 상황에서 이 언어 저 언어 배운다고 상황이 나아지지는 않으니까 말이죠. :-P) 이런 지식들을 갖출 수 있기를 간절히 원한다면, MIT Open Courseware나 iTunes U를 활용하세요. 다양한 강의들이 (영어로) 제공됩니다. 


그리고 대체로, 프로그래밍 언어는 그야말로 '선택'과 '효율성'의 문제만 해결해 줄 수 있을 뿐입니다. 실제로 풀어야 하는 대부분의 문제는, 해당 문제가 위치한 Domain에 관계된 Domain Knowledge가 있어야만 풀 수 있는 경우가 대부분이죠. 


저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^