Yunseok's Dev Blog

배운 것을 적는 블로그입니다.

소프트웨어 장인 서평

소프트웨어 개발자가 소프트웨어 개발 업무만 하면 되던 시절은 이미 지나갔다. 기업들은 이미 시키는 일만 하는 값싼 코더가 아니라 프로페셔널 개발자를 원하고 있다. 고객들은 더 많고 더 빠른 것을 원하며 기업들은 기존보다 훨씬 과감하고 적극적으로 소프트웨어 제품을 공급하고 있다.

이러한 상황에서 우리는 어떻게 행동해야 하는가?

어떻게 하면 더 나은 개발자가 될 수 있을까?

어떻게 하면 더 나은 소프트웨어 프로젝트 결과물을 만들어 낼 수 있을까?

애자일

애자일로만 충분할까? 많은 회사들이 애자일을 도입하고 있다. 하지만 기술적인 능력의 개선 없이 절차만 개선하는 것은 무의미하다. 완전한 애자일 전환을 위해서는 프로페셔널 소프트웨어 개발자들이 필요하다. 이들은 기술적 실행 관례, 기술적 전문성 그리고 관련도구들을 마스터하고 있어야 한다. 정기적으로 계속해서 배포되는 소프트웨어에 대해서도 높은 품질을 유지시키며, 완벽하게 테스트되고 쉽게 변경할 수 있는 소프트웨어를 개발할 수 있어야 한다. 완전한 애자일 전환을 위해서는 기업들이 이 소프트웨어 장인정신을 품어야 한다.

소프트웨어 장인정신이란 무엇일까?

소프트웨어 장인정신이란 소프트웨어 개발자가 선택한 커리어에 책임을 가지고 지속적으로 새로운 도구와 기술을 익히며 발전하겠다는 마음가짐이다. 소프트웨어 개발자로서 일을 더 잘하기 위해 가슴에 품는 일종의 이념이다.

소프트웨어 장인정신은 책임감, 프로페셔널리즘, 실용주의 그리고 소프트웨어 개발자로서의 자부심을 의미한다.

소프트웨어 장인정신은 시켜야만 일하는 역량 미달의 노동자가 아니라 소프트웨어 프로페셔널의 수준을 높여 프로의 모습으로 일하는 소프트웨어 개발자를 지향한다.

소프트웨어 장인정신은 소프트웨어 개발의 프로페셔널리즘을 말한다. 소프트웨어 장인정신은 여러 기술적 실행 관례를 활용하고 정교하고 솜씨 있게 짠 코드의 중요성을 강조함과 동시에 코딩을 넘어서 고객의 더 많은 부분을 도울 것을 강조한다.

소프트웨어 장인정신은 왜 필요할까?

소프트웨어 장인정신은 개발자와 기업들이 일을 올바르게 수행하도록 돕는다.

소프트웨어 장인정신은 애자일, 린 원칙들과 시너지를 일으켜 소프트웨어 업계를 한 단계 도약시킬 수 있다.

소프트웨어 장인정신은 프로페셔널리즘, 기술적 탁월함, 고객 만족을 중점 요소로 두고 있다.

소프트웨어 프로젝트와 소프트웨어 개발자를 공장 운영과 생산라인 노동자로 보는 관점을 바꾼다.

소프트웨어 장인은 어떻게 될 수 있을까?

소프트웨어 장인을 열망하는 우리는 스스로의 기술을 연마해야 한다. 그리고 다른 사람들이 기술을 배울 수 있도록 도와야 한다. 이러한 일을 하는 과정에서 우리는 다음과 같은 가치들을 추구한다.

  • 동작하는 소프트웨어뿐만 아니라, 정교하고 솜씨 있게 만들어진 작품을,
  • 변화에 대응하는 것뿐만 아니라, 계속해서 가치를 더하는 것을,
  • 개별적으로 협력하는 것뿐만 아니라, 프로페셔널리즘 커뮤니티를 조성하는 것을,
  • 고객과 협업하는 것뿐만 아니라, 생산적인 동반자 관계를,

왼쪽의 항목들을 추구하는 과정에서 오른쪽 항목들이 꼭 필요하다.

소프트웨어 장인

소프트웨어 장인이란 다음과 같이 행동하는 사람을 말한다.

  • 특정 도구, 개발 언어, 프레임워크에 독단적인 고집을 부리지 않는다.
    • 특정 도구를 종교적으로 신봉하지는 않더라도 최선이라고 알려진 몇몇 조합들에 대해서는 완전하게 마스터하고 있어야 한다. 마스터한 도구들이 없다면 장인이라고 할 수 없다.
  • 가장 먼저 코드 작성이 아니라 문제 해결에 집중한다.
    • 항상 주어진 문제에 가장 적합한 도구를 찾고 단순한 해결책을 추구한다.
  • 코드를 짤 때는 높은 품질의 코드를 작성하는데 집중한다.
    • 테스트도 가능하고 쉽게 이해할 수 있으며 수월하게 유지 보수할 수 있는 코드를 작성하는데 집중한다.
  • 자신이 떠나고 난 후 스스로 부끄러운 일로 떠올리는 상황을 만들지 않는다.
    • 엉망인 코드, 자신의 본인 외에는 아무도 이해할 수 없는 코드로 하여금 남아 있는 개발자들의 지탄을 받을 일을 만들지 않는다.
    • 반대로 장인은 긍정적인 일들로 연상되는 존재여야 한다. 통찰력 있는 기여, 열정, 지식, 훌륭한 동료로서 인정받는다면 더할 나위 없다.
  • 고객을 도와 그들의 업무 절차를 개선하고 좀 더 실현 가능성이 높은 선택지를 제공해야 한다.
    • 스스로 판단하기에 무언가 올바르지 않은 결정을 그대로 추진하거나 책임지지는 않을 것이라는 점을 고객에게 분명히 밝힌다.
  • 모든 아니오에는 대안을 제시해야 한다.
  • 마스터로서 수련생을 멘토링하고 그들의 여정에 도움을 준다.
    • 지식, 아이디어, 성공 그리고 실패까지도 커뮤니티에서 공유하고 토론하여 업계가 한 걸음씩 더 나아갈 수 있게 해야 한다.
    • 항상 다른 사람에게 배우려 하고 겸손한 사람이어야 하고 경험이 적은 개발자와 지식을 공유하기를 주저하지 않는 사람이어야 한다.
  • 스스로가 만든 것에 애정과 자부심을 가진다.

소프트웨어 장인이 되려면?

끊임없이 자기계발을 해야한다.

  • 독서
    • 특정 기술에 대한 서적, 개념에 대한 서적, 행동양식에 대한 서적, 형멍적 서적(또는 고전)에 대한 책들을 읽어야 한다.
  • 블로그
    • 실제 경험, 개인적인 발견, 성공담, 실패담들을 공유해야 한다.
  • 기술 웹사이트
    • 시장의 최신 동향을 살펴봐야 한다.

끊임없는 훈련을 해야 한다.

  • 카타
    • 같은 코딩 카타를 반복하더라도 매번 다른테크닉, 다른 언어, 다른 기술, 다른 접근 방법을 사용해 효과를 최대화 해야한다.
  • 펫 프로젝트
    • 새로운 것을 시험하고, 발견하고, 배우고 즐길 수 있는 기회를 만들어야 한다.
  • 오픈소스
    • 배우고 싶은 내용과 연관 있는 것을 찾아서 다운로드해 실행해보고, 테스트 코드를 보고, 디버깅해보고, 이용해보면서 기여해야 한다.
  • 페어 프로그래밍

의도적인 수련을 해야 한다.

  • 아직 배울 내용이 많음을 인정해야 한다.
  • 모르는 것을 배우는 기회를 만들기 위해 항상 노력해야 한다.

일과 삶의 균형을 유지해야 한다.

  • 시간 만들기
    • 낭비하는 시간을 줄여야 한다.
    • 페이스를 유지하는 것이 중요하다.

좋았던 점

  • 인재 채용에 대한 부분이 특히 좋았다. 면접관으로써 훌륭한 개발자를 뽑으려면 공고부터 면접까지 어떻게 해야 하는지에 대해서 상세하게 알 수 있었다. 내가 아직 면접관으로서 면접을 보진 않지만 면접관이 어떻게 해야 하는지에 대해 배움으로써 내가 면접을 볼 때 어떻게 해야 하는지에 대해서도 알 수 있었다. 또한 면접이란 것이 지원한 개발자의 실력을 파악하는 자리이기도 하지만 내가 원하는 회사가 맞는지 확인하는 과정이기도 하다.

Source