나는 어떻게 프로그래밍을 공부할 것인가?

HoonDong_K·2025년 4월 25일

의식적인 연습

목록 보기
4/5
post-thumbnail

시작

인프런에 있는 프로그래밍, 어떻게 공부할 것인가 강의를 추천받아 우연히 김창준님의 강의를 발견하게 되었다. 의식적인 연습 워크숍에서 배웠던 내용들이나 함께 자라기 도서에서 지향하는 방향성에 대해 관심을 갖고 있던 요즘, 해당 강의는 지금까지 내가 경험한 모든 의식적 연습의 조각들을 하나로 통합해주는 핵심적인 역할을 해줄 것이라 생각되어 결제하게 되었고, 총 강의 시간도 3시간 48분으로 부담 없이 빠르게 수강할 수 있었다.

  • 강의 수강 기한이 3개월이라는 점이 조금 아쉽다 😥

강의 내용

1️⃣ 전문성에 대해

'전문성'에 대한 사람들의 일반적인 미신에 대해 설명하고 실제 연구를 통해 잘못되었음을 보여주었다. 해당 챕터에서 인상깊게 들었던 내용 두 가지를 뽑아보았다.

1. 고정사고관과 성장사고관

캐롤 드웩의 저서인 '마인드셋'에서는 고정사고관과 성장사고관을 설명한다.

  • 고정사고관: 사람은 유한된 한계의 지능을 갖고 태어나며 변화하지 않는다.
  • 성장사고관: 사람의 지식과 능력은 노력을 통해 성장시켜나갈 수 있다.

대학교에서 학생들의 지능 테스트를 진행하고 한 학기 후에 재실행을 하였을 때, 고정사고관을 믿는 학생들은 점수가 그대로였지만 성장사고관을 믿는 학생들은 점수가 향상됨.

가난한 동네에 사는 동네 아이들에게 한 대학생 그룹이 '성장할 수 있는 편지'를 주마다 작성하여 전달하였더니, 동네 아이들뿐만 아니라 편지를 작성한 대학생들도 사고관의 변화가 이루어짐.

전문성은 선천적인 것이 아닌 성장사고관을 통해 학습의 의지로 자신의 능력을 발전시킬 수 있다는 것을 알 수 있다.

2. 이해와 학습은 다르다는 것.

학생들에게 서양화와 서양화가에 대해 미리 학습을 시킨다.

  • A반 서양화와 서양화가에 대해 계층적인 구조로 세세히 나눠 체계적으로 설명
  • B반 아무런 설명없이 서양화를 보여주고 그에 맞는 화가명을 알려주며 설명

이후, 테스트를 진행하였을 때 A반이 만족도와 테스트 점수가 모두 B반보다 높았다.

일정 시간이 지나고나서 다시 테스트를 진행하였을 때, A반은 수업은 받지 않은 집단과 동일한 점수를 받고, B반은 기존보다 점수가 낮아졌지만 A반보다 점수가 높았다.

인간은 무작위성에 대해 스트레스를 많이 받으며 '장기적인 기억 효과'가 활성화된다. 술술 이해가 잘된다면 만족도도 높고 단기인 기억에 강할 수 있지만 복습을 하지 않는다면 장기적인 면에서 기억 효과가 떨어진다.

전문성을 예측할 수 있는 최고의 요인은 연습량이다.

  • 세계적 수준: 10,000시간
  • 전문가 수준: 8,000시간
  • 음악선생: 5,000시간
  • 아마추어: 2,000시간

하지만 단순히 출근을 하여 업무를 하거나, 무의식적으로 작업하며 연습하는 것이 아닌 순수 의도적으로 수련하는 시간을 의미한다.

2️⃣ 의도적 수련

의도적 수련을 정의하고 효과적으로 수행할 수 있는 요소는 총 4가지가 있다.

1. 잘 정의된 작업

실제 실행하려는 목표는 최대한 구체적으로 잘 정의되어있는 것이 좋다.

  • "디자인 패턴을 잘 쓰겠다" VS "일주일에 하나의 디자인 패턴을 정하여 개념부터 응용까지 시도해보겠다"

또한 목표 의도를 갖는 것보다 구현 의도를 담는 것이 더 성공률이 높다.

  • "살을 빼겠다" VS "매일 줄넘기를 하겠다"

2. 적절한 난이도

몰입에 들어갈 수 있는 적절한 난이도를 설정하여 수행하는 것이 효율적이다.

  • 지루함을 느끼면 난이도를 높이거나 실력을 줄이는 방법
  • 두려움을 느끼면 난이도를 낮추거나 실력을 높이는 방법

모든 것이 새로운 것을 처음부터 배우기보다는 모르는 것과 알고 있는 것을 섞어가면서 공부하는 것이 더 학습효과가 뛰어나다.

3. 정보가 풍부하고 때에 맞는 피드백

피드백을 받을 수 있는 정보가 풍부하며 적절한 시기에 받을 수 있는 타이밍이 중요하다.

  • 계란 떨어뜨리기
    - A 그룹은 일정한 간격으로 강제로 계란을 떨어뜨렸고
    - 다른 그룹에 비해 계란이 깨지지 않을 확률이 2배 이상 높아짐.
  • 타이밍의 중요성
    - 생쥐가 버튼을 눌렀을 때, 바로 먹이를 주면 학습이 가능
    • 버튼을 눌렀을 때, 랜덤한 간격으로 먹이가 나오면 학습 불가능

4. 반복과 실수 교정의 기회

최대한 많이 반복해보고 그 속에서 발생되는 실수를 고쳐나가면서 성과를 높여나간다.

  • 로버트 플로이드의 튜링상 강연
    1. 어려운 알고리즘 문제를 풀고 얻은 통찰로 새롭게 다시 푼다.
    2. 본인이 원하는 퀄리티의 해법이 나올 때까지 계속 풀어본다.
    3. 비슷한 문제를 관통할 수 있는 일반적인 틀을 찾는다.
  • 도자기 수업
    - Quantity group과 Quality group을 나눠서 학생들이 각 그룹을 선택
    - 최고의 도자기는 Quantity group에서 나왔음
    - Quantity group은 도자기를 최대한 많이 만들어보면서 그 속에서 발전될 수 있는 부분을 찾고 도자기의 질을 높여냄.

3️⃣ 효과적 학습법

사람들이 수행하는 여러 학습법들을 제시하고 그 중 비효율적인 학습과 효율적인 학습법을 구분하였다. 효율적인 학습법 중 인상깊었던 두 가지를 뽑아보았다.

1. 분산학습

분산학습은 학습 간에 어느 정도 간격을 두고 공부하는 방법이다.

  • A: 3시간씩 2번 / B: 1시간씩 6번
  • A 그룹의 만족도가 더 높을 수 있지만 학습 효과는 B가 높다.

벼락치기로 짧은 시간 내에 많은 것을 학습하는 것은 단기적으로 기억이 더 남을 지언정 망각 또한 빠르게 이루어진다.

2. 자문하기 / 설명하기

  • 자문하기: 자세하게 나 스스로에게 정교한 심문해보기
  • 설명하기: 새로운 정보가 내가 알고 있는 정보와 어떤 연관성이 있는지 설명해보기

내가 작성한 코드나 학습한 내용에 대해 자문해보면서 이해한 내용을 한층 더 강화시킬 수 있고 기존의 내가 알고 있던 지식과 함께 통합해보며 설명함으로써 학습 효과를 높일 수 있다.

  • 전이 효과
    - 응용할 수 있는 능력이 특히 높아짐.
    - 왜? 라는 것에 대해 질문해보고 스스로 이유를 설명해봄으로써 지식을 제대로 이해하고
    - 다른 지식에 이어서 확장해볼 수 있음.

스스로 해보기

1. 잘 정의된 계획

  • 핵심 목표: 2주 뒤 진행될 항해 백엔드 Lite 과정에 능동적으로 적응하기 위해,
    NestJS TypeScript 기초부터 실전까지 익숙해지는 것이 목표이다.

  • 수행 과제: 적절한 난이도의 프로젝트를 통해 NestJS의 기본 구조를 파악하고 그 특징과 장단점에 대해 공부하기

2. 적절한 난이도

  • Todo list 앱부터 만들어보기
    - 간단한 CRUD, 로그인 기능 등
    - TS 기본 문법과 NestJS의 구조 익히기
  • 게시판 및 채팅 기능 구현
    - 유저별 인증, 파일 업로드, 보안, 소켓 통신
    - 조금 더 심화된 난이도

3. 정보가 풍부하고 때에 맞는 피드백

  • 기능을 구현하면서 스스로 자문하고 설명해보기
  • AI를 이용하여 구현 코드에 대한 최적화 및 리팩터링
  • 에러가 발생하였을 때 왜 발생하였는지, 어떻게 해결할 수 있는지 고민해보고 AI를 통한 검증

4. 반복과 실수 교정의 기회

  • 간단하지만 다양한 기능들을 추가
  • 그 과정에서 학습한 내용에 대해 회고 및 글쓰기
  • 분산 학습을 통해 실패 교정 (틀렸던 부분에 대해 기록하고 매일 1 ~ 2개씩 퀴즈처럼 체크 가능)
profile
도움이 될 수 있는 개발자

0개의 댓글