ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 코드를 더 깊이 있게 이해하기 & 문제 더 잘 해결하기
    클린 코드(Clean Code)/프로그래머의 뇌 2024. 1. 12. 00:01
    728x90

    코드를 깊이 이해하기

    만약 코드를 어느 정도 이해하고 나면 코드에 대해 더 깊이 이해하는 것이 좋습니다.

    • 새로운 기능은 어디에 추가해야 할까?
    • 다른 방식으로 설계하면 어떤 것이 가능할까?

     

    이해를 넘어 응용하기 위한 단계로 나아갑니다.

     

    코드를 어떻게 하면 깊이 이해할 수 있을까?

    텍스트 구조 지식과 계획지식을 이해해야 합니다.

    텍스트 구조 지식은 프로그래밍의 키워드가 하는 일 혹은 변수의 역할등 이해하는 것입니다.

    계획 지식은 프로그래머가 프로그램을 작성할 때 무엇을 달성하려고 했는가 이해하는 것입니다.

     

    책에서는 코드를 깊이 이해하기 위한 절차를 소개합니다.

     

    1. 초점을 잡는다 - 어디서 부터 읽어야 할지
    2. 초점으로부터 지식을 확장한다.
    3. 관련된 객체로 개념을 이해한다.
    4. 여러 객체에 걸쳐 있는 개념을 이해한다.

     

    프로그래밍 언어를 읽는것을 인간의 언어를 읽는 것과 유사하다.

    실험에서 산술 능력이 높은 실험자보다 언어 능력이 높은 실험자가 프로그래밍 언어를 빠르게 학습하였다.

     

     

    문제를 더 잘 해결하기

    • 성능이 우선일까? 사용의 용이성이 우선일까?
    • 코드의 변경 가능성을 고려할까? 현재 문제만 해결할까?

     

    각각의 해결책에는 장단점이 있고 고려해야 할 사항들이 많기 때문에 어떤 해결책을 사용할 것인지 결정하기는 어렵습니다.

     

    문제를 더 잘 해결하기 위한 2가지의 개념인(정신모델, 기계적 개념) 소개합니다.

     

    정신 모델

    우리는 흔히 소프트웨어의 객체 관계 도형을 그리거나 화이트보드에 그림을 그려 모델을 만들어 문제를 해결하곤 합니다.

    정신 모델이란 우리가 내적으로 생각하는 것으로 마음속에 그려보는 것을 뜻합니다.

     

    "눈 사람에게 스웨터를 입히면 눈이 더 빨리 녹을까?"

     

    스웨터는 우리에게 따뜻한 이미지를 주기 때문에 눈이 더 빨리 녹을 것 같습니다.

    하지만 스웨터는 단열재로 체온을 유지시켜 주기 때문에 오히려 눈사람은 더 느리게 녹습니다.

     

    이제 이 글을 읽었다면 스웨터에 대한 새로운 정신모델이 생기지만 스웨터의 따뜻함 이미지는 사라지지 않기 때문에 두 모델을 경쟁하게 됩니다.

     

    즉, 복잡한 코드를 읽을 때도 잘못된 정신모델을 가져다가 사용할 수 있습니다.

    예를 들면 비동기식 코드를 읽을 때 동기식 정신 모델을 잘못 사용할 수 있습니다.

     

    정신 모델은 세부 정보가 많을수록 시스템에 대한 추론이 쉬워지기 때문에 구체적인 정신 모델을 만들어 문제를 해결하는 것이 좋습니다.

     

     

    개념적 기계

    컴퓨터가 코드를 실행하는 방법에 대해 추론할 때 사용하는 모델입니다.

     

    우리는 흔히 비트가 어떻게 이동하는지에는 관심은 없고, 더 높은 개념적 수준에서 "두 개의 값이 바뀌는구나" 라는 것에 관심이 있습니다.

     

    이런 식으로 어느 정도 개념적으로 추상화를 수행하는 게 문제를 더 잘 해결하는 방법으로 제시하는 것 같습니다.

     

    개인적인 생각

    두뇌 실험에 대한 이야기 및 뇌에 대한 개념들이 혹은 새로운 개념들이 점점 등장합니다.

    코드를 잘 읽기 위해 이런 개념들을 숙지하고 떠올린다면 오히려 더 헷갈릴 수 있지 않을까?라는 생각도 듭니다.

     

    요약

    • 코드를 어느 정도 이해했다면 변경 가능성과 다른 설계 방법을 고민해 보자
    • 문제를 잘 해결하기 위해서는 옳고 구체적인 정신 모델을 사용하고, 적절한 추상화를 활용하자

     

     

    댓글

Designed by Tistory.