파이썬을 왜 공부하나요?
※ 본업이 개발은 아니지만 코딩을 좋아하는 연구자의 입장에서 쓴 글임을 먼저 밝혀둡니다.
파이썬을 처음 공부하는 분들(특히 학생)이 정말 자주 하는 질문이 있습니다.
"파이썬도 자격증이 있나요? 따두면 도움이 될까요?"
"파이썬 잘하면 취업 잘되나요?"
"기본서 다 봤어요. 이제 뭐 봐야 되나요?"
조금씩 다른 질문들이고 답변도 조금씩 다릅니다만, 이 질문들을 꿰뚫는 더 중요한 질문이 있습니다.
"파이썬 배우면 나중에 뭘 할 수 있나요?"
현직에 계신 분들은 "이걸 배워서 어디다 써먹지?"라는 의문은 보통 갖지 않으실 겁니다. 이미 필요해서 배우고 계실테니까요. 하지만 학생분들은 필요해서 배운다기보다는 누가 시키니까 배우는 경우가 많습니다. 시키는 주체는 학교가 될 수도 있고 사회가 될 수도 있습니다. 4차 산업이니 머신러닝이니 빅데이터니 여기저기서 기사가 쏟아지고, 학교는 거기에 발맞춰 학과와 강좌를 개설합니다. 그런데 정말 뚜렷한 목표를 가지고 파이썬을 공부하는 경우는 잘 없습니다. 왠지 지금 이걸 공부해두지 않으면 나중에 낙오될지도 모른다는 불안감도 있겠죠. 하지만 목표도 없이 누가 시키니까 하는 공부는 동기부여도 되지 않고 재밌을 수 없습니다.
그래서 만드는 목표가 취업입니다. 학교와 학원, 온라인 등지에서 온갖 강좌들은 쏟아져나오는데, 남들 다 배우는 파이썬 나는 할 줄 모르면 혹독한 경쟁에서 살아남지 못할지도 모른다는 생각이 들 수밖에 없습니다. 여기서 경쟁이란 결국 취업을 말합니다. 취업난은 어제오늘의 이야기가 아니니까요.
이제 취업난으로부터 자연스럽게 자격증 얘기가 나옵니다. 이력서에도 대부분 자격증 란이 있습니다. 자격증 란을 길게 채우면 괜히 뿌듯할지도 모르지요. 그리고 자격증이 정말 중요한 분야도 있을 수 있습니다. 하지만 정말 개발자에게 자격증이 중요할까요? 특히 파이썬 자격증이 중요할까요? 저는 본업이 개발이 아니므로 저 개인의 의견과 느낌은 중요하지 않다는 걸 알고 있습니다. 그럴 때 저는 검색을 합니다.
3. Python Certification: Are Certificates a Waste of Money?
4. Are Python Certifications Worth It?
5. Are Python Certifications worth it? (reddit)
6. Are certifications worth it? (stackexchange)
한글로 검색하니 홍보사이트만 나오는군요. 불가피하게 영문 검색 결과도 포함되어 있습니다. 검색 결과를 요약하면 아래 정도가 됩니다. (실제로는 과격한 표현이 많이 나옵니다만 최대한 걸렀습니다.)
- 채용담당자들은 자격증 여부를 보고 뽑지 않는다. 자격증이 없다고 거르지도 않는다. [1, 3, 6]
- 자격증 있어도 코딩 할 줄 모르는 사람이 많다. [1, 3, 7]
- 자격증은 인증기관의 돈벌이 수단일 뿐이다. [2, 6]
- 자격증의 의미를 굳이 찾겠다면, 성취감과 동기부여이다. [3]
- 메이저 회사들에게는 "자격증이 필요하다"="프로그램 짤 줄 모른다"는 인식이 있다. [6]
- 정말 프로그램을 짤 줄 안다면 자격증에 시간을 쓰지 않는다. [6]
- 자격증은 시험을 위한 "기억력"을 테스트하는 것이지, 당신의 "사고력"을 테스트하는 것이 아니다. [6]
- 깃헙 같은 repository, 포트폴리오가 너를 증명해줄텐데, 자격증이 무슨 소용인가? [1, 3, 5]
- 지원자는 본인이 뭘 할 줄 아는지 잘 "보여주는" 게 중요하다. 오픈 소스 기여는 특히 인정을 많이 받는다. [5, 6]
- "본인에게 가장 기술적으로 어려웠던 프로젝트는 뭐였는가?"라는 질문을 받으면 뭐라고 답할텐가? [7]
- 경력초기에는 자격증이 중요할 수 있으나, 경력이 늘어날수록 덜 중요해진다. [4]
- 프로젝트 투자를 받는 회사, 특히 국가기관과 프로젝트를 진행하는 회사의 경우는 자격증이 중요하다. [7]
감이 좀 오시나요? 마지막 항목처럼 자격증이 큰 도움이 되는 경우가 분명히 있으므로 자격증이 완전히 쓸데없다고 말할 수는 없습니다. 하지만 이런 특수한 경우를 제외하고는 자격증의 효용성은 많은 의구심을 불러일으키는 것이 사실입니다. 이 링크에도 있듯이, 자격증은 전통적인 교육시스템의 동작방식이지 개발자의 업무능력 검증과는 거리가 있습니다. 의심스럽다면, 당장 현직에 있는 시니어급 개발자 아무나 붙들고 물어보시기 바랍니다. 단적인 예로, 서버 개발자는 장애 발생 시 주어진 시간 안에(보통은 매우 짧습니다. 본인이 유저라고 생각해보세요.) 문제를 찾고 해결해야 합니다. 자격증으로 이런 능력을 판단할 수 있을까요?
종종 이런 질문을 받습니다.
"파이썬 잘하면 취업할 수 있나요?"
저는 이 질문자에게 도리어 이렇게 묻고 싶습니다.
"파이썬을 잘한다는 게 무슨 뜻인가요?" (힌트: "문법 많이 안다"는 절대 답이 아닙니다.)
아직 많은 학생분들이 파이썬이라는 프로그래밍 "언어" 공부에만 몰두하고 있는 것 같습니다. 고등학교 때 하던 공부방식, 즉 짜여진 커리큘럼대로 시키는 공부를 달달 외워가며 하는 방식에서 벗어나지 못했기 때문이 아닐까 싶습니다. 그래서 문법을 외우고 이론을 외우고 패턴을 외우면서 공부를 합니다.
하지만 프로그래밍 언어 공부는 "언어" 공부가 아니라 "프로그래밍" 공부가 되어야 합니다. 공부를 통해 얻어야 할 것은 "문법"에 대한 지식이 아니라 "로직"을 만들 수 있는 사고력입니다. 앞서 언급했듯이 프로그래밍은 기억력이 아니라 사고력을 이용하는 행위입니다. 책 100권을 읽고 거기에 나오는 모든 패턴을 다 외웠다고 칩시다. 실생활에서 맞닥뜨리는 새로운 문제가 과연 그 100권의 책에 있을까요? 비슷한 문제는 있을지도 모르지만 정확히 같은 문제는 없을겁니다. 그렇다고 이 새로운 문제에 단 하나의 모범답안이 존재할까요? 좀 더 일반화해서 말하자면, 이 세상에 하나의 정답만이 존재하는 문제가 있을까요? "프로그래밍" 공부를 해야 하는 이유, 사고력이 필요한 이유가 바로 여기에 있습니다.
물론 "언어"를 잘 하는 것, "문법"을 많이 아는 것도 당연히 중요합니다. 기본이 탄탄하지 않으면 뭘 하든 사상누각이 될 수밖에 없습니다. 기본기가 부족하면 언젠가는 뽀록나기 마련이거든요. 하지만 파이썬, 또는 프로그래밍 언어를 배우는 목적은 언어 그 자체에 있지 않습니다. 배운 프로그래밍 스킬로 무엇을 할 것인지가 중요합니다. 현장의 채용담당자가 지원자에게 요구하는 부분이 바로 이것입니다. 회사는 배우는 곳이 아니라, 배운 것을 써먹는 곳입니다. 많이 아는 것보다 작은 하나라도 "할" 줄 아는 것, 프로그래밍 "언어"를 잘 아는 것보다 "문제해결능력"이 현장에서는 훨씬 중요합니다. 언어는 도구일 뿐이니까요.
그럼 이제 자연스럽게 이런 질문이 나옵니다.
"기본서는 다 봤는데, 이제 뭘 봐야 할지 모르겠어요. 책을 더 봐야 하나요? 뭔가 할 줄 아는게 중요하다고 하던데, 그럼 전 이제 뭘 해야 하죠?"
이런 의문점이 든다면, 먼저 스스로에게 이 질문을 해보시기 바랍니다.
'내가 만들 수 있는 것 중에 사람들이 돈을 내고 살만한 것이 있나?'
당연한 얘기지만 책에 있는 예제 수준의 코드를 돈 내고 사는 사람은 없습니다. 아니, 그보다 훨씬 길고 유용한 코드라도 웬만해서는 돈을 벌기는 어렵습니다. 기본을 익힌 후에 뭘 해야 하냐는 질문에 보통 시니어들은 '작은 프로젝트를 해봐라'라고 말합니다. 프로젝트를 직접 설계하고 진행해보는 경험이 나중에 실무 프로그래밍으로 연결되기 때문인데요. 실무 경험이 부족한 초보자 입장에서는 이게 무슨 말인지 잘 이해가 되지 않을 수 있습니다.
입문서에 나오는 예제는 보통 한 가지 스킬, 한 가지 모듈/라이브러리/프레임워크만 이용하는 경우가 많습니다. 이 세상에 누군가 돈을 내고 살만한 프로그램 중 한 가지만 이용해서 만들어진 것은 단 하나도 없습니다. 프로그램의 유용성/안정성과 쓰이는 스킬의 가짓수는 비례관계입니다. 아래는 "초보자를 위한 파이썬 프로젝트(small python projects for beginners)" 키워드로 검색한 결과의 극히 일부만 추린 것입니다.
- Number Guessing
- Rock, Paper, Scissors
- Dice Rolling Simulator
- Hangman
- YouTube Video Downloader
- Python Website Blocker
- Bitcoin Price Notifications
- Reminder Email/Text Sender App
중급(intermediate) 수준에서는 아래 프로젝트들이 추천되고 있습니다.
- URL Shortener
- Reddit Bot
- MP3 Player
- Alarm Tool, Countdown Clock, Timer App
- File Manager, Directory Tree Generator
- Calculator
- Contact Book
- Bulk File Rename Tool
- Post-it Notes
- To-do App, Desktop Notifier App
- Random Password Generator
- Random Wikipedia Article
- Tic-Tac-Toe
- Currency Converter
- Clone Coding
- Stock Trading
이 외에도 할만한 프로젝트는 어 마 무 지 하 게 많 습 니 다. (참고: 프로그래밍 독학할때 자주 하는 실수 5가지) 이런 프로젝트들을 직접 진행해보면서 책의 테두리를 벗어나야 합니다. 물론 위에 나열된 프로젝트들은 이미 누군가 해놓은 것들입니다. 하지만 그것이 초보자에게 '안 해봐도 되는 것'을 의미하지는 않습니다. 직접 구현해보고, 디버깅 해보고, 기능을 확장하고, 예외상황을 예상해보는 과정을 통해야 초보에서 중수로, 중수에서 고수로 넘어갈 수 있습니다. 또는 누가 개발해둔 것에 기능을 추가하거나 방법을 변경해볼 수도 있습니다. 누구에게나 완벽한 프로그램이라는 건 없습니다. '이건 왜 이렇게 했지?' '이렇게 하는게 더 낫지 않나?' 이런 고민을 통해 개발자로서 한층 더 성장할 수 있습니다. 괜히 프로그래밍은 공부가 아니라 연습이라고 말하는게 아닙니다.
단, 그렇다고 책이 중요하지 않다는 얘기는 절대 아닙니다. 적어도 중급서 정도까지는 일목요연하게 정리된 컨텐츠로 공부하는 것이 좋습니다. 요즘은 온라인으로 공개된 책도 많이 있습니다. 위키독스, 코딩도장 등이 그 예입니다. 영어의 압박이 덜하다면 훨씬 더 많은 책을 공짜로 접할 수 있습니다. 유명한 책은 pdf로 공개되어 있는 것이 꽤 많습니다. 당장 구글에서 'python cookbook pdf' 키워드로 검색해보세요.
지금까지의 과정을 거치고 경험을 충분히 쌓고 나면 슬슬 취업준비에 들어가게 됩니다. 취업에 있어 포트폴리오는 중요합니다. 이미 언급하였듯, 채용담당자들이 보는 건 자격증이 아니라 포트폴리오입니다. 저는 개발자도 아니고 개발자를 채용하는 위치에 있지도 않기에, 이 부분은 제 의견을 말하기는 어렵습니다. 대신 아래의 링크들을 한번씩 읽어보시기 바랍니다.
- 개발자 조용진 님의 블로그 (중간에 포트폴리오 pdf가 있습니다.)
- 개발자 이건 님의 블로그
- 나만의 개발자 포트폴리오 만들기
- 개발자의 포트폴리오・이력서 작성법, 면접을 잘 보는 법
- 개발자의 포트폴리오 - 취업을 위한 포트폴리오 완벽 가이드 (워니 님의 유튜브 채널)
- 김현우 님의 포트폴리오
저는 연구개발 분야에서 일하고 있습니다. 매트랩, 랩뷰, 파이썬, C/C++을 쓰는데, 주력은 매트랩과 랩뷰이고 그 외는 필요할 때 필요한 부분만 찾아서 만드는 수준입니다. 연구개발 분야에서도 간혹 본인이 연구했던 아이템을 포트폴리오처럼, 또는 아예 상품으로 만드는 경우가 있습니다. 아래는 그 예시들입니다.
- 카메라 영상에서 운동 자세를 인식하고, 음성인식을 통해 자세교정을 유도하는 웹서비스
- Compliant mechanism을 설계하고 움직임을 간단히 시뮬레이션 할 수 있는 어플리케이션
- X-선원의 스펙트럼을 다양한 조건에서 생성해주는 어플리케이션
지금까지 프로그래밍 언어 공부를 어떻게 해야 하는지, 어디에 포커스를 맞춰야 하는지를 말씀드렸습니다. 이제 서두에 제가 했던 "파이썬 배우면 나중에 뭘 할 수 있나요?"는 아래와 같이 바꿔서 질문해야 합니다.
"파이썬 배워서 나중에 뭘 하고 싶나요?"
현재 파이썬이 가장 많이 사용되는 세 분야는 웹 서버 프로그램, 머신러닝, 데이터 사이언스입니다. (출처) 특히 지금의 파이썬 인기는 머신러닝이 만들어냈다고 해도 과언이 아닙니다. 하지만 분야가 생각보다 많지 않죠? 오히려 파이썬이 쓰이지 않는 분야가 더 많습니다. 이 영상에 의하면 게임, 앱 개발, 응용프로그램 개발, 웹 개발, 임베디드 분야에서는 파이썬이 쓰이지 않습니다.
최근 몇년간 워낙 파이썬 붐이 일어나다 보니, 프로그래밍을 처음 배우는 학생들에게 "파이썬 하나만 잘해두면 된다"는 인식이 약간 퍼져있는 것 같습니다. 결론부터 말해두면 완전히 잘못된 인식입니다. (참고: 닥치고 파이썬이 정답일까?) 파이썬이 다양한 분야에서 널리 사용되고 있는 것은 사실이지만, 파이썬이 주류인 분야는 머신러닝과 데이터 사이언스밖에 없습니다. 더구나 이 분야들은 학부 수준에서는 실무에서 적용할 수준조차 만들기 어렵습니다. 이 두 분야를 벗어나면 파이썬만 할 줄 알아서는 취업이 쉽지 않습니다.
파이썬의 장점은 낮은 초기진입장벽과 높은 생산성, 특정 도메인에서 잘 구축되어 있는 프레임워크, 그리고 최근에 급격히 성장한 것 치고는 꽤 활발한 커뮤니티입니다. 파이썬은 초기진입장벽이 자바, C/C++에 비해 낮으므로 프로그래밍을 깊게 공부하기에 좋습니다. (한 언어를 깊게 공부해야 하는 이유는 밑에 다시 설명하겠습니다.) 반면 단점도 분명히 존재합니다. 우선 인터프리터 언어라는 태생적 한계로 인해 속도가 중요한 분야에는 쓸 수 없습니다. (참고: Python is slower than C.) 또한 파이썬은 생각보다 만들어진지 꽤 오래된 언어입니다. 멀티쓰레드와 OOP의 개념이 명확히 적립되기 전에 만들어진 언어라 이 부분에서 단점 또한 지적되고 있습니다.
좋은 개발자가 되고 싶다면 파이썬"만" 할 줄 알아서는 필패입니다. 파이썬"도" 할 줄 알아야 합니다. 언어 하나도 배우기 쉽지 않은데 여러 개를 어떻게 배우냐고요? "하나를 깊게 배우라"는 얘기가 그래서 나옵니다. 개발자에게 주력 언어는 필수입니다. 주력이라 함은 뭐든 필요하면 어떻게든 만들어낼 수 있는 언어를 말합니다. 뭐든 만들어낼 수 있으려면 해당 언어를 깊게 이해해야 합니다. "깊게" 이해하려면 단순히 코드를 짤 줄 아는 것, 주어진 코드를 응용할 수 있는 수준에 그쳐서는 안됩니다. "어떻게?"보다 "왜?"라는 질문을 가져야 합니다. 여기에 아래와 같은 고민들도 해봐야 합니다.
- 왜 하나의 문제에 대해 다양한 답이 존재하는가? 왜 이게 더 좋은 코드이고 더 좋은 설계인가?
- 이 코드를 실행하면 컴퓨터 내부에선 어떤 식으로 자료를 처리하는가? 코드를 어디까지 쪼개서 이해할 수 있는가?
- 각 객체들은 어떤 데이터를 어떻게 주고받는가? 데이터의 흐름을 시각화할 수 있는가?
- 추상화된 개념들을 정확한 정의에 의거하여 "쉽게" 설명할 수 있는가?
- 메모리는 어떻게 관리되는가? 메모리 사용을 줄일 방법이 있는가?
이 수준으로 하나를 깊게 이해하고 나면, 두 번째 언어를 배우기가 훨씬 수월해집니다. 의도적으로 난해하게 설계된 언어가 아닌 이상 언어가 달라도 문법은 크게 다르지 않거든요. 두 번째 언어의 문법에 어느 정도 익숙해졌다면, 위에서 말한 크고 작은 프로젝트를 두 번째 언어로도 만들어봅니다. 두 개의 언어를 깊이 이해했다면 그 다음부터는 더더욱 쉬워집니다. 이 때는 "언어"가 아닌 "프로그래밍"에 익숙한 수준이 되기 때문입니다.
파이썬"도" 할 줄 아는 수준이 되었다면, 이제 앞에서 말한 질문, "뭘 하고 싶은지"를 생각해보아야 합니다. 이미 강조했듯이 공부의 목적은 공부 그 자체에 있는 것이 아니라, 배운 것으로 무엇을 할 것인지에 있습니다. 모든 분야를 다 잘하는 개발자는 없습니다. 서버 프로그래밍을 잘 하는 사람이 있고, 웹 개발을 잘 하는 사람이 있고, 머신러닝이나 데이터 사이언스에 특화된 개발자가 있습니다. 각 분야별로 현황과 전망을 보고, 본인이 어느 분야에 잘 맞는지를 경험해보고, 시니어 개발자들과 이야기를 해보면서 진로를 결정해야 합니다. 그리고 그 진로에 맞는 공부를 더 해야 합니다. 또 공부냐고요? 개발자는 평생 공부하는 직업입니다. (사실 그렇지 않은 직업은 없습니다.)
파이썬을 처음 공부하는 학생들이 흔히 갖는 오해를 소개하고 이를 하나의 관점으로 설명해보았습니다. 이제 초보자들과 주니어 개발자들께 꼭 당부드리고 싶은 내용을 QnA 형태로 소개하면서 글을 마치겠습니다.
Q. 영어공부 해야 하나요?
A. 해야 합니다. 똑같은 질문을 한글로 검색했을 때와 영어로 검색했을 때 검색결과의 양과 질의 차이를 보면 그 이유를 알 수 있습니다. (참고: 코딩하려면 제일 처음 배워야 하는 언어는?, 연봉 앞자리가 바뀌는 개발자 필수 언어) 에러 발생 시 디버깅을 위해서도 영어는 필수입니다. 파이썬은 에러 메시지가 모두 영어로 뜹니다. 에러가 무슨 말인지 모르겠다고요? 그 에러 메시지를 그대로 긁어서 구글링 하면 99.9% 나옵니다. 그런데 영어로 나옵니다. 이 장벽을 넘지 못하면 좋은 개발자가 되기는 어렵습니다. 영어공부 어떻게 하냐고요? 그냥 많이, 자주, 매일 읽으세요. 저도 사전 찾아가면서 매일 읽습니다. 영어를 읽는 것 자체에 익숙해져야 합니다.
Q. 고수가 되려면 문법 많이 외워야 하나요?
A. 어느 정도는 외워야 합니다. 하지만 암기과목처럼 외우려고 하면 잘 안됩니다. 자주 쓰면서 익숙해져야 한다는 표현이 더 맞습니다. 어차피 고수들도 모든 문법을 외우지는 않습니다. 자주 쓰는 것만 익숙하게 쓰고, 그 외에는 맨날 검색해서 씁니다. 고수는 검색을 안하고도 짤 만큼 많이 외우는 사람이 아니라, 필요한 걸 빨리 검색할 수 있는 사람입니다. (참고: 초보 개발자 vs 10년차 개발자, 가짜 프로그래머 vs 진짜 프로그래머, 개발을 잘하려면 암기를 잘해야 할까?)
Q. 배워봤자 당장 써먹지도 않는게 많은데, 꼭 공부해야 하나요?
A. 한 번이라도 본 것과 전혀 보지 않은 것은 차이가 큽니다. 한 번이라도 공부해본 것이라면, 나중에 문제에 부딪혔을 때 "어? 이거 어디서 본 적 있는데?"라면서 찾아볼 수 있습니다. 그래서 공부는 넓게 하는 것이 좋습니다.
Q. 컴공이 코딩 배우는 곳 맞죠?
A. 대표적으로 잘못된 인식입니다. 컴공은 코딩을 배우는 곳이 아닙니다. 컴공은 컴퓨터(computer), 즉 계산기계(compute+er)의 개념과 구조, 그의 활용에 대해 배우는 곳입니다. 컴공의 절반은 수학이요, 나머지 절반은 소프트웨어 설계입니다. (수학을 못하면 코딩 노예로 전락한다는 말이 있을 정도입니다.) 물론 커리큘럼을 따라가려면 자연스레 코딩을 많이 하게 되는 것은 맞습니다. 하지만 어디까지나 언어는 수단이지 목적이 아닙니다. 못 믿겠다면 당장 몇몇 대학 들의 교과 과정을 확인해보세요. 언어명이 들어간 과목명은 단 하나도 없습니다. 컴공에서 프로그래밍 언어는 학생이 알아서 공부해야 합니다. 정말 코딩만 배우고 싶다면 학원이 낫습니다. (참고: 나무위키: 컴퓨터공학, 나무위키: 컴퓨터공학과, 컴공은 개발을 배우는 곳인가요?)
Q. 저는 컴공도 아닌데 코딩 배워야 하나요? (이공계 한정)
A. 위 질문 못지 않게 자주 보는 질문입니다. 결론부터 말하자면 적어도 할 줄은 알아야 합니다. (컴공만큼 깊게 알지는 못해도 됩니다만, 이 부분은 선택사항입니다.) 오히려 이공계에서 코딩 없이 무얼 할 수 있는지를 되묻고 싶습니다. 저도 본업이 개발은 아니지만 업무의 절반은 코딩입니다. 직접 개발한 장비의 운영 SW 제작, 영상 전처리 및 재구성, 시뮬레이션 등 코딩 없이는 할 수 없는 일이 너무나 많습니다. 혹시 "그런건 개발자 업무 아닌가요?"라고 묻고 싶으신가요? 개발자에게는 비개발자가 할 수 없는 수준의 일이 이미 가득 쌓여있습니다. 비개발자가 할 수 있는 수준의 일은 필요한 사람이 직접 하는 것이 맞습니다. 개발자가 평생 코딩만 할 수 없듯, 비개발자가 평생 코딩을 안할 수도 없습니다. 이미 개발자와 비개발자의 경계가 불분명한 시대니까요. (참고: 해양학자 케빈은 바다에 나가지 않습니다., 코딩은 전산학과에서 배우는 것인가?, 빅데이터 분석하는 의사입니다.)
컴공이 아닌데 왜 코딩을 배워야 하는지 모르겠다면, 먼저 관찰력을 키워보시고 주위를 잘 살펴보세요. 기계, 항공, 건축, 토목, 전기전자, 소재, 환경, 화공 등등 자신의 분야에서 컴퓨터, 해석 툴, 프로그래밍 언어 등이 어떻게 쓰이는지를 조사해보시기 바랍니다. 이미 많은 곳에서 다양하게 쓰이고 있음을 어렵지 않게 눈치채실 겁니다. 매트랩은 공대생의 필수 요소가 된지 오래 됐습니다. 최근에는 파이썬도 많이 도입되는 추세입니다. 유명한 해석 툴 중 유독 자유도가 높은 툴이 있습니다. 자유도가 높다는 말은 각종 환경과 조건, 파라미터를 유저가 마음대로 바꿀 수 있다는 뜻입니다. 대신 그런 툴은 높은 확률로 스크립트 기반 환경, 즉 코딩 환경이 동반됩니다. 이런 해석 툴, 매트랩, 파이썬 등을 자유자재로 쓸 수 있냐 없냐가 본인의 몸값을 결정할지도 모릅니다.
이공계가 아닌 분들께는 제가 함부로 코딩을 꼭 배우라고 말하지는 못하겠습니다. 단, 배워두면 다양한 기회가 열리게 됨은 확실히 말씀드릴 수 있습니다.
Q. 저는 실력이 부족한데, 면접에선 어쨌든 열심히 하겠다고 말해야겠죠?
A. 제발 그러지 마세요. 면접관들이 제일 싫어하는 말이 "부족하지만 열심히 하겠다"는 말입니다. 앞서 말했듯, 회사는 배우는 곳이 아니라 배운 것을 써먹는 곳입니다. "부족하지만 열심히 하겠다"는 말은 "할 줄 아는 것도 없으면서 괜히 나대다가 사고를 치겠다"는 말과 같습니다. 회사에서 짤리는 1순위는 멍청하고 게으른 사람이 아니라, 멍청하고 근면한 사람입니다. 본인이 많이 부족하다고 느껴진다면 좀 더 시간을 두고 실력을 쌓은 후에 재도전하는게 더 낫습니다. (참고: 장교의 4가지 유형)
Q. 4년 열심히 공부했는데, 막상 취직하니 할 줄 아는게 아무것도 없습니다. 정상인가요?
A. 삐빅! 정상입니다. 보통 회사에서 대졸신입은 '아무것도 할 줄 모르는' 사람으로 취급하고 처음부터 가르칩니다. 왜일까요? 학교 공부와 실무는 완전히 반대 성향을 가지고 있기 때문입니다. 학교 공부는 대부분 정해져 있는 답을 찾아가는 과정을 가르칩니다. 실무에서 만나는 문제 중 답이 정해져있는 문제는 단 하나도 없습니다.
소위 시니어들이 말하는 '일머리'라는 게 있습니다. 한마디로 설명하기 어려운 개념이긴 합니다만, 굳이 정의하자면 '주어진 상황에서 스스로 문제를 찾고 해결과정을 설계하고 수행하는 능력' 정도가 될 것 같습니다. 보통 포트폴리오를 통해 보고자 하는 게 이런 부분입니다. 하지만 직장에서 해결해야 할 문제란 꼭 프로그래밍만을 말하는게 아닙니다. 직장에서는 학교에서 만나본 적 없는 별별 상황을 다 맞이하게 됩니다. 사람과의 갈등이 생길 수도 있고, 불분명한 커뮤니케이션으로 인해 오해가 발생할 수도 있습니다. 때로는 적당한 핑계를 대야 하는 상황도 생기고, 일의 성사와 역할분담을 가지고 싸우기도 합니다. 일정과 성능 사이에서 적절한 균형을 찾는 일은 늘 생기지만 늘 어려운 일입니다. 이런 갖가지 상황에서 최선의 의사결정을 하는 게 바로 '일머리'의 본질입니다.
하지만 당장 실무능력이 부족해도 괜찮습니다. 대졸신입에게 회사는 많은 것을 바라지 않습니다. 신입에게 실무를 가르치는 것도 회사의 역할이니까요. 그저 본인의 부족함을 인정하고 배워나가면 됩니다.
Q. 실무가 학교 공부와 완전히 반대라면, 학교 공부는 도대체 왜 배우는 건가요?
A. 직장은 대학처럼 이론을 배우는 곳이 아닙니다. 직장에서는 여러분께 이론을 가르칠 시간을 할애하지 않습니다. 직장에서는 시간이 돈이니까요. 그럼 이론을 왜 배워야 하냐고요? 이론이 바탕이 되어야 실무, 즉 "답이 정해지지 않은 문제"도 풀이법에 쉽게 접근할 수 있기 때문입니다.
Q. 테크니션이 되지 말라는게 무슨 뜻인가요? 전문가가 아니라 프로가 되라는 건 또 무슨 말인가요?
A. 테크니션과 엔지니어는 큰 차이가 있습니다.
- 테크니션은 숙련공입니다. 고도로 훈련된 스킬을 이용하여 주어진 직무를 정확히 수행하는 사람입니다. 하지만 새로운 것을 만들어내지는 못합니다.
- 엔지니어는 설계자입니다. 직무를 직접 설계할 줄 알고, 결과를 해석하고, 그로부터 설계를 수정할 줄 아는 사람입니다.
전문가와 프로 또한 차이가 있습니다.
- 전문가(expert)는 본인의 분야에 지식이 많은 사람입니다.
- 프로(professional)는 전문가의 지식뿐만 아니라 소위 '프로정신'을 가지고 있는 사람입니다. 프로라면 본인이 맡은 일에 책임을 질 줄 알아야 합니다.
Q. 알고리즘이나 자료구조 공부도 따로 해야겠죠?
A. 분야에 따라 다릅니다만, 해두는 것이 좋습니다. 이미 웹에는 문제풀이를 통해 알고리즘, 자료구조 실력을 테스트해볼 사이트가 많이 있습니다. 오일러 프로젝트 (한글, 영문), 코드시그널, 프로그래머스, 릿코드, 백준, 코드업 등이 유명합니다.
Q. 저는 나중에 뭘 하고 싶은지 아직 잘 모르겠는데요. 파이썬 말고 언어를 하나 더 하려면 뭘 하면 좋을까요?
A. 자바나 C 하세요. tiobe index 부동의 1, 2위입니다. 배워두면 어디서든 써먹을 데가 많은 언어입니다. 과장해서 말하자면, C와 자바만 잘해두면 뭐든 할 수 있습니다. 대신 그냥 할 줄 알면 안되고 "잘" 해야 합니다. 그리고 그게 어렵습니다. 특히 C언어는 "프로그래머를 믿는다"는 철학을 가지고 있는 언어라서, 프로그래머에게 무한한 자유를 주는 대신 알아서 해주는게 별로 없습니다. (참고: C언어의 장단점)
Q. 언어 두 개 이상 하면 오히려 헷갈리지 않나요?
A. 처음엔 당연히 헷갈립니다. 하지만 시간문제일 뿐입니다. 인간은 적응력의 동물이라, 자주 쓰다보면 금세 익숙해집니다. 그리고 요즘은 좋은 IDE가 많아서 문법적인 부분은 IDE가 도와주기도 합니다. 두 개 이상의 언어를 하면 얻을 수 있는 장점이 하나 더 있습니다. 서브 언어를 배우면서 메인 언어를 새로운 관점에서 바라볼 수 있게 됩니다. 저 또한 파이썬을 배우면서 매트랩의 for문을 다른 관점으로 볼 수 있었습니다.
Q. 저는 사실 코딩 재미없습니다. 그냥 주위에서 하도 하라고 하니까 공부하긴 하는데요. 괜찮을까요?
A. 당연히 안 괜찮습니다. 코딩 그 자체를 즐길 수 없으면 절대 업으로 삼지 말아야 합니다. 빨리 다른 일 알아보세요. (참고: 누구나 코딩을 할 수 있다?)
긴 글 읽어주셔서 고맙습니다.
- 게으른 파이썬
감사의 글
이 글에 도움을 주신 MATLAB 공부방 분들, 파이썬 처음처럼 분들, 새우튀김 님에게 감사말씀 드립니다.
같이 읽기
프로그래밍 입문하려는데 무슨 언어로 시작하는게 좋을까요?