Coder vs. Developer

강의 중에 가장 힘들 때는 3시간 동안 서 있어서 몸이 지칠 때가 아니라, 학생들이 제대로 이해 못 하고 있는 것 같은 표정을 지을 때다. 특히 간단한 수식 하나를 붙잡고 나름대로 직관적으로 설명했는데 여전히 알쏭달쏭 표정을 짓고 있으면 너무 괴롭다. 미안해서. (그리고 설명 못해서 부끄러워서.)

가끔은 수식 확 다 빼버리고 쉽게쉽게 코드 몇 줄만 퉁퉁 치는 강의를 해 볼까 싶은 욕심도 울컥울컥 솟아 오른다. 괜히 무리하지 말고, 어차피 이런 개념을 다 이해하고 자기 업무에 충실하게 적용할 수 있는 사람이 얼마나 될까는 자괴감도 든다. (너무 솔직하게 말한 것 같다…)

그러다 수업 끝나고 모델을 이해할려고 노력 많이 했던 사람이 아니라면 불가능한 질문을 하는 수강생들을 보면 맘을 다시 고쳐 먹는다. 몇 줄짜리 코드만 치는 일을 하는 사람이 이 수업을 들어왔을리가 없고, 기대치가 높은 분들을 위해서라도 내가 좀 더 고민해서 직관적으로 설명해보자고 그렇게 스스로를 다잡아 본다.

수학, 통계에 대해서 부담을 느낀 수강생이 많았으니 아예 2-3개 강의 정도를 할애해서 머신러닝용 기초 수학, 통계 강의를 해달라는 요청을 받고, 위의 생각들을 하면서 이런저런 검색을 좀 해 봤다. 정말로 그런 수요가 많이 있을까? 그냥 강의 수준을 좀 낮추는게 낫지 않을까? 근데 쉬운거 강의하면 나는 돈 내고 듣기 싫을 거 같은데….

그런 찰나에 재밌는 글을 하나 봤다

 

Fast Campus – 개발자를 위한 통계와 머신러닝 CAMP 수강 후기

저 수업 진행하시는 김 박사님을 아는 지인한테서 이야기도 들었고, 내 수업과 교차 수강했던 수강생 분의 평가도 듣긴 했었지만, 그래도 위에 링크 걸어놓은 수강 후기를 보고 나니 맘 속에 고민하던 내용이 싹 정리되는 것 같아서 몇 마디 남겨본다.

 

개발자란 도대체 무슨 직업일까?

필자가 개발자가 아닌 관계로 100% 정확하게 알지는 못하지만, 대체로 개발자 커리어 패스는 “개발 실무 -> 프로젝트 PM -> 기술 영업 / 개발 팀 관리” 정도로 요약되는 걸로 알고 있다. 말을 바꾸면 실제로 우리가 알고 있는 “개발” 업무는 어린 시절에 몇 년 정도 하고 나이가 들면 트렌드가 바뀌니까 다른 업무 영역으로 넘어간다는 뜻이다.  해외에서는 나이 먹고도 계속 개발하는 사람이 많던데 우리나라는 왜 그럴까?

저 수강 후기에 따르면 흐름에 뒤쳐지고, 새롭게 공부하지 않기 때문에 주로 쓰는 언어가 바뀌면 실무를 하기가 힘들고, 용례의 트렌드가 바뀌면 실무에서 애로 사항이 많단다.

수강 후기에 있는 표현을 좀 더 직설적으로 바꿔서 필자가 좀 심한 팩트리어트 미사일을 한 방 날리면, 우리나라에서 대부분의 개발자들은  단순하게 API를 갖다 쓸 줄만 알지, 새로운 지식을 공부하고, 새로운 로직을 구현해서 모델을 발전 시켜야겠다는 생각으로 업무를 하는 사람이 없어서라고 본다. 개발자 면접을 들어가면 여태까지 해 봤던 프로젝트를 이야기하는데, 이건 왜 이렇게 만들었나요? 유저들이 별로 안 좋아할 것 같은데요? 같은 질문을 하면 “있는거 갖다 쓰느라…” 같은 대답만 하더라. (아닌 사람 만나보는게 큰 소원 중 하나다.)

“그건 개발이 아니라 그냥 copy & paste 아닙니까?”라는 질문이 곧 튀어나왔지만 꾹 참았다.

이런 이야기를 개발하는 친구들한테 했더니 개발자들 사이에 돌아다니는 용어를 하나 이야기 해 주더라.

 

Coder vs. Developer

우리나라 개발 환경에서 개발자라는 직업의 Job life cycle이 굉장히 짧은 (여러가지 이유가 있겠지만 가장 큰) 이유는 바로 개발자가 Coder이기만 하지, Developer가 아니기 때문이다. (거의 대부분의) 개발자들이 프로그래밍 API와 코드를 어디서 따와서 코어가 되는 알고리즘은 안 짜고 주어진 내용을 그대로 갖다 쓰고만 있다. 일종에, 암기한 공식을 그대로 유형의 문제에 대입해서 풀 수는 있겠지만, 새로운 유형에는 전혀 대응을 못하는 것과 같은 방식이다.

그럼 Developer들은 어떤 사람이냐고 물어보니, 일단 코딩 잘 하면서 수학을 잘 해야 된단다.

엉? 이거 머신러닝 강의할 때 내가 매번 하는 말인데?

어느 API의 로직을 구현하려면 코어가 되는 알고리즘을 짜야되는데, 결국 이 알고리즘은 수학이어서 수학을 못하는 사람들은 아무리 노력해도 Coder에 머물 수 밖에 없지 Developer가 될 수가 없단다.

필자가 어느 스타트업에 가서 매일같이 들었던 이야기가 “코딩은 학문도 아니고, 기술도 아니고, 기능이다”는 표현이었다. 말인 즉, 그들은 Coder였지, Developer는 아니었다는 뜻이다.

 

Developer가 되려면

그 수강 후기에 보면 눈에 번쩍 뜨이는 말이 하나 있다.

“프로그래밍 랭귀지나 응용 과정, 예를 들어 딥러닝이라고 하면 텐서플로우 활용법이나 이를 사용한 간단한 어플리케이션 구현 같은 것들은 인터넷 상에 자료가 많습니다. 저와 같이 이 분야에 오래 몸담고 있는 사람은 마음만 먹으면 얼마든지 자료나 영상 강의 등을 통해 독학할 수 있습니다. 시중에 이런 내용을 다루는 강의도 꽤 있고요.”

말을 좀 바꾸면, 돈 받고 강의하기 미안한 내용은 이미 인터넷 상에 널리 퍼져 있다는거다. (필자가 매번 하는 이야기이지 않나?)

” 수학적 원리와 알고리즘에 대해 깊이 있게 다루는 강의는 없었습니다. 사실, 이런 커리큘럼은 대학원 석/박사 과정이 아니면 접할 수 없죠. 표면적인 내용이 아니라 근본적인 내용을 다루는 차별화된 커리큘럼이 정말 마음에 들었습니다.”

“단순히 API를 copy&paste하고 부차적인 부분들을 수정/구현하는걸 반복하는 건 회사 입장에서 아무런 Royalty를 가지지 못합니다.”

“… 수학적 기초를 튼튼하게 닦아주고, 이를 기반으로 문제점을 파악하고, 해결할 수 있는 역량을 길러주는…”

우와~ 이거 매번 내가 하는 이야기들인데….

 

수강 대상

위에 열심히 Copy&paste를 하다보니, 얼마나 많은 개발자들이 필자 스타일의 머신러닝 수업에 관심을 가질까 의구심이 좀 들었다. 수학에 머리 쓰기 싫어서 Coder로 살고 싶다는 개발자가 얼마나 많은지 잘 알고 있는데, 그들을 대상으로 니네 Coder로 살지말고 Developer로 살고 싶으면 수학 공부 많이 해야된다고 강의 홍보를 해야된다는 말이지 않나?

너무 심하게 팩트리어트 미사일을 또 쏘게 되는 것 같은데, 필자는 Coder vs. Developer라는 논쟁 자체가 잘못되었다는 생각을 한다. 대학에서 정규 교육을 받았으면 애시당초 Coder에 만족하고 살면 안 되는게 맞지 않나?

건설 현장에서 벽돌만 1층에서 10층까지 올리는 벽돌공으로 살겠다면 굳이 대학 학위가 필요할까? 예상 문제를 찍어주는 강사한테서 수업을 듣고, 기출문제 솔루션을 달달 외워서 학점을 받고, 돌아다니는 API를 긁어 붙여서 업무 성과를 내고만 있는 분들은 깊이 반성해야 한다. 

집 앞 치킨집 아저씨가 공대 숙제를 다 해결해 줄 수 있을만큼 코딩을 잘 한다는 우스갯소리를 들은 적이 있는데, 그냥 한번 질문 던져보고 싶다. 그 치킨집 아저씨가 직장에서 쫓겨난 건 코딩을 잘하는데도 불구하고 나이가 많아서 짤린 걸까? 아니면 Developer가 될 가능성은 안 보이는데, 코딩 실력은 어슷비슷한 3년차 Coder보다 연봉을 많이 줘야되니 부담이어서 짤린 걸까?

 

나가며

꼭 필자의 수업을 들으러 오지 않아도 좋다. 위에 수강후기를 걸어놓은 F모 경쟁사의 훌륭한 수업을 들어도 되고, 더 실력 있어서 학교 커리큘럼만으로 충분히 좋은 Developer가 될 수 있는 사람들이 많으리라고 생각한다. 

그냥 이런 말만 한번 던지고 가고 싶다. 수학 공부 왜 하냐고, 아무런 도움도 안 된다고 불평하던 학부시절 과 동기들에게도 던지는 말이다.

“수학을 포기하면 너는 기껏해야 평균 밖에 안 된다.”

X