개발자 좋은사람 인터뷰
Today We Learned #03
- 개발자 좋은사람 김은기 2편
Q. 지식을 공유하게 된 계기가 있나요?
IT 분야에 최적화된 지식공유 사이트는 인프런에서 처음 봤어요. 다른 사람을 가르치고 저도 같이 발전하는 프로세스를 좋아해요. 왜냐하면 남을 가이드하고 제가 가진 지식을 전달하려면 2~3배 준비를 해야 해요. 그런 의미에서 저도 발전이 되고, 웹을 이용해 365일, 24시간 자신이 듣고 싶을 때 IT 관련 지식을 습득할 수 있다는 점도 저의 목적에 부합했어요.
그때 마침 파이썬, 크롤링 프로젝트를 하고 있었는데요. 고거랑 딱 맞물려서 한번 해보자는 마음으로 만들었어요.
Q. 강좌 올리고 난 뒤의 변화라면 어떤게 있을까요?
인프런에 강의를 올리고 나서 외부적으로 저를 필요로 하는 곳에서 적극적인 요청이 왔어요. 좋은 기회도 왔고요. 스타트업이나 이름있는 회사에서도 러브콜이 왔어요. 좀 더 적극적으로 사람들의 아이디어와 '이런 크롤링을 만들고 싶어요'같은 문의사항이 많이 왔어요.
답변은 제가 프로젝트가 너무 바쁘지 않은 한 100% 해드리는 편인데요. 이제 막 강의를 듣기 시작한 학생이 ‘이런 패턴으로 만들어보면 어때요?’ ‘이런 사이트는 ‘좋은 사람’님의 강의를 듣고 접근을 해봤어요.’라고 할 때면 정말 많은 생각을 하게 돼요. 서로 교류하면서 제가 디벨로퍼로써 급속도로 발전해나가는 게 가장 큰 변화에요. 이건 경력과는 상관없는 부분인데요. 또 경력이 많다고 훌륭한 developer라고 볼 순 없다고 생각해요.
또, 좀 더 깊게 파고드는 습관이 생겼고요. 블로그에 많이 찾아오셔서 아이디어를 건네고 질문을 함께 해결하는 과정에서 저의 개발 능력이 급속도로 발전한다는 것을 느꼈어요. 강좌를 계기로 다른 회사나 출판사, 기타 세미나, S사 등에서 저를 알게 되어 다양한 요청이 들어왔고, 삼성 SDS 멀티캠퍼스에서 딥러닝 기반 빅데이터 전문가 과정에서 강의를 하는 계기가 되기도 했고요.
Q. 처음 만드신 강의가 파이썬 웹 크롤링 강의에요. 어떻게 만들게 되셨나요?
유튜브 빅데이터 분석을 할 때 다양한 데이터가 필요했어요. 빅데이터 분석에서 어떤 모델을 학습시킬 때 데이터양의 힘이 정말 커요. 데이터의 양이 많아질수록 학습률, 분류, 회귀의 정확도가 높아져요.
유튜브나 인스타그램, 트위터에서 제공하는 API를 활용해서 데이터를 수집하다가 Stack over Flow에서 GUI 기반으로 유튜브 영상을 다운로드하거나, 네이버나 다음 같은 포털 사이트의 특정 기능을 자기 비즈니스에 특화해 개발하고 싶어 하는 글들을 많이 봤어요.
우리나라뿐만 아니라 Stack over Flow, Github에서 이슈, 질문, Q&A를 통해 검색을 해보니 파이썬 웹크롤링이 많이 없더라고요. 파이썬, 예를 들면 PyQT*를 활용하는 강의가 보이지 않았어요.
*파이썬에서 GUI 프로그래밍을 할 때 사용하는 대표적인 패키지
이 주제를 다루는 강의를 만들면 저도 발전할 수 있고, 강의를 듣는 사람들도 자기가 필요한 곳에 파이썬의 라이브러리를 활용해서 업무 자동화와 편의성을 도모할 수 있겠구나,라는 생각에서 강의를 만들었어요.
Q. 그다음엔 Go 강의를 만드셨어요.
딥러닝 기반 프로젝트를 진행할 때, 파이프라인 기반으로 데이터를 전처리 및 모델 학습하는 부분에서 Golang을 이용하면 빠르고 효율적이라는 걸 Github에서 발견했어요.
그래서 이 언어는 뭐지? 하고 관심만 갖고 있었는데요. 본격적으로 Revel*이라는 웹 프레임워크로 간략한 POC, 즉 프로토타입 프로젝트를 만들면서 많은 장점이 있다는 걸 알게 되었어요. 물론 단점도 있지만. Go 언어를 구글에서 만들었고, Google docs, Twitch, Dropbox, 도커, 깃헙 러너 등 전 세계를 이끄는 굵직한 프로젝트들이 Golang으로 되어 있다는 걸 많이 모르시더라고요.
*Go 기반의 웹 프레임워크
자바나 파이썬도 물론 세계적으로 유명한 언어지만, 전 세계를 이끄는 서비스를 제공하는 업체들의 백엔드, 그리고 비트코인과 암호화폐들도 Go 언어를 기반으로 만들어진 것들이 많아요. 그리고 Golang을 제가 실무에서 파이프라인이나 웹 프레임워크를 사용하고 만족스러운 피드백을 받았기 때문에 자신감을 갖고 Golang 강의를 제작했어요.
Q. 기억에 남는 수강생이 있을까요?
인프런 <파이썬 웹크롤링 수업> 중에 한 학생이 있었어요. 내가 이렇게까지 답변을 해야 하나, 자기가 검색해서 보면 쉽게 찾을 수 있는데, 싶을 정도까지 많은 질문을 했어요.
처음에는 저도 사람인지라 조금 귀찮고 고의적으로 답변을 미루기도 했었는데요. 어느 순간, 그 친구에게 답변을 하면서 저도 몰랐던 부분들을 알게 됐어요. 예를 들어 파이썬에도 디자인 패턴이 있거든요. 패턴과 규약에 관해 질문하는 걸 보면서 이 분은 나중에 정말 파이썬을 잘하게 되겠구나, 자기만의 크롤러를 만들어서 활용할 수 있겠다 생각했죠.
나중엔 점점 질문의 수준이 높아져서 제가 질문을 따라가지 못해 답변하려고 2-3시간 동안 코딩해보고 데이터와 결과물을 보고, 정확한 아웃풋이 나왔는지 확인해서 답변을 줬어요. 그분이 마지막에는 제 블로그까지 찾아와서 감사의 인사를 10줄에 걸쳐서 하더라고요. 그때 제가 처음에 귀찮아하던 부분을 반성을 했고, 이 과정에서 저 역시 성장하는구나 다시금 깨닫는 계기가 되었어요.
Q. 수강생에게 건네는 조언이 있다면?
어떤 문제를 해결하려면 어느 정도의 시간이 필요합니다. 이건 개발뿐만 아니라 어떠한 공부라도 마찬가지인 것 같아요. 시간과 열정, 또 이해하려는 노력을 투자해야 걸맞는 숙련도가 상승해요. 바로 구글링해서 갖다 붙여놓고 어, 된다 하고 넘어가면, 갖다 쓰는 엔지니어로 갈 수밖에 없을 거 같아요. 물론 안 좋은 뜻은 아닙니다.
하지만 구조적, 성능적으로 문제가 없는 견고한 소프트웨어를 만들기 위해서는 프로젝트 하나를 만드는데 시간이 오래 걸리더라도, 기초부터, 알고리즘이나 자료구조를 기반으로 프로그래밍을 시작을 하셨으면 좋겠어요.
수강생분들은 검색을 깊게 해보고 막연히 예제 파일만 따라 하는 게 아니라, 변형을 해서 A를 만들었다면 A, B로, 또 B, C로, A, B, C로 만들고 응용해보세요. 파이썬을 배웠다면 Java 로도 만들어보는 식으로 활용한다면 정말 비약적인 속도로 실력이 상승한다고 생각해요. 그 부분을 염두에 두시고 공부하시면 좋겠습니다.
Q. 지금 막 프로그래밍을 시작하는 사람에게 효율적인 공부법이 있을까요?
먼저 내가 왜 프로그래밍을 하는지를 생각해야 될 것 같아요. 단순히 먹고살기 위함인지 아니면 빠르게 돈을 벌기 위함인지. 그렇게 (프로그래밍을 시작)하시는 분들은 오래 못 하더라고요. 프로그래밍을 왜 공부하는지, 내가 뭘 하고 싶은지를 정확하게 파악하는 게 중요합니다. 또 자기한테 알맞은 언어를 선택을 해야겠죠. 모든 언어를 잘 할 수는 없기 때문에 현재 트렌드, 그리고 자기와 부합하는 언어가 무엇인지를 선택하세요.
가장 중요한 건 변수 선언부터 차근차근 시작하는 겁니다. 빠르게 배워봤자 빠르게 잊힌다는게 제 지론입니다. 프로젝트를 단계별로 나눠서 차근차근 배우고자 하는 언어의 특성을 캐치해 정확하게 기초부터 배우는 거죠.
저는 어린이 앱을 이용하는 것을 추천해요. 요즘은 초등학생들도 코딩을 배우잖아요. 바로 어려운 책을 보는 것보다 쉬운 교재로 배우는 게 좋아요. 예를 들어 스크래치 같은 프로그램은 단순하기 때문에 남녀노소 누구나 쉽게 접근이 가능하죠. 기초를 떼고 스스로 만족했다면 그때 입문서 이상의 프로그래밍 교재로 직접 코딩해보고 또 새로운 것을 변형해서 만들어보세요.
꼭 필요하다고 생각하는 건 ‘스터디’와 ‘멘토’에요. 사람들 앞에서 발표하거나 공부하는 기간이 정해지면 평소에 생각하지 못한 능력이 나오기 때문에 여태까지 공부해온 것들의 숙련도가 많이 상승되는 계기가 돼요. 멘토를 구해도 좋고요. 네이버 프로그래밍 카페 등에서 만든 스터디로 다른 사람과 교류하면서 가르치고 계획하고 지도 받다 보면 실력이 비약적으로 상승합니다.
마지막으로 다른 사람이 만든 코드를 갖고와 개선해보는 작업도 중요해요. 코드는 실력과 더불어 성격, 그 사람의 캐릭터가 드러나있기도 해요. 요즘은 인터넷에 오픈소스를 공유하기 때문에 다른 사람이 만든 코드를 직접 읽고 바꿔보고 개선해보면 자신의 프로그래밍 능력도 발전합니다. 초심자들은 이런 스텝을 따라 공부하면 좋을 거같아요.
Q. 인프런에서 눈여겨 본 지식 공유자가 있을까요?
작년에 리액트나 Vue. js기반으로 프로젝트를 하면서 강의를 찾아봤는데요. <실습 UI 개발로 배워보는 자바스크립트와 Vue. js 개발>강의를 감동적으로 봤습니다.
웹 기술을 이용한 클라이언트 서버 Application에서 자바스크립트가 이러한 역할까지 할 수 있구나, 제가 생각했던 이상의 또 다른 세계가 있구나를 알게 해줬어요. 책에서 읽어보긴 했지만 순수 자바스크립트를 활용해서 MVC(Model View Controller) 패턴을 강의에서 직접 구현하는 걸 보고 많은 걸 깨달았어요. 김정환 님이 되게 잘하시는 것 같습니다. 또 배워보고 싶고요.
테스트 주도 개발로 만드는 Node, 견고한 JS 소프트웨어 만들기 이런 건 진짜 숙련도가 끝에 있지 않는 한 강의할 수 없는 내용이기 때문에 이러한 내용을 가지고 파트 하나에 전념하고 계신다는 게 정말 부럽고 자극이 됩니다. 그래서 김정환 님의 강의들을 추천드리고 싶어요.
Q. 지식공유할까 말까 망설이는 분들께
저는 이렇게 생각합니다. 무조건 하세요.내가 가진 능력을 공유하기 위해 정리하고 분류하고 새로운 걸 찾아보는 과정에서 본인이 획득하는 경험은 정말 어마어마하다고 생각해요. 수업을 듣는 분도 실력이 향상되고, 또 수강생이 배운 지식을 바탕으로 사회생활을 하며 결과를 만들어내는 네트워크가 지속적으로 퍼져 나갈 때 좋은 개발 문화가 형성돼요.
그래서 ‘이걸 다른 사람들보다 더 잘 안다고 생각해’라는 부분이 있다면 무조건 공유하는 게 좋다고 생각해요. 그 과정에서 얻는 건 물질적인 소득과 비교할 수 없을 정도로 큽니다. 제가 그걸 체감했어요. 망설이지 마시고 무언가 공유할게 있다면 정리, 분류하고 체계화시켜서 다른 분들께 지식을 제공해주세요.
Q. 강의를 잘 만드는 노하우가 있다면 알려주세요.
저는 노하우가 없다고 생각합니다. 그냥 자료를 수집하고 제가 가진 지식을 정리하고 또 최근에 버전업이 되진 않았는지, 어떤 걸 접목시키면 좋을지, 더 효율적으로 제공하는 방법은 무엇일지만 생각합니다. 문서를 만들고 예제 소스 정리하고 또 개선하면서 강의를 만드는데요. 강의를 시작하고 녹화가 끝나면 예상시간보다 훨씬 길어져요. 특별한 노하우는 없습니다.
파이썬 입문 + 웹 데이터 크롤링을 활용한 자동화 어플리케이션 제작하기