Joel's dev blog: journals

새로운 것을 효율적으로 배우는 방법

August 29, 2021

9 min read

배워야 할 건 너무 많다

기술은 매일 쏟아져 나온다. 당연히 다 배울 수가 없다. 결과적으로 개발자는

  1. ‘기술을 써야 할 때’ (입사를 새로 했다던지, 개인 프로젝트를 하는데 특정 언어나 프레임워크를 꼭 사용해야 하는 상황) 가서 배우는 상황이나,
  2. 우연찮게도 사용해야 하는 기술이 예전에 사용해 본 경험이 있어서 별로 배우지 않아도 되는 상황

을 마주하게 된다.

잘못 배우고 있다

그런데 나는 많은 개발자들이 다음과 같은 중요한 사실을 깨닫지 못하고 있다는 사실을 깨달았다. 새로운 언어, 프레임워크, 라이브러리 등을 배울 때 단편적으로 그 기술만 한정적으로 배우지 않아야 한다. 한 번 배운 것은 그대로 다른 Context에 적용할 수 있어야 한다.

예를 들면 다음과 같다:

  1. 당신은 웹 프론트엔드 개발을 처음 배운다. 리액트라는 라이브러리를 처음 배웠다. 15시간짜리 인터넷 강의로 리액트를 터득했다.
  2. 다음 번에 Vue를 사용해야 하는 상황이 생겼다. 15시간짜리 인터넷 강의를 듣고 Vue를 터득했다.
  3. 다음 번에 Flutter를 사용해야 하는 상황이 생겼다. 15시간짜리 인터넷 강의를 듣고 Flutter를 터득했다.

1, 2, 3번에 투자한 시간이 동일하다. 시간 낭비다. 리액트 한 번 배웠으면 ‘대충 UI 관련된 라이브러리 (혹은 Framework)는 이렇게 구조가 잡혀있고, 이러이러한 API가 존재하는구나’라는 깨달음이 와야 한다. 더 자세히 말하자면 이런 관록이 있어야 한다:

  1. 리액트에서 useStatethis.setState 를 사용하여 상태 관리를 할 수 있다. (X)

    UI 라이브러리나 프레임워크는 상태 관리를 위한 API를 제공한다. (O)

  2. 리액트는 전역 상태 관리를 위해 Provider를 제공한다. (X)

    어느 UI 라이브러리 (혹은 프레임워크)에서도 global state를 해결해야 하는 문제가 존재하고, 그것을 해결하기 위한 API가 존재한다. (O)

그리고 다른 라이브러리 (혹은 프레임워크. 리액트가 라이브러리라고 주장하는 바람에 이 두 가지 말을 혼용하게 되었다.)를 쓸 때쯤이면 그냥 예시만 보고 바로 따라하고, 필요한 개념이나 기능은 개발하면서 습득하는게 가장 빠르다. 삽질은 처음 배울 떄 한번으로 족하다. 시간 아깝다.

그러니 처음에 새로운 개념을 배울 때는 용서가 된다. 어차피 모르니까. 두 번째 비슷한 걸 배울 땐 용서가 안 된다.왜냐하면 당신은 시간 낭비를 하고 있으니까. 개발 외적인 예시를 들어 보자면 이런 것이다:

  1. 당신은 칼질을 처음 배웠다. 파를 써는 법을 3시간 동안 배웠다. 파를 잘 썰게 되었다.
  2. 당신은 양파도 썰어야 한다. 양파를 써는 법을 3시간 동안 배웠다. 양파를 잘 썰게 되었다.
  3. 당신은 무도 썰어야 한다. 무를 써는 법을 3시간 동안 배웠다. 무를 잘 썰게 되었다.

물론 현실에서 3시간동안 배울 일은 만무하고, 이미 자연적으로 처음 파를 배울 때 칼질을 배우면 2, 3번을 할 때쯤이면 이미 높은 확률로 어느 과일이든 칼질이 편해져 있을 것이다. 아마 다음과 같은 상황이 정상적일 것이다:

  1. 당신은 칼질을 처음 배웠다. 파를 써는 법을 3시간 동안 배웠다. 파를 잘 썰게 되었다.
  2. 당신은 양파도 썰어야 한다. 파와 양파는 길이, 모양, 냄새, 촉감이 다르다. 그러므로 양파를 썰을 때 칼질을 하는 기본은 동일하지만, 눈이 매운 것과 양파를 잡고 있다가 손이 미끄러질 수 있는 위험성 등만 조심하며 칼질을 하면 파를 써는 것과 대략 동일하다는 것을 발견하고, 그것을 적용하여 15분만에 양파를 잘 썰게 되었다.
  3. 당신은 무도 썰어야 한다. 무는 비교적 딱딱하기만 하지 파나 양파와 다를 게 거의 없었다. 딱딱한 점만 조심하고 참고하니 15분만에 무를 잘 썰게 되었다.

현실

이 글을 읽는 사람들은 현실은 이렇지 않다고 생각할지도 모르겠다. 그렇지만 적어도 내가 목격한 바로는 이런 개발자들이 전체는 아니지만, 쉽지 않게 찾아볼 수 있다.

난 진짜 답답하다. ‘비슷하지만 새로운 것’을 배우는 어떤 개발자들은 오랜 시간을 필요로 하기 때문이다.

지식 대신 지혜

어쨌든, 다시 멋진 말로 번역해서 말하자면, ‘지식’ 대신 ‘지혜’를 습득하라는 것이다.

지식은 시대나 상황이 변하면 쓸모없게 된다. 지혜는 시대나 상황이 바뀌어도 비교적 오래 간다.

그래서 채용할 때

그래서 사실 여러가지 기술에 대해서 얼마나 많이 아는지는 별로 중요하지도 않다. ‘어떤 문제가 존재하고 기술은 그 문제를 어떻게 해결하고 있는지’만 잘 알고, ‘새로운 개념을 빠르게 습득할 수 있는 능력’만 있으면 된다. 그래서 빈번히 채용 공고에서 보이는 말이 있다 (뇌피셜이지만 좋은 회사일수록 이런 말을 자주 본 것 같다):

우리 회사는 ***를 사용하지만, 이것을 알고 있는 것이 필수는 아닙니다.

그래서 처음 무언가를 배울 때

그래서 처음으로 어떤 개념을 배울 때 기본기를 탄탄하게 하는 게 중요하다. 다른 비슷한 걸 배울 때도 우려먹어야 하기 때문이다. 예를 들어서 프로그래밍 언어 중에 자바스크립트를 처음 배웠다고 치면, 그것을 지독하게도 깊이 배워야 한다 (사실 별로 좋지 않은 예시긴 하다. 자바스크립트는 너무 하이 레벨이어서 배울 수 있는 게 많이 없다). 그래야 이후 다른 언어를 배울 때 자바스크립트에서 배웠기 때문에 비슷한 개념이 등장하면 이미 아는 것이니까 그대로 넘어갈 수 있다.


Written by Joel Mun. Joel likes Typescript, React, Node.js, GoLang, Python, Wasm and more. He also loves to enlarge the boundaries of his knowledge, mainly by reading books and watching lectures on Youtube. Guitar and piano are necessities at his home.

© Joel Mun 2023