개발자의 학습유형

공부하는 스타일, 학자형 vs 엔지니어형

공부를 하는 데에는 크게 두 가지 부류가 있는 것 같다. 첫 번째는 개념을 위주로 공부하고 계속 파고들면서 더 깊은 지식을 찾아보는 유형. 두 번째는 필요한 핵심 개념만을 먼저 찾아보고 바로 적용해보는 유형. 첫 번째 유형의 경우에는 고등학교 때 수리영역의 성적이 상대적으로 낮을 수 있다. 왜냐하면 문제에 적용하는 능력을 충분히 키우지 못했기 때문이다. 반면에 두 번째 유형은 핵심개념만으로 문제 풀이를 하다 보니 그 원리를 체득하는 과정과 문제 풀이 능력 향상이 훨씬 빠르다.

안타깝게도 나의 경우에는 첫 번째 케이스이다. 즉, 공부해야 할 내용이 1부터 10까지라면 1부터 10까지 하나씩 다 공부하는 것이다. 사실 첫 번째 케이스라도 글만 읽고도 이해하고 바로 적용하는 사람도 있다. 하지만 나같이 평범한 사람이라면 문제에 적용하는 연습을 따로 해야 한다. 그러므로 성적을 올리고 싶다면 문제 풀이에 어느 정도 집중하는 것이 바람직한 것 같다.

두 번째 유형은 성적향상에는 매우 도움이 된다. 때에 따라서는 오히려 이런 식의 학습이 개념과 원리를 이해하는 데에는 오히려 더 빠른 방법이 되기도 한다.

개발자에게 있어서 필요한 학습유형

개발자가 되기로 한 나의 경우 첫 번째 학습유형은 독이 될 때가 많았다. 바로바로 필요한 기술을 프로젝트나 코드에 적용해야 하는데, 완벽히 이해가 가지 않으면 코드를 작성하지도 못하고 그냥 원론적으로 파고드는 것이다. 예를 들어, C를 공부하다가 처음 Java를 접했을 때 Collections라이브러리의 각종 자료구조가 어떻게 동작하길래 자동으로 다 구성해주는 것일까? C에서는 일일이 다 작성해야 했는데.. (물론, 이때 자바 라이브러리 코드를 직접 열어볼 생각은 못 한 주제에..) 결국, 그 당시 나의 수준에서 이런 생각은 약간은 쓸데없는 고집이었고, 개발능력 향상에 도움이 되지 않았다.

그렇다면 개발자를 지망한다면 두 번째 스타일로 바꾸는 것이 옳은가? 내 경우에는 차라리 그게 낫다고 말하고 싶다. 그렇게 개발한다면 프로젝트에 있어서 이해하지는 못해도 일단은 가져다 쓰는것이 가능해진다. 좋은 프레임워크나 라이브러리를 가져다 쓸 수 있는 것은 개발자에게 정말로 필요한 능력이다. 하지만 나중에 시니어 개발자가 되고 CTO 급의 자리에 오르게 된다면? 그때는 수많은 것들을 직접 책임지고 선택해야 한다. 그때는 단순히 가져다 쓰는 수준에서 그치면 절대 안 될 것이다. 따라서 그때는 그 기술에 대해서 이론적으로, 개념적으로 파고들고 효용성에 대해서 평가하는 ‘학자의 기질'이 필요할 것이다.

나같이 학자형인 개발자는 오히려 포기할 건 포기하고 미룰 건 미뤄두고 우선적인 구현에 집중하는 노력이 필요한 것 같다. 그러다 보면 구현능력과 구글링 실력(정보수집 능력), 코드해독능력이 빨라질 수 있다고 생각한다. 그러한 능력은 개발속도에 직접적인 영향을 미치니까 실무에서 매우 중요할 것이다. 반면에 타고난 엔지니어형(실속형) 개발자는 한 번씩 단편적인 지식의 조각들을 디스크 조각모음 하는 과정이 필요할 것이다. 그 방법으로는 책을 쓴다던가, 블로그를 한다던가, 또한 강의 영상을 찍어보는 방법도 있다.

예전에 보안 공부를 하는데 "보안에서 책을 쓰거나 강의 찍는 사람들은 대부분 실력이 없는 사람들이야."라고 말하던 선배가 있었다. 하지만 나는 개인적으로 그렇게 생각하지 않는다. 책과 글, 동영상을 통해 지식을 공유하는 사람들은 그 의도만으로도 아주 훌륭하다고 생각한다. 책을 쓰면서도 배운다고들 하는데 나도 언젠가는 그렇게 책을 쓰고 유익한 정보와 지식을 전달할 수 있기를 바란다.