제 홈페이지의 모든 글은 anti-nhn license에 따릅니다.



내가 생각하는 좋은 개발자 되기.

가끔씩 어떻게 해야 좋은 개발자가 되냐는 질문을 받습니다. 저도 부족한 것이 많지만 제가 생각하는 것을 정리해보려고 합니다.

저는 개발자를 3단계로 구분합니다. 첫째는 그냥 초짜 단계입니다. 아무것도 모르고 열심히 공부할 때죠. 두 번째는 하래는 건 할 수 있다는 단계입니다. 정말 무지막지한 것을 시키지 않는 이상 적당히 하래는 것은 할 수 있고 자기가 생각하는 것도 적당히 만들 수는 있는 단계입니다. 세번째는 성능과 설계를 생각하는 단계입니다.

바보가 아닌 이상 개발을 꾸준히하면 두 번째 단계에는 도달합니다. 그냥 시간이 지나면 아이가 성인이 되는 것과 같습니다. 그리고 많은 수의 개발자들이 두 번째 단계에서 끝납니다. 더 나아가야할 필요가 없기 때문입니다. 하래는 건 다 할 수는 있으니까요. 특히 SI를 하게 되면 이 단계에서 영원히 벗어나지 못하는 일이 생깁니다. 제가 SI를 많이 해보진 않았지만 제가 본 SI하는 사람들 중에서는 두번째 단계를 벗어난 사람을 못 봤습니다.

두번째 단계에 있는 사람들은 주로 이론과 실제는 다르니까 해봐야 한다는 말을 합니다.
어디선가 TreeMap이 HashMap보다 빠르다고 주장하는 사람을 봤습니다. 해보니까 그렇더라였는데, 그 "해보니까"가 잘못되었었습니다. 성능에는 반드시 이유가 있습니다. 컴퓨터에서는 이론과 실제는 다르지 않습니다. 이론과 실제가 다른 것은 이론을 모르거나 잘못알고 있는 경우와 실제를 잘못 적용한 경우 밖에 없습니다. 테스트를 해보는 것은 자기가 이해한 것이 맞는 지 확인하는 용도여야 합니다.

SI 개발자 입장에서는 소프트웨어 튜닝이 필요가 없습니다. 

SI의 고객은 일반적으로 인건비는 아껴도 서버 사는 데는 돈을 아끼지 않는 사람들입니다. 성능이 안 나오면 더 좋은 서버를 사고 서버를 여러 대 사고 하는 식으로 해결해버립니다. 고객은 잘 모르니까 개발자가 "서버가 더 필요하다"고 하면 그런가 보다 하고 과감하게 지갑을 엽니다.

적당히 고객 구슬려서 고객돈으로 서버를 사게 하는 것과 자기가 고생해서 프로그램 수정하는 것 사이에서 별로 고민할 필요가 없습니다. 게다가 프로그램 수정했다가 잘 되던 거 안 되는 사태 발생하면 책임질 수도 없구요.

또 SI에서 만드는 것은 대부분 기업용이기 때문에 굉장한 부하를 유발하지도 않습니다. 동시 접속자가 많아야 몇 천 정도고 그 정도면 아주 예외적인 경우를 빼고는 뭔 짓을 해도 서버가 힘들어하지 않습니다.

그리고 SI는 한 번 만들고 나면 손 텁니다. 뒷일을 책임질 필요가 없기 때문에 설계를 생각할 필요가 없습니다. 대충 땜빵 코드로라도 돌아가게 하면 장땡입니다. 고객이 원하는 것도 딱 그 정도 수준이고요. 어떤 식으로 잘 해결했냐가 중요한 게 아니라 오늘은 몇 페이지 찍어냈냐가 중요한 거죠. 그래서 나중에는 renewal 보다는 재개발이 되는 겁니다.

두 번째 단계의 큰 함정 중 또 하나는 두 번째 단계에 있을 때는 자기가 두 번째 단계에 있다는 것을 인식하지 못합니다. 저도 몇 년 허우적거렸네요. 내가 허우적거렸다는 것을 나중에 알았습니다. 
디자인 패턴 열심히 공부하는데 뭔 소린지 하나도 모르겠더군요. iterator 패턴이 "집합체와 개별 원소 간의 분리"라는 걸 이해를 못했습니다. 그냥 list가지고 루프 돌면서 처리하면 되는 걸 왜 iterator 같은 거 만들어서 쓰지? 라고 생각했습니다. 
내가 OOP를 이해하고 있다고 착각해서 그런 거였습니다. 개발 경력 몇 년이 쌓이고 나서 head first java 같은 기초책을 봤습니다. 그걸 보고 내가 OOP를 제대로 이해하지 못하고 있었다는 것을 알았습니다. 그리고 디자인 패턴 책은 며칠 만에 다 봤습니다. 뭔소린지 이해가 가기 시작하더군요. effective java 1판 도 한 두달 동안 열심히 봤죠. 그리고 effective java 2nd edition은 침대에 누워서 몇 시간만에 다 봤습니다.


소프트웨어 개발이 창의적인 직업이라는 데에 저는 동의하지 않습니다. 
개발자가 겪게 되는 대부분의 문제는 다른 개발자가 겪었던 문제들이고 좋은 답을 만들어 놓은 경우가 대부분입니다. 창의성보다는 잘 모르겠으면 끈질기게 알 때까지 물고 늘어지는 습성이 훨씬 중요한 거 같습니다.
컴퓨터는 개발자가 창의적으로 생각해낸 답과 다른 개발자가 해 놓은 거 가져온 것을 구분하지 않습니다. "내가 생각해냈다" 는 건 별로 의미 없습니다. 다만 남이 생각한 것을 제대로 이해하지 못하면 제대로 된 코드를 짤 수 없습니다. 만병 통치약같은 것은 없습니다. 내가 직면한 문제가 무엇인지 정확히 알아야 정확한 해법을 쓸 수 있는 것입니다. 의사가 환자를 치료하려면 환자가 걸린 병이 무엇이고 어떤 약이 어떤 효과가 있는 지를 알아야 하는 것과 마찬가집니다. 환자를 앉혀 놓고 자신의 창의성을 발휘해 보며 실험해보면 안 됩니다.

세상 사가 다 그렇겠지만 개발자는 아는 만큼 보입니다. java sdk 나 아파치 재단에서 배포한 프로그램들을 보면 "좋은 프로그램의 규칙" 같은 것이 있습니다. 코드 작성자의 개성같은 건 별로 없습니다. 일관성있고 그 규칙을 어느 정도만 알면 누가 만들었건 보기가 참 좋습니다.

정리.
1. OOP를 제대로 이해해라!
2. 소프트웨어에서 성능 문제에는 다 이유가 있다. 이유를 알아내고 테스트는 자기가 이해한 것이 맞는지 확인하는 용도다.
3. 창의적이 되려고 하지말고 남들이 한 것을 보고 이해하려고 노력해라. 코드에 개성이 넘치면 누가 관리하겠는가!

by 삼실청년 | 2012/11/24 00:07 | 컴터질~ | 트랙백(2) | 핑백(1) | 덧글(36)

트랙백 주소 : http://iilii.egloos.com/tb/5697327
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from 황장군의 블로그 at 2013/08/21 23:27

제목 : 좋은 개발자가 된다는 것
3실 청년의 블로그에서 좋은 개발자 되기를 논한 글1)을 보고 새삼 솔직함의 신선함을 느껴, 핵심어를 몇 개 뽑아보았다. 모방하라 생각하라 확인하라 그리고 이 들에 대하여 나름으로 재해석해본다. 모방하라 Ctrl+C, Ctrl+P를 많이 활용하라는 이야기다. 개발자라는 직업은 창조적인 직업이 아니다. 오히려 모방을 주로 하는 직업이다. 직접 로직을 창안해서 코딩하려고 하지 말고 우선 찾아보라는 이야기다. 제품, 라이브러리, 샘플 코드 등 구글링......more

Tracked from at 2014/03/11 00:41

제목 : http://helenmccrory.org/
line4...more

Linked at To be a Good Dev.. at 2013/08/08 13:12

... er Posted: 2013/08/07 | Author: 황장군 | Filed under: Uncategorized |Leave a comment » http://iilii.egloos.com/5697327 Share this:TwitterFacebookGoogle +1Like this:Like Loading...Cancel reply Enter your ... more

Commented by 서나 at 2012/11/26 09:16
음... 일한지 1년째..갈팡질팡하고있었는데.. 잡아주셔서 감사합니다..
Commented by 삼실청년 at 2012/12/07 00:13
최신 기술이니 이런 거에 흔들리지 마시고 기초를 굳건히 하시는 게 제일 중요합니다.
최신 기술 같은 거 입에 담는 사람 중 그걸 제대로 이해하는 사람은 생각보다 별로 없습니다. java 한다는 사람 중 상당수는 java.lang.Object가 왜 있는지 이해하지 못하는 것과 같습니다.
그리고 대부분의 최신 기술은 기초를 이해하지 못하면 제대로 이해할 수 없습니다.
좋은 개발자가 되시길 빌겠습니다.
Commented by 라온수리 at 2012/11/26 12:55
정말 좋은 글 감사드립니다 "창의성보다는 잘 모르겠으면 끈질기게 알 때까지 물고 늘어지는 습성" 가슴 깊게 새겨두면서 힘들어도 끈질기게 알아내는 근성의 프로그래머가 되어야 겠다고 다짐하게 됩니다.
OOP 어느정도 이해했다고 생각했는데 볼때마다 뭐징? 하는 생각이 계속드네요 이해가 될때까지 백번이고 천번이고 계속찾아보고 공부 해야겠습니다.
Commented by 삼실청년 at 2012/12/07 00:18
매일 당장 오늘 급한 일이 있지만 돌이켜 생각해보면 뭐가 급했는지 기억도 나지 않습니다. "급하진 않지만 중요한 일"을 꾸준히 하시기 바랍니다. 그게 결국 차이를 만들어내는 것 같습니다.
Commented by 여리 at 2012/12/15 01:19
안녕하세요? 오랜만이내요. 기억을 하실지 모르겠내요. 예전에 면접차 한번 뵈었었죠.
지금은 테스터에서 개발자로 돌아와 나름 공부하고 일도 하고 있내요. SI 쪽일을 하는데 장,단점이 있내요. ㅎ
암튼 예전에 해주셨던 얘기들 잊지 않고 꾸준히 노력하고 있내요. 그때의 만남이 저에게 참 기억에 남고 도움이 많이 되었습니다. 이제서야 고맙다고 말해드리내요.
즐거운 연말 보내시고, 더 즐거운 새해 맞으셔요.
윤열 드림 ^^
Commented by 삼실청년 at 2012/12/18 02:49
안녕하세요. 후로 연락이 없으셔서 어찌 사시나 궁금했습니다.
꾸준히 노력하고 계시다니 다행입니다. 제가 뭐라도 도와드릴 일 있으면 연락주세요.
잊지 않고 인사 전해주셔서 감사합니다. 윤열님도 행복한 한해 되시길 빕니다.
Commented by 이양 at 2012/12/19 10:59
좋은글 잘보다가요
Commented by 삼실청년 at 2013/05/06 05:46
잘 보고 가신지 몇 달 지나셨군요. 버려진 이곳..ㅜㅜ
Commented by 용식 at 2012/12/21 17:48
오랜만에 댓글을 적습니다. ^^
내용 정말 공감합니다. 저도 개발자 6년차에 말씀하셨던 헤드퍼스트자바, 이펙티브 자바등을 처음부터 다시 몇번씩 읽었었습니다. 디자인패턴 책도 그 후에 다시보니 그제서야 조금 이해가 되기 시작하더라구요..
기초가 제일 중요하다는거... 정말 공감하고 갑니다.

즐거운 연말.. 행복한 새해 맞이하시기를 바랄게요. :)
Commented by 삼실청년 at 2013/05/06 05:48
즐거운...연말이...라니요.. 지금은 즐거운 년중입니다. 새해가 벌써 반 가까이 지나가고 있네요. 용식님도 좋은 일 왕창일어나는 한해가 되고 있으시길 바래요..... (아.. 시기를 놓치니 인사도 뻘쭘해지네요..ㅋㅋ)
Commented by UnlimitedJ at 2013/06/05 17:35
좋은 글 잘 보았습니다.
철학이 있는 개발자로 사시는 것 같아 퍽 좋습니다.
저 또한 개발의 일에 욕심이 많다고 해야할까요?
개발의 삶이 즐겁고 신난다고 해야할까요?
개발의 삶에 자부심을 가지고 그렇게 끝까지 가는 삶이길 꿈꾸는 한 사람입니다.
Singleton 찾다가 좋은 곳 발견하게 되서 기쁩니다.
종종 들려서 배우고 가겠습니다.


Commented by 삼실청년 at 2013/07/07 06:57
배울 게 많이 있을 지 모르겠습니다. 원체 업뎃도 잘 안하는 지라..
뭐라도 도움이 되셨길 바래요..^^
Commented by Teddy at 2013/12/23 14:54
5년차 개발자 입니다... 정말 많은 것을 느끼고 배워갑니다...
감사합니다 :-)
Commented by 삼실청년 at 2014/01/24 00:38
제가 오래전에 써놓고 지금보니.. 참.. 주제넘는 글을 쓴 거 같네요..

SI 개발자를 욕하려고 쓴 건 아니데, SI하시는 분들이 보시면 기분 나쁠 수도 있겠단 생각이 드네요. 제가 SI에 대해서 하고 싶었던 얘기는 "SI는 결코 개발자가 성장할 수 있는 환경을 만들어주지 않는다" 였습니다.

찾아주셔서 감사합니다.^^
Commented at 2014/01/03 12:01
비공개 덧글입니다.
Commented by 삼실청년 at 2014/01/24 00:42
저도 그런 한심한 개발자이고, 한심한 실력으로 밥 벌어먹었고 스스로 놀라워했습니다.

제 경험으로는 주변에 자극을 줄 수 있는 사람을 두면 그래도 좀 성장하는데 도움이 되는 것 같아요.

엄마가 "공부 잘하는 애들이랑 놀아~"라고 한 이유를 나이드니 알겠더군요^^.
Commented by 케이티 at 2014/02/14 17:19
개발한지 얼마 되지 않은 저에게도 시사하는 바가 크네요.
좋은 글 잘 읽었습니다 :^)
Commented by 삼실청년 at 2014/05/09 14:08
일단은 좀 뜬 구름 잡는 수준의 얘기인지라 좀 더 구체적인 걸 다시 정리해보려고 합니다.
도움이 되셨길 바래요.
Commented by 앰이짱 at 2014/03/27 17:43
디자인패턴 찾아보다가 우연히 글 발견하고 이 글까지 읽게 되었는데요~
진심 도움 많이 되는 글이였습니다..
전 SI업무 삼년 좀 넘게 했었고 현재 이직준비중인데요,
님이 윗글에 언급하셨던 것처럼
저 또한 반추하여 생각해보면 그저 급하게만, 신기술만, 기본기도 다지지 않은채 일만 했던 것 같아
지금 이직준비중일 때 기본기를 다지는 면서 어느분야가 저에게 맞는 지 다시금 찾은 느낌 입니다.
앞으로도 이런 좋은 글 선배차원에서 기고해주셨으면 합니다. 감사합니다!
Commented by 삼실청년 at 2014/05/09 14:10
네네. 인제 쫌 써볼께요. 더 이상 유령의 집으로 방치하지 않아볼라구요.
Commented by nope0102 at 2014/04/22 10:34
컴퓨터에서는 이론과 실제는 다르지 않습니다. 이론과 실제가 다른 것은 이론을 모르거나 잘못알고 있는 경우와 실제를 잘못 적용한 경우 밖에 없습니다.

본문의 이 구절이 너무 인상적입니다. 잘보고 갑니다.
Commented by 삼실청년 at 2014/05/09 14:11
저는 그걸 깨닫는데 몇 년 걸렸네요. 도움이 되셨길 바래요!
Commented by 슈파더 at 2014/05/09 10:06
우연히 둘러보다가 좋은 글 읽었네요. 보고 느낀점이 많습니다. 감사합니다~
Commented by 삼실청년 at 2014/05/09 14:13
막 도움이 되셨길 바래요!
Commented by 착한개발자 at 2014/05/13 12:34
SI로 자바 3년차 개발자 입니다.
(현재 SI 때려 치고 게임 회사 인턴으로 있습니다.)

삼실청년님이 말씀하신 두번째 단계 개발자의 정의라고 해야 할까 이글을 보니 SI에서 일하던
제 모습이 보입니다.
이론 무시하고 실전, 말로 설명할줄 아는것보다 구현하는것이 더 잘하는거라고 착각을 하고 있던
부끄러운 제 모습을 말하는것 같네요... ㅎㅎ

현재 게임 회사에서 프로그램 교육 받고 있는데 아무것도 아는게 없습니다.
기초 지식을 쌓을 생각 안하고 기술, 구현에만 집중했던 시간,
SI에서 배운 나쁜 버릇과 습관들이 너무 후회가 됩니다.

지금 부터 미친듯이 노력은 하고 있는데 언제 깨닳음을 받을지가....
또 잘할수 있을지가 걱정이네요.

하지만 삼식청년님 프로그래밍 기술에 딴지를 걸수 있게 노력을 하겠습니다. ㅎㅎ
언제가 될지는 모르지만... ㅎㅎ

암튼 좋은글 잘봤습니다.
수고하세요~
Commented by 삼실청년 at 2014/05/16 15:50
"삽질"도 경험이 되는 것 같긴 합니다. 돌파구를 찾지 못했을 때는 도움이 안 되지만, 돌파구를 찾았을 때는 빠져나가는데 원동력이 되는 것 같습니다. 나가지 않으면 무슨 일이 벌어지는 지 정말 명확히 알거든요.

무슨 문제든 해결하는데 가장 중요한 것은 명확한 문제인식이라고 생각합니다. 잘하실 거에요! 화이팅~!!
Commented by JJ at 2014/07/03 17:59
예전부터 삼실청년님 블로그를 자주 오던 사람입니다~
특히 디자인패턴 설명이... 제가 본 어떤 것보다
쉽고 이해하기 편하도록 되어 있어서 주변에도 알려주고 그랬습니다. ^^

전 개발한지는 5년이 넘었는데,
말씀하신 단계에서 어디에 있는지 애매하네요.
작년부터는 단순 개발도 개발이지만,
설계와 성능에 대해서 많이 생각하게 되었는데
막상 개발에 그 생각이 스며드는지 불확실하네요..^^;

이제 좋은 글도 올려주신다고 하셨으니
자주 오도록 하겠습니다!
Commented by 삼실청년 at 2014/07/09 17:15
넹 감사합니다^^
Commented by warrenth at 2014/07/22 17:53
개발 막바지 4년차입니다.
디자인패턴보다가 여기까지 오게되었네요.
진심으로 상당히 좋은 글들이 많습니다.

디자인패턴은 리펙토링에도 도움이 많이 되었던 것 같습니다.

감사합니다.
Commented by 삼실청년 at 2014/08/12 17:14
넹넹~~ 마구마구 도움이 되셨길 바래요!!
Commented by jieun at 2014/08/06 14:38
안녕하세요. 저는 개발5년차입니다.
블로그에 좋은 내용들이 많이 있네요.
자기가 아는것을 남에게 가르치는것은 굉장한 노하우인데,,
작성하신 글만 보더라도 정리가 잘되어 내공이 만랩 이상이신 것 같습니다.
개발이 좋아서 시작했지만 요즘 슬럼프에 빠졌다가 정신 차리고 다시 공부를 시작하려합니다.
늦었지만 실력과 사고를 겸비한 개발자가 되기 위해 지금부터라도 열심히 해서 해볼랍니다.
종종 오겠습니다.
Commented by 삼실청년 at 2014/08/12 17:17
열심히 공부하셔서 훌륭한 개발자가 되시길 바래요^^
Commented by Kae at 2014/08/09 16:59
안녕하세요! 2년차 반년쯤온 신인 개발자 입니다.
회사에 있는 아키텍쳐분 덕에 디자인패턴에 대해 공부하고 있는데 어느새 보니 항상 이 블로그에서 글을 읽게 되는 것 같아
감사의 말이라도 남겨야 겟다 라고 생각해 글을 남겨 봅니다.
이제 2년차인데다 애초에 코딩에 능숙하지 않아 항상 고민엿지만, 개발자가 되고 코딩에 재미를 느끼고 있는 중입니다.
전 아직 1단계에 머물고 있는 것 같지만 항상 3단계에서 일을 하시는 분을 보고있으니 나도 어서 저런 레벨이 되어야 겟단 생각이 많습니다.
디자인 패턴 말고도 여러가지 공부하러 자주 오겠습니다.

항상 좋은 글 읽게 해주셔서 감사합니다. ^^
Commented by 삼실청년 at 2014/08/12 17:22
조금이라도 도움이 되었길 바래요~
Commented by 식빵남아 at 2016/01/21 00:02
구글에서 싱글톤 기법 찾으러 들어왔다가 보물같은 이글루를 만났네요.
생각이 트이는 글 감사드립니다.
Commented by 서경아빠 at 2016/04/08 16:54
내가 생각하는 좋은 '****'되기...

개발자가 아닌 사람이 봐도 세상 이치에 맞는 말입니다
어떤 직업군이던 10년 혹은 1만시간을 훌쩍 넘긴 업력이
정상적인 정신상태에서 쌓여있다면
공감을 격하게 할 수 있는 글이라 생각합니다

제가 다른 직업에서 느낀 불혹의 깨달음은.. 역시
Back to the Basic 입니다
영화 대사 처럼 진실은 항상 가까이 있는 법이죠
진실을 가까이 두고 자꾸만 더 깊이 더 깊이 파고들려하는
우리네 모습에 지쳐가던 작금이네요

기본에 충실한 업자가 되어야 겠네요

기본이 중요한걸 알았는데...
즉.. 기본은 이제 보이는데,
반대로 못보던 나머지 상황이 자명해 버리는 상황이라면요...
그 나머지 몰랐던 삶의 함정이 보일땐 어떻게 하시나요..??

즉, 좋은 3단계 개발자가 된 자신을 발견한 상태에서
업계에서 비록 개발은 못하지만 훌륭한 설계자들이게 주눅이 든다던가,
3단계 까지 오는 동안 너무 생각없이 달려온 나머지...
힘이 빠져 버린 경우는 어떻게 해야 할까요...??

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶