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