본문 바로가기

커니 이야기

손코딩뇌컴파일눈디버깅?! - 2014년 4월 GDG서울 정기모임 후기

손코딩, 뇌 컴파일, 눈 디버깅?!


GDG 서울 4월 Meetup 공지가 올라온 후, 공지를 읽어 내려가다 보니 보이는 주제명, '손코딩뇌컴파일눈디버깅'. '어머, 이건 꼭 들어야해!' 하는 생각이 번뜩 들더군요. 이름부터 무언가 호기심을 자극하는데, 과연 무슨 내용일까? 하는 질문이 벌써부터 머리 속을 가득 채우는 느낌이였습니다.

세션에서 진행될 내용은 '문제 해결 능력 향상', '소통 능력 향상', 그리고 많은 분들께서 은근히(?) 준비하시고 계시는 '코딩 인터뷰 대비' 였습니다. 코딩 인터뷰 준비는 논외로 하더라도, '문제 해결 능력 향상'과 '소통 능력 향상' 은 저도 예전부터 관심있던 주제라 과연 어떤 방식으로 진행될 지 기대가 컸습니다 :)


퇴근길 정체를 뚫고 행사장으로 가다


행사 시간은 오후 7시부터 10시까지. 평일에 진행되는 행사 치고는 긴 시간동안 진행되는구나 했었는데, 나중에 세션을 진행하다 보니 세 시간이라는 시간도 너무 짧은 시간이였습니다.

회사부터 행사가 진행되는 선릉역 D.Camp까지 다소 거리가 있는지라, 퇴근 후 바로 출발 했음에도 불구하고 행사 시작 시간에 겨우 맞춰 도착했습니다. 사실, 은근히 코리안 타임(?)을 생각해서 아직 많이 와 계시진 않겠지 했었는데, 이미 대다수 분들께서 도착해 계셨더군요. ㅠㅠ


많은 분들께서 먼저 도착해 계셨던 D.Camp 행사장 풍경



다행히 아직 행사가 시작되진 않은 상태였고, 도착 후 얼마 지나지 않아 '미녀 개발자' [강소리](https://plus.google.com/u/0/117561063220098601969/posts)님의 진행과 함께 행사가 시작되었습니다. :)

Icebreaking & tutiorial


오늘 진행될 행사에 대한 간단한 안내에 이어, Icebreaking을 겸한 간단한 퀴즈 시간! 아래 그림의 명칭은 무엇일까요?



정답은 Incognito mode(한국어 버전에서는 '시크릿 모드') 였습니다. 다른 분들께서 잠시 머뭇하고 계시는 사이, 제가 정답을 맞추게 되어 경품으로 구글 글라스(!)를 받았습니다. :) Incognito mode가 적용되어 있으니, 보는 것들이 모두 기록에 남지 않으려나요..? (오호...)

 시간 관계상 퀴즈는 한 문제만 진행된 후, 본격적으로 '손코딩뇌컴파일눈디버깅' 세션이 시작되었습니다.

튜토리얼이 시작되고, 개발자들이 보통 겪게 되는 현실에 대한 이야기들이 나오면서 짧은 시간이였지만 뒤를 돌아보며 '나는 어떻게 해 왔는가' 하는 생각을 할 수 있었습니다. 




그 중에서 특히 인상 싶었던 것은 바로 '1만시간 법칙에 대한 오해' 였습니다. `1만시간 법칙`연구는 어느 분야의 전문가가 되려면 최소 1만 시간을 투자해야 한다는 것을 골자로 하고 있는데, 이 '1만 시간'을 단순히 특정 분야에 종사하여 보내는 시간으로 오해하는 분들이 적지 않았다 합니다.

여기에서 말하는 '1만 시간'이라는 것은 단순히 그 분야에서 일한 것을 의미하는 것이 아니라 '그 분야를 수련한 시간'이기에, 단순히 일만 해서는 의미가 없지요.

간단한 예로, 사람들은 태어나서 지금까지 끊임없이, 심지어는 자는 동안에도 숨을 쉬고 있습니다. 그렇다고 해서 모든 사람들이 `프로 숨쉬머`(폐활량 증가)가 되지는 않습니다. 단순히 아무런 자극 없이, 평소 하던 대로 숨을 쉬는 것은 폐활량 증가에 도움이 되지 않지요.

마찬가지로, 개발자도 자신의 개발 능력을 향상하기 위한 '수련'의 시간을 가지고 노력해야만 실력이 향상될 것입니다. 따라서, 이러한 능력 향상을 위해 '손코딩뇌컴파일눈디버깅' 모임에서는 개발자들의 주요 역량 중 하나인 '문제를 해결하는 능력'을 향상하기 위한 수련을 지속적으로 한다고 합니다.

간단해 보이는 문제, 하지만?


세션이 본격적으로 시작되고, 드디어 문제가 주어졌습니다. 생각보다 간단해 보이는 문제입니다.

숫자 리스트가 주어졌다고 하자. 리스트 내의 3개의 수를 골라 합이 0이 되는 경우의 수를 반환하는 함수를 작성하라.


더도 말고 덜도 말고 주어진 조건은 딱 위와 같았습니다. 처음엔 저 조건 외에 다른 조건이 주어지지 않아 어떻게 해야 하는지 고민하고 있었는데, 조건이 주어지지 않았을 때 나름의 제약 조건을 지정하고 그에 맞추어 설계해 보라 하시더군요. 그리고, 다른 것도 중요하지만 '실제로 동작하는 코드'를 작성하는 것을 강조하셨습니다.

저희 조도 처음엔 어떻게 해야 할 지 잠시 고민하다가, 가장 간단한 방법 (Brute force)을 사용하는 알고리즘을 작성하기로 하였습니다. 조원들과 알고리즘 동작 방식에 대해 이야기를 하면서, 이를 코드로 옮겨 가기 시작하였는데 놀라운 발견을 할 수 있었습니다.

말로 할 때에는 똑같은 것을 이야기 하고 있는 줄 알았는데, 막상 이를 코드로 옮기다 보니 큰 그림은 비슷해도 세부 구현은 다른 부분이 꽤 있더군요. 간단한 것도 이렇게 시각의 차이가 있는데, 복잡한 것을 구현할 땐 얼마나 많은 차이가 날 지...




그리고 또 하나, 코드를 직접 손으로 쓰다 보니 그 동안 얼마나 IDE에 의존해 왔는지(...) 반성하게 되더군요. (간단한 건데 코드를 쓰면서 이게 맞나....하질 않나..ㅠㅠ) 그리고, 코드 작성을 하는 사람을 제외한 나머지 팀원들께선 매의 눈으로 실시간 디버깅을 해 주시니 버그를 빨리 잡을 수 있었습니다 :)

공개 리뷰, 혹은 멀티코어 디버깅?!


각 팀별 구현이 끝난 후엔 모든 사람들과 함께 팀별로 구현한 소스를 리뷰하는 시간을 가졌습니다. 팀별로 구현한 소스를 리뷰함과 동시에 수십 명의 사람들이 함께 디버깅하고, 오류를 찾는 시간을 가졌습니다. 




사람이 많다 보니 각 코드별로 취약점이나 버그를 빨리, 그리고 쉽게 찾아낼 수 있었고 무엇보다도 같은 목표가 주어졌음에도 팀 별로 독특한 구현 결과가 나온 것이 신기했습니다. 각자 목표로 한 것이 무엇이였는지 고민한 흔적이 많이 보이더군요.


그리고 무엇보다 자신이 작성한 코드를 다른 사람들에게 설명하는 과정이 많은 도움이 될 것 같습니다. 평상시에는 코드를 작성한 후 돌려보고, 잘 돌아가지 않으면 혼자 고민하든지 하면 그만이였는데, 이런 자리에서는 자신의 논리를 잘 설명하고, 다른 사람들을 설득하는 과정 또한 필요했으니까요. 이런 경험이 코딩 인터뷰에 도움이 된다는 말이 괜히 나온 말은 아닌 것 같습니다. :D


짧은 시간, 하지만 새로운 경험.




처음엔 3시간동안 진행된다고 하여 한참 걸리겠구나~ 생각했던 것이 무색할 정도로 이번 행사가 진행되는 동안 시간은 너무나도 빨리 흘러가 버렸습니다. 마지막엔 Wrap-up 시간이 있었는데, 시간이 많이 남지 않아 행사를 함께 한 팀원들과 많은 이야기를 나누지 못한 것이 아쉬웠습니다 :)


다행히도, 이 행사는 정기적으로 열리고 있다고 합니다. 아래 슬라이드를 참조하시면 좋을 것 같네요. (블로그도 있는데, 이상하게 크롬에서 멀웨어 경고가 뜨네요...)



이번 행사에서 진행된 자료는 링크 를 통해 다운로드 가능하니, 관심 있으신 분들은 보시면 좋을 것 같습니다 :)