그 뒤로 일기가 바뀌며 책이 되었다. 이 때부터 책 쓰기 연습 시작



공부의 깊이

2016. 모든 것에는 시간 개념이 들어간다. 1704년에 우리는 존재하지 않았던 것과 같다. 다른 예로 누군가를 뜨겁게 사랑했고, 만약 지금 사랑하지 않는다면, 결과만 보고 "사랑한 없다" 맞는 표현이 아니라. "특정 시간에는 세상 누구보다 사랑했다" 맞는 표현이다. 그래서 서두에 2016년임을 분명히 밝히고 시작한다.


그레고리 페렐만

현존하는 수학자 어떤 저명한 수학자라 할지라도 후대에 그레고리 페렐만의 이름보다는 위대하지 못할 것이라고 생각한다. 프로그래머가 공부하다 보면 결국 전기의 법칙, 수학에 귀결된다. 그러나 수학을 잘한다고 해서 그레고리 페렐만처럼 수는 없다. 결국 공부의 깊이를 정해야 때가 온다.


Borland사의 Together

년도 이야기이다. 볼랜드社의 투게더를 이용할 기회가 있었다사실 필자의 모든 경험과 지식은 대부분 아버지와 모교의 옥교수님 덕분에 만들어진 것이다. UML 그리면 바로 코드로 뽑아주는 툴이었다. 혁명이라고 생각했는데 주변에서는 여전히 클래스 다이어그램, 시퀀스 다이어 그램을 그리고 있고 Eclipse 쓰는 친구들은 OMONDO 뭔지도 모른다. 최근에는 UML 뭔지도 모르는 신입 사원들을 만나기도 한다. 그래서 당당하게 말할 있다. 그냥 몰라도 된다.


그림은 그림일 . 만들어야 하고 어떻게 소통해야 할지 아는 것이 중요하다.


디자인 패턴

디자인 패턴은 대부분 공부하게 것인데, 안드로이드 앱을 만들어서 여러 수상 경력이 있는 친구들도 디자인 패턴이 뭔지 모른다. 그런데 이미 그들은 쓰고 있다. 기본 내장 패턴만 해도 MVC, 싱글톤, 팩토리, 빌더, 옵서버 ... 안드로이드에서 구현하는 방식 자체가 패턴을 이용해서 구현하는 방식이다. 앞서 말했듯이 자전거를 타면서 자전거 명칭을 모르는 것과 같다. 몰라도 된다.


알고리즘

필자도 코딩 실력만 믿고 우리나라 최고의 대학을 나와 영어로 강의하시는 교수님께 막말을 적이 있다. 물론, 그분은 기초가 뛰어나셔서 단기간에 알고리즘 코딩의 대가가 되셨지만 그때도 결국 "야근" 답인 것을 알았다. 필자 역시 졸업이 안될 위기를 코딩과 전혀 상관없는 과목인데, 구글링으로 코드가 없는 알고리즘을 3 밤낮으로 구현하고 사정사정해서 겨우 졸업했다F -> D 필자가 만난 분들 중에는 암호학이나 알고리즘 관련 과목 전공만으로 박사학위를 받으신 분도 계셨지만 수년간 PM으로만 일하셨다. 지식을 일이 아예 없었다. 직장 대표님의 경우 내가 지금껏 만난 중에 가장 기술력이 뛰어나고 개발도 잘하셨었는데 게다가 과학고, 서울대에 해외 석사 극악의 알고리즘의 경우 구현된 라이브러리를 API처럼 당겨서 쓴다고 하셨다. 물론, 그분의 실력으로 분석 못하시진 않겠지만 수억 버는 프로그램 전체를 혼자 개발하시고 50 바라보시는 나이에도 라꾸라꾸에서 쪽잠을 주무시며 개발을 하는데 이상 어떻게 시간을 것인가?


결국, 디자인 패턴과 알고리즘을 논하기 전에 무엇을 만들 것인가 생각해야 한다. 만들고 싶은 난이도가 미국이라면 비행기라는 방법을 이용해야 하고 가까운 곳이라면 자동차란 방법을 이용해야 한다. , 목적지 설정이 중요하다는 것이다. 공부를 하다가 너무 재미있어서 빠져버리면 학교로 돌아간다. 필자의 멘티들은 대부분 학교로 돌려보냈다. 가족 부양의 이유로 번이나 등록하지 못했던 대학원 입학 고지서가 안타까운 마음에 더더욱 그런 방향으로 이끄는 것인지도 모르겠다. - 전면 수정해야 . -


그러나 책에서는 툴과 디자인 패턴과 알고리즘 이야기를 것이다.

이유는 이렇다. 그레고리 페렐만을 수천 합쳐놓은 천재가 나타났다고 하자. 그럼 그냥 main 문에 코딩으로 프로그램을 짜면 된다. 라이브러리도, 개발 방법론도, TDD, 애자일, 구조 설계 방법, UML, 기타 등등 IT 용어가 들어가는 대부분 필요가 없다. 그냥 혼자 설계하고 하드웨어 설계해서 모든 펌웨어, 운영체제, 프레임웍, 그리고 위에 우리가 사용할 유틸리티와 프로그램 모두 번에 짜고 칩에 넣어버리면 된다.


그러나 그런 천재가 없다. 그래서 분업하기로 했다. 소프트웨어 공학이 나왔고, 효율적인 프로그래밍과 개발 방법론, 테스트 케이스나 툴들이 나왔다. 상대방에서 설명하기 위해 그림들을 그리기 시작했고 블록 다이어 그램, UML, 시퀀스 다이어그램, 클래스 다이어그램 등을 그리기 시작했다. CVS, SVN, GIT 등도 협업하면서 사람들이 계속 실수하니까 그런 연유로 만들어졌다.


프레임웍도 각자 짜다 보니 사업해서 벌고 싶어 지고, 누구는 오픈소스로 자유를 원해서 다른 노선을 타는 ... 수많은 OS 생겨났고 어차피 천재가 없는 판국에 경쟁이 붙으면 좋은 제품이 나올 거라는 사회적 기대감이 서로 자기 것이 최고라고 말하기 시작했다.


라이브러리로 만들기 껄끄러운 코드 패턴은 디자인 패턴이라고 부르고 서로 맞춰서 쓰며 소통하기로 했고, 만들고 보니 제대로 동작 하는 것들이 많아서 수학과 코드의 경계인 알고리즘을 발전시켰다. 소프트 공학들은 만들어졌다가 이슈화 되었다가 사라지고 하는데. facebook이나 youtube처럼 경쟁력 있는 제품이 목표의 root 아니면 아래 노드들은 번에 사라지기도 한다.



책에서 다루는 것은 프로그래머들끼리 소통의 방법이다. 그런데 입사한 친구들 중에 소트 바로 짜보라고 했을 단박에 짜는 엔지니어가 누가 있으랴필자가 알려준 방법대로 매일 코드를 치다 보면 물론, 쉽다. 그러나 그것이 중요한 것은 아니다. 소통의 이유로 배워야 한다. 배워야 하는지 알고 시작하면 좋다.


복면가왕에 나오는 사람들 가수들이 모두 오페라 가수는 아니다. 듣기도 괜찮을 정도면 나올 있다. 프로그래머도 그런 존재라고 생각한다. 알고리즘의 대가라고 해도 그레고리 페렐만과 이야기할 있는 교집합은 얼마 것이며, 디자인 패턴의 대가라고 해도 안드로이드 같이 성공한 제품을 만들지 않았다면 대중의 공감을 얻기 힘들 것이다.


필자가 지난 5년간 멘토링 해서 얻은 가장 소중한 결실은 민간 IT 트렌드를 지속적으로 센싱 하며 특정 개발을 위해 신입이 매력적으로 보일만한 공부의 방향을 정해줄 있는 안목을 얻은데 있다. 물론, 안목에도 시간의 개념이 들어간다. 한두어 달만 IT 뉴스를 보지 않아도 감각을 잃을 거라 생각한다.


지금 있을 쓰려고 하는 것이다. 자연(전기) API 호출해서 만든 CPU 하드웨어의 API 위에 만들어진 OS, OS API 써서 만들어지는 프레임웍도 프레임웍의 API 호출해서 만들어지는 애플리케이션들.


어떤 분야가 있는지, 기술이 있는지 집중할 필요는 없다. 어떤 곳의 엔지니어들이 가장 겸손하고 소통이 잘되며, 모르는 것을 모른다고 하면 친절하게 가르쳐 있는지 보면 것이다. 필자의 안목으로 단편적으로 말하자면 고수층이 가장 투텁고, 같은 것을 짜도 가장 소스가 달라지는 C++ 가장 그렇고, 그다음은 JAVA이다. 새로운 언어라 초고수가 없는 SWIFT 같을 것이다. C 다루는 사람들은 대부분 하드웨어 종속적이고 사람 목숨이 왔다 갔다 하는 프로젝트들도 더러 있어서 와신상담을 해서 고수 반열에 들지 않으면 소통이 어렵다.


필자 이야기를 잠깐 하자면, 철학 부분에서 자신 있는 필체로 쓰는 것은 겸손해야 하는 논리를 뽑아내기 위함이었다. 필자도 유독 선배에게 만은 소리를 들었다. :) 그리고 선배 자신도 모르는 것을 간단히 모른다고 말하고 아는 것은 안다고 말했고 그렇게 알아야 한다고 가르쳐 줬었다. 프로그래머 자존심에 뱅뱅 돌려서 말하거나 과시하거나 이미 했던 결과물을 말하는 것을 싫어했다. 선배의 머릿속에서 중요한 것은 항상 만들까였다. 책을 쓰라고 수없이 권유를 했지만 자신은 만드는 것이 좋다며 ㅄ이라고 불러줬던 선배가 사실 가장 겸손하고 소통을 잘하는 사람이라는 것은 뒤늦게 알게 되었다.

- 만에 수십억을 버신 선배가 가르쳐준 개발자 소통의 정수라 수정해서 들어가야 내용


새로운 것을 창조하기에 개발자라 불리는 프로그래머의 철학은 이것이 전부라고 생각한다. 솔직히 말하면 코드 몰라도 된다그래도 포인터 정도까지는 알자.


+ Recent posts