초등학교, 중학교 시절

마지막 수정 시각: 2022-06-17 20:06:39

내가 처음으로 프로그래밍이라는 것을 접한 것은 초등학교 2학년 때이다. 진짜 프로그래밍을 했던 것은 아니고, 흔히 쯔꾸르 시리즈라고 부르는 RPG 게임을 만드는 프로그램을 인터넷에서 우연히 다운받아서 썼던 것인데 나는 이게 정말 신기하고 재밌었다.

이런 형태의 툴에서 이것 저것 배치하고 블록 코딩이랑 비슷하게 정해져 있는 명령어들을 잘 써서 게임을 만들 수 있다. 스크린샷은 초등학생때 쓰던 버전은 아니긴 하지만..

한동안 이 툴을 이용해서 게임을 만들어 왔는데, 초등학교 5, 6학년 즈음 나는 툴에서 한계를 느끼기 시작했다. 사실 지금 생각해보면 툴의 한계는 아니고 내 능력의 한계였기는 한데, 이 툴은 기본적으로 턴제 전투 시스템만 제공해주기 때문에 화려한 액션 게임을 만들려면 여러 가지 꼼수를 써야 했다. 그때 나는 실시간으로 싸울 수 있는 액션 게임이 만들고 싶었기 때문에 여기서 스트레스를 많이 받았다. 시스템이 조금만 복잡해져도 뭔가 하나 추가하려면 감당하기 힘들 만큼 노가다가 심해졌고, 성능도 잘 나오지 않아 게임이 너무 심하게 버벅거렸었다.

당시 내 능력으로 생각하기엔 그 문제들은 모두 툴의 문제였다. 절대 내 문제는 아니었다(나는 이 툴 마스터한 초고수니까 -라고 그땐 생각했었다 ㅎㅎ). 그래서 이 툴을 쓰지 않고 다른 방법으로 게임을 만들 수 있는 방법을 찾아보게 되었고, 인터넷에서 많은 사람들로부터 일단 C언어부터 배우세요.라는 말을 듣게 되었다. 하지만..

C언어, 너무 어렵다!

초등학교 5, 6학년쯤의 내 두뇌 수준으로는 C언어는 도무지 써먹을 수 있는 놈이 아니었다. printf니 scanf니 써서 화면에 뭔가 찍을 때만 하더라도 할 만했고, if문 까지도 그럭저럭 이해할 수 있었다. 위에서 말한 쯔꾸르 툴을 쓰면서 프로그램 명령어의 흐름을 어느 정도 이해하고 있었기 때문일 것이다. while문도 비슷한 게 있어서 나름대로 이해가 됐었고. 하지만, 도대체 왜인지는 몰라도 당시의 나는 for문을 도무지 이해할 수가 없었다.

for (초기식; 조건식; 증감식)

요렇게 생긴 놈이고 사실 while문과 크게 차이가 나지 않는다. 근데 그땐 왜 이게 이해가 안 됐을까? 지금 보면 참 별 것 아닌데 말이다. 저 구문의 실행 순서가 이해가 안 돼서 나는 C언어 배우는 걸 포기했었다. 그렇게 나는 이건 좀 아닌가 보다~ 하고 다시 쯔꾸르 툴이나 가지고 놀다가 중학교에 입학하게 된다.

그런데 중학교에 가보니 놀랍게도 C언어를 좀 할 줄 아는 친구들이 있었다. 내가 알고 지낸 코딩 할 줄 아는 친구는 두 명이 있었는데, 한 명은 영재원에서 코딩을 배운 아주 똘똘한 친구였고 다른 한 명은 아마 독학으로 배운 것 같은데 코딩을 상당히 잘하는 친구였다. 그 애들이 코딩을 할 줄 안다는 걸 들은 게 아마 중학교 1학년 2학기 때쯤의 일이다. 그때 나는 중2병에 제법 심하게 걸려 있었기 때문에, 와 얘들도 할 줄 아는데 내가 이해를 못할까? 싶은 생각에 다시 C언어를 배우는 걸 시도하게 된다.

당시 C언어를 배울 때 soen.kr이라는 사이트를 유용하게 썼었다(지금도 공짜로 각종 강의들을 오픈해두고 계신다. 참 고마우신 분이다). 여기서 일단 C언어 기본 문법을 다 익히는 데 아마 1년 정도 시간이 걸렸던 것 같다.

참 희한하게도 초등학생 땐 for문에서 그렇게 애를 먹었는데 다시 시도했을 때에는 정말 많은 사람들이 고생하는 포인터 개념도 아무렇지 않게 이해하고 넘어갔었다. 지금 생각해도 참 신기한 일이다. 겨우 1,2년 사이에 내 머릿속에 무슨 변화가 있었던 걸까?

C언어 문법을 대충 다 배우고 나서, 뭐 때문이었는지는 모르겠는데 학교에서 다른 코딩을 할 줄 아는 친구와 함께 이것저것 간단한 콘솔 프로그램을 만들었었다. 아마 코딩 연습 삼아 그랬던 것 같다. 보통 내가 그 친구 집에 놀러 가서 같이 코딩을 했었는데(지금 생각해보면 짝 코딩이랑 거의 똑같다), 행맨이라든가 그때 재밌게 봤던 몬티홀의 딜레마 문제라든가 뭐 그런 걸 만들었었다. 그리고 제일 열심히 재밌게 만들었던 건 블랙잭 게임인데, 심지어 요놈은 소스 코드도 아직 남아있다. 지금 코드 보니까 정말 웃긴다.

블잭잭은 그때 부모님한테 연락도 안 하고 친구 집에서 마음대로 하룻밤 자면서 밤늦게까지 개발해서 완성했었다(물론 다음날 엄청나게 혼났다). 완성하고 나서 정말 진짜로 엄청난 희열을 느꼈었다.

심지어 그 날 완성하고 나서도 만드는게 너무 재밌어서 이것저것 조금씩 더 추가해서 2.0 버전까지 업그레이드 했었다. 이 스크린샷은 2.0 버전.

나는 이걸 만들고 나서 프로그래머가 되기로 거의 마음을 굳혔었는데, 나름대로 프로그래머가 어떤 직업인지 알아보려고 많이 찾아보고 그랬었다. 그때 평가로는 매일매일 야근만 하는 데다가 월화수 목금금 금이면서 돈도 별로 못 버는 3D 직종 of 3D 직종이라고... 그래도 뭐 나만 재밌으면 됐지 하고 생각했었다.

그리고 그 해 겨울쯤 학교 정보 선생님으로부터 프로그래밍 쪽에도 경시 대회가 있다는 것을 알게 된다. 그래서 그 대회에 나가려고 학교 컴퓨터실에서 코딩할 줄 아는 다른 친구들과 함께 경시 대회 준비를 했었다. 어쩌다 보니 사정이 꼬여서 대회는 못 나갔었지만, 아무튼 거기서 dovelet.com이라는 사이트를 알게 됐고 중3 때는 거의 이 사이트에서 살았던 것 같다. 이게 뭐하는 사이트냐면 쉽게 말해 인터넷에서 프로그래밍 문제를 푸는 사이트다. 경시대회 같은 곳에서 볼 수 있는 유형의 문제들이 사이트에 많이 올라와 있고, 그 문제의 답안을 제출하면 그 걸 채점해서 결과를 알려준다.

왜 내가 이 사이트에서 문제를 열심히 풀었었냐면, 그것 말고는 딱히 할 게 없었기 때문이다. 게임을 만들려고 하니 그냥 단순히 콘솔 화면이 아니라 GUI 창을 만들어야 하는데 어떻게 해야 그걸 만들 수 있는지 당시의 나는 전혀 몰랐기 때문이다. 그렇다고 콘솔에서 뭔가 만드는 건 딱히 내 취향도 아니었고 별로 재미도 없었다. 테트리스 정도까지는 만들었던 것 같은데 어쨌건 내가 만들고 싶은 게임은 그런 게 아니었으니까(위에서도 말했었지만, 그때 나는 실시간으로 치고받고 싸우는 화려한 액션 게임을 만들고 싶었다)

그래서 게임을 만들자니 뭘 어떻게 해야 할지 모르겠고, 콘솔에서는 딱히 만들고 싶은 것도 없고 하다 보니 사이트에서 문제만 주구장창 풀었던 것이다. 저런 문제들은 말하자면 한 문제 풀 때마다 짠 프로그램이 하나씩 생기는 셈인데 만들 프로그램을 끝도 없이 던져주면서 풀었을 때의 성취감도 상당하다 보니 저절로 문제만 엄청나게 꾸역꾸역 풀게 됐던 것이다.

그 당시 사이트에서 문제 풀었던 기록 중 일부. 오른쪽 제출 시간을 보면 알 수 있지만 학교 갔다와서 잘 때까지 계속 문제만 풀었었다. 주말엔 일어나자마자..

아무튼 그렇게 코딩을 하면서 안 좋은 습관도 많이 생기긴 했지만 어쨌건 코드를 짜는 연습은 엄청나게 됐던 것 같다. 이런 사이트들은 문제 푼 개수로 순위를 매기는데 나름 10몇 위권까지도 갔었고(이용자가 그리 많진 않았지만) 그때에는 거의 순위를 올리고 싶어서도 문제를 많이 풀었던 것 같다.

뭐 그렇다고 프로그래밍 문제만 주구장창 풀었던 것은 아니고, 틈틈이 공부도 했었다. 중3 때는 거의 문제 풀면서 다른 것들을 병행해서 천천히 공부했었는데, 일단 C++ 문법부터 배웠었다. C++ 의 경우 그때 나는 객체 지향의 쓸모를 사실 정확하게 이해하진 못했었고(당장 내가 코딩하는 범주 내에서 객체지향이 쓸모를 나타내기 쉽지 않았었으니) 그냥 배워야 한다고 하니 배우는 느낌이었다. 그마저도 템플릿 부분부터는 도무지 이해가 안 가서 템플릿 및 관련 라이브러리(STL) 부분은 통째로 패스했었다. 그거 몰라도 대충 필요한 건 짤 수 있어.라는 생각이었던 것 같다.

그다음에 배웠던 건 Windows API였다. 윈도우즈 운영체제 하에서 돌아가는 제대로 된 프로그램, 그러니까 콘솔 창에서 글자만 찍찍 뱉어내는 프로그램이 아니라 그림도 띄우고 메뉴 창도 있고 여차저차 할 수 있는 그런 프로그램을 만들려면 Windows API를 배워야 했기 때문이다. 물론 Windows API는 굉장히 로우 레벨의 물건이라 이걸 직접 써서 만들어야 할 필요는 없지만, 나한테 그런 걸 가르쳐주는 사람은 없었으므로.. 나는 그래픽이 붙은 게임을 만들고 싶다는 일념 하에 Windows API를 열심히 배워나갔다. 또 참 신기한 게, 포인터는 쉽게 이해하고 넘어갔었으면서 Windows API의 핸들(Handle)은 이해하기가 꽤 힘들었다. 크게 다른 개념도 아닌데 말이다.

그리고... 중 3 겨울 방학에 처음으로 게임 같아 보이는 걸 만드는 데 성공하게 된다. 이름은 우리 거북이가 달라졌어요. 게임 아이디어는 형이 냈던 것인데, 간단한 슈팅 게임으로 맨날 왕따 당하던 거북이가 화가 나서 자기 왕따 시키던 각종 해산물들(그때 당시 생각으로는 대왕 오징어, 거대 바다뱀, 고래, 상어 등등을 보스몹으로 하려고 했었다)을 무찌르는 스토리의 게임이었다.

해당 게임의 스크린샷. 나름대로 보스몹(대왕오징어)도 있고 그래픽은 허접하지만 스테이지가 끝날 때마다 나름대로 업그레이드도 가능했다.

이건 연습이라고 생각하고 C++을 최대한 적극적으로 활용하면서 만들었는데, 만드는 과정에서 어렴풋하게나마 객체지향의 개념을 이해했던 것 같다. 심지어는 나름대로 Data Driven이라 ㅋㅋ 최소한 몬스터들이 생성되는 위치, 종류, 이동 패턴 같은 것들은 소스 코드에 박아 넣지 않고 따로 파일로 빼서 만들었었다. 그 외에 몬스터 애니메이션 이런 것도 파일로 따로 빼서 만들었었고. 그리고 또 생각나는 게 그땐 게임 루프를 몰라서 모조리 타이머(Timer)를 써서 만들었었다. 그래서 게임 프레임이 완전히 바닥을 친다.

이 게임은 참 열정적으로 만들었었는데 안타깝게도 스테이지 2 보스몹인 바다뱀을 만들다가 도무지 그 그래픽을 그려내지를 못하겠어서 접었었다. 내가 조금만 더 그래픽 쪽의 소양이 있었다면 제대로 완성할 수 있었을 텐데... 그래픽도 다 만들고 코드도 다 짜고 하려다 보니 한계에 부딪혔던 것 같다.

그리고 고등학교에 입학하게 된다. 고등학교 땐 야자 때문에 개발을 그렇게 열정적으로 하진 못 했었지만 그래도 이것저것 재밌는 추억은 많았던 것 같다. 그 이야기는 다음 편에 계속하는 걸로.