공지

[okky] 알고 이해한다는 것은 무엇인가?

devock 2019. 5. 7. 10:30

asmpro  님의 글입니다.


공부를 많이 하는데 성과가 없는 사람들, 주변에 흔히 보입니다.

컴퓨터 공학과 4년 동안 다녔고 학점도 좋은데 실제로 코딩을 하는 것을 보면 대학 과정에서 배운 것들을 제대로 구현하지 못하는 경우가 대부분입니다.

왜 이럴까요?

제대로 알고 이해하는 것이 어떤 것인지 잘 모르기 때문입니다.

컴파일러 개발을 예로 들어 보겠습니다.

컴파일러 책을 읽었다면 최소한 해당 책에 나온 이론대로 컴파일러를 만들 수 있어야 비로소 제대로 컴파일러 책의 내용을 안다고 말할 수 있습니다.

책의 내용을 응용해서 본인의 방식으로 컴파일러를 개발할 수 있다면 이제 해당 책에 대해 이해하고 있다고 말할 수 있습니다.


프로그래밍뿐만 아니라 모든 분야에 대한 학습도 마찬가지입니다.

어떤 책이나 글을 읽고 내용대로 사용할 수 있으면 아는 것이고 응용할 수 있으면 이해한 것입니다.

이렇게 하나하나 이해를 하고 넘어가다 보면 어느 단계부터는 알고 이해하는 데 필요한 시간이 급격히 줄어들기 시작합니다.

그래서 프로그래머가 어느 정도 경지에 오르면 언어에 특별히 구애를 받지 않게 됩니다.

간단하게 예를 들자면 지금 중학교 교과서 보면 어떤가요?

중학교 교과서를 이해하기 위한 대부분의 기반 지식을 갖고 있으니 특별히 이해할 필요 자체가 없죠.

암기해야 할 부분을 제외하면 대부분 이런 내용이구나 훑어보는 것으로 끝납니다.


그래서 온전히 모든 시간을 학습에 투자할 수 있는 학생 때가 중요합니다.

제대로 알고 이해한다는 것은 남들에 비해 초반에 매우 오랜 시간이 걸립니다.

대충 학점 맞춰 공부하는데 걸리는 시간과 이해하고 자유롭게 응용할 수 있는데 걸리는 시간은 비교가 되지 않습니다.

하지만 어느 정도 시간이 지나면 실력은 남들에 비해 월등히 높아지기 시작합니다.

어느 단계부터는 이해하는데 걸리는 시간이 급속도로 줄기 때문이죠.

예를 들어 C#를 제대로 이해하는 사람이 Java 이해하는데 어느 정도 걸릴지 생각해 보면 됩니다.


초보나 학생들에게 당부하고 싶은 말이 있습니다.


1. 책에 있는 소스 코드는 반드시 직접 입력해 보기 바랍니다.

프로그래밍 책은 눈이 아니라 손으로 읽는 것입니다.

자신이 어느 정도 경지에 올라 쓱 읽어봐도 알 정도가 되지 않는 이상 입력하기 바랍니다.


2. 인터넷 끄고 책 덮고 해당 책에서 구현한 프로그램을 직접 만들어 보기 바랍니다.

수학 문제 풀 때 답을 읽고도 해당 문제 다시 풀지 못하면 아무도 그 사람이 그 문제를 안다고 하지 않을 겁니다.

이미 답(책)을 봤으니 다시 답을 적는 것도 가능해야 합니다.


3. 본인의 방식으로 응용해 보기 바랍니다.

기능을 추가하거나 리팩토링, 라이브러리화 등 자유롭게 가공할 수 있을 때 완전히 이해하게 된 것입니다.


4. 타인의 소스 코드를 사용할 때 반드시 처음 보는 키워드나 라이브러리는 정의와 예제를 읽어보기 바랍니다.

요즘 아주 쉽게 정의와 예제 찾아볼 수 있습니다.

프로그래머에게 있어 최악의 습관은 제대로 모르는 것을 그냥 쓰는 것입니다.


위의 4가지만 계속 지킨다면  프로그래밍 못한다는 얘기는 평생 듣지 않게 될 겁니다.