코드를 잘 읽는 방법과 코드 읽기

코드 읽기

  • 개발자는 의식적으로 코드 작성을 연습하지만 의식적으로 코드 읽기를 연습하지는 않습니다.

  • 실제로 개발자는 코드를 작성하는 것보다 코드를 더 많이 읽습니다.

코드는 사람이 읽기 쉽게 작성해야 한다고 하는데, 어떻게 읽기 쉬운 코드를 작성합니까?

코드를 읽는 이유

  • 시스템을 이해하려면
  • 작성된 코드 중간에 새로운 기능을 추가해야 할 때
  • 작성된 코드에서 오류를 식별하려면
  • 작성된 코드의 구체적인 구현이 궁금하시다면

코드를 읽는 일반적인 목적은 특정 정보를 찾는 것입니다.

코드 재생산을 통한 인지 과정

public void insertSort() {
    int() array = {10, 30, 25, 37, 5, 88};
    int temp;

    for(int i=0; i<array.length; i++) {
        for(int j=i; j>0; j--) {
            if(array(j) < array(j-1)) {
                temp = array(j);
                array(j) = array(j-1);
                array(j-1) = temp;
            }
        }
    }

    for (int i = 0; i < array.length ; i++) {
        System.out.println(array(i));
    }
}
  • 이 코드를 읽고 3분 이내에 다시 빌드하세요.
  • 숙련된 프로그래머용 삽입 정렬 알고리즘 수업 자바 문법 이것은 이미 LTM에 포함되어 있기 때문에 30초 만에 외울 수 있습니다.


코드를 잘 읽는 방법과 코드 읽기 1

  • 우리는 코드를 개별적으로 기억하지 않습니다.

  • 원래 Java 코드를 읽고, 삽입 정렬 후 출력 호출된 프로세스로 코드를 압축하고 볼 수 있습니다.

  • 압축된 정보. 삽입 정렬 알고리즘, 자바 문법 기존 지식을 재구성하여 Java 코드를 재구성합니다.

기억하기 어려운 코드를 외우려고 노력

public void memory(int x()) {
    int b = x.length;
    int temp;

    for (int v = b / 2 - 1; v >= 0 ; v--) {
        func(x, b, v);
    }

    for (int l = b - 1; l > 0; l--) {
        temp = x(l);
        x(l) = x(0);
        x(0) = temp;

        func(x, l, 0);
    }
}
  • 이 코드를 읽고 최대 3분 안에 다시 빌드하세요.
  • 실제로 이 코드는 3분 이내에 읽고 재구성하기가 매우 어렵습니다.

  • LTM에 저장된 지식으로 추측할 수 없는 코드는 재구성하기 어렵습니다.

기억하기 어려운 이유는 무엇입니까? STM 의 특성을 식별

위의 기억하기 어려운 코드 예제의 특성을 식별하는 것으로 시작하겠습니다.

  • 변수 이름 bl 의미 없는 이름으로 명명.
    • 또한 l1 비슷해보이기도 했고
  • 코드가 수행하는 작업에 대한 정보가 없습니다.

LTM 정보를 찾을 수 없었습니다.

STM 넣어야한다 STM 다음과 같은 속성이 있습니다.

  • 용량 제한이 있습니다.

    • 일반적으로 약 6 단어 또는 문자입니다.

    • 1바이트도 안됩니다.

  • 시간 제한이 있습니다.

    • 보통 30초 정도입니다.

전화번호를 암기하는 실험을 통해 쉽게 알 수 있습니다.

청킹(chunking): 메모리 크기 제한을 극복하는 방법

  • 인간의 STM 약 6개의 정보만 저장할 수 있다고 합니다.

  • 하지만 어떻게 그렇게 많은 것을 기억할 수 있을까요?

청크(chunk) 와 묶다

  • 이전에는 자바 코드를 외울 때 숙련된 개발자가 코드의 세부 사항에 더 많은 주의를 기울였습니다.

    삽입 정렬 알고리즘 나는 덩어리 자체를 기억했다.

  • 그렇게 사로잡힌 지식인 청크(chunk) ~이다 STM 정보로 취급할 수 있습니다.

  • 숙련된 개발자 LTM 에게 청크(chunk) 많은 지식이 관련되어 있습니다.

읽기 vs 보기

  • 정보는 STM 도달하기 전에 감각 기억 공간 의 영역을 통과한다.

  • 감각 기억 공간 시각, 후각, 미각, 청각, 촉각 등의 감각을 일시적으로 저장하는 공간입니다.

  • 우리는 보통 프로그래밍할 때 시각적인 것을 사용합니다.

    영상 기억 공간 만 사용
  • 영상 기억 공간 분명히 우리가 보는 모든 글자를 포함하고 있지만, 우리는 우리가 집중하고 이해할 수 있는 부분에만 집중합니다.

    STM 삽입된다

더 많이 알수록 더 읽기 쉽고 더 많은 정보를 한 번에 얻을 수 있습니다.

영상 기억 공간 ~에 STM 보낼 수 있는 기능을 지정합니다.

무엇을 기억하느냐보다 어떻게 기억하느냐가 더 중요하다

  • 바나나, 츄로, 원숭이, 강아지, 고양이, 개껌, 국수그릇, 사람

위의 단어를 외워야 한다면 어떻게 외우시겠습니까? 혼자 암기하는 것보다 두 마리의 동물 + 음식을 암기하는 것이 훨씬 쉽습니다.

  • 바나나, 원숭이, 츄르, 고양이, 강아지, 개껌, 인간, 사발면

디자인 패턴과의 관련성

  • 많은 프레임워크 및 라이브러리 코드는 코딩에서 일반적으로 사용되는 디자인 패턴을 사용합니다.

  • 디자인 패턴을 배우면 기억하는 방식을 바꿀 수 있습니다.

    STM 더 많은 코드를 넣을 수 있습니다.

  • 연구 결과, 디자인 패턴 교육을 받은 후 디자인 패턴을 이용해 코드를 수정하는 속도가 크게 향상됐다.

주석과의 연관성

  • 연구에 따르면 개발자는 코드가 주석 처리될 때 코드를 읽는 데 더 많은 시간을 할애합니다.

    • 이는 개발자가 주석을 읽을 수 있음을 의미합니다.

  • 좋은 주석은 청킹에 도움이 될 수 있습니다.

    • 전) // 어댑터 패턴 적용, // 중위 순회 함수, // 퀵 소트
    • 고수준 주석문 그것은이라고.
  • 잘못된 주석은 청킹을 방지합니다.

    • 전) // i 를 증가시킨다.

      , x 를 감소시킨다.

    • 저수준 주석문 그것은이라고.

표식 (beacon)

  • 이것은 코드를 이해하는 데 도움이 되는 핵심 요소입니다.

  • 다음 후보 그룹을 표시할 수 있습니다.

    • 주석
    • 메서드 이름
    • 변수 이름
    • 분야 명

샘플 코드로 탐색

# 트리에서 한 노드를 나타내는 클래스
class Node:
  def __init__(self, key):
    self.left = None
    self.right = None
    self.val = key

# 중위 순회 함수
def print_in_order(root):
  if root:
    # 왼쪽 자식에 대한 첫번째 재귀 호출
    print_in_order(root.left)

    # 노드 데이터 출력
    print(root.val)

    # 오른쪽 자식에 대한 재귀 호출
    print_in_order(root.right)

print("트리의 내용 출력하기")
print_in_order(tree)
  • 다음과 같은 표시가 있었습니다.

    • 주석에서 “나무”라는 단어 사용
    • root, tree, left, right 다음과 같은 변수 이름
    • print() 문자열 내부 메서드 "트리의 내용 출력하기"

표식(beacon) 이진 트리는 노드를 사용하여 구성되며 트리는 중위 순회 함수를 사용하여 출력됩니다.

이 코드는 쉽게 표현할 수 있습니다.

마킹의 종류

  • 단순 표식 수업 복합 표식 있다
    • 단순 표식: 변수 이름, root, tree 당연한 것으로 여겨지는 징후들
    • 복합 표식: self.left, self.right 정보가 결합되었을 때만 의미가 있는 표시, 동일

마크 트레이닝 방법

  • 잘 아는 언어로 된 코드 베이스를 선택하십시오.
  • 방법을 선택하고 수행하는 작업을 요약합니다.

  • 이렇게 하겠다고 생각한 이유와 주석, 변수 이름 및 메서드 이름과 같은 마커를 인식한 방법을 기록합니다.

  • 당신이 그것을 어떻게 이해했는지 생각해보십시오.
    • 어떤 마커를 찾으셨나요
    • 어떤 형태로 표시가 나타 났습니까?
    • 표지판은 우리에게 무엇을 말했습니까?
    • 마커는 코드의 도메인 지식을 나타냅니까?
    • 마커는 코드의 기능에 대한 지식을 나타냅니까?
  • 표시를 개선하거나 확장하십시오.
    • 표시해야 하는 곳에 마커를 추가할 수도 있습니다.

  • 그것을 시도하고 다른 사람들과 비교하십시오.

청킹 훈련 방법

  • 익숙한 언어로 된 코드 기반을 선택하십시오.
  • 2분만 투자하여 코드를 알아내십시오.
  • IDE 또는 파일에서 코드를 재현합니다.

  • 연락을 시도하겠습니다.

    • 어떤 부분이 쉽게 기억났나요?
    • 부분적으로 저장된 코드가 있습니까?
    • 완전히 기억하지 못하는 코드가 있습니까?
    • 기억나지 않는 대사가 있다면 그 이유는 무엇입니까?
    • 당신이 모르고 기억하지 못하는 일이 있습니까?
      • 더 많은 도메인 지식이나 프로그래밍 개념이 필요하십니까?
  • 그것을 시도하고 다른 사람들과 비교하십시오.