본문 바로가기

개똥철학

내가 틀리더라도 예시코드를 작성하는 이유.

필자는 현재 멋쟁이 사자처럼 iOS 부트캠프 앱스쿨 3기의 보조강사를 맡고 있다. 블로그를 작성할 때와 같이 훈련생분들이 질문을 할 때 나는 예시코드를 바로 작성해서 드리는 편이다.

물론 코드를 실행해보고 드리긴 하지만, 라이브 코딩이나 짧은 시간에 만든 코드는 당연히 오류가 있을 수도 있고, 틀리게 작성할 수도 있어서, 사실 블로그나 보조강사로서 그러한 행위를 하는 것은 조금 리스크가 있는 행동이라고 생각하긴 한다. 그리고 혹자는 코드를 보고 따라서 작성하는 것이나 클론코딩 등이 도움이 되지 않는다고 꾸짖는 글과 영상들을 투고하기도 한다는 사실을 잘 알고 있다.

 

사실 필자 또한 흔히 강의지옥이라고 불리는 유데미에서 큰 수확없이 시간을 허비한 적도 있고, 내 스스로를 속이며 공부하는 척만 했던 적도 있다. 이 모든 사실을 앎에도 불구하고 내가 예시코드를 작성해서 공개하는 이유는, 사실 내가 처음 프로그래밍을 공부할때 정말 막막하고 답답했기 때문이다. 그리고 지금 그 답답함 속에서 '장자'라는 책을 읽고 깨달은 바가 있기에 이렇게 글을 작성한다. 장자의 깨달음이 나의 프로그래밍 생활에 있어서 어떠한 생각을 하게 하였고, 왜 그러한 생각이 예시코드를 작성해서 공개하는 신념을 갖게 하였는지 이야기해보겠다.

 

프로그래밍 잘 할 거 같은 상을 가지신 장자

 

'호접지몽'에서 미루어 보아, 만물의 '일반적인' 기준을 경계하고 상대적으로 보는 시각을 갖자

 

'이렇게 하면 안됩니다', '꼭 이렇게 하세요', '프로그래밍 지금 하면 안 되는 이유', '1년만에 취직하는 법' 등 자극적이고, 반복적인 많은 자료들, 폰트만 다르고 내용은 같은 다른 도메인에 올라와있는 많은 CS 개념 정리글들. 눈도 마음도 지치기 쉽상인데, 개발이 근래에 취업 토픽 내에선 핫한 주제이니 만큼 주변에서도 의심(그냥 요즘 핫해서 하는거 아니야? 그거 해서 성공할 수 있어?)이 쉽사리 생기기 마련이다. 또 그것이 내재화되어 스스로 의심하기 시작할 땐, 공부가 되도 제대로 될 일이 없을 것이다. 나 또한 한때 나만의 길을 찾겠다고 오랜시간 공부해온 것을 등지고 프로그래밍을 학습하기로 다짐했음에도, 시간이 지날수록 위와같은 말들에 쉽게 휘둘리기 좋은 상태에 빠졌었다.

하지만 장자의 고찰을 빌려 말하자면 유튜브, 블로그에 올라와 있는 수백 수천 조회수의 '일반적'인 조언들은 사실 굉장히 지엽적이기도 하다. 학습자의 현재 상태(지식수준, 습득력 등)가 어떠한지, 진정 무엇을 목표로 프로그래밍을 학습하고 있는 지 알지 못하는데, 어떻게 그 '일반적인' 기준이 절대적일 수가 있겠는가.

 

포정해우(庖丁解牛) - 기술이나 솜씨가 매우 뛰어남

 

사실 비전공자나, 시작한지 얼마 되지 않은 사람들에겐 수많은 컴퓨터 과학이나 프로그래밍의 concept들이 참 모호하다. 예를들어, 내가 알던 Thread는 실타래였다. 이게 왜 Process 내에서 작업을 수행하는 녀석이 되는 지까지의 내러티브가 상당히 비약적이라는 말이다. 이를 애써 '아, 실타래처럼 죽 늘어뜨려져있고, 얘가 무슨 작업을 하나보다. 그리고 메인 쓰레드, 글로벌 쓰레드 하는거 보니까 뭐 여러개가 있을 수 있나 보네?' 라고 이해했다고 하더라도, (iOS의 경우) GCD, Concurrency 등 이후의 개념들로 넘어가기엔 여전히 두려운 상태일 것이다. 

이는 사실 당연한 현상이라고 본다. 학습자들은 항상 '균일하고', '정형화된' 정답에 가까운 정보를 원하기 때문이다. 그리고 위에서 말했듯, 수많은 인터넷 매체들과 광고는 학습자들의 수요에 맞춰 자극적인 말들만 내비추기 때문이다, 마치 그들이 잘못된 것처럼. 하지만 필자가 현재까지 프로그래밍 공부를 하면서 느낀점은, 'CS는 원래 상대적이고, 가끔은 모호한 부분이 많구나' 이다.

 

'포정해우' 라는 성어는 소를잡아 뼈와 살을 발라낸다라는 뜻으로, 어떠한 포정(백정)이 소를 정형하는데 아주 리드미컬하고 아름답게 해내는 것을 보고 어떻게 이렇게 할 수 있냐는 질문에 '저는 눈으로 보지 않고 정신으로 소를 대한다' 라는 대답을 한 고사에서 비롯되었다.

우리는 모두 프로그래밍을 뛰어나게 잘 하길 기대한다. 그렇다면 고정적이고 천편일률의 관점에서 프로그래밍을 대하기 보다는, 상대적이고 모호한 것을 인정하고 많은 경험과 거기서 비롯된 깨달음을 기대하는 것이 좋을 것이다.

 

'무용지용(無用之用)' -  쓸모 없는 것이야 말로 달리 생각하면 크게 쓰일 수 있음

 

'클론코딩, 남의 코드를 보고 따라 쓰는 것은 쓸모가 없다' ....  결국 모두가 원하는 게 취업이라고 가정하였을 때, 코드를 작성해본 경험 자체가 어떻게 쓸모가 없을 수가 있겠는가.

 

물론 저 말을 하신 분들의 의견도 당연히 이해하고 있다. 이해하지 않고 생각하지 않고 따라서 작성한다면 의미가 없을 수도 있다. 하지만 이해하려고 하고 생각하려고 하면서, 내가 찾은 코드에서 이해가 안 가는 부분을 공식문서에 검색해보고, gitHub의 다른 수많은 코드들과 비교하며 다른 사람들은 어떤 식으로 작성하였는지 확인하면서 코드를 따라 치는 것이 어떻게 공부가 안 될 수가 있냐는 것이다. 위의 포정해우의 고사에서 포정은 '다른 포정들은 칼을 달마다 바꾸기 마련입니다. 이는 무리하게 뼈를 가르기 때문입니다. 하지만 제 칼은 수천마리의 소를 갈랐는 데도 방금 숫돌에 간 것과 같습니다' 라고 하였다. 같은 정형작업(클론코딩, 코드 따라치기)를 하더라도 도(道 - 방법, 이치)를 깨달으려고 노력(코드를 이해하려는 노력)을 하면서 작업을 한다면 결과는 크게 다를 것이다.

 

따라서 앱스쿨의 훈련생들이, 그리고 나의 블로그를 방문해주시는 모든 분들이 많이 부족한 내 코드를 확인하고 댓글로 많이 수정요청을 해주셔도 되고 모르셨던 부분이 있다면 체크하고 간다면 좋겠다.