Thoughts2009.06.16 17:42

개발자는 어떻게 성장하는 걸까요? 대략 주변에서 보고 들은 걸 종합해 보자면...

1. 프로그래밍 언어의 시기

프로그래밍 언어를 죽자고 배우는 시기. 아직 매뉴얼이나 참고서 없이는 한 줄의 코드 짜기가 버겁다.

2. 초보 개발자의 시기

프로그래밍 언어 한 두개를 능숙하게 쓸 줄 아는 시기. 매뉴얼이나 참고서도 구글로 대신하는 수준. 하지만 본인이 제대로 된 코드를 작성하고 있는지는 장담을 못한다

3. 중급 개발자의 시기

진정한 개발이 무엇인지를 고민하는 시기. 왜 프로젝트 막바지에 더 바쁜지를 고민한다거나, 어떻게 하면 버그의 수를 획기적으로 줄일 수 있을지를 고민한다거나, 가장 최적의 클래스 설계는 어떤 모습일지를 고민한다거나 하는 개발자가 이에 해당. 그에 따라 읽는 책도 많아진다. 어떤 한 가지 믿음에 경도되기 쉬운 시기이기도 하다. 이 시기의 개발자가 가장 꼬장꼬장하다. 하지만 아직도 performance profiling에는 게으르다.

4. 고급 개발자의 시기

남을 가르치거나 홀릴 줄 알게 된 시기. 문제가 주어지면 기존 해법을 Survey하고 좀 더 나은 해결책이 무엇일지를 고민할 줄 알게 된 시기. 필드에서 자주 발견하는 문제에 대해서는 꿰고 있는 해결책도 두어가지 되는 수준. 버그가 나타나면 디버거 대신 머리를 굴려 발견하는 경지이나, 정작 코딩을 하는 시간은 점점 줄어든다. 어떻게 하면 좀 더 적은 코드로 좀 더 많은 일을 할 수 있을지를 항상 고민한다. 테스트와 코딩, 그리고 결과물의 배치 문제 뿐 만 아니라 최적화의 문제에도 항상 관심을 갖는다. 프로그래밍 언어는 이제 더 이상 주된 관심사가 아니다. 가끔은 그토록 찾아 해메던 문제의 답을 먼지를 뒤집어쓴 대학 교재 안에서 발견하고는 절망하기도 한다. 그 책의 이름은...

5. 초고급 개발자의 시기 (추가)

이 쯤 되면 이 개발자는 (1) 자기 회사를 차렸거나 (2) 끝내주는 회사에 다니고 있거나 (3) 책을 썼거나 (4) 좋은 논문을 썼거나 (5) 멋진 공개 소프트웨어를 작성했거나... 어쨌든 '세상에 뭔가 보탬이 되는 일'을 하고 있다. 고급 개발자와 초고급 개발자를 나누는 가장 결정적인 기준은, 좀 어이 없긴 하지만, 바로 그것이다. '세상에 뭔가 보탬이 되는 일을 하고 있느냐' 하는 것. 고급 개발자들은 먹고 살기 위해 코딩을 하지만, 초고급 개발자들은 세상을 보다 낫게 바꾸기 위해 코딩을 한다. 그렇기 때문에 그들이 하는 코딩은 본질적으로 자발적이며, 그들 내면의 충동으로부터 발원하는 것이다. 이런 사람들이 모이는 회사라면 분명 끝내주는 회사일 것이고, 이런 사람이 차린 회사라면 설사 성공하진 못하더라도 끝내주는 회사일 것이다. 이런 사람들이 만드는 SW나 논문도, 분명 끝내 줄 것이다.

보통 우리는 이런 사람들의 의식 깊은 곳에 자리한, 그들의 개발을 추동하는 내적 원리를
'프로그래밍의 도'라고 부른다.

프로그래밍의 도를 깨칠수 없다고 할지라도 절망하지는 말자.
세상의 모든 도는 그 본류가 하나로 이어져 있다.
세상에 좋은 일을 할 수 있는 기회는 의외로 다양하다는 뜻.
프로그래밍이 버겁게 느껴지고 때로 망망대해같은 코드의 심연에서 외로움을 느낀다면,
지금 당장 자선단체의 번호를 눌러 단돈 만원이라도 기부를 하도록 하자.
그 작은 행위가 여러분의 프로그래밍에 기쁨을 되찾아 줄 것이다.

좋은 프로그래머가 되면, 초고급 개발자가 될 확률도 덩달아 높아진다.

- - -

몇 줄 요약:

개발자의 경력이 늘어가면 갈수록, 개발자는 코딩 그 자체에서는 자유로와진다.
정작 중요한 것은 코딩이 아니라 Domain Knowledge라는 사실을 깨닫는다.
그러면서 '자신을 키운 것은 99%가 삽질'이었다는 사실을 서서히 잊는다.
왜냐하면, 이미 그는 삽질과 하나가 되었기 때문이다.

여러분은 지금 어디에?

신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

  1. 재미있습니다 ^^

    2009.06.16 20:48 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. 전 2번과 1번 중간 사이에 있는듯... 삽질좀 해봐야 아 코딩이란 이거구나! 하는거죠 ㅋㅋㅋ

    2009.06.18 16:50 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. SubiLee

    경지에 다다르셨기 때문에 글을 적으실 수 있으셨겠죠?? ^^ 전 언제 고급이 되려나 하하

    열심히 노력하고 있습니다!

    2009.06.19 10:48 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 그런건 아닙니다. 프로그래밍을 하면 할 수록, '프로그래밍 전문가'가 되는 것이 애초의 제 목표는 아니지 않았을까 하는 생각이 들더군요.

      프로그래밍은 도구입니다. 사진기가 사진을 찍는 도구이듯, 프로그래밍은 SW를 만드는 도구입니다. 사진기가 몸에 익어 자기 수족처럼 부릴 수 있기 전에는 좋은 사진을 얻기가 어렵습니다. 프로그래밍에도 비슷한 구석이 있어서, 프로그래밍이 손에 익어 사고 체계의 일부분이 되기 전에는 기한 내에 좋은 SW를 만들어 내기 어렵습니다.

      제가 하고 싶은 이야기는, 삽질은 결국 도구를 몸에 익히는 과정이고, 우리가 지향해야 할 것은 삽질 너머에 있다는 이야기입니다.

      그래서 Domain Knowledge가 중요하다는 것이구요. ^^

      2009.06.19 21:57 신고 [ ADDR : EDIT/ DEL ]
  4. 삽질과 하나가 되었다. 멋진 말입니다. 나를 키운 건 팔할이 삽질이다.

    2009.06.19 11:05 신고 [ ADDR : EDIT/ DEL : REPLY ]
  5. 삽질과 하나된다는말이 참 와닿습니다 ㅎㅎㅎ

    2009.06.23 00:37 신고 [ ADDR : EDIT/ DEL : REPLY ]
  6. duru

    이 표현 쥑이네요..
    남을 홀릴 줄 알게 된 시기..

    이 표현대로라면 초고급 개발자는
    굳이 홀리려고 하지 않아도 많은 사람들이 굳이(?) 홀리는 시기...

    세상만사, any domain, 다 똑 같은 거 같습니다.
    연애를 이렇게 해봤으면,,, 갑자기 내 안의 새디스트지랄로지가 발작을...ㅋㅋ

    2009.07.14 16:25 신고 [ ADDR : EDIT/ DEL : REPLY ]