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 이병준

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

Thoughts2013.11.26 09:02

컴퓨터를 사용한 학습 도구들이 시장에 꽤 많습니다. 그 중 대표적인 것은 레고 마인드스톰(Lego Mindstorm)이죠. 아래 그림과 같은 로봇을 만든 다음, 컴퓨터 프로그램으로 제어할 수 있도록 해 줍니다. 로봇에 대해 궁금한 학생들이나, 조금 더 전문적인 장난감을 원하는 일반인들에게 각광받고 있죠.



아마 아두이노도 이와 같은 계열일 겁니다. 아두이노(Arduino)는 센서를 연결하여 제어할 수 있도록 하는 컴퓨터 보드로, 저렴한 가격에 판매되고 있습니다. 이더넷 포트가 달려 있는 보드도 있어서, 프로그래밍하기에 따라서는 원격지에서 제어 가능한 시스템을 자기 손으로 꾸밀 수도 있죠. 아래 동영상은 그 예입니다.



하지만 컴퓨터 자체의 동작 원리에 대해서 배울 수 있도록 하는 키트는 그다지 많지 않은데요. 이 부분을 겨냥해서 제작된 조립 키트가 바로 KANO입니다. 현재 KICKSTARTER.COM 펀딩을 통해서 개발되고 있습니다. 



동영상을 보시면 아시겠습니다만, 키보드(터치패드가 포함됨), 보드, 연결선 등등의 핵심 부품이 한 키트 안에 포함되어 있죠. 컴퓨터 보드는 라즈베리 파이(Paspberry Pi) 기반으로 만들어져 있습니다. USB, HDMI를 지원한다고 하는군요. 무선 연결도 가능합니다. 그럼 이것으로 할 수 있는 일은 무엇일까요?





KANO 제작팀은 이 컴퓨터로 게임을 만들고, 코딩하는 방법을 배울 수 있다고 언급하고 있습니다. 게다가 KANO는 오픈 소스로 공개되어 있기 때문에, 커스터마이징을 원한다면 입맛에 맞게 자기가 원하는 시스템을 만들어 낼 수도 있습니다. 물론 마음만 먹는다면 할 수 있는 일은 더 많을 겁니다. 프로그래밍이라는 것, 그리고 오픈 소스라는 것이 그런 것이니까요. 


관심있는 분들은 http://www.kickstarter.com/projects/alexklein/kano-a-computer-anyone-can-make 이 링크를 방문해 보세요. 현재 $694,000 달러 가량이 이 프로젝트 펀딩으로 모금된 상태입니다. 대단하죠? 



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

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