asmpro
722
2019-05-04 17:04:31 작성 2019-05-04 17:39:08 수정됨
15
3617

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


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

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

왜 이럴까요?

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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


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


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

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

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


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

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

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


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

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


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

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

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


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

20
9
  • 댓글 15

  • 앙앙이
    3k
    2019-05-04 18:24:10

    비단 초보에게만 해당되는 말씀이 아닌듯합니다.

    신뢰를 기반으로하는 프로그래밍 습관을 가진 사람으로써 4번 항목은 가슴 아프네요.

    0
  • 노력은배신하지않는다
    2019-05-04 18:39:54

    프로그래밍 참 어렵습니다 ㅠㅠ

    0
  • asmpro
    722
    2019-05-04 20:15:55

    @앙앙이

    제대로 모른다는 것이 라이브러리 내부까지 알아야 되고 그런 것을 말하는 것은 아닙니다.

    사용하고 있는 코드에 정확히 어떤 용도로 사용되는지 모르는 코드가 포함되는 것이 문제가 된다는 것이죠.

    이런 코드들이 나중에 큰 문제가 될 가능성이 높거든요.


    @노력은배신하지않는다

    그렇죠. 하면 할 수록 어렵죠.

    0
  • 일식
    724
    2019-05-04 20:51:58

    뜬구름 잡는 얘기같은데요. 3학점짜리 컴파일러 구조 한과목 들으면 컴파일러를 만들줄 알아야한다? 이런 사람이 과연 있기나 할지. 당부의 말들도 너무 뻔하군요.

    그냥 수학공부랑 같은거죠. 기초가 없는학생이 강의 잘하는 선생 풀이를 듣고 문제 하나 풀어보면 자신감 생기죠. 똑같은 미적분인데 또 다른 문제 풀어보면 펜이 안움직여요. 그 이전에 삼각함수에 대한 이해가 부족하거든요. 그럼 또 좌절하고 난 안돼 하게 되는거죠.

    기초는 그냥 처음부터 인내심갖고 파는거지 왕도가 없어요.

    이런 과목을 배웠으면 이정도는 해야지 이런거는 정말 터무니 없는 얘기라고 봅니다.

    1
  • asmpro
    722
    2019-05-04 21:05:47 작성 2019-05-05 01:57:37 수정됨

    @일식

    우리가 사용하는 그런 컴파일러를 만들라는 게 아닙니다.

    https://compilers.iecc.com/crenshaw/ 이런 토이 컴파일러는 만들 수 있어야 한다는 것이죠.

    아주 기초적인 Lexer, Parser 등 컴파일러 이론을 알면 매우 쉽게 만들 수 있는 그런 것은 당연히 만들 수 있어야 된다는 겁니다.


    그리고 교과서 대로 쭉 공부를 했다면 미적분 이해하는데 전혀 문제가 없습니다.

    어떤 분야이던 기본이 탄탄하지 않으면 가면 갈수록 어려워지죠.


    그리고 수학 공부할 때 공식 보고 문제푸는 게 당연하고 모두들 그렇게 하는데도 불구하고 프로그래밍은 그렇게 하지 않잖아요? 책 보고 이해한 후 직접 코딩하는 것 효과적인 방법이라는 것 대부분 알텐데 잘 안합니다.

    0
  • asmpro
    722
    2019-05-04 21:12:14

    컴퓨터에서 실행되고 있는 모든 프로그램들은 프로그래머들이 만든 것들 입니다.

    우리가 자주 방문하는 웹 사이트들 또한 프로그래머들이 만든 겁니다.

    딴 세상 사람들이 만든 것이 아닙니다.

    제가 말하는 이런 과목 배웠으면 이런 거 해야지 하는 수준보다 비교가 안될 정도로 어려운 것들이죠.

    제가 한 말이 엄청난 난이도의 실현 불가능한 그런 것은 아니라고 생각합니다.


    0
  • 답정너심판자
    879
    2019-05-04 23:10:04
    매우 공감합니다. 좋은 말씀 감사합니다.
    0
  • ignoreOrange
    1k
    2019-05-05 11:08:56

    반성하고 갑니다ㅠ

    0
  • Aaron
    968
    2019-05-07 14:43:46

    비단 프로그래밍에만 적용되는 얘기는 아닌 것 같습니다. :)

    0
  • 라이언킹
    61
    2019-05-08 12:46:19

    좋은 말씀 감사합니다. 

    신규직원을 채용중인데, 신규직원에게 보여줘야겠습니다.

    1
  • 자라선
    1k
    2019-05-09 15:48:27

    이거보니깐 군대에서

    당직마다 밤새면서 C# 서적 한권들고 메모장으로 공부했었을때가 생각나네요 ㅠ


    0
  • lllllllllllllll
    7k
    2019-05-10 09:00:30

    저같은 경우 제가 직접 인터넷 강의를 촬영해서 유튜브에 업로드하는 방식으로 공부를 했었어요

    매일 하루에 한편은 올리자고 생각했었는데 어제는 너무 피곤해서 오후 8시에 자느라 못올렸네요

    1
  • catsfriend
    2k
    2019-05-10 09:05:02

    "백문이 불여일타"

    이 말장난이 과거 유명한 책의 서문에 있습니다.

    김상형 씨의 WIN32 API 정복이라는 초판 입니다..

    당시 C와 C++로 윈도우 프로그래밍을 공부하기 위해 방학동안 2~3번 정독했었습니다

    (15년이나 지났지만, 메세지 브로커는 아직도 기억나네요;;; )


    2
  • BlueCat
    135
    2019-05-11 12:55:34

    좋은 말씀감사합니다.
    머리로는 인지하고 있으나, 실천을 잘 안하고 있었는데
    막상 다른분의 글로 접하게되니 정신차려지는 것 같습니다.

    이해 할때까지, 안보고 될때까지 해보는게 생각보다 오래걸리고 지루한 과정이지만
    효과는 정말 뛰어난 것 같습니다.

    0
  • 중년코딩
    587
    2019-05-12 07:50:09

    좋은 말씀 감사합니다.

    직접 해보는 거랑, 또 설명하는 거랑, 고민의 깊이가 많이 달라집니다.

    Aaron님 말씀대로 꼭 개발에만 적용되는 내용은 아닌 것 같습니다.

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.