소프트웨어 장인 ( 14장 - 16장)

Yuri Lee·2021년 4월 26일
0

소프트웨어 장인

목록 보기
4/4

14장 기술적 변화의 실행

회의론의 종류

  • 무지
  • 대중
  • 냉소주의 : 이런 종류의 개발자들은 똑똑하게 행동하는 것보다 똑똑해 보이는 것을 더 중요하게 여긴다. 새로운 것을 도입하게 되면 그들의 권위가 위협받는다고 생각한다.
  • 너무 바쁜
  • 상사
  • 몰상식
  • 무념무상 : 뭐가 어떻게 되든 아무런 상관을 하지 않는다. 이들의 문제는 좋은 아이디어를 대충 엉망으로 구현해서 결과적으로 좋은 아이디어를 나쁜 아이디어로 만든다는 것이다.
  • 피해망상 : 고과나 급여, 복리 후생 등에서 불공정한 대우를 받는다고 느낀다. 자신이 일하고 있는 회사를 싫어하고 불평불만과 회사에 대한 험담이 잦다.
  • 무능력 : 상황을 명확하게 보지를 못한다.
  • 상아탑 아키텍트 : 모든 것을 알고 있다고 생각한다. 자신이 제일 높은 지위를 차지하고 있다고 생각하나 수년 동안 상용 시스템의 코드를 단 한 줄도 만들어 본 적이 없는 경우가 대부분이다. 이들은 자신의 아이디어가 아니면 나쁜 아이디어로 취급한다.
  • 좌불안석
  • 팬보이 : 특정 주제나 관점에 광적으로 완전히 전념하는 사람들이다. 이런 종류의 개발자들은 특정 도구나 언어 프레임워크에만 아주 오랫동안 전념해서 해당 기술에는 전문가다. 자신이 잘 아는 분야가 그것 밖에 없기 때문에 자신이 전념하고 있는 그것만이 모든 것에 대한 최고의 해결책이라고 믿고 다른 모든 대안들은 거부한다.

준비

  • 단순함을 추구해야 한다. 아이디어나 제안은 아주 명료하고 단순해야 한다.
  • 상대방의 언어로 말해야 한다.
  • 말할 내용에 대해 스스로 제대로 이해하고 있어야 한다.
  • 상대방을 존중해야 한다.
  • 경청하는 법을 배운다.

기술적 변화를 시작하는 방법

  • 신뢰를 쌓아야 한다. 사람들이 당신을 믿어 주지 않는다면 아무런 변화도 이루어낼 수 없다.

    • 나는 신뢰를 쌓고 있을까? 내가 하는 행동들이 과연 신뢰를 얻을 수 있는 행동인가 .. ? 나도 조금더 명확한 의사 전달을 해야 할 필요가 있다고 생각한다.
  • 열정을 보여주는 것으로 부족하다. 무엇보다도 신뢰를 쌓으려면 역량이 있어야 한다. 사람들이, 당신이라면 그 일을 해낼 수 있을 것만 같은 느낌이 들어야 한다.

    • 뒤에 바로 나왔네.. 역량 ⭐ 역량 쌓기에 집중하도록 하자.
  • 전문성을 확보하자. 새로운 기술을 제안하기 전에 본인 스스로 충분히 이해해야 한다.

  • 모범을 보여 사람을 이끌라.

  • 신중하게 싸울 곳을 정하라

  • 점진적으로 반복, 관찰, 수용하라

두려움과 자신감 부족

  • 당신의 주변을 바꾸고 싶다면, 두려움을 버려야 한다. 준비하고, 연습하고, 독서하고, 공부해서 스스로 도달할 수 있는 최고의 개발자로 거듭나야 한다. 무슨 일이 일어나든 항상 진실을 말해야 한다. 유일한 충고는 인격적으로 못되 먹은 사람이 되지 말자.

회의론을 상대하는 방법

  • 상아탑 아키텍트는 자신이 모든 결정을 책임지는 사람이고, 개발자들은 단지 자신의 비전을 실행할 단순 코더들로 취급한다. 보통 상아탑 아키텍트가 주는 가이드는 파워 포인트나 비지오로 그려진 몇 장의 다이어그램이거나 웹사이트 URL 몇개가 전부이다. 뭔가 더 주어진다면 개발자의 실무 현실과는 동떨어진 개념 설명용 코드 샘플정도이다. 그들은 개발자들을 그냥 시키는 것만 하는 단순한 코더로 본다. 우리가 상아탑 아키텍트가 취할 수 있는 행동 중 하나는 자신의 결정에 책임을 질 수 밖에 없도록 만드는 것이다.

  • 진정한 소프트웨어 프로페셔널은 권한에는 항상 책임이 따른다는 것을 이해하고 있다. 권한을 갖고 싶다면 책임질 수 있는 준비를 해야 한다. 이미 책임이 주어져 있다면, 관련된 의사결정에 권한도 가질 수 있도록 해야 한다. 상아탑 아키텍트들은 그들의 커리어에 해를 입을까봐 자시의 의견에 책임지기를 두려워한다. 관료주의와 정치 뒤에 숨는다. 그들이 당신 앞을 가로막는 것을 피하고 싶다면, 그들의 결정에 책임지도록 만들어야 한다.

소통

  • 일을 잘 해내려면 소통을 명확히 해야 한다. 개발자들과 신뢰를 쌓는 방법을 알고 있어야 한다. 대화하는 상대방을 이해하고, 그 사람의 생각의 바탕에 어떤 이유들이 있는지 공감할 수 있어야 한다.

15장 실용주의 장인정신

리팩토링

  • 리팩토링을 위한 리팩토링은 시간 낭비이다. 필요에 의해 시스템을 변경하고, 그 와중에 작은 리팩토링을 꾸준히 하는 것이 실용적인 관점에서 바람직한 애플리케이션 개선 방법이다.

소프트웨어 프로젝트는 우리를 위한 것이 아니다.

  • 프로젝트는 한 두명의 슈퍼 개발자를 위한 것이 아니다. 프로젝트를 수행한 사람들이 떠나간 후 그것을 유지보수할 사람들을 고려해야만 한다.

비범함과 평범함

  • 비범한 개발자는 요구사항을 충족하는 가장 단순한 코드를 만들어 경험이 적은 개발자가 이해하는 데 아무런 문제가 없도록 한다.

단순한 설계를 위한 네 가지 원칙

  1. 모든 테스트를 통과해야 한다.
  2. 명료하고, 충분히 표현되고, 일관되어야 한다.
  3. 동작이나 설정에 중복이 있어서는 안 된다.
  4. 메서드, 클래스, 모듈의 수는 가능한 적어야 한다.
  • 단순한 설계를 위한 가이드 라인으로 좋은 네이밍과 비즈니스 콘셉트를 잘 투영한 추상화에 집중한다. 그 다음에 중복을 제거하면서 코드의 응집성과 독립성을 높인다. 중복을 제거하다보면 새로운 구조가 떠오르고 다시 명료성을 높인다. 다시 중복을 없앤다.

패턴을 위한 리펙토링

  • 새로운 기능을 자연스럽게 받아들일 수 있도록 기존 코드를 준비시킨다.
  • 디자인 패턴은 우리가 활용해야 할 도구 중 하나다. 하지만 무조건 사용해야 할 도구는 아니다. 내가 좋아하는 패턴에 문제를 끼워 맞추기 전에, 문제에 적합한 리펙토링을 단순한 설계와 SOLID 원칙을 따라서 먼저 시도해야 한다.
    • SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), DIP(의존 역전 원칙), ISP(인터페이스 분리 원칙)을 말하며, 앞자를 따서 SOILD 원칙이라고 부른다.

장인정신과 실용주의

  • 실용주의가 없는 장인정신은 장인 정신이 아니다.

16장 소프트웨어 장인으로서의 커리어

  • 소프트웨어 개발자는 멋진 직업이다. 오늘날 생산되는 거의 모든 것들이 소프트웨어의 뒷받침으로 가능하다.

장인의 길

  • 열정, 소프트웨어 장인은 소프트웨어 개발과 자신의 직무에 열정적이다.
  • 장인이 된다는 것은 새로운 것에 대해 호기심을 가지고 실험함다는 것과 같은 의미이다. 장인은 특정 도구, 개발 언어, 프레임워크에 독단적인 고집을 부리지 않는다.
  • 장인은 가장 먼저, 코드 작성이 아니라 문제 해결에 집중한다. 코드를 짤 때는 높은 품질의 코드를 작성하는 데 집중한다.
  • 정직과 용기는 장인이 갖추어야 할 핵심적인 자질이다. 정직과 용기란 필요한 상황에서 고객에게 '아니오'라고 말할 수 있는 것을 의미한다.
  • 그저 '아니오'라고 답하는 것만이 장인으로서의 태도는 아니다. 모든 '아니오'에는 항상 대안을 제시해야 한다.

여정과 이정표

  • 많은 개발자들에게 새로운 직장을 찾는다는 것은 내가 지금 가진 지식과 시간을 제공해서 최대한 많은 급여를 대가로 받겠다는 의미다. 하지만 너무 근시안적인 생각이다.

  • 언제 어디서도 "그건 내 업무가 아닙니다." 라고 말한 적이 없다. 내 역할과 직급이 무엇이든 상관없이 내가 할 수 있는 최선의 도움을 주려 노력했다. 이런 것들은 나의 투자라고 생각한다.

  • 커리어 전반에 걸쳐, 항상 신중하게 다음 직장을 찾았다. 낚시하듯이 여러 회사에 맹목적으로 이력서를 보내는 일은 하지 않았다. 내가 일하고 싶은 회사의 형태가 어떠해야 하는지 항상 생각했다.

  • 일을 선택하기 전에 아래의 질문을 스스로에게 던지다.

    • 나의 커리어로부터 나는 무엇을 원하는가?
    • 그것을 성취하기 위한 다음 단계는 무엇인가?
    • 이 일은 나의 커리어 방향과 합치하는가?
    • 내가 이 회사에 줄 수 있는 가치의 양은 얼마나 되는가?
    • 그러한 투자에 대한 이익은 무엇인가?
    • 그러한 투자는 대략적으로 얼마동안 지속되어야 하는가?
    • 내가 되고자 하는 프로패셔널에 이르는 데 이 일은 어떻게 도움이 되는가?
    • 이 일에서 나는 자율성, 통달, 목적 의식을 가질 수 있나?
    • 나의 고용주와 생산적인 동반자 관계를 맺을 수 있나? 양측 모두 가치 얻고 행복할 수 있나?
  • 익숙한 공간을 벗어나 바깥 세상을 경험할수록 한참 멀었다는 것을 깨달았다.

  • 새로운 사람은 새로운 아이디어와 더 많은 에너지로 정체된 상황에 도전하고 훌륭한 일을 해낼 수도 있다.

다양성

  • 소프트웨어 개발은 다양성이 높은 전문 부야이다.
  • 장인이라면 넓은 방면으로 다양한 경험이 있다.

소프트웨어 장인의 사명

  • 소프트웨어 장인이 된다는 것은 잘 짜여진 코드를 만드는 소프트웨어 개발자가 되는 것에서 훨씬 더 나아간다. 그것은 삶의 철학이다. 탁월함에 헌신하고, 탁월함의 추구를 본성처럼 만든다. 우리 사회의 진화를 이끄는 일에 무한한 자부심을 갖는다.

위 글은 산드로 만쿠소의 소프트웨어 장인을 읽고 정리한 내용입니다.
출처: https://dev-momo.tistory.com/entry/SOLID-원칙 [Programming Note]

profile
Step by step goes a long way ✨

0개의 댓글