190812-190818

REFLECT


  • React로 Todo App 만들기
  • 알고리즘 5문제 풀기
  • 틈틈이 CODE 읽기
  • 블로그에 Google CSE 추가하기

  • 원래는 이번주에 리액트로 Todo 리스트를 만들려고 했는데 막상 하려고 하니 재밌을 것 같지 않아서 계획을 바꿨다. 잠시 미뤄두었던 Twitch Video Viewer를 완성하기로. 결론적으로는 80%정도 완성한 것 같다. (비디오 목록에 pagination을 넣으려고 삽질을 엄청 했는데 결국 버렸다ㅠㅠ) 첫 리액트 작업물은 이걸로 잠시 마무리 짓되, 비디오 목록에 Pagination 추가 / CSS 완료 / Bug fixing은 다른 프로젝트로 리액트 내공을쌓고 추가로 작업해야겠다.
  • 바닐라 자바스크립트에 집중해야겠다는 생각이 들었다. 바닐라 자바스크립트 건너뛰고, 리액트 공부하지말라구!에서 니콜라스의 한 마디 ─ ‘자바스크립트 기본기 없이 리액트를 배우려고 한다면 너무 어렵고, 헷갈릴거야’ ─ 에 뼈를 맞고 스스로에게 질문해봤다. 바닐라 자바스크립트를 편하게 다룰 수 있는가? 만들고 싶은 프로그램을 바닐라로 부담없이 만들 수 있는가? 답은 ‘No’였다.. 자바스크립트 기본 문법을 떼고 바닐라 자바스크립트로 만들어본거라곤 ‘두더지게임’과 ‘캘린더ToDo’가 전부인데, 당연한 결론이었다. 그래서 다음주부터는 바닐라 자바스크립트를 다시 시작해보려고 한다. 바닐라로 클론코딩도 해보고 게임도 만들면서 바닐라 자바스크립트가 편해질 정도로 익혀봐야겠다:)
  • 알고리즘 5개를 풀고 github에 정리했다. 그런데 문제를 풀고 마크다운으로 학습내용을 정리하는데 필요 이상으로 시간을 소모하는 것 같았다. 다음주부터는 문제풀이에 최대 2시간, 마크다운 작성에 1시간으로 최대 3시간만 투자해야겠다.
  • 블로그에 구글 검색 기능을 추가했다. 디자인이 영 마음에 들지 않지만 지금은 더 중요한것에 시간을 투자하는게 낫다고 판단했다. 나중에 내가 직접 블로그 테마를 만들어보면서 검색창 디자인도 해봐야지!
  • 요즘은 어떻게 하면 개발을 올바른 방향으로, 효과적으로 학습할 수 있을지에 대해 관심이 많다. 그래서 학습 방법에 대한 구글링도 많이 해보는데, 이번주에 접했던 좋은 콘텐츠들을 CONTENTS OF THIS WEEK 카테고리에 정리해놔야겠다. 물론 가장 중요한건 실천이라는걸 잊지말고!

 

PLAN NEXT WEEK

  • 바닐라 자바스크립트로 Amazon Prime 클론 코딩 하기 └ 문서(출처) 참조하여 구현 └ 이번주 구현 범위 : 1. 메인페이지 HTML, CSS / 2. 상단 Plans 레이어 / (3. 메가드롭다운메뉴)
  • 초보를 위한 React JS 전체 1회차 학습 (Challenge 시작 전 예습)
  • 알고리즘 5문제 풀기

 

CONTENTS OF THIS WEEK


TIL #1 나는 프로그래밍 공부 방법을 바꾼다.


dwan이라는 아이디를 가진 개발자(글을 쓸 당시엔 컴공을 전공하는 대학생이었다.)가 자신의 프로그래밍 공부 방법에 대해 정리한 글이다. 배울점이 많은 알찬 글인데, 나는 그중에서도 애자일 컨설팅 김창준님의 강연 내용을 정리한 부분이 인상깊어서 해당 부분을 발췌하여 정리해보려고 한다.


순차적 학습은 지양한다

순차적으로 학습하는 것은 학교식 방법이다. 우리는 어릴 때부터 학교 교육을 열심히 받아서 책을 처음부터 순차적으로 끝까지 공부하려는 경향이 매우 강한데, 그럴 필요가 없다. 필요한 부분만 찾아보면 된다. 예를 들면, 우리가 언어를 공부한다고 치면 대충 자료형, 조건문, 반복문 이런 식으로 목차가 나눠져 있다. 근데, 우리가 프로그램을 짤 때 조건문만 쓰는 경우가 있나? 없다. 그래서 어떤 프로그램을 만들지 먼저 생각하고 그 프로그램을 만들기 위해 필요한 테마를 찾아보며 공부하는 것이 좋다. 목표가 있기 때문에 훨씬 재미있고 능동적으로 공부할 수 있다.

야생 학습

야생 학습이라는 접근이 필요하다. 야생 학습이란 무엇이냐. 우리는 ‘공부 == 책 읽기’라고 생각하는 경향이 있는데, 우리는 실생활에서 그렇게 공부하지 않는다. 이를테면 에어컨을 샀다고 해보자. 리모콘으로 에어컨을 제어할 때, 매뉴얼을 처음부터 끝까지 다 읽은 다음 리모콘을 조작하나? 아니다. 일단, 이것저것 눌러본 다음에 매뉴얼에서 필요한 부분만 보거나, 아니면 주변 사람들한테 물어 보는 방식으로 배운다. 소프트웨어 개발 공부도 이런 방식으로 해야 한다는 것이다. 책은 하나의 도구일 뿐이라고 생각해야 한다.

프로그램을 만들면서 학습한다

학습 능력이 뛰어난 사람은 어떤 프로그램을 만들지 잘 설계해놓고 그 프로그램을 만들면서 학습을 한다. 처음부터 대단한 프로그램을 만들려고 하는 게 아니라 아주 간단한 프로그램을 만들고 그 프로그램의 기능을 하나 하나씩 개선해나가는 방식으로 공부를 한다.

학습내용을 구체적으로 적어본다

하고 있는 것에 대해 구체적으로, 작게 쪼개서 시각화하는 것이 중요하다. 예를 들면, 태스크를 만들 때 ‘코딩하기’ 보다 ‘django post application 데이터베이스 설계하고 모델 코드 작성하기’ 라고 해야 지루하지 않고, 자기효능감을 느끼기에도 좋아서 학습을 더 잘, 지속적으로 할 수 있다는 것이다. 오늘도 ‘코딩하기’, 내일도 ‘코딩하기’면 너무 지루하지 않겠는가? 그리고 작게 쪼갤수록 더 많은 것을 한 것처럼 느낄 수 있다. 실제로 무언가를 많이 하는 것보다, 많이 했다고 느끼는 것이 자기효능감에 있어 더 중요하며, 자기효능감은 학습의 지속성과 연관성이 높을 것이다.(이건 필자의 생각이다.)

의도적 수련이 중요하다

1만 시간의 법칙은 잘못 해석되고 있다. 그냥 1만 시간을 채운다고 해서 전문성을 가질 수 있는 게 아니다. 우리는 1만 시간 이상 걸어왔지만, 걷기의 전문가가 아니다. 중요한 것은 ‘의도적 수련’을 하는 것이다. 의도적 수련에서 중요한 것은 다음과 같다.

  1. 잘 정의된 작업 (Well defined task) 잘했다 못했다의 기준이 명확한가
  2. 적절한 난이도 (Appropriate difficulty) 너무 어렵지도 쉽지도 않게
  3. 정보가 풍부한 피드백 (Informative feedback) 결과에 대한 피드백보다 과정에 대한 피드백이 더 좋다
  4. 반복과 실수 교정의 기회 (Opportunities for repetition and correction of errors) 하나를 여러 방식으로 해보면서 의도적으로 실수하고 교정할 수 있는가

효과적 학습법

  1. 스스로 질문 던져보기
  • 글을 읽을 때 과거 경험, 실제 사용 사례 등을 연관지어서 이해/설명해본다.
  • 어떤 문제를 풀었을 때 그 문제에서 살짝 추가 기능을 더해서 풀어본다. 같은 문제를 반복해서 푸는게 아니라 변경/응용해서 풀어보는 것. (전이효과)
  1. 섞어서 공부하기 공부할 것이 A, B, C가 있다면 섞어서 공부한다. A-1, B-1, C-1, A-2, B-2, C-3 이런 식으로. A123 다 공부하고 B123 넘어가면 A를 잊을 가능성이 높다.
  2. 연습 시험 치기 (효과 좋음) Cornell Note 활용법처럼 백견이 불여일타 -> 백타가 불여일시. 시험치기처럼 코드를 짜봐라. 보고 치지 말고 기억해서 쳐보기. API 기억해서 외워서 쳐보기. 매 번 검색하지말자.
  3. 분산 연습 (효과 좋음) 지식노동자는 한 번의 Chunk(붙어있는 연속되는 집중 시간)를 갖는게 중요하다.(---피터 드러커) 하지만 Spacing이라고도 하는 분산연습을 하는것도 좋다. 공부를 하면 6시간 공부하는 것보다 1시간씩 공부해서 중간 중간 테스트하는 것이 최종 테스트에서 점수가 더 높다. Anki(Spaced Repetition Software)라는 소프트웨어가 있다. 적절한 시간 간격으로 외우라고 띄워주는 것. 망각 주기와 연관.
  4. 새로 학습한 것과 기존에 알고있던 것의 연관성을 말로 설명해보기
  5. 학습한 내용을 백지에 요약해보기

공통점은 머리가 아파야 한다는 것이다. 쉽게 이해되는건 공부가 잘 된다는 느낌이 들 수는 있어도 효과적인 학습 방법이 아니다. 대표적인 예로 밑줄, 하이라이팅이 있다.

 


코딩의 신 아샬 - 러닝 커브에 대한 고민


  • 빨리 배우는 이유는 많이 알기 때문이다. 많이 알면 알 수록 더 빨리 배운다.
  • 러닝커브를 J커브로 그릴 수 있도록 학습법에 대한 고민을 해보는 것이 중요하다. 느리게 배우는데는 학습법에 문제가 있는 경우가 많기 때문.
  • 어떤 기술을 할 줄 아느냐가 중요한 게 아니라 새로운 기술이 나왔을 때 내가 얼마나 빨리 배울 수 있는가를 아는게 훨씬 더 중요하다.
  • 자신에게 냉정한것과 가혹한 것은 다르다. 가혹하게 대하면 배울 수 있는 걸 놓칠 수 있다.
  • 바닐라 자바스크립트를 해볼 것.
  • (댓글중에) 새로운 지식을 배울 때 접근방식, 선택과 집중, 열정 등에 따라 러닝커브가 달라지는 것 같다.

많이 알고 있는 사람이 빨리 배운다는 말이 인상적이었다. 결국 빠른 속도로 배우고 싶다면 많이 학습하고 다양한 경험을 해보는 것이 중요하다. 그리고 자신의 실력을 냉정하게, 객관적으로 파악 할 줄도 알아야 한다.(메타인지) 개발을 하는데 필요한 러닝커브란 바로 ‘새로운 기술이 나왔을 때 빠르게 습득하는 능력’인 것 같다. 특히 프론트엔드처럼 하루가 다르게 새로운 기술이나오는 분야에서는 러닝커브가 더욱 중요할듯 하다.


@Reese
Sin Prosa Sin Pausa