원래 매 회고마다 우아한 테크코스에서 해주는 말과 태도, 피드백을 정리했었다. 그렇게 하다보니 태도나 피드백을 보고싶을 때 다 나눠져 있어 찾아보기가 힘들었다. 하나로 합치는 게 더 좋겠다는 생각이 들었다. 코딩에 대한 태도나 방법이 흐릿해질 때마다 이 글을 정독해서 생각을 정립할 생각이다 :) 아무튼, 이 글은 코딩에 대한 사람의 태도, 자세를 정리해놓은 글이다.

의식적인 연습

  1. 목적의식있는 연습에 얼마나 많은 시간을 투자했는가?
  2. 개인의 컴포트 존을 벗어난 지점에서 진행, 자신의 현재 능력을 살짝 넘어가는 작업을 지속적으로 시도하자
  3. 피드백과 피드백에 따른 행동 변경을 수반하자

코딩의 의식적인 연습

  1. 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다.
    • 가능하다면 메서드의 길이는 5줄
    • 한 메서드가 하나의 일만 하고 있는지 확인
  2. else 예약어를 쓰지 않는다.
    • 다형성을 통해 조건문을 처리하자
    • Null Object Pattern을 시도해도 좋다
  3. 모든 원시값과 문자열을 포장한다.
    • 컴파일러와 프로그래머에게 값의 의도를 나타내자
  4. 한 줄에 점을 하나만 찍는다.
    • 다른 객체에 깊숙이 관여하면 안 된다
  5. 줄여쓰지 않는다(축약 금지).
    • 클래스와 메서드 이름을 한 두 단어로 유지하려고 노력하자
  6. 모든 엔티티를 작게 유지한다.
    • 50줄 이상되는 클래스와 파일이 10개 이상인 패키지는 없어야 한다
  7. 2개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
  8. 일급 콜렉션을 쓴다.
    • 콜렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다.
  9. 게터/세터/프로퍼티를 쓰지 않는다.

좋은 객체의 7가지 덕목

  1. 객체가 현실 세계에 존재한다
    • 컨트롤러, 서비스 로케이터, 싱글턴은 좋은 객체가 아니다. 단지 다른 객체와 함께 사용하기 위해 만들어 낸 것이다
  2. 객체가 계약(책임)에 따라 동작한다
    • 인터페이스에 선언된 메서드들을 구현해야 한다
    • 계약없이 동작하는 객체는 단위 테스트에서 mock하는 것이 불가능하다
    • 계약없는 객체는 데코레이터 패턴을 통해 확장하는 것이 불가능하다
  3. 객체가 고유하다
    • 좋은 객체는 언제나 고유하기 위해 무언가를 캡슐화해야 한다
    • 캡슐화할 것이 없다면 객체가 동일한 복제본을 가질 수도 있다
  4. 객체가 불변하다
    • 불변 객체는 생성, 테스트, 사용하기가 더 간단하다
    • 불변 객체는 언제나 스레드 안전하다
    • 불변 객체는 캐싱하기 쉽다
    • 불변 객체는 NULL 참조를 방지한다
  5. 객체의 클래스에 정적(클래스) 멤버가 없다
    • 정적 멤버는 클래스의 행위를 구현하지, 객체의 행위를 구현하지 않는다
    • 정적 멤버를 사용한다면 Mock하는 것이 불가능하며 스레드 안전하지 않다.
    • 정적 멤버를 사용한다면 OOP의 패러다임에 반하는 일이며 이는 다른 객체로부터 완변하게 고립되지 못 한다
  6. 객체의 이름이 직명을 나타내지 않는다
    • 객체의 이름은 이 객체가 무엇인지 말해야 하고 무슨 일을 하는지 말해서는 안 된다
    • 일반적으로 “er”로 끝나는 이름은 피하라
  7. 객체의 클래스가 Final이나 Abstract다
    • 상속을 통해 확장할 수 없는 클래스이며 확장하기 위해서는 데코레이션 패턴을 통해서 한다
    • 인스턴스를 가질 수 없는 클래스로 만들어 abstract로 표시해 로직을 주입하길 바라도록 한다.c
    • 이런 방식으로 작성하면 원본 객체의 내부 로직을 건드릴 수 없게 할 수 있다.

소프트웨어 장인이 가져야할 태도

  1. 프로그래밍 역량 외에도 테스트, 배포 자동화, 고객/구성원들과의 협업, 문화 만들기 등에도 관심을 가지는 자세
  2. 테스트 코드 구현까지 완료해야 기능 구현을 완료하는 것으로 생각하는 자세
  3. 레거시 코드를 바라볼 때 재미있고, 도전적인 문제로 바라보는 자세
  4. 무리한 일정과 변경 요구에 무조건적으로 ‘예’라고 말하기 보다, ‘아니오’라는 말을 하고 대안을 제시하는 자세
  5. 자신의 시간과 돈을 들여 스스로 성장하려는 자세
  6. 나 혼자 성장하는 것에만 관심을 가지기 보다, 후배들을 키우고, 커뮤니티를 통해 같이 학습하고, 지식을 공유해 소프트웨어 산업 생태계에도 기여하려는 자세
  7. 고객(또는 고용주)을 프로젝트를 성공시킬 생산적인 동반자 관계로 바라보는 자세. 동반자 관계와 거리가 멀고 나의 커리어에 부정적이라고 느낀다면 다른 고객을 찾아라.
  8. 소프트웨어 장인에게 가장 필요한 자질은 정직과 용기

우테코의 말말말

  1. 슬럼프에 빠지지 않으면서 꾸준히 학습하는 게 가장 좋다.
  2. 운동은 필수다. 체력 관리를 하라.
  3. 의욕만 넘쳐서 무턱대고 하지말고 효율적으로 공부해라.
  4. 상대방의 의견이 좋았어도 바로 콜하지 말고 내 의견을 이야기하자.(매번 Okay만 하지말자) 더불어 상대방이 이해할 수 있도록 명확히 이야기하자
  5. 이슈는 먼저 본 사람이 줍는다.
  6. 모르면 모른다고 확실히 말하자.
  7. 도메인 테스트 커버리지가 80%가 넘도록 하자
  8. 모른다면 적어도 검색할 수 있는 키워드를 뽑아낼 수 있는 능력을 키우자
  9. 완벽주의적인 성향이면 새로운 도전을 안 할 가능성이 있다. 완벽주의적인 성향을 깨라.
  10. 의미있는 커밋 메세지를 남기자
  11. 짧은 실패를 자주 해라.
  12. 빨리 가려고 하지말고 그냥 매일 매일 일정 시간을 투자하면 된다
  13. 책도 그렇고 컴퓨터 용어도 그렇고 처음부터 완벽히 이해하려고 하지 마라. “~일거야”라고 가정을 한 뒤에 반복해서 보면 감이 생긴다.
  14. 깨지는 테스트는 필요없다.
  15. 프로그래밍을 정말 즐긴다면 시키는 것만 하지 않는다. 스스로 다른 개발을 찾아서 한다.
  16. 심리적 안정감이 팀을 효율적으로 만든다.
  17. 어떤 의견을 제시해도 벌을 받거나 보복당하지 않을 거라고 믿는 조직 환경을 만들자
  18. 가장 만족도가 높은 교육은 문제의 단계를 쪼개고 이빨 빠진 코드를 준 후, 힌트를 통해 문제해결을 하는 것이었다.
  19. 심리적 안정감을 만드는 역량을 키우는 좋은 방법은 리더가 되거나 교사가 되면 된다
  20. 가장 좋지 않은 팀 분위기는 충돌이 없는 것이다. 충돌을 두려워하지 말자.
  21. 발표 잘하는 노하우는 발표를 많이 해보는 것이다. 커뮤니티 스터디와 같이 소그룹에서 발표하는 연습을 해보자. 그리고 나 자신도 발표하는 사람이 실수해도 괜찮다고 응원하는 사람이 되자.

블로그의 말말말

  1. 현재를 위해 TC를 작성하되 개발이 진행되면서 미래를 위한 TC들로 바뀌어야 한다.
  2. 내부 구현은 공개된 인터페이스를 통해서만 테스트한다
  3. TDD 혹은 테스트 자동화를 프로젝트에 진지하게 도입하고 있는 개발자라면 다른 프로젝트의 커버리지보다는 테스트 가능한 것과 테스트 불가능한 것을 어떻게 분리해냈느냐가 더 궁금할 것이다.

우테코의 페어 프로그래밍 피드백 모음

  • 좋았던 점

    • 처음부터 끝까지 TDD로 진행한 것
    • 각자 피드백을 받은 후 공유하는 시간
    • 개인 컨디션과 상황을 배려한 것
    • 협업 규칙을 정한 것. 쉴 때 쉬자고 이야기 한 것
    • 자신에게 익숙하지 않은 내용에 대해 스스로 공부하고 온 것
  • 아쉬운 점

    • 좀 더 유연하게 생각했으면 좋겠다.
    • 이유를 명확히 하는 습관을 들이면 좋을 것 같다.
    • 의견 표현을 좀 더 해도 좋을 것 같다.
    • 의견 충돌하는 경우가 있었다. 빠르게 제출한 뒤 리펙토링을 하는 경우가 있었고, 처음부터 설계에 힘 주는 걸 좋아하는 경우가 있었다.
    • 필요 이상의 완벽주의가 있다. 코드 품질에 대한 스스로의 압박이 있다.
    • 생각하는 것에 시간을 많이 소비한다.

출처

  • https://codingnuri.com/seven-virtues-of-good-object/
  • https://developerfarm.wordpress.com/2012/01/26/object_calisthenics_1/
  • https://ui.toast.com/weekly-pick/ko_20200708/