IT/Computing | Posted by 철규님(최규철) 2011.05.03 21:48

[번역] How to Be a Successful Software Engineer

권정혁/구루(@xguru)님의 "구루의 기술 뉴스"에서 좋은 글이 소개되어 번역합니다.
잘못 번역된 내용이 “당연히” 있을 테니 원문을 꼭 참고해서 읽으세요. 번역 오류나 개선, 오타에 대한 피드백은 언제나 환영하고 감사드립니다. ^^


성공적인 소프트웨어 엔지니어가 되는 법
How to Be a Successful Software Engineer
Written by Daniel Huckstep on 16 NOV 2010
Translated by Gyucheol Choi on 03 MAY 2011
원문 보기
당신의 업무에 있어서 최고가 된다는 것에 대해서 정답은 없다. 어떤 사람은 재능을 타고나기도 하고, 다른 사람은 단지 그 일이 좋아서, 그 일을 더 잘하기 위해 자신의 시간을 기꺼이 투자하기도 한다.

당신의 현재 상태가 어떻든 상관없이, 항상 발전의 여지는 있다. 나는 내가 하고 있는 일-굉장한 소프트웨어를 개발하는 것-을 더 잘하기 위한 방법에 있어서 나를 도와줬던 것들에 대해서 이야기하려고 한다. 현실에서는 "소프트웨어 엔지니어"라는 단어를 당신의 업무 분야에 맞게 바꾼다면 대부분의 사항들이 여전히 유효할 것이다.

변명(?) : 큰 시스템 안에서 본다면, 나를 (아직은) '성공했다'라고 하진 않을지도 모른다. 하지만 나는 내 방식대로 잘 해가고 있다고 생각한다. 프로그래밍을 한지는 겨우 7년이 됐고 학교를 졸업한지도 2년이 지났지만, 나는 내 자신에 대한 확신이 있다. 나를 도와줬던 이러한 것들이 지금의 내가 있게 해줬고, 내 분야에 있어서 더 앞으로 더 높은 곳으로 나아갈 수 있도록 지금도 도와주고 있다.

다음의 내용들은 특별한 순서없이 나열한 것들이다...
배움을 멈추지 마라

학교를 더 이상 다니지 않는다고 해서 배움 또한 멈춘다는 것은 아니다. 꾸준히 배워야 한다. 새로운 기술이 나오고, 새롭게 생각하는 방법이 자리잡고 있으며, 새로운 문제들이 해결을 기다리고 있다. 발전없이 정체되거나 새로운 문제를 낡은 사고 방식으로 해결할 수는 없다. 때로는 그 방법이 통할수도 있고, 때로는 그것이 최선의 방법인 채로 남기도 하다. 하지만 많은 경우에 당신은 새로운 분야를 탐구해야 하고 진정으로 뛰어난 해결책을 찾기 위해 다른 관점에서 문제를 해결해야 한다.

배우는 방법에는 여러가지가 있다.
읽기
블로그, 잡지, 전문 출판물이나 저널, 책, 코드, 도식, 실험, 연구 등 그 무엇이든. 적절히 읽을 수 있을만큼 많이 읽어라. 또한 한두가지 형태로 제한해서도 안된다. 블로그만 읽어서도 안된다. ACM 간행물(소프트웨어 엔지니어링 분야라면)이나 당신이 일하는 분야의 전문 출판물을 구독하가. 실제 책 또한 읽어야 한다. 많은 소설이 읽혀지고 있고 블로그와 온라인 간행물이 넘쳐나고 있지만, 비소설 종이책은 그만큼의 인기는 없다. 당신의 분야에서 하나의 책을 골라서, 종이책(또는 킨들 eBook1)을 구매하라. 그리고 읽어라.
컨퍼런스
가능하다면 컨퍼런스에 참석하라. 때로는 이것이 매우 큰 일이고 비행기를 타고가서 호텔을 잡는 데 많은 돈이 들기도 하지만, 충분히 가치 있는 일이다. 나는 비록 아직 소프트웨어 관련 컨퍼런스에 가보지는 않았지만, 트위터나 슬라이드, 비디오, 또는 단지 참석한 사람들만 보고 판단해도 충분히 가치 있는 일이라고 말할 수 있다. 나는 슬라이드나 비디오 등을 확인하면서 많은 것을 배우는데, 실제로 참석한다면 더 많은 것을 배울 수(그리고 더 큰 재미를 얻을 수) 있다는 것은 추분히 납득할만 할 것이다.
전문 개발 세미나
전문 개발 세미나는 당신의 커리어를 향상시키고 업무를 더 잘할 수 있게 도와주기 위한 것이다. 개인적으로는 세미나들이 하루나 이틀 정도였지만, 몇 주가 되기도 하고 많은 돈이 들기도 한다. 당신의 고용주가 도움을 줄 수 있는지 확인해보라. 왜냐하면 결국에는 그것은 그들에게도 이익이 되기 때문이다.
다른 사람으로부터 배워라
몇몇 주요 내용으로 분류해봤다.
비평을 듣고 피드백을 줘라.
누군가가 당신의 코드, 디자인, 솔루션 등 무엇이든지에 관해서 언급한다면, 그것들을 듣는 것은 당신에게 가장 흥미로운 일일 것이다. 그들이 말한대로 해야된다는 것을 의미하는 것이 아니라 최소한의 그들이 말하는 것을 들어보고 무엇을 말하고자 하는지를 알아내야 한다는 것이다. 그들은 문제나 당신의 솔류션을 전혀 다른 시각에서 보기 대문에 그들의 생각이 전적으로 옳을때도 있다. 그들은 나름의 관점을 가지고 있고, 다른 것들에 대해서 생각하고 당신이 보지 못한 문제를 찾아낼 수도 있다.
유사한 문제에 솔루션을 시험해 보라.
새로운 소스 컨트롤 시스템을 만들기로 결정했다고 해보자. 아마 이것을 하려는 납득할 만한 이유는 많을 것이다. 하지만 기존의 소프트웨어가 그 문제를 해결하기 위해서 어떻데 동작하는지를 테스트 해보지 않는 것은 멍청한 짓이다. git, mercirial, svn에 대해서 알아보라. merge conflict, repository 제공, 그리고 이러한 것들을 빠르게 동작하게 하는 것에 있어서 기존의 프로그래미 어떻게 지원하는지 살펴보라. 기존의 솔루션을 테스트하는 것으로부터 많은 것을 배울 수 있다.
가르쳐라

인용구를 찾을 수가 없는데, 다른 사람에게 어떤 것을 가르칠 수 있기 전까지는 그것을 제대로 이해한 것이 이나라는 것과 유사한 말이다. 그러므로 가르쳐보라!

당신이 어떤 것을 매우 좋아한다면 다른 사람이 그것을 배울 수 있게 도와줘라. 당신이 가진 지식을 전달해서 다른 사람이 문제를 해결하고 새로운 문제에 새로운 기술을 적용하는 것을 도와줘라. 가르치는 것은 user group, meetup, 컨퍼런스 등에서 의견을 내놓는 형태일 수도 있고, codelesson과 같은 사이트에서 정식 클래스를 운영하는 형태일 수도 있으며, (Github에서 제공하는 것과 같은) 협업 트레이닝을 하는 형태, 심지어는 당신이 작성한 코드의 일부를 협업자와 같이 리뷰하는 형태일 수도 있다.

어떤 형태를 택하든, 거기서 벗어나서 가르쳐라.
일을 사랑하고 관심이 가는 것에 대한 일을 해라
이 두 가지는 연관된 것이다. 세금 계산 소프트웨어를 싫어한다면 Intuit에서 일하면 안된다. 꽤나 간단하다. "근데 내 관심 분야에는 좋은 소프트웨어 회사가 없는걸요!"라고 말할 지도 모르겠다.

이직하라

당신의 일을 좋아하지 않는 다면, 즐길 수 있는 일을 찾을 수 있는 곳으로 이직하는 것을 배재하면 안된다. 일하러 갈 수가 없고, 하고 있는 일을 즐길 수 없다면, 당신의 하루는 너무나 우울할 것이고, 때문에 당신의 당신에게 주어진 일에 아무런 동기도 가질 수 없을 것이다.

이것을 고려해봐라: 당신이 MIPS 어셈블리 프로그래밍을 싫어하고 집에서 하려고 하지 않는다면, 매일 일하러 가고 거기서 일을 하는 것이 왜 납득이 될까?

당신이 좋아하는 것을 하라. 그리고 당신이 하는 것을 좋아하라. 이유가 없다.
일관성을 유지하라
당신이 행동하고 자신을 나타내는데 있어서 일관성은 중요한 것이라고 생각한다. 이것은 당신의 옷차림부터(Steave Jobs는 복장 일관성 종결자다) 코딩, 작문 스타일까지 많은 것을 포함한다.

예를 들면, 나의 아바타랑 약력은 어디에나 똑같다고 확실히 말할 수 있다. 내가 가입한 어떤 사이트든 만화처럼 그려진 내 사진을 볼 수 있을 것이고 내가 (글 쓸때 기준으로) "소프트웨어 엔지니어, 캐나다 앨버타 에드먼턴"이라고 적혀있는 것을 확인할 수 있을 것이다. 아미 지역을 적는 칸이 따로 있었으면 지역명을 적지는 않았을 것이지만, 어쨌든 기록해놓았다.

작문 스타일, 옷차림, 약력, 태도 그리고 연락처 등이 일관성을 유지하도록 신경써야 하는 모든 것 들이다. 연락을 위해서 이메일을 알려줬다면 그 이메일을 계속 사용해야 한다. 온라인 상에서 꾸준히 멋진 사람이었다면, 갑자기 불쑥 튀어나와 이상한 사람이 되어서는 안된다.
일관성을 유지하라. 사람들이 당신이 누군지를 기억하는데 도움이 될 것이다.
항상 컨택 가능한 상태를 유지하라
상자에 갇혀서 사는 것은 형편없는 짓이다. 당신의 경력에서 더 높은 위치로 가고싶다면(이것이 직위 상승을 의미하는 것은 아니다) 당신의 분야에서 다른 사람들과 소통하기를 원할 것이다. 명함에 이메일 주소나 전화번호를 기재하라. 웹콜을 위해서는 Skype를 사용하라. 이메일 공개를 원하지 않는다면 Wlfoo의 연락처폼을 이용하라. 왜 안하는가? Gmail과 그것이 제공하는 스팸 필터링 기능을 이용해라!

항상 컨택 가능한 상태인 것만으로도 당신은 자신을 가르치게도 할 수도 있고("저기요, 이거 어떻게 하신건가요?") 취업에 대한 기회를 얻을 수도 있도, 평론을 할 수도 있다. 우리가 언급한 모든 것들이 다 좋은 것들이다.
커뮤니티에서 활동하라

이 사람은 Why the Lucky Stiff이다. 그는 정말 멋쟁이다. 그는 루비 커뮤니티를 위해 아주 많은 일을 했는데 때문에 그가 인터넷에서 사라졌을 때 사람들은 그가 무엇을 하다가 그만뒀는지를 찾아내고 그가 참여했던 것들을 유지하는 일을 인계받기 위해 그들이 하던 일 조차 멈출 정도였다.

만약 그가 그냥 집에 머무르면서 그 자신을 위한 것들만 했다면, 멋쟁이까지 되지는 않았을 것이다.

멋진 코드를 가지고 있다면 사람들에게 보여줘라. 당신의 업무 분야에서 어떤 멋진 일을 했다면 다른 사람들에게 그것을 보여주고 어떻게 만들어냈는지를 가르쳐줘라.
재미로 일(코딩)을 연습하라
집에서는 코딩을 하지 않는다면, 잘못된 것이다. 시.간.이.없.어.요 따위는 헛소리는 하지마라. 시간은 있다. 단지 당신이 제대로 관리를 못할 뿐이다. Scott Hanselman은 두 아이가 있지만 여전히 프로그래밍을 한다. 당신이 하는 프로그래밍이 회사에서 하는 것이 전부이고, 정말 집에 와서는 프로그래밍을 하고 싶지 않다면, "일을 사랑하고 관심이 가는 것에 대한 일을 해라"라는 섹션을 참고해라.

이는 프로그래밍을 넘어서도 적용된다. 전기 엔지니어이면서 기타를 연주한다면 기타 엠프를 만들어라. 목수라면 아이들을 위해 투박한 스윙 세트를 만들어줘라.

집에서 하고 싶은 것을 하기만 하면 된다. 당신이 하고 싶은 것이 일로 하고 있는 것이라면, The Eagle과 같은 것을 만들고 쉬어라.
끝을 맺어라
Joel Spolsky가 한 말이다. Fog Creek Software의 채용 공고를 본 적이 있다면, 그들은 단지 두 가지 사항만을 고려한다는 것을 알 것이다: 영리함 그리고 일을 끝내는 능력. 만약 이 두 가지 조건을 만족시킨다면, 당신이 python/django 개발자이고, 그 회사에서는 Wasabi 기반 어플리케이션 분야에서 일할 사람을 필요로 한다고 하더라도 전혀 문제가 되지 않는다. 꽤나 빠르게 그들의 업무를 이애하고 따라 잡을 수 있을 것이다. 마치 다른 목공예점에 가는 것과 같다. "지난 번엔 가죽 손잡이가 달린 붉은색 망치를 사용하셨던 것 알고 있어요. 하지만 여기는 배드민턴 스타일 손잡이가 달린 푸른색 망치 밖에 없네요."라고 말하는 것처럼. 언어는 기본적으로 도구일 뿐이다. 그리고 당신이 머리가 좋다면 그로 인해 혼란스러울 일은 없을 것이다. 도구는 전혀 문제가 되지 않는다.
정리를 잘 하라

할일 목록을 사용하거나, 나아가서 GTD(Get Things Done) Pholosophy를 사용하라. 나는 GTD를 사용하려고 시도도 해보았고, 지금도 그런 것의 일부를 활용하고 있기도하지만, 난 내가 해야 할 일이나 어느 시점에 하고 싶은 일을 잊어버리지 않기 위해 그 일들을 Remember The Milk에 저장하고 있다. 이것은 일들을 당신의 머리에서 빼내서 항상 생각할 필요가 없는 곳으로 옮겨준다. 나는 내가 작업하고 있는 특정 소프트웨어 프로젝트의 특정 사안에 대한 관리를 위해 bug tracker를 사용하기도 한다.
손을 떼라
어떤 일을 끝까지 해내고 싶어하는 것을 이해하지만, 그것이 할 필요나 끝낼 가치가 없는 경우도 있다. 나는 Gravatar 처음 나왔을 때 Rails3 예제 프로그램으로 Gravatar와 똑같은 것을 만들고 싶었었다. 확정된 것은 아니었지만, 그냥 내가 괜찮겠다라고 생각했던 것이었다. 하지만 Rails3가 퇴출되면서, 다른 일로 샐 수 밖에 없었다. 그리고 이제는 더더욱 하기가 어려워졌다. 그 어플리케이션에 시간을 보낸 나는 시간을 낭비한 꼴이었고, 한동안은 Rails3에 대해서 생각도 하지 않았고, 내 블로그는 이미 '조롱거리3'이었다. 어떤 일이 당신의 할일 목록에 오랫동안 있다면(아마 갑자기 생각난 일일 것이다) 그것을 하는 대신에 그 일이 그 목록에 계속 있을 필요가 있는지를 생각해보라.

이는 당신이 벌써 시작했지만 흐지부지되고 있는 것에도 적용된다. 더 이상 흥미롭지 않거나 의미가 있는 것이 아니라면, 그 일을 접고 다른 신선하고 멋진 일을 하라.
비동기적이 되어라
조금 이상한 소리지만, 일단 이야기 하려고 한다.

todo list나 RSS 피드를 실질적으로 활용해라. 이메일과 같이 이것들인 비동기 시스템이다. 이베일을 보내고, 피드를 구독하고, 또 toto 아이템을 적어라. 그리곤 더 이상 너무 많이 신경쓰지 마라. 당연히, 다음날 이메일을 확인하거나, 침대에 가기 전에 피드를 읽으면 된다. 새로운 내용을 위해 웹사이트를 계속 확인하거나 Skype에 텍스트로 "John is typing..."을 치기 시작하면서 자리에 앉지 않아도 된다. 당신이 그것들을 처리할 시간을 지정할 수 있다. 생각이 날때 쓰고, 시간이 남들때 처리를 하면 된다. 머리에서 더 많이 뽑아내서 다른 시스템에 넣을 수록 좋다. 이를 통해 당신은 손에 주어진 일에만 집중할 수 있게 된다. 나중에 이메일을 처리하고 피드를 읽을 수 있는 시간이 있을때, 그때 그것에 집중하면 된다.

컴퓨터 관련 분야에서는 더 적용할 수 있는 것들이지만, 나에게는 정말 도움이 되었기 때문에 적어보았다.
Kindle을 사라

진심으로. 이 기기는 정말 멋지다. 읽기에는 너무 좋고, 다른 문서를 킨들로 보내서 읽기 쉽게 하기 위해 (전문 저널 스타일 형태의 PDF 폼으로 매우 멋지게) 변환할 수 있다. 베터리는 정말 오래 가고, Amazon의 책 모음도 훌륭하다. 책을 많이 읽는 다면 킨들이 필요하다. 단지 139달러이다.
Google Docs를 이용하라

모든 PDF 소백서, eBook, PDF 메뉴얼 등 내가 인터넷에서 (읽기용으로 또는 참고용으로) 찾은 모든 것은 Google Docs에 저장되어 있다. Google Docs는 훌륭한 오피스 툴 셋으로 모든 시스템에서 동일하게 동작하기 때문에 "아, Mac에 저장해놨는데 지금은 Windows를 사용하고 있네"와 같은 헛소리 신경 쓸 필요가 없다. 그냥 동작한다. 파일들은 Google의 서버에 안전하게 저장되어 있고(나는 이것이 매우 좋다고 생각하지만, Google의 시스템에 어떤 것을 저장한다는 것에 대해서는 생각이 다를 수도 있다), 완벽히 검색이 가능하다. 오피스 관련으로만 제한된 것도 아니다. 나는 PDF, 중요한 압축 파일, 그리고 정말 안전하게 저장되고 쉽게 접근할 수 있을 필요가 있는 모든 것들을 저장한다.
붐!
이제 끝! 이것들이 비밀의 전부이다. 물론 사실 이것이 비밀은 아니다. 하지만 나는 이점 들이 내가 소프트웨어 분야에서 좋은 성과를 낼 수 있도록 도와줬다고 생각한다. 아마도 이것들은 당신 또한 도와줄 수 있을 것이다.

댓글을 달아 주세요