나는 과거에 같은 학교를 다니는 후배들에게 프로그래밍 멘토링을 진행한 적이 있다. 물론 지금도 그렇게는 뛰어나지 않고 그 당시에도 뛰어나지 않은게 내 프로그래밍 실력이었지만 적어도 막 입문한 친구들에게 가르쳐줄 정도는 되었던 것 같다.
뭐, 중요한 점은 그 부분은 아니고, 내가 그때 가르쳤던 친구들이나 혹은 내 주변 사람들이 가르치던 사람들이 공통적으로 하던 이야기가 있는데, 그것은 바로 "머리 속으로는 어떻게 만들어야 할지 알겠는데, 막상 코드로 옮기려고 하니 너무 어렵다." 라는 것이었다. 물론 이런 이야기 없이 그냥 쭉쭉 잘해 나가던 친구들도 있었다. 자랑은 아니지만 나 역시 저런 생각을 해본 적이 없는 편에 속해서, "아니 이게 무슨 말인가?" 싶었다. 어떻게 만들어야 할지 알았으면, 그냥 코드로 만들면 되는거지, 왜 코드로 옮기려고 하면 그게 안된다는 것인지 그 당시에는 도무지 이해가 되지 않았다.
하지만 내가 프로그래밍을 공부한 과정을 곰곰히 되새겨본 결과, 프로그래밍을 배우기 시작한 지 얼마 되지 않았을 때의 나 역시 같은 문제에 부딪힌 적이 있다는 것을 깨달을 수 있었다. 그것을 깨닫고 난 이후에 내가 다시 생각하게 된 것은 "머리 속으로는 어떻게 만들어야 할지 알겠는데, 막상 코드로 옮기려고 하니 너무 어렵다."라는 문제에는 누구나 부딪히게 된다는 것이고, 진짜로 그 시점에서 중요한 문제는 "코드로 옮기려고 하니 어렵다."가 얼마나 어려우냐보다 "그 상태에서 얼마나 빨리 벗어나느냐"라는 것이다.
누군가는 "머리 속으로는 어떻게 만들어야 할지 알겠는데, 막상 코드로 옮기려고 하니 너무 어렵다." 라는 말을 일주일 정도 하더니 더 이상 그런 말을 하지 않고 프로그래밍을 하게 되고, 누군가는 그 말을 1년도 더 넘게 하고 있다면, 그 차이는 무엇에 있는 것일까?
난 그 차이가 숙달과 경험, 그리고 연습량에 달려있다고 본다.
간단한 예를 들자면, 한 번도 요리를 해본 적도 없는 사람에게 마파두부를 만들고 시켰다고 해보자. 그 사람의 머리 속에는 자신이 평소에 먹던 마파두부가 떠오를 것이다. 하지만 막상 요리를 진행하면 그 사람은 무엇부터 해야하는지 모르고 우왕좌왕하게 될 것이다.
그러면 그 다음엔 요리를 해본적 없는 사람에게 마파두부를 만드는 법을 알려주고 만들라고 시켜보자. 과연 그 사람은 완벽하게 마파두부를 만들어낼 확률이 높을까? 아니다. 분명 상당한 시간이 걸리고도 제대로 된 결과물을 만들어 내지 못할 확률이 높을 것이다. 칼질은 서투르고, 재료도 볶다가 태울지도 모른다. 그리고 레시피를 이미 알고 있지만, 그것을 제대로 따라하지 못하고 버벅대는 경우가 많을 것이다. 그렇다면 이 사람이 마파두부를 잘 만들기 위해서는 어떻게 해야 할까? 답은 하나 뿐이다. 마파두부를 계속 만들어 보는것.
나는 프로그래밍도 이것과 마찬가지라고 생각한다. 머리 속에 만들어진 논리를 코드로 바꾸는 능력을 많은 프로그래밍을 통해 숙달시키는것과 머리 속에 들어있는 마파두부 만드는 법을 많은 연습을 통해 익히는 것. 무엇이 다른가?
앞서서 나는 이 과정을 상당히 빨리 벗어났다고 이야기 했었다. 나는 한때 내 꿈이 무엇인지를 놓고 방황하다가 24의 나이가 되어서야 프로그래밍에 입문했다. 게임을 만들기 위해서. 그리고 내가 게임 프로그래밍을 배울 수 있는 학교에 왔을 때, 내 주변의 친구들은 아직 20살이었고, 군대를 다녀온 시간 2년을 그 친구들보다 앞서있다고 생각해도 2년은 뒤쳐져서 시작하는 것이었다. 그러니 당연히 이렇게 생각할 수 밖에 없었다. 남들보다 더 많이 코딩을 하자. 분명 이 프로그래밍 책의 뒤에 예제의 해답이 있는 건 알지만, 나만의 답, 내가 해결하기 전에는 보지 말자. 책의 해답이 더 나은 것이라면 익히고, 내 답이 더 나은 것이라면 뿌듯함을 느끼면 된다. 그렇게 공부를 하니 남들이 "코드로 옮기는 것이 어렵다"는 말에 공감하기 어려워질 정도로 그 단계를 빨리 지나가 버렸다.
연습량이 적은 데에는 3가지 이유가 있을 수 있다.
1. 정말 게을러서.
2. 너무 완벽을 추구해서.
3. 겁이 많아서.
1번은 절실함을 느끼지 않는 한 답이 없다.
2번은 완벽한 코드를 만들어 내야한다는 압박감에 시달려서, 혹은 코드가 작동하는 원리의 깊은 곳까지 알고싶어서, 코드를 이리 뒤지고 저리 뒤지다 한 세월이 걸려서 연습하는 속도도 느려지고 연습량이 적어진다. 물론 이것은 좋은 자세임에는 틀림이 없다. 하지만 지금의 문제를 느끼는 단계라면 너무 과한 태도라고 생각된다. 지금의 단계는 분명 빨리 지나가도 되는 단계일 것이다. 지금 이 단계를 넘어가면 깊이를 알 수 없고 드넓은 바다가 있는데 작은 물웅덩이 속에서 웅덩이 속을 떠다니는 모래 알갱이를 세고 있는 꼴이다. 지금 단계가 그렇게까지 완벽하게 파야되는 단계인지 그렇게까지 완전해야 하는 단계인지 잘 생각해보라.
3번이 가장 일반적으로 많은 케이스라고 생각된다. 코드를 치기 전에도 버그가 나면 어떻게 하지? 하고 시작조차 못하는 혹은 코드 한줄한줄마다 이게 틀렸으면 어떻게 하지? 하는 부류이다. 내 친구의 프로그래밍 과외를 받는 어떤 사람은 그랬다. "이런 것을 만들어보라"고 시키면 마우스를 이리저리 움직여보다 코드 한 줄을 겨우 치고는 묻는 것이다. "이렇게 하는게 맞나요?"하고. 그리고 그 질문은 한줄한줄 계속 된다.
나는 이런 겁 많은 사람들에게 일단 버그가 있든 없든 알 수 없지만 신텍스 에러(Syntax error, 문법 오류)만 없게 주어진 문제를 완성하라고 말하고 싶다. 그리고 컴파일해보면 알게 될 것이다. 버그가 있는지 없는지. 만약 버그가 있다면 버그를 수정하면 되는 것이고 없다면 좋은 것이다. 물론 처음부터 버그가 없게 설계를 한다면 좋겠지만 아무리 좋은 설계라고 해도 버그가 아예 없을 확률은 낮으니, 완성해서 컴파일 해보는 것이 중요한 것이다. 그래야 당신은 프로그래밍 연습을 한 것이고, 공부를 한 것이다.
그러니 연습을 해라. 코딩을 해라. 프로그래밍을 해라.
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
[투네이션]
[Patreon]
[디스코드 채널]
'프로그래밍' 카테고리의 다른 글
[VisualStudio] An exception has been encountered. This may be caused by an extension. 에러 발생시 해결 방법 (0) | 2017.07.11 |
---|---|
[프로그래밍] Visual Studio 2017 Community 설치 실패 문제 해결하기(Error 0x80004003:) (0) | 2017.06.09 |
[프로그래밍] 악마의 문법, goto (0) | 2017.06.01 |
[프로그래밍] Debug 빌드를 유지하자 (0) | 2016.11.01 |
[프로그래밍 용어]Memory corruption(Memory stomping) (0) | 2016.11.01 |