이 글은 원문 Mistakes I Made When Learning to Code - and How to Avoid Them By Fredrik Strand Oseberg과 이를 번역한 글 코딩을 배울 때 했던 실수들. 그리고 그 실수들을 피하는 법.을 읽고 작성한 글입니다.

코딩을 배울 때 하기 쉬운 실수. 그리고 실수를 피하는 방법.

출퇴근길 개발 읽기라는 아주 좋은 오픈 카톡방이 있다. 개발자나 개발자를 꿈꾸는 사람들이 읽기 좋은 글들을 공유해주는 훌륭한 곳인데, 공부하다가 답답할 때나 잠깐 휴식을 할 때 올라오는 글들을 자주 읽곤 한다.

글의 서두에 있는 출처의 글을 읽으면서 굉장히 공감하며 공부하는 태도를 다시금 되돌아보게 되었다.

특히 시작부분의 튜토리얼만 따라 하는 카피캣(Copy Cat)이라는 부분을 읽는 순간 머리 속을 한 대 맞은 것처럼 띵- 해졌다. 보는 순간 그동안 공부를 해왔지만 발전이 없었던 이유가 무엇인지를 알게 되었기 때문이다.

원문에서 실수, 학습 속도를 늦춘 원인으로 다음 세 가지를 지목했다 : 집중력 부족, 튜토리얼의 함정, 그리고 추상화.

집중력 부족

여기서 말하는 집중력은 공부할 때의 집중력이 아니다. 한 가지에 집중한다는 점에서의 집중은 맞지만 공부할 때 집중을 못한다는 뉘앙스가 아니라 프로그래밍 언어를 학습 할 때, 이것저것 조금씩 배우게 되면 개념을 완전히 이해하기 어렵다는 것이다.

이 파트의 요점만 말하자면 한 언어로 모든 것을 하라는 것이 아니라 프로그래밍 개념을 잡기 위해 하나의 언어로 시작하라는 것이다.

여러 언어를 배우기보다는 한 프로그래밍 언어에 숙달하는 것을 추천하는데, 이 부분에 대해서는 전적으로 동의한다. 처음에는 게임을 만들기 위해서 C 언어로 시작했었다. 그 때 당시에는 프로그래밍 언어로 C 언어, 자바, 자바스크립트가 있고 게임을 개발하기 위해서는 C 언어를 알아야 한다고 알고 있었다. 그 때는 게임에만 관심이 있었고 웹에 대해서는 관심이 없었는데 자바스크립트와 자바가 같은 것으로 알고 있었다! (둘 다 자바가 들어가니까) 포인터를 공부할 때 쯤에 백날 공부해봐야 게임과 무슨 상관인지도 모르겠고, 게임을 만드는 것과 출력하는 것이 무슨 상관인지도 몰라서 때려치웠던 것 같다.

이야기가 조금 돌아갔지만 현재는 자바를 공부하고 있는데, 자바에 정착하기 전까지 여러 언어들을 건드려봤었다. 자바스크립트, 파이썬, 루비, PHP 등등 이것저것 건드려보다가 서버 분야를 하려면 자바를 배워야한다!는 어디서 들었는지 모를 소리에 자바를 주구장창 파기 시작했다.

자바에 대한 개념을 세우기 시작하면서 다른 것을 공부할 때, 예를들어 알고리즘을 푼다던가, 공부했던 내용들을 보게 되면서 점점 쉬워지는 것을 느꼈다. 그리고 다른 언어로 이루어진 코드를 보더라도 어느정도 코드를 읽고 이해할 수 있게 되었다.(물론 문법적인 부분은 따로 찾아봐야 알 수 있다)

튜토리얼의 함정

이 부분은 정말 공감되었고, 왜 스스로의 실력이 늘어나지 않는지에 대한 이유를 알 수 있었다. 또한 앞으로 어떻게 해야할지에 대한 계획을 세우는데 도움이 되었다.

요즘 프로그래밍 언어를 배우기에 굉장히 좋은 시대이다. 유튜브에 검색만 해도 엄청난 양의 강의영상들이 쏟아지고, 현업자들의 지식이 정리되어 담긴 인터넷 강의들도 많기 때문이다.

이러한 강의 영상들을 보고 어떻게 받아들이는지가 문제이다. 영상만 보고서 그냥 나오는대로 따라서 코드를 작성하고 프로젝트를 완성해서 동작시키면 나 자신이 마치 전문가가 된 것처럼 느껴진다. 영상에 나오는 모든 내용을 다 이해했고, 나도 마음만 먹으면 얼마든지 프로젝트를 할 수 있을 것만 같은 ‘착각’에 빠지게 되는 것이다.

물론 영상을 완전히 이해해서 자신의 것으로 만들고, 한 번 듣고도 모든 것에 통달하는 천재인 사람도 있을 것이다. 하지만 대부분의 사람은 함정에 빠졌을 것이고, 자기가 전문가가 되었다고 착각할 것이다. 대부분의 영상들은 영상을 녹화하는 전문가가 틀을 생각하고 로직을 구성하여 프로젝트를 완성시키기 때문에, 보는 사람의 사고는 반영되지 않는다.

실제로 유튜브에 존재하는 웹 프로젝트들도 많이 따라해봤고, 인터넷 강의도 구매하여서 많이 해봤지만 정작 개인 프로젝트를 진행하려고하면 아무것도 못하는 것을 많이 겪었다. 영상을 따라해서 나온 결과물을 볼 때는 분명히 나의 지식으로 완성했고, 내가 만든 결과물이라고 생각했는데 아니었다.

이를 해결하기 위한 방법은 아주 간단하다. 튜토리얼을 따라하고 끝내는 것이 아니라 튜토리얼에 나왔던 내용을 가지고 연습을 하면 된다. 예를 들어 페이지를 만드는 내용을 배웠다면 페이지를 구성하는 코드를 바꿔본다. 어떤 코드를 바꿨더니 어떤 반응이 일어나고 어떤 에러가 발생하는지를 직접 경험해보는 것이다.

개발자는 ‘개발’을 하는 사람이다. 문제를 보고 정답을 맞추고 끝내는게 아니라 정답을 유도하는 풀이 과정이 중요한 것이다.

추상화 의존

요즘은 초등학생 때부터 코딩을 배운다고 한다. 물론 자바나 C언어 같은 오래된 언어를 배우는게 아닌 어렵고 복잡한 것들을 쉽게 만든 툴을 이용해서 배운다고 한다. 작성되어 있는 코드 블럭을 끼워 맞춰서 출력되는 영상으로 이해하는 방식이라고 봤던 것 같다.

복잡하고 어려운 것들을 쉽게 만들려는 노력의 결과물이 추상화이다. 보다 쉽게, 보다 간편하게 사용할 수 있도록 해주는 것이다. 하지만 너무 편리해지면 오히려 성장에 방해가 될 수도 있다. 추상화된 것 안에서 작동하는 개념이나 훌륭한 기술을 놓칠 수 있기 때문이다.

사실 이 부분은 그렇게 공감되지 않았는데 아직 프로젝트 경험이 부족하고, 잘 만들어진 프레임워크를 사용해본 적이 없어서 그런 것 같다. 아직 실수를 하지 않았으니 오히려 이러한 점을 잘 기억해서 공부하게 되는 순간 실수하지 않도록 해야겠다.

마치며

좋은 글을 읽고 깨달음을 얻었기에 이를 기록해 두고 싶었다. 물론 깨달음을 얻기만 하고 행동으로 옮기지 않으면 무용지물이 될 것이다.

먼저 경험해 본 사람이 뒤 따라오는 사람들에게 좋은 방향을 제시해 도움을 주려고 하는데 그 도움을 거절해서 되겠는가