Yunseok's Dev Blog

배운 것을 적는 블로그입니다.

인출 위주의 학습법 적용기

나는 어떻게 학습을 해왔는가?

문서 읽기

나는 무언가를 배울 때 공식 문서를 많이 봤다. 내가 뭘 모르는지도 모르고, 내가 필요한 게 뭔지도 잘 모르니까 진짜 무식하게 처음부터 끝까지 다 읽었다. AWS Lambda, DynamoDB를 배울 때 페이지가 500페이지가 넘어가는데 그냥 처음부터 끝까지 다 읽었다. 최근에는 스프링 부트 문서를 제본을 맡겨서 책으로 출력했다. 근데 문서는 카탈로그 식으로 된 자료들이라서 읽기가 어려웠다. 그럴 때는 책을 구입해서 책을 읽었다.

책 읽기

쉽게 풀어주거나 문맥이 있어서 문서보다는 쉬웠다. 설치하는 방법에서부터 응용까지 설명 해주니 편했다. 문서에 나와있지 않는 클린 코드나 객체지향, DDD 같은 내용들은 책을 통해 공부를 했다.

강의 보기

책으로도 안 되는 것들은 강의를 들었다. 최근에는 아샬님의 스프링 부트 강의를 들었다. 따라 치기도 하고 자바 코드를 코틀린 코드로 바꿔보기도 하면서 강의를 들었는데, 막상 강의를 끄고 직접 코드를 작성하려고 하면 아무것도 생각이 안 났다.

input 중심의 학습법

IMG_0056 IMG_9712

위의 사진은 읽어야 할 책들을 쌓아놓고 찍었던 사진이다. 충동구매 때문에 산 것도 있고 필요해서 샀던 책들도 있는데 책을 아무리 읽어나가도 결국 새로운 책들이 쌓이는 속도를 따라갈 수가 없었다. 심지어 전에 읽었는데 새로운 버전으로 출시된 리팩터링 자바스크립트 버전이 새로 나왔다.

image

블로그에 이렇게 기록하면서 “나는 정말 열심히 했어”라는 만족감을 얻었다. 하나하나씩 쌓아가는 기분도 좋았다. 지금까지는 새로운 지식들을 머리속에 집어넣기만 하는 input 중심의 학습을 하고 있었다. 내가 몇 권의 책을 읽었는지, 어떤 강의를 수강했는지, 어떤 문서를 읽었는지로 학습의 척도로 잡고 있었다.

시험

그러다 우연히 다른 분이 운영하고 있는 책 스터디에 참여했다. 기존에 책을 읽고 책에 대해 토론하는 게 일반적인 스터디였는데 여기서는 책을 읽고 시험을 봤다.

image

이해라는 착각

책을 읽을 때는 분명히 이해했다고 생각했다. 하지만 막상 백지 위에 적으려고 하다보니 기억이 안 났다. 절차적으로 설명을 해야 하는 것은 순서가 정확히 기억이 안났다. 예를 들면 HTTPS에 대해 설명하려면 개념뿐만이 아니라 동작하는 순서도 알아야 한다.

나는 이해했다라는 착각에 빠진 것이었다. 착각이라는 것은 굉장히 위험하다. 이해했다라고 생각하기 때문에 더 이상 공부하려고 하지 않게 된다. 책을 다시 보더라도 이미 아는 것이라고 대충 읽게 된다. 하지만 막상 시험을 보면 할 수 있는 게 없다.

피드백

그래서 시험을 봄으로써 내가 알고 있는 것이 무엇이고, 모르는 것이 무엇인지 피드백을 얻을 수 있었다. 지금까지는 내가 머릿속에 지식을 넣는 학습만 하고 있었다. 시험을 보면서 내가 가진 지식을 output 바깥으로 꺼내는 연습을 할 수 있었다.

문제집 만들기

시험을 본다고 생각하면서 책을 읽으니까 어떤 문제들이 시험에 나올까? 나 같으면 이런 문제를 낼 텐데 하면서 읽게 되었고 이를 책 앞에 기록했다.

image

스터디를 할 때 이렇게 문제집을 만들면서 서로에게 질문을 하면서 스터디를 진행했다.

내가 할 수 있는 것은 무엇인가?

개념에 대해 어떻게 공부할지는 알겠다. 근데 배워서 내가 무엇을 할 수 있게 되었는가? 개념에 대해 잘 안다고 해서 그것을 잘 한다는 것은 아니다.

69f505b8dee0f4e8d1741867d6931489

efea573460d97c435bda41477c271a0f

bf4669bfb43b10eb33b7a130b9f1344c

1efb2b2ba0f1b331638b6dea1129c88a

그래서 내가 만든 문제집으로 셀프 시험을 볼 수 있는 웹앱을 만들기 시작했다.

셀프 시험

image

앵귤러만 쓸 줄 알았는데 리액트를 배우고 싶어서 리액트로 셀프 시험을 볼 수 있는 웹앱을 만들었다. 직접 만들면서 컴포넌트 테스트, 데이터 흐름 설계, 관심사 분리라는 문제에 부딪히면서 모르는 것을 더 많이 알게 됐다.

초기 버전은 간단하게 질문이 있고 답변이 있는 웹으로 만들었는데 단순하게 텍스트를 읽는 것 만으로는 시험의 느낌이 안 났다. 주관식으로 하자니 평가하기가 어려웠다. 이런 고민을 하는 중에 관계형 데이터베이스 스터디에 참여하게 됐다.

관계형 데이터베이스 스터디

비사이드소프트의 맹기완 대표님이 진행하시는 관계형 데이터 베이스 스터디에 참여하게 되었는데 이론적인 부분이 굉장히 많았다. 실무적인 내용도 뒤에 많이 나오지만 이론이 실질적인 구현으로 나타나는지 배울 수 있어서 좋았다.

관계형 데이터베이스에 대해 잘 알게 된다고 하더라도 데이터베이스 설계조차 하지 못한다면 아무런 의미가 없다고 생각했고, 셀프 시험앱을 만드는데 관계형 데이터베이스를 사용해보자라고 생각했다.

image

기존의 셀프시험 앱은 질문과 답만 보여주면 되니 이렇게 간단한 데이터만 필요했다.

image

하지만 시험을 보기 어려움과 채점이 어렵다는 문제를 해결하기 위해 핵심 키워드를 빈칸으로 만들고 빈칸 만들기로 만들기로 했다. 그래서 필요한 데이터들이 더 필요해졌는데 처음엔 이렇게 설계했다. 하지만 이러한 데이터로는 응용프로그램에서 데이터를 활용해 만들 수 없었다. 어디에 빈칸을 만들고 어떤 빈칸에 어떤 정답을 매치시킬지 알 수 없기 때문이다. 책에서 응용프로그램이 원하는 데이터를 잘 파악해야 한다라는 것을 직접 만들면서 배우게 됐다.

image

그래서 이렇게 설계를 했고 이를 스터디에 공유했다. 스터디에서 이 설계에는 어떤 문제점들이 있어서 어떻게 개선해야 하는지 배울 수 있었다.

image

대표님이 다 설계를 해주신 거긴 한데 결국 이렇게 데이터가 만들어졌고 이를 토대로 프런트와 백엔드를 구현했다.

image

image

빈칸에 키워드를 입력하고 제출하면

image

정답이라면 이런 식으로 화면이 바뀌게 만들었다.

내가 무엇을 할 수 있게 될 것인가?

내가 무엇을 배웠는지가 중요한 것이 아니다. 그래서 내가 무엇을 할 수 있는가가 더 중요하다. 배움을 척도를 내가 무엇을 할 수 있는가?로 잡았다. 그러기 위해 다양한 시도들을 할 것이다.

사실 지금도 하고있다. 쿠버네티스 책 스터디를 할 때 서로 문제를 내주고 배운 것을 실습하는 등 많은 시도들을 하고 있다. 쿠버네티스를 배워서 쿠버네티스로 셀프 시험 웹앱을 배포를 준비하고 있다.

다른 사람들에게 내가 배운 것을 많이 알려줄 것이다. 그러기 위해 코딩의 신 아샬님과 과제 위주의 학습 서비스인 코드숨을 만들고 있다.

image

Sources

  • 셀프 시험 앱 - GitHub - https://github.com/hannut91/self-exam
  • 이태원 코딩도장의 지식도장 - GitHub - https://github.com/wholemann/knowledge-dojo
  • 관계형 데이터베이스 실전 입문 스터디 회고 - 한윤석 블로그 - https://hannut91.github.io/retrospective/relational-study/week-4
  • 어떻게 공부할 것인가 서평 - 한윤석 블로그 - https://hannut91.github.io/blogs/books/make-it-stick
  • 피드포워드 서평 - 한윤석 블로그 - https://hannut91.github.io/blogs/books/feed-forward
  • 울트라러닝 서평 - 한윤석 블로그 - https://hannut91.github.io/blogs/books/ultra-learning
  • 어떻게 공부할 것인가 - 교보문고 - http://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9788937834868
  • 피드 포워드 - 교보문고 - http://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9791187856795
  • 울트라 러닝- 교보문고 - http://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9791162541289