All I Need To Know To Be A Better Programmer I Learned In Kindergarten라는 오래된 글이지만, 훌륭한 프로그래머가 되는 것은 먼 곳에, 어려운 곳에 있지만은 않다는 느낌을 받았습니다. 기본적인 내용들이지만, 그동안 바쁘다는 핑계로 잊었던 것들을 다시 생각해 보는 계기가 되었네요. 그리고 조금씩 먼저 실천해 가는 개발자만이 훌륭한 프로그래머로 되지 않을까요? 생각해 보면서 정리해 봅니다.
프로그래밍은 참으로 복잡한것이다. 그렇지만, 훌륭한 프로그래머가 되기 위해서 필요한 대부분의 것들은 우리가 어릴때 학교에서 배운 것과 크게 다르지 않다. 즉, 훌륭한 프로그래머는 어릴때 유치원에서 배운대로만 하면 된다는 이야기다.
아래의 리스트에 대한 영감은 Robert Fulghum의 All I Really Need to Know I Learned in Kindergarten라는 에세이에서 많이 왔다.
1. 모든 것을 공유해라.
가능하면 오픈 소스를 사용하고 할 수 있다면 기여까지(contribute) 해보자. 커뮤니티의 집단 지성은 몇몇 대기업의 제한된 비전(생각들)보다는 훨씬 좋다.
2. 공평하게 해라.
다른 기술들이나 프레임워크, 방법론, 그리고 의견들에 기회를 주자. 자신의 선택만(내 방법만) 잘 동작한다고 생각하면 안된다. 다른 대안들도 잘 동작할 수 있고 열린 마음으로 다른 것들을 알아가는 것도 좋다.
3. 사람을 공격하자 마라.
2번에서와 같이 사람들이 .net이나 Java, PHP를 사용하고 있다는 이유만으로 그들을 공격하지 말자. 때로는 그들이 당신이 생각하는것보다 훨씬 사용성이 좋고 더 유용할 수 있다. 당신이 그들을 공격하지 않는다면 당신은 그들로부터 더 많은 것을 배울 수 있다.
4. 내가 어질른것은 내가 정리하자.
잘 동작하는 코드를 배포할 수 있도록 노력하자. QA가 너의 모든 버그를 찾아준다고 생각하면 안된다. 자주 테스트하고 때로는 치밀하게 때로는 광범위하게 테스트 하자.
5. 내것이 아니면 가지지 말자.
자신이 사용하는 것의 라이센스를 따르자. 절대로 훔치는 것은 안된다. 그리고 나중에 몰랐다고 잡아때도 안된다.
6. 사람을 다치게 했다면 꼭 미안하다는 말을 하자.
코드 리뷰는 매우 좋은 것이지만, 거의 행해지지는 않는다. 당신보다 경험이 없는 프로그래머에게 가르쳐주는 것은 팀 전체에는 큰 도움이 된다. 사람들을 공개적으로 비난하는 것을 그만하자. 학습은 사람을 경시하는 것이 아니다. 때때로 사람들은 내말을 들어줄때도 있고 그렇지 않을때도 있다. 나 자신보다 못하다고 생각되는 사람으로부터 많은 것을 배울수도 있다.
7. 먹기 전에 손을 씻자.
코드를 작성하기 전에 대상을 잘 이해하도록 노력하자. 프로토타입을 만들고, Web상에서 예를 체트해 보자. 같은 일하는 동료와 이야기하거나 심지어 같이 노는 것도 좋다. 경험을 하지 않았거나 사용한적이 없는 것을 구축하는 것은 매우 힘들다. 결국 단서를 가지고 일을 시작하면 결과는 잘 마무리 될 것이다.
8. 사용이 끝나면 물을 내리자.
사용할 수 없는 물건을 바꾸거나 다시 작성, 리팩토링, 그냥 포기하는 것을 두려워하면 안된다. 때로는 의심스럽다면 던져버리는 것이 최고의 철학이다. 그리고 결코 자신의 코드와 사랑에 빠지면 안된다.
9. 따뜻한 쿠키와 찬 우유는 건강에 좋다.
물론 프로그래머는 자신의 업무 환경이 좋아야 한다. 좋은 의자, 조용한 환경, 최신 PC에, 더 좋고 더 쉬운 코드를 만들수 있는 도구가 필수적이다. 관리자는 프로그래머에게 떨어지는 것을 지켜주는 우산 역할을 하는 것이다. 프로그래머라면 저급한 노예의 삶을 거부하자. 만약 고용주가 너를 하찮게 취급한다면, 다른 더 좋은 회사를 찾아라.
10. 균형된 삻을 살자 - 매일 조금씩 배우고, 생각하고, 그리고 칠하고, 노래하고, 춤추고, 놀고, 일하자.
나는 자신이 가치 있다고 생각하면 뭐든지 20%의 시간을 투자할 수 있는 Google의 20%룰을 좋아한다. 고용주들은 별도로 낮잠을 자는 룸이나 게임룸이나 긴장을 풀어주는 환경을 준비해야 한다. 프로그래밍은 정신적으로 매우 힘든일이다. 때때로 우리의 뇌를 쉽게해주는 것이 필요하다. 일상적인 주 80시간 노동은 당신이 만든 제품을 품질을 파괴하기 때문에 거부하자.(자신을 녹초로도 만들수 있다)
11. 오후에는 꼭 낮잠을 자자.
하루 24시간 일하는 것은 전혀 생산적이지 않다. 휴식을 취하고, 집으로 가서 제대로 수면을 취하라. 나는 종종 고약한 문제를 집에 가는동안에 해결될 때가 있었다. 퇴근길 운전중에, 혹은 다음날 아침에 해결 방법이 떠올랐다.
12. 밖에 나갔을때는 차를 조심하고 손을 잡고 함께 건너자.
커뮤니티활동은 아주 중요하다. 블로그를 읽고, 새로운 언어와 프레임워크에 대해 배우자. 토론에 참여하고 다른 사람이 하고 있는 것을 보라. 일을 하는 것만으로는, 훌륭한 프로그래머가 될 수 없다. 독불장군이 된다면 당신은 결국 쓸모없게 된다.
13. 궁금한것은 알아보라. 스티로폼컵 속의 씨는 뿌리가 자라고, 식물이 자란다. 아무도 그것이 어떻게, 왜 그런지는 모른다. 하지만, 우리 모두는 그것과 같다.
매일 새롭고 멋진 것들이 프로그래밍과 기술 세계에 일어나고 있다. 알아 보자. 매혹될 것이다. 매일 새로운 어떤 것을 배우자. 그래서 너의 마음은 신선해지고 너의 선택은 넓어지고, 기술력이 업데이트 된다. 만약 프로그램이 지루하거나 재미없다고 생각한다면 새로운 일을 찾는 것이 좋다.
14. 금붕어와 햄스터, 생쥐, 스티로폼 컵속에 씨앗조차 모두 죽는다. 우리들도 죽는다.
코드도 오래되면 나빠지고 죽는다. 때로는 그것을 아주 묻어주거나 혹은 다시 작성해야 한다. 돈을 아낄려고 더러운 코드를 유지보수하는 것은 전쟁이다.
15. Dick와 Jane의 동화책을 기억하고 먼저 배운 말을 생각해 보자 - 가장 중요한 단어는 "보는 것"이다.
만약 시도하지 않으면 아무것도 배울 수가 없다. 내가 프로그래밍에서 배운 모든것은 새로운 것들을 시도하거나 노는데서 왔다. 매일 아침 나는 프로그래밍 세계에서 무엇이 이어나고 있는지를 알기 위해서 여러 사이트들을 읽었다. 나는 이것을 80년대 초부터 계속 진행하고 있다.(당시는 카탈로그와 잡지들만 읽을지만.)
봐라, 5세의 눈을 통해서 보면 프로그래밍은 이렇게 간단하다.