프로그래머로 사는 법

2020. 7. 26. 09:01책, 1년에 100권

반응형

지역 도서관에는 기술 서적이 많이 없다. 그렇지만 혹시나 싶어서 코딩, 소프트웨어, 프로그래머로 검색을 해봤더니 몇권이 나왔는데 그 중에 첫번째로 고른 책이다. 네이버에서 검색해보니 평점도 좋다. 


읽어보니 프로그래머의 기술적인 능력을 쌓을 수 있는 내용보다는 기술 외적인 부분에서 능력을 올릴 수 있는 방법 혹은 자세 등에 대해서 중점 적으로 다루고 있었다. 시간 관리법, 리더쉽을 발휘하는 방법, 경력 쌓는 법, 직장 구하는 방법, 스타트업과 관련한 내용 등. 


저자는 샘 라이트스톤이다. IBM에서 소프트웨어 수석연구원 및 프로그램 디렉터로 일하고 있는 사람이다. 책은 2012년 한글로 초판 발행된 것이다. 600페이지가 넘는 분량으로 나에게는 도움이 되는 정보도 있고 별로 관심 없는 부분도 있었지만, 프로그래머라면 한번쯤 읽어볼만하다고 생각된다.  


이 책을 한마디로 줄인다면 아마도 "자기가 진정으로 사랑하는 일, 즐겁게 할 수 있는 일을 하라. 그리고 그것을 즐겨라" 인것 같다. 


다음 책으로는 좀더 소프트웨어 특히 모발일 앱 개발에서의 기술적인 부분, 방법적인 부분을 다룬 것을 보고싶다. 컴퓨터의 동작이나, 컴파일러에 대한 것도. 




   책 내용 중 남기고 싶은 것


커리어상의 중요한 결정을 내릴 때는 자신의 이성은 물론 감성에도 귀를 귀울여야 합니다. 이성은 전통적인 관점에서 성공하는 방법을 가르쳐 줍니다. 감성은 자신에게 만족감을 주는 것, 자신이 재미있다고 느끼는 것을 알려줍니다. 일할 때 시간이 얼마나 빨리 가는지 생각해보세요. 하는 일에 푹 빠져들 수 있다면, 즉 시간이 빠르게 간다면 매우 긍정적인 신호로 볼 수 있습니다.


상용 제품은 항상 기존 고객과 신규 고객 양쪽에 모두 초점을 맞추어야만 한다. 초창기에는 새로운 고객 쪽에 조금 더 초점을 맞추고, 시장 점유율이 자리를 잡으면서부터는 기존 고객으로 초점을 어느 정도 이동시키는 식으로 하면 자기 커리어를 성장시키는데 조움이 될것이다. 


스티브 잡스는,  "많은 경우에 사람들은 물건을 직접 보여주기 전까지는 자기가 무엇을 원하는지 모른다". 

헨리 포드는, "내가 고객의 의견에 귀를 기울였다면 더 빠른 말을 시장에 공급해야 했을 것이다"라고 했다. 


디버깅 할때 첫 단계로 디버거를 띄우고 싶은 욕망을 억제해 보자. 디버거는 강력하지만 효율적이진 않은 도구이기 때문에 최후의 방법으로 남겨두는게 좋다. 디버거를 띄우고 싶은 감정을 억누르는 효과적인 방법으로 두가지를 들 수 있다. 하나는 자기 확인형 코드와 계약에 의한 설계 같은 방법이고 다른 하나는 코드 점검이다. 


자기 확인형 코드와 계약에 의한 설계

Assertion을 이용하면 코드에서 상태 데이터, 입력 및 출력 변수의 범위, 중간결과 및 리턴 코드같이 코드의 여러 조건이 정상적인 범위 안에 있는 지확인 함으로써 코드 내에서 스스로 테스트 작업을 할 수 있다. 프로그램 실행시에 자체 확인이 가능하다. 

계약에 의한 설계(Design by contract)는 모든 함수와 메서드 마다 입력과 기대되는 출력을 정의하는 규격 또는 서명이 있다는 점에 바탕을 둔 방법이다. 따라서 메서드에 들어오는 입력값과 메서드에서 반환되는 출력 값이 함수의 해당 계약(규격)에 맞는지 엄밀하게 점검하는 확인 구문을 집어 넣으면 된다. 


코드 점검 및 코드 검토

어떤 사람이 직접 소스 코드를 일일이 검토하게 하는 방식은 결점을 잡아내는데 있어서 가장 효율적인 방법이다. 


조직 내에서 자신이 하는 일을 사람들에게 꾸준히 알려주자. 기술적인 관점에서 볼때는 일이 겹치거나 같은 일을 두번 하는 경우를 막기 위해 알아야할 필요가 있다. 자기 경력 면에서 보자면, 무슨일을 했는지 남에게 알리지 않고는 인정 받을 수 없기 때문이다. 소통하라. 


앞이 안 보이는 사람들만 있는 방에서는 눈이 하나라도 있는 사람이 왕이다. 소프트웨어 개발자라고 하면 거의 항상 소통에 능하지 못한 사람이 떠오르기 마련인데, 조금 과장되어 있긴 하지만 완전히 틀린 말은 아니다. 특히 일대일 대면시의 소통에 능숙하다면 다른 많은 사람보다 우위를 선점할 수 있을 것이다. 


백 마디 말보다 그림 한장이 낫고, 백 장 그림보다 데모 하나가 낫다. 


내가 영향을 끼치거나 통제할 수 없는 것에 대해 고민하고 걱정하는데 드는 시간은 거의 항상 부정적인 에너지로 작용한다. 쓸데 없는 걱정에 시간을 써 버리고 마는 셈이다. 부정적인 감정을 만들어 낼 뿐만아니라 거기에 대해 내가 아무것도 할 수 없으므로 시간을 버리고 마는 것이다. 효과적으로 살아가는데 있어서 가장 핵심적인 전략 가운데 하나는 바로 개인적으로 통제할 수 있거나 적어도 내 행동으로 영향을 받을 수 있는 것들에 대해 더 민감하게 반응하고, 거기에 최대한 시간을 쏟아붓는 것이다. 


시간을 더 효율적으로 쓸 수 있따거나 잠을 줄일 수 있다는 가정은 금물이다. 


스트레스에 대처할 수 있는 가장 흔한 방법은 운동, 요가, 명상, 음악(감상보다는 연주) 등이 있다. 


목표 중심적인 프로젝트 관리에서는 구체성, 측정가능성, 달성 가능성, 현실성, 적시성, 이렇게 다섯가지 원칙의 머리글자를 따서 SMART 로 쓴다. 목표를 구체적으로 잡으면 팀 전체가 그 목표에 집중 할 수 있기 때문에 그 목표는 헤아릴수 없는 중요한 가치를 가지게 된다. 


소프트웨어 개발 방법론

반복 개발법(Iterative Development) : 소프트웨어를 기능 단계 단위로 개발하는 것을 강조. 한 단계에서 완벽하게 작동해야만 다음 단계로 넘어감. 문제를 조기 발견가능. 위험이 큰기능은 초반에 위험이 낮은 기느은 후반에 일정을 잡으므로써 시간에 쫓겨 급하게 처리하게 되는 단점을 해결 가능.

스크럼(Scrum) : 정기적으로 정해진 시간 동안 회의를 하며, 스크럼에서 정한 목표에 맞춰 몇 주 정도는 "스프린트"단위로 일을 진행. 협업을 강조/장려 하고 조기 피드백을 달성하고 속도를 유지하는데 있어서 효율적. 

애자일 개발 절차(Agile Development) : 반복 개발 모델을 제대로 된 소프트웨어 개발 방법으로 확정 시켜 놓은것. 일일 스크럼, 다부서 간 팀 구성, 매 반복 단위마다 완전한 시험 사이클 수행 등의 특징이 합쳐져 있음.

익스트림 프로그래밍(eXtreme programming) : 애자일 개발 절차의 변종으로, 짝 프로그래밍, 테스트 주도 개발, 현장 고객 요건, 설계 리팩토링, 철저한 코드 검토 등이 주로 강조됨

린 개발법(Lean Development) : 반복 개발법과 밀접하게 연관. "크게 생각하고, 작게 행동하고, 빨리 실패하면 신속하게 배울 수 있다"

폭포수 개발 절차(Waterfall Development Process) : 명세서, 설계, 코드, 단위 시험, 등 선형적으로 쭉 이어져서 진행되는 정통적인 개발 모델

래피드 프로토타이핑(Rapid Prototyping) : 강점과 약점을 미리 이해할 수 있도록 개념 검증용 프로토타입을 만들어야 한다는 아이디어를 바탕으로 만들어진 방법론


소프트웨어 결함을 조기에 발견하는데 있어서 가장 효과적인 방법은 역시 설계, 명세서 작성, 코드 검토다. 개발 기간 내내 지속해서 테스트를 할 수 있도록 반복 개발론을 활용하자. 테스트 조건을 강제로 지정할 수 있는 트레이스 지점, 확인 구문(Assertion), 프로그래밍 방식 후크를 충분히 집어 넣는다. 


여러 사람이 한 방향으로 나갈 수 있도록 의욕을 고취시키기 위해서는 목표, 일정, 시업상의 비전을 분명하고 설득력 있게 전달하는 능력이 필요하다. 


일을 시킬 때는 절대로 방법을 있는 대로 알려주지 않는게 좋다. 무엇을 할지만 알려주면 깜짝 놀랄 만한 독착성을 발휘하며 나를 놀라게 할지 모른다. 상당히 나쁜 아이디어를 들고 올대도 있다. 그럴때는 부족한 부분을 스스로 깨달을 수있도록 유도 질문을 던져서 직접 비판하지 않고 인지하도록 해야 한다. 


아이디어가 좋은 사람은 많다. 하지만 그 아이디어를 끝까지 밀어 붙일 수 있는 사람은 별로 많지 않다. 


 


   유명한 프로그래머들이 애용하는 웹사이트


http://techme.com

http://slashdot.org

http://bloter.net

이코노미스트

사이언스 


온라인 강좌중 내가 몰랐던 곳

방송 통신대 디지털 미디어 센터 http://dmc.knou.ac.kr

한빛미디어 온라인 교육과정 http://hanb.co.kr/edu/edumain.html



반응형

'책, 1년에 100권' 카테고리의 다른 글

데일 카네기 성공대화론  (0) 2020.08.10
데일카네기 자기관리론  (0) 2020.07.27
밤의 도서관  (0) 2020.07.22
당신은 뇌를 고칠 수 있다  (0) 2020.07.13
해커와 화가  (0) 2020.07.13