안녕하세요. 《연오의 파이썬》을 쓴 박연오입니다. 프로그래밍을 배우기로 마음 먹으셨나요? 여러분의 멋진 꿈을 응원하며, 지면의 제약 때문에 책에서 다 할 수 없었던, 프로그래밍 학습을 시작할 때 궁금하실 법한 이야기들을 나눠볼까 합니다.

프로그래밍을 배우려는 이유가 무엇인가

여러분이 프로그래밍을 배우려는 이유가 프로그래밍 그 자체가 여러분의 삶에 필요해서인가요? 아니면 프로그래밍을 배워서 ‘프로그래머’ 또는 ‘개발자’가 되기 위해서인가요?

제가 처음 프로그램을 배우던 때는 프로그래머가 지금처럼 인기가 많지는 않았던 것으로 기억합니다. 약간은 농담이 섞였겠지만 매일 야근에 시달리고 보상도 적다는 이유로 프로그래머를 3D 업종으로 분류하는 분들도 계셨죠.

그런데 요즘은 프로그래머라는 직업의 인기가 과거보다 많이 높아진 것 같습니다. 정말 잘 된 일이죠! 저도 프로그래머로 일하고 있어서 말씀드릴 수 있지만, 일자리마다 차이가 있겠으나 프로그래머는 일반적으로 일도 즐겁고 보상도 좋고 보람도 있는 좋은 직업이라고 생각합니다. 그래서 저도 소질과 관심이 있는 주변 분들께 프로그래머를 해보시라고 권할 때가 많습니다.

하지만 그럼에도, 단지 직업을 얻기 위해 프로그래밍을 배우려는 분을 만나면, 그 공부가 너무 힘들지 않을까 조금 걱정이 되기도 합니다.

저는 삶에 필요한 걸 배울 때는 재미있고 빠르게 배울 수 있지만, 다른 걸 얻기 위한 목적으로 필요도 없는 걸 배울 때는 그 공부가 너무 힘들고 재미없더라고요. 예를 들어서, 저는 고등학생 시절에 영어는 잘 했지만 수학은 잘 못했어요. 영어는 제가 좋아하는 컴퓨터 게임을 하는 데 필요해서 즐겁게 배울 수 있었지만, 수학은 수능시험을 보는 것 말고는 인생에 아무 쓸모가 없는 거라고 생각했기 때문이에요.

저는 프로그래머를 하기 위해서가 아니라, 게임을 만들어보고 싶어서, 웹사이트를 만들어 운영하려고, 게임을 해킹해 보려고 프로그래밍을 배웠습니다. 그래서 프로그래밍을 즐겁게 배울 수 있었고, 결과적으로 프로그래머로 일할 기회도 생겼습니다.

만약에 제가 프로그래머라는 직업을 얻기 위해서 프로그래밍을 배우려 했다면, 프로그래밍을 포기했을지도 모릅니다. 사람마다 차이가 있겠지만, 저처럼 흥미와 쓸모를 느낄 때 학습이 더 잘 되시는 분이라면 프로그래밍 자체가 내게 어떤 쓸모가 있는지를 찾아보는 게 도움이 되실 것 같습니다.

만들어보고 싶은 프로그램이 있는가

프로그래밍을 처음 배우시는 분들께 항상 드리는 질문이 있습니다. “혹시 프로그래밍을 배워서 만들어보고 싶으신 프로그램이 있으신가요?” 여러분도 한번 생각해보세요. 아주 간단한 것이어도 좋고, 불가능할 것 같은 고난도 프로젝트라도 좋습니다.

만들어보고 싶은 프로그램이 있으신 분은 그렇지 않으신 분보다 프로그래밍을 배울 때 훨씬 유리합니다. 프로그래밍 언어의 문법 하나하나를 배울 때마다 그 기능의 쓸모를 알게 되시거든요. “리스트를 이용하면 내가 만들 프로그램에서 대량 처리를 할 수 있겠구나.”, “파일 입출력을 이용하면 PDF 파일을 읽어와서 엑셀 파일로 바꿔 저장할 수도 있겠네?” 하는 생각을 하시는 거죠. 이런 자극을 받으면 배운 내용을 더 확실하게 소화할 수 있고, 학습 의욕도 더 높아집니다.

심지어, 프로그래밍 공부하다가 어떤 기능에 영감을 받아서 공부를 멈추고 바로 원하는 걸 만들어보려고 덤벼들기도 합니다. 저도 자주 그랬습니다. 물론 조금 배운 것만으로는 성공하지 못할 가능성이 크겠지만, 그 과정에서 많은 걸 배우고, 막힌 부분에서 다음에 배워야 할 것을 알게 됩니다. 이처럼 공부와 실습을 병행하시면 학습 효과도 매우 높고, 조금 어설프지만 여러분만의 포트폴리오도 생길 겁니다.

프로그래밍을 배우면서 만든 게임

그림: C++를 배우면서 만든 게임

비전공자는 프로그래밍을 배우기에 불리한가

전산을 전공하지 않았다고 프로그래밍을 배우지 못할 이유는 전혀 없습니다. 프로그래밍 학습 자료가 온라인 및 오프라인에 넘쳐납니다. 프로그래밍에 필요한 사전 지식과 환경을 갖추는 난이도도 예전보다 훨씬 낮아졌죠. 내가 만들려는 프로그램을 위해 뭘 준비하고 뭘 배워야 하는지만 알면 대학 밖에서도 얼마든지 프로그래밍을 배울 수 있습니다.

사실 저도 전산을 전공하지 않았습니다. (네, 수학을 못해서 문과에 갔습니다.) 오히려, 전산을 전공하지 않았기 때문에 프로그래밍을 배울 수 있었던 것 같아요. 컴퓨터를 좋아해서 전산을 전공했지만 커리큘럼을 따라가기가 힘들어 프로그래밍을 그만두는 분을 본 적이 있습니다. 뭔가 억지로 시키면 하기가 극도로 싫어지는 저의 성격상, 저 역시도 프로그래밍을 전공했다면 프로그래밍을 그만뒀을 지도 모릅니다.

비전공자가 전공자에 비해 불리한 점은 몇 가지가 있을 것 같습니다. 다음은 제가 대충 꼽아본 겁니다.

  1. 대학의 체계적인 커리큘럼에 따라 배우지 못한다.
  2. 주변에서 조언을 구하거나 경쟁심을 자극 받을 수 있는 학우를 찾기 어렵다.
  3. (취업을 원하는 경우) 학위가 없으니 실력을 스스로 입증해야 한다.

대학에서는 일정한 커리큘럼이 있기 때문에 지식을 체계적으로 습득할 수 있습니다. 그런데 커리큘럼을 따라야 한다는 건 단점이 될 수도 있습니다. 커리큘럼은 여러분의 학습 목적과 과정에 맞춘 것이 아니라 “이런 과목을 이런 순서로 배우면 대부분의 학생들에게 맞겠지?”하고 짜놓은 겁니다. 개인화가 안 돼 있는 거죠. 커리큘럼에는 여러분에게 필요없는 지식이나 아직 도전하기 어려운 과제가 있을 수도 있습니다. 또, 대학 교육은 실기보다는 이론에 약간 더 치우쳐 있는 것 같습니다. 이론도 중요하지만, 정작 내가 원하는 프로그램을 만드는 건 뒷전이 돼 버릴 수도 있는 거죠. 그래서 자신만의 학습 방법을 짤 수 있다면 다른 사람의 커리큘럼에 따르는 것보다 독학이 더 유리할 수 있습니다.

독학을 하다보면 전공자들은 뭘 배우는지 모르고 내가 놓치고 있는게 없을까 걱정할 수 있는데요. 제가 번역한 《한 권으로 그리는 컴퓨터과학 로드맵》이라는 책에서 어느 정도 도움을 받을실 수 있습니다. 대학에서 배우는 핵심 과목에 어떤 내용이 있는지 가볍게 훑어보는 책입니다.

주변에 학우가 없는 건 꽤나 답답한 일입니다. 무언가에 막혔을 때 토론해 볼 기회도 없고, 내 실력이 상대적으로 어느 정도인지 가늠해 보기도 어렵습니다. 외로우면 학습 의욕도 떨어지겠죠. 다행히 요즘에는 프로그래밍을 배우려는 사람이 많기 때문에 같이 공부해볼 친구를 모집하는게 어렵지 않은 것 같습니다. 저는 자바 프로그래밍 학습 동아리를 작게 만들어서 사람들을 모아 함께 공부했던 적이 있습니다. 여러분도 그런 시도를 해보시는 건 어떨까요? 서울과 같이 프로그래머 일자리가 많은 곳에서는 프로그래밍을 배우는 사람도 쉽게 발견할 수 있는 것 같습니다. 하지만 지방에서는 조금 어려울 수도 있습니다. (제가 부산에서 공부할때는 좀 어려웠는데, 요즘엔 어떤지 모르겠습니다.) 공부하면서 만든 프로그램을 웹에 발표하면서 피드백을 구해보는 것도 외로움 극복에 도움이 될 수 있겠습니다.

취업을 염두에 두고 계신다면 전산 전공 학위가 없는 게 아쉬울 수도 있습니다. 학위가 취업에 도움은 되지만 그것만으로 취업이 보장되는 건 아닙니다. 프로그래머가 직장을 구하려면 학위가 있든 없든 결국은 “프로그램을 얼마나 잘 만드는가?”라는 프로그램 개발 실력이 가장 중요합니다. 여러분이 반드시 원하는 일자리에 학위가 필수 요건으로 명시된 것이 아니라면, 학위에 너무 연연할 필요는 없다고 생각합니다.

수학을 못해도 될까

수학을 못해서 걱정인 분이 많으실텐데요, 저도 그랬습니다.

슬프게도, 네, 프로그래밍에 수학이 어느 정도는 필요합니다. 그런데 여기서 말하는 수학이란 시험에서 고득점을 받기 위한 실력(즉, 공식을 달달 외우고 수많은 문제를 풀며 기계적으로 단련한 오차 없는 계산 능력)이 아닙니다. 프로그래밍에 필요한 수학이란 논리적 사고와 수학적 사고를 말합니다. 계산은 어차피 컴퓨터가 하니까, 좀 서툴러도 됩니다. 프로그래밍에 꼭 필요한 기초적인 수학 지식은 프로그래밍을 학습하다보면 어느 정도는 자연스럽게 배우게 됩니다. 프로그래밍을 배우다가 뒤늦게 수학의 재미를 알게 될 수도 있습니다.

필수적인 기초 수학 외에, 수학이 얼마나 더 필요한가는 여러분이 뭘 하려고 하느냐에 달렸습니다. 예를 들어 블로그 사이트를 만든다면 수학이 그렇게 많이 필요하지는 않을 겁니다. 하지만 금융 서비스를 만든다면 회계 지식이 약간 필요할 수도 있겠죠. 마찬가지로 3차원 그래픽 게임을 만들고자 한다면 기하학에 대한 공부가 어느 정도 필요할 것이고, 데이터 과학이나 인공지능 분야를 공부하려면 통계학을 같이 배워야 할 겁니다.

프로그래밍에 입문할 때는 수학이 많이 필요하지 않습니다. 그 다음 여러분이 만들려는 프로그램에 따라서 좀 더 많은 수학적 지식이 필요할 수 있습니다. 여러분이 관심이 있는 분야라면 조바심 가지실 필요 없이 차근차근 공부하시면 됩니다. 시험 못 본다고 누가 혼 내는 것도 아니니까요.

영어를 못해도 될까

프로그래밍에 입문할 때는 영어가 그리 필요하지 않습니다. 프로그래밍 입문 자료는 한국어로 된 자료가 엄청나게 많거든요.

하지만 좀 더 깊은 지식을 배우려 하거나, 흔하지 않은 정보를 얻으려 하면, 양으로나 질로나 한국어로 된 자료가 부족해지기 시작합니다. 그래서 영어로 된 자료를 찾아다니는 경우가 반드시 생길 겁니다. 그래서 조금씩이라도 영어 독해를 배우고 영어로 된 자료를 읽어보는 연습을 하는 게 유리합니다. 정 안되면 구글 번역기를 사용하시는 것도 좋습니다만, 번역 성능이 아직 20% 쯤 부족해서 답답하실 겁니다.

영어는 천천히 배우시는 걸로…

이걸 배워서 내가 하고 싶은걸 할 수 있을까

큰 그림을 그리지 못하는 상태에서 공부를 하다보면, 내가 지금 배우는 게 과연 쓸모가 있을지 확신이 들지 않을 수도 있습니다. 예를 들어, 게임을 만들고 싶은데 검은 화면에서 하얀섹 텍스트만 출력한다거나 수 계산만 하고 있으면 이게 게임 만드는 것과 무슨 관련이 있을까 의문이 들 수 있습니다.

프로그래밍의 기초를 배우면 어디에든 다 쓰이기 때문에, 저는 프로그래밍을 배워두는 건 무조건 좋다고 생각합니다. 하지만 무조건 믿고 공부하라는 건 동기부여에 별 도움이 되지 않을 것 같습니다. 여러분이 학습을 하시다가 너무 따분하고 큰 그림이 보이지 않는다면 여러분이 하려는 것을 하기 위해서 무엇이 필요한지 웹에서 검색해보시는 게 도움이 될 겁니다.

예컨대, 게임 만드는 법을 검색해보시면 요즘에 유니티라는 프로그램을 많이 이용한다는 걸 알게 되실겁니다. 그러면 사용법을 잘 모르더라도 그냥 유니티를 설치해서 한번 실행해보세요. 유니티 툴을 사용해보다가 프로그래밍 언어가 필요한 순간이 됐을 때 “아, 이래서 프로그래밍을 배워야 하는거구나”하는 깨달음을 얻을 수 있을 겁니다. 그러면 학습 효과가 더 높아지겠죠.

조급한 마음이 든다면

프로그래밍을 짧은 기간에 배울 수 있다고 하는 말을 많이 들어보셨을 겁니다. 책 한 권으로 프로그래밍을 다 배울 수 있다거나, 3개월만 강의를 들으면 개발자가 될 수 있다거나 하는 광고가 많이 있습니다. 약간은 과장된 광고라고 생각합니다.

학습 기간을 짧게 잡을수록 프로그래밍 학습이 부담스러워질 가능성이 커집니다. 프로그래밍에는 배울 게 아주 많습니다. 배우면 배울수록 그 다음으로 배워야할 게 훨씬 더 많다는 걸 알게 됩니다. 배울 게 너무 많은 나머지 압도당하는 기분이 들지도 모릅니다. 차분하게 평생 조금씩 공부해 나가야 한다는 사실을 받아들이면 그런 기분에서 어느 정도 벗어날 수 있습니다.

여러가지 사정으로 학습을 시작한지 고작 6개월만에 취업 시장에 뛰어들어야만 하는 분도 계실겁니다. 물론, 회사에 다니면서도 실력을 쌓을 수 있고, 회사에서만 배울 수 있는 것들도 많죠. 하지만 일반적으로 회사가 차분히 이론을 공부하기에 좋은 환경은 아닙니다. 그래서 가능하다면 직업으로 일하기 전에 학습하는 시간을 더 확보하실 수 있다면 좋겠습니다.

짧은 기간에도 달성할 수 있는 목표도 물론 있습니다. 예를 들어, 여러분이 만들고자 하는 프로그램이 매우 단순한 블로그 사이트라면, 그걸 베껴서 만드는 방법을 알려주는 ‘클론 코딩’ 수업을 들으면 금방 흉내내 만들 수 있을 겁니다. 클론 코딩은 프로그램 만드는 과정을 전체적으로 훑어볼 수 있는 좋은 학습 방법입니다. 하지만 그건 학습의 끝이 아니라 시작입니다. 따라 만들어 본 프로그램에서 무엇이 왜 어떻게 동작하는지, 코드 한 줄 한 줄의 의도와 원리를 이해해야 프로그래밍 실력이 쌓입니다.

마음을 차분히 갖고 차근차근 공부하는 게 중요하다고 생각합니다. 먼저 《연오의 파이썬》을 공부하시고, 간단한 프로그램을 만들어 보면서 그에 필요한 도구와 라이브러리를 추가로 학습하는 식으로 포트폴리오를 쌓고 지식과 경험을 확장해나가면 어느샌가 실력 있는 프로그래머가 되실 겁니다.

프로그래밍이 너무 어려워서 포기하고 싶다면

프로그래밍이 어렵긴 합니다만, 요즘에는 그래도 많이 쉬워졌습니다. 아직 포기하긴 이릅니다! 여러분이 프로그래밍이 너무 어렵다면 다음 이유 중 하나가 아닐까 합니다.

  1. 학습 환경을 갖추는 데 어려움을 겪고 있다.
  2. 학습 방법이 맞지 않는다.
  3. 교재가 맞지 않는다.

학습 환경을 갖추는 건 프로그래밍 학습을 시작할 때 가장 큰 장벽입니다. 특히 평소에 컴퓨터를 잘 사용하지 않았다면 더 어려울 수 있습니다. 《연오의 파이썬》 책에서 어느 정도의 설명을 하고 있고, 유튜브 동영상도 제공하고 있습니다. 하지만 이것으로도 환경 갖추기가 어렵다면 다른 사람의 도움을 받아서라도 해결하시기 바랍니다.

사람마다 자신에게 맞는 학습 방법이 다릅니다. 저는 프로그래밍을 공부할 때 양서를 읽고 실습하며 독학하는 것이 가장 좋은 방법이라고 생각하지만, 동영상 강의를 보고 공부하는 게 더 잘 맞는 분도 있을 수 있습니다. 여러 가지 방법을 시도하면서 여러분에게 맞는 방법을 찾아보세요.

자신에게 맞는 교재를 잘 고르는 것도 중요합니다. 교재를 고를 때는 난이도가 가장 중요합니다. 여러분의 수준보다 너무 쉬우면 배우는 것도 적고 흥미가 생기지 않아 훌훌 넘겨버리게 됩니다. 반대로 너무 어려우면 그냥 포기해버리고 싶은 마음이 들죠. 난이도가 적당해야 계속 도전하고 싶은 마음이 드는 겁니다. 저는 《연오의 파이썬》이 그런 적당한 난이도의 책이라고 생각합니다. 한편, 파이썬 언어는 입문용으로 좋은 언어이지만, 영 정이 들지 않는다면 다른 프로그래밍 언어를 배워보는 것도 좋을 수 있습니다. 어쨌든 여러가지 시도를 해보시기 바랍니다.

그래도 프로그래밍이 어렵다면 지금이 때가 아닐 수도 있습니다. “배움에는 때가 있다”라고들 하는데, 대충 나이 들면 힘드니까 젊을 때 공부하라는 이야기죠. 하지만 저는 그게 무조건 어릴 때를 말하는 건 아닌 것 같습니다. 저도 어릴 때 프로그래밍을 배우다가 여러번 포기했었습니다. 처음에 초등학생 때 베이식을 배웠다가 깊이 있게 다루기가 어려워서 관뒀고, 중학교 때 C 언어를 배웠다가 인문계 고등학교에 진학하는 바람에 수능시험 공부하느라 포기했고, 대학생 때에야 전공이 재미없어서 다시 프로그래밍을 제대로 할 수 있게 되었습니다. 여러분이 프로그래밍에 관심이 있다면, 기회는 계속 올 겁니다. 지금보다 여건이 더 나아졌거나, 머리가 더 맑아졌을 때 도전하는 것이 방법일지도 모릅니다.

긴 글 읽어주셔서 감사합니다. 프로그래밍 학습을 시작하는 여러분의 도전을 응원합니다!