코드 읽기
- 개발자는 의식적으로 코드 작성을 연습하지만 의식적으로 코드 읽기를 연습하지는 않습니다.
- 실제로 개발자는 코드를 작성하는 것보다 코드를 더 많이 읽습니다.
코드는 사람이 읽기 쉽게 작성해야 한다고 하는데, 어떻게 읽기 쉬운 코드를 작성합니까?
코드를 읽는 이유
- 시스템을 이해하려면
- 작성된 코드 중간에 새로운 기능을 추가해야 할 때
- 작성된 코드에서 오류를 식별하려면
- 작성된 코드의 구체적인 구현이 궁금하시다면
코드를 읽는 일반적인 목적은 특정 정보를 찾는 것입니다.
코드 재생산을 통한 인지 과정
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초 만에 외울 수 있습니다.
- 우리는 코드를 개별적으로 기억하지 않습니다.
- 원래 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
의 특성을 식별
위의 기억하기 어려운 코드 예제의 특성을 식별하는 것으로 시작하겠습니다.
- 변수 이름
b
나l
의미 없는 이름으로 명명.- 또한
l
은1
비슷해보이기도 했고
- 또한
- 코드가 수행하는 작업에 대한 정보가 없습니다.
LTM
정보를 찾을 수 없었습니다.
STM
넣어야한다 STM
다음과 같은 속성이 있습니다.
- 용량 제한이 있습니다.
- 일반적으로 약 6 단어 또는 문자입니다.
- 1바이트도 안됩니다.
- 일반적으로 약 6 단어 또는 문자입니다.
- 시간 제한이 있습니다.
- 보통 30초 정도입니다.
- 보통 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 또는 파일에서 코드를 재현합니다.
- 연락을 시도하겠습니다.
- 어떤 부분이 쉽게 기억났나요?
- 부분적으로 저장된 코드가 있습니까?
- 완전히 기억하지 못하는 코드가 있습니까?
- 기억나지 않는 대사가 있다면 그 이유는 무엇입니까?
- 당신이 모르고 기억하지 못하는 일이 있습니까?
- 더 많은 도메인 지식이나 프로그래밍 개념이 필요하십니까?
- 그것을 시도하고 다른 사람들과 비교하십시오.