공부에는 왕도는 없어도 효과적인 방법은 있다
아래는 <인문학도, 개발자되다> 목차이자 첫 글
요즘 주위의 많은 사람들이 어떻게 개발 공부를 해야 될지 물어보곤 한다. 사실 이것이 이 글을 쓰기 시작한 주요 요인 중 하나이기도하다. 내가 느끼기에 개발을 공부하는 과정은 외국어를 공부하는 과정과 너무나도 비슷했는데, 보통 개발자는 외국어와 친하지 않고, 반대로 외국어를 좋아하는 사람은 개발을 모르는 경우가 많아서 이 사실을 알리고 싶었다. 그리고 둘 중에 하나를 잘하면 외국에 나가서 살기도 좋다는 사실도 비슷하다! 외국어로는 그 언어를 쓰는 나라 사람들과 대화한다면, 프로그래밍 언어로는 전 세계 개발자들과 대화를 나눌 수 있다. 앞서 외국어를 빠르게 익히는 법(외국어 덕후의 학습법, 연재 중)을 올린 적이 있는데, 어떻게 하면 프로그래밍을 빠르게 배울 수 있을까?
초보자라면 절대로 책부터 펴서는 안된다. 지금까지 구입하든, 선물을 받든 개발 책을 한 번도 끝까지 다 본 역사가 없다. 정말 단 한 번도. 개발 도서는 가끔 개념을 사전 찾듯 참고할 때만 쓴다. 정부지원 사업으로 개발 전문 학원 다니기 전에 처음으로 C, C++ 책을 사서 한 달간 독학을 했는데, 학원에 가니 며칠 만에 내가 독학했던 분량을 다 나가버려서 허무했던 경험이 있다. 많은 개발 책의 문제는 좁은 지면 위에 개발의 복잡한 개념을 설명하기 위해서, 온갖 추상화를 한다는데 있다. 정말 단연코 "옷가게라는 클래스가 있는데, 거기에는 양말이 있고, 티셔츠가 있고..." 이런 류의 설명으로는 처음 접하는 사람이 개발을 이해하기는 매우 어렵다.
만약에 나에게 지금 갖고 있는 개발에 대한 모든 지식을 잊어버리고 새로 공부해야 되는 상황이 온다면, 나는 인터넷에 있는 수많은 교육 자료로 시작을 할 거다. 학원에서 2달, 3달 걸려서 배울 내용을 좋은 온라인 강의를 하나만 찾아서 들으면 20시간만 투자하면 배울 수 있는 경우도 허다하다. 그리고 학원에서 배우는 시간은 주로 선생님이 강의하는 시간 동안 집중력을 조금도 흩트리면 안 되지만, 동영상으로 들으면 화면의 절반에는 동영상을 놓고 반대쪽에는 코딩을 하면 실시간으로 복습도 할 수 있다.
내가 주로 이용한 사이트는 Udacity, Udemy, CodeSchool, MOOC(Massive Open Online Course) 중에서도 Coursera, edX 등이 있다. 나는 이런 사이트가 있다는 것을 개발자로 취업하고 나서야 알았는데, 첫 회사에서 인턴으로 시작해서 박봉이었지만 한 달에 20만 원씩 퇴근 후에 강의를 들으며 공부했다. 특히 출퇴근 시간 지하철은 너무 붐벼 책을 들고 있기에도 벅찼기 때문에, 휴대폰으로 동영상을 보며 출퇴근을 했고 틈틈이 직접 코드를 치며 복습했다. 그리고 여전히 한 달에 최소한 몇 만원 정도는 꼭 관심 있던 분야의 인강을 구매해서 듣는다.
내가 공부에 관해서 믿는 금과옥조가 한 가지 있는데, 그것은 바로 아래와 같다.
내 돈을 들여야 공부한다
사람은 아무리 좋은 강의를 틀어놔도 공짜라고 생각하면, 쉽게 생각한다. 그게 사람이다. 저녁에 술 먹느라 쓰는 5-10만 원이면 좋은 강의 2-3개를 신청할 수 있다. 하루 저녁 술자리, 커피 몇 잔만 참으면 되는 돈을 아끼느라 내 소중한 시간을 버리지 말자.
각 사이트들의 특성을 간략히 말하면, Udacity는 IT 기업들과 연계해서 증명서를 판다. 그리고 지금 언급한 어떤 서비스보다 강의를 높은 퀄리티로 만들어낸다. 다만 취업을 보증해준다고는 하지만(취업이 안된다면 전액 환불해준단다.), 인증 과정은 비싸다. 그리고 몇몇 강의들은 구글과 제휴를 해서 촬영했는데, 구글에서 제공하는 기술 만을 가지고 녹화하여 다소 활용도가 떨어지는 면이 없지 않다. Coursera와 edX는 전 세계 유수의 대학 강의를 한 자리에 모아두었다. 대학교 강의가 어떤 지 한 번 생각해보자. 대체로 이론 중심이다. 이 강의를 보고 실제 서비스를 만들기에는 부족함이 많지만, 그래도 깊이 있게 공부할 수 있는 기회가 된다. 특히 Haskell이나 Machine Learning 등 다른 곳에서 만나기 힘든 강의를 접할 수도 있다. 이에 반해 Udemy는 지나치게 실용적이다. 이걸 통해서 공부하면 누구나 서비스 하나쯤은 쉽게 만들게 구성이 되어있지만, 강의 내용 이외에 무언가를 응용하기는 어려울 때가 있다. 하지만 나는 새로운 기술이 궁금할 때는 항상 Udemy를 먼저 찾아보는 편이다. 처음 입문하는 사람이라면 이곳을 두드려 보는 것이 좋다. 다만 몇몇 MOOC 강의를 제외하고는 영어로만 수업을 진행하는 점은 매우 아쉽다.
(아래 부분이 글 발행 후 추가 되었습니다.)
이 글을 발행하고 보니 아래의 글을 마주쳤는데, 많은 사람에게 도움이 될 수 있을 거 같아서 링크를 공유한다. "컴퓨터 전공자와 독학 개발자, 누구를 채용해야 할까"(링크) 프로그래밍은 좋은 자료만 있으면 충분히 독학이 가능하고, 실제로 많은 프로그래머들이 독학으로 시작하였다.
내가 개발을 책으로 배우지 말라고 하는 주된 이유는 위에서 말한 것처럼 '추상성'이다. 그리고 또 하나가 있는데, 모든 기술은 먼저 '코드'에 업데이트가 되고, 그리고 그 코드를 설명해놓은 '문서'에 정리가 된다. 그런데 이 책이 출판이 되려면 이 코드와 문서를 공부한 누군가가 이걸 다시 풀어써야 하고, 이걸 번역하려면 또 한 세월이 걸린다. 현재 아이폰의 경우 iOS9이 나왔는데, 카페에서 가끔 개발 공부하는 사람을 마주치면 iOS6, iOS7 책을 가지고 공부하는 사람들이 있다. 정말 맙소사다.
동영상을 통해서 어느 정도 해당 기술에 이해가 쌓이면, 이제는 직접 문서를 통해서 새로 추가되는 기능이나 문제 해결을 해야 할 때다. 어차피 내 기술이 깊어지면 깊어질수록, 내 질문을 '구글신(Google)'이나 개발자의 네이버 지식인이라고 부르는 '스택 오버 플로우(Stackoverflow)'에서도 더 이상 찾을 수 없는 경우가 생긴다. 그럴 때는 해당 내용을 만든 사람들이 직접 정리해놓은 문서를 보는 게 정답이다.
그런데 문서도 에러가 있고, 귀찮았는지 대충 정리해놓은 사람들도 있다. 그러면 이제 직접 코드와 맞붙을 차례이다.
내가 사용하는 기술을 깃허브(github)에 오픈 소스로 프로젝트를 하고 있는 사람들이 반드시 있다. 깃허브는 개발자들이 보다 쉽게 협업하기 위해 만든 오픈소스 깃(git)으로 서비스를 하는 사이트이다. 그런데 이게 개발자들이 자기 프로젝트를 공유하는 용도로 사용하기 시작하면서, 어느 정도 궤도에 오른 개발자들에게는 새로운 기술을 배울 때 실제로 서비스되고 있는 수준의 소스 코드를 찾는 용도로도 활용이 되고 있다.
실제로 서비스되고 있는 소스코드나 대규모 오픈소스 프로젝트의 코드를 찾아보기 시작했다면, 다시 실력이 폭발적으로 느는 기점이 된다. 다른 사람들이 치열하게 써놓은 코드를 보면서 내가 하고 있는 프로젝트에도 반영해보고, 오픈소스 프로젝트에 직접 참여해보기도 하는 경험은 당신을 진짜 개발의 세계로 인도해줄 것이다.
인문학도가 개발자가 되어가는 과정을 공유합니다. 그리고 저는 자유를 사랑합니다. 재택근무를 알립니다.