5 min to read
소프트웨어 장인
- ‘일을 어떻게 했느냐는 일을 해낸 것만큼이나 중요하다.’
- 정리하면 커리어 패스를 정할 때는 내가 열정이 있는 것, 진정 즐겁게 할 수 있는 것을 따라야 한다는 것이다. 아키텍트든, 개발자든, 테스터든, 비즈니스 분석가든, 관리자든 상관없다. 모든 역할이 필요하고 중요하다.
- ‘민첩(Agile)’하다고 해서 애자일을 실행하고 있는 것은 아니다. 애자일 방법론들은 모두 빠르고 짧은 피드백 루프에 대한 것이다. 더 빨리, 더 짧게 피드백 루프를 만들수록 더 애자일해진다. 어떤 피드백이 올 때마다 그 피드백에 대응할 기회를 얻고, 그러한 새 정보에 적절한 행동을 취하면 프로젝트가 더 민첩해진다.
- 미리 세운(대부분 잘못 정의된) 계획에 따라 그저 기계적으로 코딩만 하는 것이 아니라, 계획, 일정 및 예산 등의 추산, 요구사항 분석, 팀 구성, 분석, 아키텍처, 제품 릴리즈, 우선순위 조정, 시연 그리고 사용자와 프로젝트 이해 관계자에게 정기적으로 피드백을 받는 단계까지 개발자가 수행하기 시작한 것이다.
- 절차와 도구보다는 개성과 화합을 방대한 문서 작업보다는 동작하는 소프트웨어를 계약 조건에 대한 협상보다는 고객과의 협력을 계획을 따르는 것을 넘어서서 변화에 대처하는 것을 더 가치있게 여긴다.
- 기술적 탁월함의 개선 없이 절차만 개선하는 것은 무의미하다.
- 소프트웨어 장인정신은 소프트웨어 개발자가 스스로가 선택한 커리어에 책임감을 가지고, 지속적으로 새로운 도구와 기술을 익히며 발전하겠다는 마음가짐이다.
- 소프트웨어 장인정신은 소프트웨어 개발의 프로페셔널리즘에 대한 것이다.
- 동작하는 소프트웨어뿐만 아니라, 정교하고 솜씨 있게 만들어진 작품을, 변화에 대응하는 것뿐만 아니라, 계속해서 가치를 더하는 것을, 개별적으로 협력하는 것뿐만 아니라, 프로페셔널 커뮤니티를 조성하는 것을, 고객과 협업하는 것뿐만 아니라, 생산적인 동반자 관계를, 이 앞의 항목들(일반 굵기)을 추구하는 과정에서, 다음 항목들(볼드체)이 꼭 필요함을 의미한다.
- 보이스카웃에는 캠핑 장소를 처음 발견했을 때보다 더 깨끗하게 남겨두라는 규율이 있다. 이는 소프트웨어에도 똑같이 적용할 수 있다. 코드도 처음 발견했을 때보다 더 깨끗하게 관리해야 한다
- 소프트웨어 장인은 항상 다른 사람에게 배우려 하는 겸손한 사람이어야 하고 경험이 적은 개발자와 지식을 공유하기를 주저하지 않는 사람이어야 한다.
- 코드를 잘 작성하는 것은 꽤 중요하지만 프로젝트를 완성시킬 때 필요한 요소들 중 하나일 뿐이다. 고객을 도와 그들의 업무 절차를 개선하고, 좀더 실현 가능성이 높은 선택지를 제공해야 한다.
- 그저 시키는 대로만 일하고 퇴근 시간만 기다리는 개발자는 프로페셔널 개발자가 아니다. 그러한 개발자는 공장 노동자와 다를 바 없다. 프로페셔널로 인정받고 싶다면 프로답게 행동해야 한다.
- 새로운 것을 배우고, 시대에 뒤떨어지지 않게 할 수 있는지 나 자신을 어떻게 훈련시키는 방법을 알아야 한다. 시간을 어떻게 효과적으로 사용할 수 있는지도 파악해야 한다. 배움과 훈련이 멈추는 순간 우리의 커리어도 멈춰버린다.
- 시간이 없다는 말은 더 이상 변명이 될 수 없다. 우리는 항상 시간이 있다. 우리는 모두 정확히 같은 만큼의 시간이 주어진다. 차이점은 우리가 그 시간을 어떻게 쓰느냐일 뿐이다.
- 좋은 프로페셔널은 고객에게 해가 되는 일이라면 고객이 돈을 지불하고 그것을 원한다고 하더라도 하지 않는다. 고객이 내리는 결정이 소프트웨어 프로젝트에 전체적으로 어떤 파급효과가 있을지 고객 스스로 이해하고 있다고 기대하기는 어렵다. 이 부분을 파악해서 알려주는 것은 우리들의 몫이다.
- 아무리 한탄하고 불평하고 저주해보았자 삶이 쉬워지거나 나아지지 않는다는 점이다. 무언가 나아지길 원한다면 그에 맞는 행동을 취해야 한다.
- 무언가가 마음에 들지 않는다면 바꾸어라. 그것을 바꿀 수 없다면, 그에 대한 당신의 생각을 바꾸어라. - 마리 엥겔브레이트(Mary Engelbreit)
- 실행 관례를 꾸준히 실행하지 않고 부분적으로 하다가 안 한다면 그것이 실제 효과가 있는지는 알 수가 없다. 어떤 실행 관례들이 정말 효과가 있는지 없는지 알기 위해서는 그에 대한 명확한 전략을 정의해야 한다.
- TDD의 이름 자체에 ‘테스트’가 들어 있기는 있지만 사실 TDD는 설계에 대한 실행 관례다. 테스트가 코딩 방향을 주도하면 복잡한 코드를 작성하는 것 자체가 어려워진다.
- 무언가를 절대적인 진리로 바라보는 것은 바람직하지 않다. 항상 우리가 무엇을 하고 있고 그것을 왜 하고 있는지 질문해야 한다. 지금 하는 방법보다 더 나은 다른 방법이 없는가? 우리가 선택한 실행 관례가 우리 프로젝트에 적합한가? 그 실행 관례의 가치는 무엇인가? 무언가 다른 것을 시도해볼 시점인가?
- 다음은 기회를 만들어 내기 위해 할 수 있는 몇 가지 활동들이다.
- 익숙하고 편한 것에서 벗어나 새로운 것을 공부하고 기술적 지식을 확장한다. 예를 들어 새로운 프로그래밍 언어나 기술들을 배운다.
- 지역 커뮤니티에 정기적으로 출석하거나 행사에 참여한다.
- 다른 개발자, 비즈니스맨들과 교류한다.
- 새롭게 배운 것, 지금 하고 있는 것들에 대해 블로깅한다.
- 오픈 소스 프로젝트에 참여한다.
- 프로젝트를 만들고 공개한다.
- 콘퍼런스에 참석한다.
- 콘퍼런스에서 연사로 나선다.
- 지식은 일에서 얻을 수 있는 가장 흔한 투자 이익이다. 개발자들은 그들이 배우고 싶은 것을 따라서 일을 선택한다. 그 일을 떠날 때는 생각하는 커리어 방향과 맞지 않아서일 때도 있지만 배울 것이 더는 없기 때문에도 그렇게 한다.
- 소프트웨어 장인은 자신의 커리어 방향과 일치하는 경우에만 회사 안의 커리어를 수용한다. 소프트웨어 장인은 그들의 커리어가 긴 여정이며, 어떤 종착지에 도달하는 것보다 그 여정 자체가 훨씬 더 중요함을 알고 있다.
- 미래의 성공 가능성을 높이기 위해서는 열정적인 개발자를 찾아야 한다. 열정적인 개발자는 개방된 사고로 항상 무언가를 배우기를 원하기 때문이다. 그들은 스스로 동기가 부여되어 혁신하고 기술 변화를 이끈다. 그들은 누가 무엇을 하라고 할 때까지 기다리지 않는다. 무언가를 시킬 때까지 그저 가만 있는 사람들은 회사를 정체 상태로 이끌어 피해야 할 사람들이다. 열정적인 개발자는 성장하기 위해 개인 시간을 기꺼이 투자한다. 당장 오늘은 미숙하더라도 그리 길지 않은 시간이 지나면 훌륭한 프로페셔널이 될 가능성이 매우 높다.
- 당신의 주변을 바꾸고 싶다면, 두려움을 버려야 한다. 준비하고, 연습하고, 독서하고, 공부해서 스스로 도달할 수 있는 최고의 개발자로 거듭나야 한다. 무슨 일이 일어나든 항상 진실을 말해야 한다. 유일한 충고는 인격적으로 못되먹은 사람이 되지 말라는 것 하나뿐이다.
- 일을 잘 해내려면 소통을 명확히 해야 한다. 무엇보다도 개발자들과 신뢰를 쌓는 방법을 알고 있어야 한다. 신뢰야말로 변화를 이끌기 위한 핵심적인 요소다. 대화하는 상대방을 이해하고, 그 사람의 생각의 바탕에 어떤 이유들이 있는지 공감할 수 있어야 한다. 자신을 준비시키고 용감해지고, 주도하자.
- 앞으로 나아가지 못하고 정체되어 있다고 느낀다면, 무언가를 배우거나 스스로 일을 즐기지 못한다면, 그때는 움직여야만 한다. 회사와 동료들을 사랑한다는 것만으로는 그 일을 계속해야 하는 충분한 이유가 되지 못한다. 사람들도 움직이고 회사도 움직인다. 우리도 움직여야 한다. 원하는 커리어 방향에 더 적합한 길을 찾아나서는 것은 자신은 물론 회사에도 도움이 된다. 회사 입장에서는 불행한 직원이 줄어서 좋을 뿐만 아니라, 새로운 사람을 들일 기회가 된다. 새로운 사람은 새로운 아이디어와 더 많은 에너지로 정체된 상황에 도전하고 훌륭한 일을 해낼 수도 있다.
- 소프트웨어 장인은 아침에 일어나서 출근하고 급여를 받는 것 이상을 생각한다. 소프트웨어 장인은 주변의 것들을 더 나아지게 하고 우리가 사는 세상을 변화시킬 것을 생각한다. 소프트웨어 장인이 된다는 것은 잘 짜여진 코드를 만드는 소프트웨어 개발자가 되는 것에서 훨씬 더 나아간다. 그것은 삶의 철학이다. 탁월함에 헌신하고, 탁월함의 추구를 본성처럼 만든다. 우리 사회의 진화를 이끄는 일에 무한한 자부심을 갖는다.
Comments