본문 바로가기
  • 오롯이 성장하는 사람
책이라는우주/미래와 테크

소프트웨어장인 [산드로 만쿠소]

by 굿에디터 2017. 12. 16.
반응형

소프트웨어장인 [로버트 C.마틴] [1.서문]

소프트웨어 장인 정신
국내도서
저자 : PETE MCBREEN / 강경인역
출판 : 피어슨에듀케이션 2002.12.20
상세보기
 

나는 IT전공자가 아니기때문에 실무 및 경험으로 분위기를 파악하며 배웠고, 이론은 늘 나중에 익힐 수 밖에 없었다.

그런 나에게 보석같은 책은 희망이다. 

실무에서는 시스템이나 화면을 설계하지만, 소프트웨어 프로젝트의 일원으로서 수많은 아픔을 겪어봤다면

어찌 이 책에 무릎을 치지 않을수 있을까. 

 

내 설계서를 하나하나 짚어가며 조언을 해준 사람을 만난적이 있었나? 
나무르같은 멘토가 나에게 있나? 
 이 책은 크게 1부 이념과 태도, 2부 완전한 전환으로 나뉜다.
"코드를 같이 볼 거니까 가까이 오세요." 그가 말했다. 내가 작성한 코드는 200줄 남짓이었다. 나무르는 첫번째 라인으로 커서를 옮기고 한줄 한줄 보기 시작했다. 
다섯 줄마다 잠시 멈춰서 "여기서 메모리 할당/해제를 하면 무슨 일이 일어나는지 알고 있나요? 이 부분을 보세요. 한 메서드에서 메모리를 할당하고 다른 메서드에서 해제하고 있어요. 이런 코드는 잠재적으로 메모리 릭을 일으켜요. 여기 이 코드들을 보세요. 좀 더 생각해보면 이 여덟 줄은 두 줄로 줄일 수 있어요. try/catch 블록이 이렇게 크면 어떤 일이 일어날 수 있는지 알고 있나요? 이 변수와 메서드의 이름이 적절해요? 원래 의도한 의미가 뭐죠? 다른 동료가 이 코드를 수정할 일이 생기면 어떻게 될까요? 정보도 부족하고 이 코드가 작성된 맥락을 전혀 알 수가 없어요. 이 코드에 대한 전후 정보가 아무것도 없는 상태에서 당신이 이 코드를 유지보수해야 한다면 어떻겠습니까? 여기에 하드 코딩된 비트들은 뭐죠? 이 값들을 수정할 때마다 소스 코드를 열어서 수정하고 다시 컴파일하고 전체 애플리케이션을 재배포해야야만 하나요? 왜 여기저기 똑같은 코드들이 있죠? 으음...이 메서드는 너무 기네요. 메서드마다 이렇게 코드가 길면 코드를 해석할 때 머릿속에 한번에 담고 있어야 할 정보가 얼마나 많아지는지 알고 있어요? 좀더 단순하면서도 작게 만들고 동작 내용에 맞춰서 네이밍을 하면 어떨까요?" 
충격에 휩싸였다. 어떻게 반응해야 할지 몰랐다. 아무 말도 없이 천천히 일어서서 문쪽으로 걸어갔다. "산드로." 문에 다다랐을 때 그가 나를 불렀다. 나는 멈춰서서 그를 돌아봤다. "일을 하는 것도 중요하지만 그에 못지 않게, 일을 어떻게 하느냐도 중요합니다." 이 말을 끝으로 나무르는 자신의 컴퓨터로 돌아앉아 그 끔찍한 검은 배경에 초록색 글자가 나오는 편집기에 다시 타이핑을 시작했다.
낙담했다. 아니 사실 화가 났다. 나무르의 사무실을 나와서는 바로 계단을 내려가 건물 밖으로 나왔다. 
........
나무르는 1시간 넘게 나의 코드를 보면서 어떻게 하면 더 나은 코드를 만들 수 있는지 설명했다. 어떤 부분에서는 내 의견을 경청했고 틀린 점과 더 개선할 수 있는 방법을 이야기했다. 코딩을 시작한 이후 처음으로, 내게 시간을 들여 좋은 코드를 만드는 방법을 보여주는 사람을 찾았다는 사실을 깨달았다. 다른 사람들이 성장할 수 있도록 진심으로 도와주는, 나보다 더 나은, 훨씬 다양한 경험이 있는 누군가를 찾았다. 더 훌륭하고 더 높은 품질의 소프트웨어를 만드는 데 가치를 두는 사람을 찾았다. 나를 가르치는 데 기꺼이 시간을 투자하는 사람을 만났다. 무엇보다도 나의 첫 번째 멘토를 찾았다. 
몇 개비의 담배를 더 태우고 몸을 추스른 후, 나는 내적으로 다른 사람이 되었다.  그날 나는, 나 자신이 그렇게 잘난 사람이 아니라는 것과 배워야 할 게 아직 많음을 알았다. 그리고 겸손해져야 한다는 것도. 일을 끝내는 것 자체로는 부족하다는 것, 그 일을 어떻게 하느냐가 더 중요하다는 것, 특히 팀에서 일할 때는 더욱 그러하다는 것을 배웠다. 나의 동료와 클라이언트를 존중하고, 형편없는 코드를 남겨서는 안 된다는 것을 알았다. 훌륭한 프로페셔널이라면 자신이 하는 일 자체에 주의를 기울인다는 것을 배웠다. 

-저자 서문 중에서

 

이제 개발자들은 다음과 같은 여러 가지를 할 수 있어야 한다. -고객과 대화하기-테스트 및 배포 자동화하기-전체 비지니스에 영향을 미칠 기술 선정하기 -지리적으로 분산된 팀들과 협업하기-고객을 도와 필요한 작업을 정의하기-우선순위 선정하기-진척상황 보고하기-변경사항과 기대일정 관리하기-잠재 고객 및 파트너에게 제품 소개하기-사전 영업 활동 지원하기-개발 일정과 비용 산출하기-채용 면접하기-아키텍처 설계하기-비기능적 요구사항과 계약 조건(SLAS)검토하기-사업 목표 이해하기-주어진 여건에서 최적의 결정하기-새로운 기술 주시하기-더 나은 업무 방식 찾기-고객에게 가치 있는 상품이 전달되고 있는지 고민하기 
-CHAPTER 1 21세기의 소프트웨어 개발 중에서
반응형

댓글