행궁동 데이터 엔지니어

반응형

https://product.kyobobook.co.kr/detail/S000001952236

 

프로그래머의 뇌 | 펠리너 헤르만스 - 교보문고

프로그래머의 뇌 | 인지과학을 활용한 개발자의 일머리 개선법이 책은 인지과학에 기반을 둔 각종 방법론으로 개발자가 새로운 언어나 프레임워크를 빠르게 배워 생산성을 향상하도록 돕는다.

product.kyobobook.co.kr

 

1. 저자

  • 펠리너 헤르만스(Felienne Hermans) 네덜란드 레이던 대학교의 부교수로 프로그래밍 교육과 언어가 주 연구분야인 거 같다.
  • 어떤 분인지 궁금해서 조금 더 찾아보니 주말에는 대학생이 아닌 어린 학생들을 가르치기도 하고 SE radio(Software Engineering Radio, https://www.se-radio.net/) 팟캐스트에서도 활동하는 비교적 젊은 교수님(2013년 델프트 공과대학교에서 박사 학위 취득) 인 것 같다.
  • 대학교 페이지: https://www.universiteitleiden.nl/en/staffmembers/felienne-hermans/publications#tab-1

 

2. 내용

  • 프로그래밍 과정에 숨어 있는 인지과정 이야기를 시작으로 코드를 잘 이해하는 방법과 좋은 코드를 작성하는 방법 그리고 협력해서 일하는 방법까지 제안한다.

2.1. Part 1: 코드 더 잘 읽기

  • 코드가 초래하는 3가지 종류의 혼란(지식, 정보, 처리능력 부족)
  • LTM(Long-Term Memory) , STM(Short-Term Memory), 작업 기억 공간
  • 프로그래머들의 청킹(Chunking, 정보를 의미있는 묶음으로 만드는 것 )
  • 코드에서 자주사용하는 패턴 알기
  • 중간에 문법을 검색하며 프로그래밍이 끊어지는 행위의 단점 그리고 문법을 빠르게 배우기 위한 플래시카드 활용 제안
  • 의존 그래프, 상태표를 작성해 인지 부하 줄이기

 

2.2. Part 2: 코드에 대해 생각하기

  • 변수들의 세부 분류: 상수, 임시 변수, 스테퍼(i를 1부터 100까지), 누적되는 변수, 최근 값을 담고 있는 변수, 컨테이너(원소를 추가하거나 삭제할 수 있는 자료형) 등 변수의 역할로 코드 보기
  • 변수명의 의미를 추론하거나 기존 지식을 활용해서 코드 이해, 코드에서 중요한 라인 찾기, 코드 요약

 

2.3. Part 3: 좋은 코드 작성하기

  • 코드베이스의 명명 관행을 지키고 보다 명확한 이름을 지으려 노력하기 (ex. max_score가 score_max보다 자연어와 가까워 이해하기 쉽다)
  • 코드 스멜 (파울러, 리팩터링) 피하기
  • 언어적 안티패턴 피하기
    • 언어적 안티패턴은 메서드 입출력 정의, 설명 문서, 속성 이름, 데이터 타입, 주석 문 등의 언어적 요소가 수행하는 역할과 일치하지 않을 때 발생한다
    • is_valid: 불리언 변수(True, False)처럼 보이는 변수가 정수 값을 가지는 것
    • getCustomers 메서드: 고객의 리스트를 반환할 것 같은 메서드가 하나의 불리언 값을 반환하는 것
    • 아나우도바(Venera Arnaoudova)의 6가지 언어적 안티 패턴 (책 166 Page) 순번 내용  
      순번 안티패턴 내용
      1 이름이 나타내는 것보다 더 많은 일을 하는 메서드
      2 이름이 나타내는 것보다 더 적은 일을 하는 메서드
      3 이름과 정반대의 일을 하는 메서드
      4 개체에 포함된 것보다 더 많은 것을 가지고 있는 것처럼 보이는 식별자 이름
      5 개체에 포함된 것을 누락하는 식별자 이름
      6 개체에 포함된 것과 반대되는 식별자 이름
  • 의도적 연습으로 기본 문법, 단축키를 암기하고 자동화 하기
  • 기존 코드, 코드 설계 방법을 이해하기

2.4. Part 4: 코딩에서의 협업

  • 작업 중 중단이 미치는 영향이 크다는 것을 이해
    • 중단 이후 원래 작업으로 돌아가는 데는 약 25분의 시간이 걸리고 1분 이내 작업을 재개하는 경우는 10%에 불과했다. - 198page
  • 작업 중 중단이 발생하는 것에 대응하기
    • 중단을 예방한다.
      • 자신이 집중하고 있다는 것을 어떻게든 동료들에게 알림(닌자 모드)
    • 중단에 잘 대비한다.
      • 1. 현재 하던 정신 모델을 잘 저장하기
      • 2. 다음에 이어서 하려던 작업을 적어 놓기
      • 3. 프로그래밍 작업을 쪼개서 준비해두기
  • Part4 - Ch12 대규모 시스템의 설계와 개선 부분은 빠르게 훑고 스킵했다.
  • 새로운 팀원의 적응을 지원할 때 적응 과정에서 너무 많은 정보를 전달하면 새로운 팀원은 인지부하를 느끼고 생각하지 못하게 된다.
    • 새로운 직원은 인지부하로 괴로워하고 일이 많은 것 같아 걱정할 수 있고, 기존 팀원들은 새로운 팀원이 그다지 똑똑하지 않다고 생각할 수 있다.
  • 지식 전달에 대한 안티 패턴 3가지 - 230page
    • 고 평면선: 추상화된 용어로만 설명하는 것
    • 저 평면선: 구체적으로 설명하나 그것이 왜 필요한지는 이야기하지 않는 것
    • 추상적 → 구체적으로 이야기를 잘 풀어갔으나 다시 한번 생각할 기회를 주지 않는 것

3. 인상 깊었던 부분

  • 문법과 IDE의 사용법을 잘 아는 것도 중요하다는 생각
    • 문법, IDE 사용법 검색 2가지 모두 일시적인 작업 중단을 일으킨다. 
    • 다른 언어를 새롭게 배울 때 컨테이너 자료형 데이터 처리와 반복문에서 특히 애를 먹었던 기억이 있다.
    • 어떻게 구현해야 할지 생각은 떠오르나 기본적인 문법 지식이 없으니 답답했다.
    • 새로운 언어를 다루게 될 때는 문법을 플래시카드로 빠르게 익히는 방법을 쓰면 좋을 것 같다.
  • 변수의 체계적 분류와 코딩 테스트를 하는 것처럼 상태 분류표를 활용해 이해가 어려운 코드 해석하기
  • 작업 중단에 잘 대처하는 방법
  • 새로운 팀원의 온보딩에 대한 이야기

 

4. 적용

4.1. 당장 할 것

1. VSCode 기준으로 IDE 단축키, 세팅 방법을 익히고 주요 Extensions 사용 방법을 숙지

  • 기존에 VSCode, PyCharm, IntelliJ, GoLand, WebStorm 등 여러 가지 IDE를 상황에 따라 사용했었다.
  • 현재 회사 구성원 대부분이 VSCode를 사용하기에 VSCode 기준으로 IDE 단축키, 세팅, 주요 Extensions사용법을 숙지하고 IDE 사용법을 위해 검색하다 프로그래밍의 흐름이 끊기지 않도록 하자.

2. 새로운 언어 문법 체계적으로 익히기

  • JS 또는 TS를 새롭게 배워야 할 것 같다.
  • 지난 11월 Go 문법을 익히기 위해 2시간 정도의 짧은 인프런 강의로 문법을 공부한 적 있었는데 많은 도움이 됐다.
  • 예전 기억을 더듬어보니 Python도 점프 투 파이썬이라는 책을 8시간 정도 따라 하며 익혔던 기억이 난다.
  • JS, TS를 사용하기 전에 JS관련 얇은 책 또는 4시간 미만 강의로 빠르게 훑자.
  • 중점적으로 볼 것: 반복문 생성 방법(while, for, foreach), 분기문 생성 방법(if, switch..), 주요 컨테이너 자료형(배열, 사전, 중복이 허용되지 않는 집합 등), 컨테이너 자료형을 다루는 메서드 들, 함수, 클래스 생성 방법, 패키지 불러오기, 패키지 관리하기

3. 작업 중단에 잘 대처하기

  • 서비스 에러 확인, 데이터 요청, 회의, 질문 등 프로그래밍 업무 중 작업 중단이 발생하는 경우가 있다.
  • 작업 중단이 발생하면 기존에 하던 작업을 까먹지 않도록 메모하고, 중단 이후에 어디부터 시작할 건지 미리 적도록 하자. 또한 큰 작업의 경우 미리 쪼갠 후에 작업한다.

4.2. 나중에 할 것

1. 온보딩 돕기

  • 새로운 팀원이 들어오면 잘 적응할 수 있도록 온보딩 과정을 돕는다.
  • 지식을 전달하게 되면 지식 전달의 안티 패턴(고 평명선, 저 평면선, 다시 한번 생각할 기회를 주지 않는 것)을 조심한다.
  • 온보딩을 도울 일이 생기면 책의 "Chapter 13: 새로운 개발자 팀원의 적응 지원"을 다시 보자

2. 이해하기 어려운 코드를 분해하고 해석하며 확인하기

  • 상태표 활용, 변수의 체계적 분류
반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band