웹앱을 개발하려면 배워야 하는 것들이 한두개가 아니다.
그 얘기는, 반대로 지금 당장 모든 걸 다 배울 수도 없고
학습한다고 하더라도 다 알 수 없다는 것이다.
그러면, 좋은 전략이 필요하다.
먼저 이 많은 지식들을 분류해보자.
(어떤 분야든 마찬가지겠지만, 지식이라는 것은 세월의 흐름에 따라서 계속 변화를 겪게 된다.)
1. 변하지 않는 기술
시간의 흐름에 따라서 거의 변하지 않는다고 생각이 되는 기술들이다.
EX) 네트워크, 운영체제, 컴퓨터 시스템, 논리학, 대수학, 언어론
2. 느리게 변하는 기술
여전히 느리긴 하지만 어느 정도 시간의 흐름에 따라 변화하는 기술들이다.
EX) 프로그래밍 언어, 프로그래밍 패러다임, 자료구조, 보안, 알고리즘
3. 빠르게 변하는 기술
유행을 타는 듯이 굉장히 변화의 속도가 빠른 기술들이다.
변화한다는 건 도태되는 것도 있고, 형태가 완전히 바뀌는 경우도 있다.
EX) 프레임워크, 라이브러리, UI/UX, 디자인 패턴
변화의 속도가 느린 기술은 어렵기도 하고, 학습하는 비용이 훨씬 크게 든다.
하지만 변화의 속도가 빠른 기술들은 학습 비용이 적게 든다.
훨씬 빠르게 배울 수 있고, 바로바로 써먹을 수 있는 지식들이다.
그럼 분류를 했으니, 이것들을 어떻게 다룰 것인가?
학습자의 관점에서 어떻게 다룰 것인가?
빠르게 변화하는 지식들은 상대적으로 쉽다고 설명했는데,
쉬운 것부터 배우는 것이 효과적인 것 같다.
허나 이러한 빠르게 변화하는 지식들은 여러 가지 기술적 한계 또는 상황적 한계 때문에 생명 주기가 굉장히 짧다.
그래서 쉬운 것부터 배웠을 때, 계속 새로운 걸 배워야 하는 문제가 생긴다.
배워야 할 것들이 많고 계속 쏟아져 나오기 때문이다. (변화가 빠르기 때문에.)
"거의 변하지 않는 지식은 사실 세상에 등장하는 게 쉽지 않다."
특히 프론트엔드 분야는 다양한 개발 분야 중 가장 변화가 심한 분야이다.
그래서 사람들이 "어떤 하나의 기술 가지고 장기적으로 꾸준히 갔으면 좋겠다."라고 말할 정도로
굉장히 피로감이 높은 분야중에 하나다.
그럼 어떻게 하면 될까?
이 세가지 종류 중엔 또 다른 연관 관계가 있다.
상대적으로 느린 변화 속도의 지식을 익히면 그것보다 빠른 변화 주기를 가진 지식들을 학습하는 데 도움이 된다.
그래서, 쉬운 것 위주로 배우면서 어느 정도의 시간을 내서 변화가 상대적으로 느린 기술들도 꾸준히 학습하는 전략들이 필요하다. (투자 비용이 조금 들지만.)
이 '기초'는 피해갈 수 없는 부분이다.
그래서 좀 더 명확한 학습 전략을 세우면 학습을 훨씬 더 효과적으로 할 수 있다.
"프로그래밍을 학습한다는 건 장기전이다."
1~2년 한다고 해서 금방 굉장히 높은 수준의 개발자가 되는 게 아니기 때문이다.
그렇기 때문에, 명확한 학습 전략을 가지고 꾸준히 연마해야 한다.
프로그래밍을 하며 역량이 향상될 것이다.
프로그래밍 역량. 구체적으로 역량이란 무엇일까?
어떤 앱, 웹을 만들고서 "프로그래밍 역량이 향상됐다" 라고 말할 수도 있겠지만,
구체적으로 "내가 이런 역량이 부족하기 때문에 이런 역량을 향상시켜야지. 이 역량을 향상시키기 위해서 이 기술을 연마하고 훈련할거야." 같은 이미지를 갖고 학습하는 것과 그렇지 않은 것의 학습 효과는 굉장히 차이가 난다.
처음 시작하는 시점에서 내가 어떤 부분들을 학습할 것인가 라고 하는 구체적인 이미지를 갖기에 굉장히 좋은,
프로그래밍 역량을 4가지 소개하겠다.
1. 일관성
2. 유연성
3. 확장성
4. 독립성
이렇게 구체적인 트레이닝 이미지를 만든 다음에 학습하면
동일한 시간을 투자한다고 했을 때, 학습 효과가 훨씬 높은 것을 경험해볼 수 있다.
꼭 학습해야 하는 기초적인 것들은 나중에 배워야 할 것.
마음 속에 꼭 갖고 있어야 하는 부채 의식 중 하나이다.
1년 전에 배웠던 것들을 한 번도 안 쓰다가 1년 후에 쓰려고 하면 당연히 다 까먹는 게 우리 지식이다.
그래서 변화의 속도가 느린 지식일수록 꾸준히 반복해야 할 부분, 복습해야 할 부분이 필요하다.
프로그래밍 역량에 대한 구체적인 이미지들을 갖고, 학습 전략을 가져서 그 지식들을 하나하나 격파해 나가고 계속 반복적으로 훈련하면서 역량을 높여 가자.