본문 바로가기
수필

검은 invrtd든 흰 invrtd든 버그만 잘 잡으면 그만이다

by invrtd.h 2024. 1. 8.

 컴퓨터공학에 대한 작은 고찰
 
 0. 난 내가 컴공을 2021년 9월부터 시작했다고 말하지만, 실은 전에도 스크래치나 파이썬을 깔짝거려 본 경험 정도는 있었다. 중학생 때 스크래치 노가다로 스도쿠 푸는 프로그램 같은 걸 만들어본 적 있었고(6x6 허접임), 고등학생 때 파이썬은 대체로 수학 소논문 같은 거 쓸 때 시뮬레이션 용도로 썼었다. 예를 들면 "클래시 로얄 점수 분포가 정규분포가 아님을 증명한 그 소논문" 같은 데서 점수 시뮬레이션 돌리거나 할 때. 그랬기 때문에 난 컴공을 그 시절부터 배웠다고 말하는 걸 꺼린다. 인간은 언제 컴퓨터를 제대로 알게 되나, 하고 물어본다면 나는 이렇게 대답하고 싶다. 시간복잡도를 알았을 때 컴공이 된다고. 왜냐하면 그 시점이 되어서야 컴퓨터는 긍정하기만 하는 기계가 아니며 자동으로 문제를 해결해주는 멋진 마법 장치 같은 게 아님을 알게 되기 때문이다. 계산하는 것만으로는 부족하다. 빠르게 계산할 줄 알아야 한다.
 

 
 1. 그러니까 내가 컴공이 되었던 순간은 2020년 3월에 컴퓨터 프로그래밍을 들었던 순간이 아니며, 2021년 4월에 코딩 교육 앱 개발 무한도전을 시작한 순간이 아닌 것이다. 하지만 내가 "컴공이 아니었던" 시절의 컴퓨터와 코딩에 대해서 기록을 해 보려고는 한다.
 
 2. 2020년, 코로나가 처음 퍼지던 시절 20학번들은 아예 지스트 기숙사에 입사를 할 수 없었다. 본가에서 온라인 수업을 들었다. <컴퓨터 프로그래밍> 과목에서 C언어를 가르친다. 옛날에 파이썬도 해 봤으니 잘할 줄 알았다. 교수님이 배열을 설명한 뒤 갑자기 malloc을 설명하기 시작한다. 포인터도 설명하지 않고. 난 그때 그냥 학생이어서 그냥 그런가 보다 하고 수업을 들었다. 배열과 포인터의 관계도 알지 못했고(당연하다 포인터 단원을 아직 안 나갔으니까), 멀쩡한 배열 놔두고 왜 malloc이라는 개 그지 같은 기능을 쓰는지도 이해하지 못했다. (참고로 '배열의 길이를 가변으로 할 수 있다'는 좋은 대답이 되지 못한다. C99부터 이미 가변 길이 배열이 가능하기 때문이다) 결국 마지막에 남은 건 배열, malloc, 포인터들의 산발적인 지식 다발들뿐이었고 난 이런 식의 공부가 얼마나 폭력적인지(어감이 실제 일어났던 일보단 좀 센데 적절한 단어를 못 찾겠음)를 이해할 힘은 없었다. 그렇게 1학기가 끝났다.
 
 3. 난 합리적인 걸 좋아한다. 어떤 결정이 존재한다면 그 이유가 있었으면 좋겠다. malloc이 존재한다면 malloc의 존재 이유를 찾고 싶고, 포인터가 존재한다면 포인터의 존재 이유를 찾고 싶었다. <컴퓨터 프로그래밍> 수업에서는 존재 이유를 알려주지 않았다. 그렇다면 내가 직접 움직여서라도 그 존재 이유를 찾아야 했지만, 그러지 않았다. 아직 고등학생 티를 다 벗지도 못한 채로 깡시골 집(수원까지 놀러 가려면 1시간 30분 걸림)에 갇혀 있는 19살(만 나이 사용) 소년에게서 뭘 기대할 수 있을까. 난 심지어 <윤성우의 열혈 C 프로그래밍> 같은 책을 살 생각을 하지도 못했다.
 
 4. 컴퓨터를 잘 모르는 사람들은 간혹 컴퓨터에 대해 말도 안 되게 비합리적인 주장을 하는 실수를 하곤 한다. 마치 AI 판사가 더 공정한 세상을 만들어줄 거라고 믿는 사람들(근데 사실 이건 컴퓨터를 잘 모르는 게 아니라 법을 잘 모르는 거 아닌가? 판결에서 사적인 감정을 아예 배제해야 한다고 주장하는 사람들은 애초에 <이상한 변호사 우영우>에서 제시된 명제, "법은 마음을 중요하게 생각합니다"를 이해하지 못하는 것처럼 보인다)처럼. 아무튼 난 그때까지만 해도 컴공이 암기과목인 줄 알았다. 그래서 신소재로 떴다.
 
 5. 난 <재료물리> 수업에서 유일한 1학년이었다. 30명 정도 수강생들 중에서 2등을 했다. 그래서 난 신소재에 가도 잘할 수 있을 것 같았다. 이상하게 들릴 수 있겠지만 <재료물리> 수업은 내가 들은 신소재 과목들 중 유일하게 성적표에 남아 있는 과목이다. 2학년 1학기 중간고사 때 휴학을 했고 이후 진로를 컴공으로 바꾸었기 때문이다. 신소재, 라는 세상은 참 신기하다. 물리 화학 생명을 다 가르친다. 내 주변에 소재 친구들이 별로 없어서 실제로 다 배워야 하는지 아니면 세부 진로에 따라 골라잡는지는 잘 모르겠지만 말이다.
 
 6. 휴학을 하기로 결심한 건 2021년 4월 27일이다. (이 날짜를 기억하고 있는 내가 신기하다) 여러 가지 개인사적인 이유가 쌓였다. 나는 친구들에게 종종 휴학한 것에 대해 자조하는 말을 하곤 하지만 사실 난 휴학이 잘한 선택이라고 생각한다. 내가 자조하는 것은 휴학 자체가 아니라, 휴학이 Best Response가 되어버린 내 삶인 셈이다. 지스트 기숙사를 떠서 걸어서 20분 위치에 자리를 잡았다. 그땐 아무것도 하고 싶은 게 없었던 걸로 기억한다. 예외적으로 했던 게 아침 9시에 일어나서 김재길 교수님의 선형대수학 강의를 듣는 것과, 코딩 교육 앱 개발 무한도전을 했던 것, 그리고 문예창작 동아리 활동, 그것 3개였다.
 
 7. 새로 구한 집은 갑갑했고, 외로웠다. 사실 지금 다시 거기로 들어가서 살라고 하면 오히려 편하게 살 것 같다(좁아터진 고시원에서도 3달 잘만 살았으니까). 요컨대 2023년 가을학기에 교환학생 갔을 때 살았던 카이스트 문지캠 기숙사보다 훨씬 좋다는 거다. 그러나 그땐 정신상태가 지금보다 훨씬 문제적이었고, 개-노답 사건들은 2021년 4월에 끝나기는커녕 계속해서 휘몰아쳤다. 8월에도 그랬고, 10월 막바지에 터진 사건은 진짜 치명타였다. 외로울 때면 난 너무나 답답해져서 간혹 산책을 하곤 했는데 겨울이 될수록 점점 공기가 시렸다. 그 공기의 값을 기억한다. 또는 2021년 11월 21일 MT 때 다른 사람들 다 즐거운데 나 혼자서만 아팠던 그 밤의 온도를 기억한다.
 
 8. 휴학을 하고 나서, 안드로이드 앱 개발에 대한 내용이 담긴 Do it! 시리즈 책을 한 권, 열혈 자바 프로그래밍인지 뭔지를 한 권 받았는데 둘 다 뒤지게 무거웠던 기억이 있다. 생각해보면 왜 내가 그때 <컴퓨터 프로그래밍> 수업을 듣고 컴퓨터가 내 길이 아니라는 잠정 결정을 내렸음에도 불구하고 다시 프로그래밍을 하기 시작했을까? 아마 기본 소양 느낌의 무언가를 배우고 싶었을 것이라 생각한다. 그러나 타인이 정의한 API의 세계는 멀고도 복잡했고, 사실 그때도 코드를 거의 베끼다시피 따라 치곤 했다. Java를 배웠는데 Java를 배울 때 무슨 책을 썼는지, 대체 그 책이 왜 그렇게 두꺼웠는지 잘 기억 안 난다. 클래스와 인스턴스의 관계가 붕어빵틀과 붕어빵의 관계라는, 대체로 잘못된 비유 하나만이 기억에 남아있을 뿐이다.
 
 9. 여러분은 클래스라는 개념을 왜 쓴다고 생각하시나요? Python을 할 때도, Java를 할 때도 클래스에 대한 개념을 배웠지만 정작 내가 클래스의 필요성을 처음으로 느꼈던 것은 클래스가 없는 C 언어를 썼을 때였다. 그러니까, 내 입장에서는 다른 사람들이 만들어 놓은 클래스에 대한 "대중적" 설명이 모두 헛수고였단 거다! Python 입문서의 저자들이 Calculator 클래스를 만들며 눈물의 쇼를 해도, Java 입문서의 저자들이 Car 클래스를 만들며 눈물의 쇼를 해도, 난 사실 왜 클래스가 필요한지 한 번도 제대로 이해해본 적이 없었다. 2021년 10월에 한 백준 문제를 풀기 위해 C를 꺼내들기 전까지는 말이다. 
 
 10. 문제 상황은 이렇다. 어떤 방정식의 해를 계산해야 하는데, 프로그램이 기본적으로 제공하는 실수 자료형인 double의 정확도로는 이 문제를 풀 수가 없었기 때문에 더 정밀한 계산법이 필요했다. 그 정밀한 계산법을 내가 직접 만들어야만 하는 상황. 구조체 하나를 만들어서 88바이트 정도를 뭉탱이로 할당했다. 앞 40바이트가 정수를 뒤 40바이트가 소수를 표현하도록 했다. 그리고 그 구조체를 인자로 받는 덧셈, 뺄셈, 곱셈, 2로 나누기 함수, binary-search 나누기 함수를 직접 정의했다. 약간의 수학 배경지식만 있다면 사인 함수도 직접 구현할 수 있다. 쉬워 보이지만 조건 분기가 많아 상당히 까다로운 작업이었고, 500줄 이상의 구현량과 C의 태생적인 한계 때문에 상당히 높은 정신력을 요구했다. 상당히 조악한 코드임에도 불구하고 나는 그 채점 과정을 잊지 못한다.

 
 이 문제는 내가 풀었던 2번째 백준 다이아 문제였던 것으로 기억한다.
 

 
 수필만 읽으면 심심할까 봐 박은빈 사진도 넣음
 
 11. 직접 그 사람이 되어보지 않고서는 모르는 것이 있다. 하지만 세상은 당신에게 "그 사람"의 자리에 "OOP(객체 지향 프로그래밍) 언어를 만든 사람"을 넣을 것을 요구한다. (적어도 나한테는 그랬다는 뜻이다) 그렇지 않으면 역설적으로 OOP를 공부하는 것이 당신에게 폭력으로 다가올지도 모른다(다시, 적어도 나한테는 그랬다는 뜻이다. 이번에도 폭력은 실제 일어났던 일보다는 어감이 좀 세다). Constructor(생성자)가 왜 필요할까? C로 구조체 프로그래밍을 해 본 결과, C 구조체는 default init이 안 되므로 코드가 무의미하게 지저분해졌기 때문이다. 구조체와 객체의 차이는 무엇인가? 다양한 정의가 있을 수 있겠으나 나한테 가장 와닿는 informal한 설명은 이거였다. "빡대가리면 구조체고 빡대가리가 아니면 객체다". C 구조체로 프로그래밍을 하면 구조체를 갖고 뭔 일을 할 때마다 그 구조체 외부에서 정의된 함수를 가져다 써야 하기 때문에 매우 빡대가리처럼 느껴진다. 구조체 s를 갖고 f와 g라는 일을 순서대로 하려고 하면 그에 대응하는 코드는 g(f(s))이기 때문에 (C에서는 큰 구조체에 대해서 g(f(&s))긴 함) 읽는 순서가 뒤집히는 것은 덤이다. (이 단점은 각각 객체 지향 프로그래밍 패러다임에서 s.f().g(), 함수형 프로그래밍 패러다임에서 s |> f |> g로 극복된다)
 
 12. 2021년 12월에 난 내가 신소재에서 전컴으로 전과할 것을 이미 알고 있었다. 하지만 위에서도 언급했지만 나는 2021년 11월을 기점으로 2022년 2월까지 거의 사람 구실을 못할 정도로 망가져 있었으니 실제로 전과 결심 전까지 2달 반 정도를 공부했을 뿐이다. 사람에 따라 멍청한 선택이라고 할 수도 있겠다. 하지만 난 3월이 되자마자 어떻게 그렇게 빠르게 회복할 수 있었을까? 한 가지 가능한 설명은, 2021년에 나를 구성하고 있었던 만성 우울은 실은 만성 우울이 아니라 여러 급성 우울들의 기막힌 시간차 조합이라는 것이다. 실제로 나는 왜 내가 그렇게 힘들어했는지 이유에 대해서는 이 글에 하나도 털어놓지 못하고 있지 않는가. 그 정도로 언급하는 것이 문제시되는 사건들이라는 것이다. 그렇다고 생각하지 않나요, I씨?
 
 13. 2022년 봄은 내가 기억하기로 가장 봄다웠던 봄이었다. 지극히 주관적인 경험이 담겨있긴 하지만. 컴공 관련 과목으로 [자료 구조]와 [객체 지향 프로그래밍]을 들었고, 2과목밖에 안 들었던 이유는 들을 만한 컴퓨터 과목이 없어서였다. 그마저도 [객체 지향 프로그래밍]은 기초선택과목으로 인정되어서 사실상 전공 과목은 1과목이었던 셈이다. [자료 구조]는 솔직히 이미 2021년에 다 공부했던 것들이라 큰 감흥이 없었고, [객체 지향 프로그래밍]을 열심히 했던 기억이 난다. 사실 객지프 성적을 꼭 잘 받아야만 하는 외적인 동기가 있긴 했는데 아무튼 열심히 하면 그만 아니겠는가. C++ 입문서 명저로 [씹어먹는 C++]이라는 책이 있는데 분량이 1000페이지씩이나 된다. 이걸 16, 17단원만 빼고 거의 다 읽었다. 그러니까 한 800페이지 정도를 한 학기 동안 독파했을 텐데 정작 교수님이 썼던 레퍼런스 교재 C how to program은 C++ 설명이 한 300페이지밖에 안 됐던 걸로 기억한다.
 
 14. 내가 [씹어먹는 C++]을 좋아하는 이유는 독자를 진지하게 대하기 때문이다. Car 클래스를 만든다거나 Calculator 클래스를 만든다거나 하는 쉬운 길을 택하지 않는다. 연산자 오버로딩을 이용한 복소수 클래스 구현을 살짝 다룬 뒤 6단원에 바로 'N차원 배열 만들기' 프로젝트를 박아 버린다. 앞서 말했다. 난 합리적인 걸 좋아한다고. Class라는 걸 배웠으면 Class를 써야만 간단해지는 무언가를 배우고 싶다고. 그 솔직히 당신은 car 클래스를 만들어서 대체 무엇을 하고 싶었는지 보여주지 않았잖아요? 실제로 내가 필요한 걸 갖고 있는 사람을 찾기까지 너무 오랜 시간이 걸렸다.
 
 15. 처음 프로젝트를 계획했을 때 2명의 팀원이서 900줄 정도의 코드를 짜자, 그 정도의 목표를 세웠었는데 완성본은 2,200줄이었다. 예상치를 2.5배 정도 뛰어넘은 분량은 그렇다 치고 중요한 건 이게 내 첫 프로젝트였다는 것이다. OOP의 힘은 내가 예상했던 것보다 엄청나게 강력했다. 살면서 짜 본 가장 긴 코드가 10번 문단에 등장한 500줄짜리 코드였던 나는 점진적인 성장이 아닌 퀵 무브로 움직이는 성장을 겪게 되자 전설의 포켓몬을 손에 넣은 로켓단 간부처럼 굴기 시작했다. 더 강한 힘, 오직 더 강한 힘만을 얻고 싶었단 거다.
 
 16. 코드 줄 수가 꼭 그 프로젝트의 규모를 말하지는 않는다. 하지만 코드 줄 수가 일정 규모를 넘어가게 되면, 그때 이후부터 코드를 작성하는 행동은 코드를 "짠다"고 말하기보다는 오히려 코드를 "길들인다"고 말하는 것이 더 나을 수도 있다는 생각을 해 본다. 잘 길들여지지 않은 코드는 언젠가부터 주인의 통제를 무시하고 다른 방향으로 튀어버리기 마련이다. 마치 자의식이 있나 싶을 정도로. 내가 얻고 싶었던 '더 강한 힘'도 그런 맥락에서 이해해야 할 것이다. 내가 놀랐던 이유는 우리가 2,200줄의 코드를 짰기 때문이 아니라, 2,200줄의 코드를 길들였기 때문이다.
 
 17. 더 강한 힘에 대한 집착이 수면 위로 떠오른 것이 아마 그때쯤이었을 것이다. 다만 그렇게 된 추가적인 이유들도 있다. 2022년 6월이면 2021년에서 벗어난 지 고작 6달이다. 그가 살던 곳으로 다시 돌아가고 싶지 않았다. 그때의 내가 살던 자취방 말고 그때의 나 자체 말이다. 굳이 우울을 냉장고에 보관해두고 하나씩 하나씩 소중히 까서 아껴먹는 그런 경험을 하고 싶지 않았단 것이다. 2023년 후반부쯤 들어서 나는 나뿐만 아니라 어떤 인간도 절대로 그곳으로 들어가게 해서는 안 된다고 주장하기에 이르렀다. "우울증은 나르시시즘적인 질병이다" 같이 우울증에 걸린 사람들을 타자화하는 명제들에 대해 유독 강한 반대를 표시하기 시작한 것도 그때부터였을 것이다. 그들은 너고 나고 우리 전부다.
 
 18. 부차적인 요인도 (아니, 사실은 주요할지도 모르는 요인도) 있다. 예를 들면 내 친구였던 "진짜 나르시시스트" 씨, 날 기억하나요? 너 덕분에 그나마 있던 중학교 친구들도 전부 날려먹었어. 만족스럽니? 어차피 지금 주변에 다 좋은 친구들밖에 없어서 후회하진 않긴 해. 난 가끔씩 존경도 받고 경멸도 받으면서 사는데 넌 어차피 나처럼 못 살 걸 알아.
 
 19. 세계는 얼마나 큰가? 매일 인터넷에 접속하고 인터넷으로 대화하는 우리들은 인터넷이 얼마나 큰지에 대해서 감을 잘 못 잡고 있다. 실은 그건 나도 마찬가진데, 카이스트에서 네트워크 개론을 안 들었기 때문이다. 언젠가 한 번 강지훈 교수님이 그러셨다. 살면서 한 번은 서버실에 들어가 보라고. PC 말고 서버용으로 사용하는 컴퓨터는 얼마나 거대한지, 데이터의 실체는 몇 킬로그램인지, 계산을 감당하기 위해 서버실의 온도는 얼마나 추워야 하는지, 직접 느껴 보라고. 저것이 네가 길들여야만 하는 세계라고. 객지프 완성작이 2,200줄이라는 사실을 확인하고 나서 아마 이것은 시작에 불과할지도 모른다는 생각을 했다. 표준 라이브러리 같은 걸 열어보면 수천 줄짜리 파일이 수천 개는 있다. 우리는 경외감을 느끼기 위해서 굳이 신을 찾거나 우주를 탐사할 필요가 없다. 인간이 만들어낸 세계조차도 인간보다 훨씬 크다. 아니 어쩌면 나를 제외한 인간은 모두 신일지도 모르겠다.
 
 20. 2022년 8월 나는 GIST에서 네 번째로 백준 Diamond V를 찍은 인간이 되었다. 당시 내 랭킹은 600등 정도였다.
 

 
 수필만 읽으면 심심할까 봐 박은빈 사진도 넣음 (아이씨 짧게 쓰려고 했는데 왜 안 끝나)
 
 21. 지스트에 사각사각이라는 문예창작 동아리가 있는데 난 사각사각 원툴이었다. 안타깝게도 사각사각에는 전전컴 인재가 별로 없다. 화학과는 많은데. 지스트 사람 중 전공이 전전컴인 사람이 40%는 될 텐데도 사각사각에서 전전컴 비율은 10% 아닌가 싶은 생각이 들 만큼. 난 친구가 아닌 동료가 필요했다. 야심차게 GDSC에 지원했다. 떨어졌다. 그때의 감정을 [GDSC GIST 2기에 떨어졌습니다!]라는 수필에 담았다. 저 글, 이상하게 GDSC 지원 시즌만 되면 어디서 검색 유입이 돼서 조회수 떡상하다가 지원 시즌 끝나면 바로 주간 조회수 0 박힌다. 암튼 재밌으니까 한번 읽어 봐. 명작인지는 모르겠는데, 재밌어.
 
 22. 하지만 2022년 9월-12월, 그 시절의 나는 동료도 없이 어떻게 그 어두운 길을 헤쳐나갔을까? ICPC 팀원 선배님들 빨로? 몰-루.
 
 23. 사상에 대한 문제를 생각할 때가 되었다는 것을 깨달았다. 2023년 봄에 있었던 전전컴 웰컴 행사에서 선배 역할로 강연을 했던 선배는 내가 잘 아는 사람이었고, 그 정보에 의하면 나와 사상이 반대였다. 그 선배는 "밥인지" (지스트 학식 정보를 알려주는 어플)를 자기 친구들이 개발했는데 앱 개발에 대한 배경지식 배우는 것 포함해서 3주 정도밖에 걸리지 않았다고, 무엇을 배우는지는 그다지 중요하지 않고 무엇을 할지가 중요하다고 말했다. 그 이야기를 들으면서 나는 이전에 풀었던 한 백준 문제를 떠올리고 있었다. 이 문제는 티어가 Diamond I인데, 어떤 행렬의 characteristic polynomial을 O(N^3)에 구하는 문제고, 난 이걸 구현하는 데 600줄이나 박았다. 고작 백준에 제출해서 맞았습니다!! 한 번 보기 위해 600줄. 세상에는 여러 가지 일들이 있다. 계획하기는 어려운데 하기는 쉬운 일과, 계획하기는 쉬운데 하기는 어려운 일. 문제 만드는 사람 대 문제 푸는 사람. 그 선배는 문제 만드는 사람을, 난 문제 푸는 사람을 선택했고, 다른 사람들은 또 무슨 선택을 할까?
 
 24. 하지만 불균형이 일어난다면 그것은 더 이상 선택의 문제가 아니다. 다수자가 될 것이냐 소수자가 될 것이냐를 선택하라 하면 다수자를 선택할 사람이 많다는 뜻이다. 난 굳이 소수자를 선택했던 것 같다.
 
 25. 이건 여담인데, 그때 내가 당시 전전컴 부학부장님을 만나서 얘기를 했다. 내가 PL(Programming Language) 쪽에 관심이 있는데 지스트에 PL 랩실이 없어서 고민 중이라고. 그때 부학부장님께서 우리도 그런 거 하나 있어야 하지 않냐고 말씀하셨는데, 그때 난 부학부장님께서 그냥 하는 말씀인 줄 알았다. 실제로 그냥 하신 말씀일 수도 있다. 그리고 다음 학기에 프로그램 검증 같은 걸 하시는 (대충 소프트웨어 엔지니어, PL, 보안 쪽인 것 같음) 소순범 교수님께서 부임하셨다... 뭐 자세한 내막이야 나도 모르겠지만 일단 그랜절 박고 시작합니다 충성충성충성
 
 26. 더 강한 힘에 대한 집착, 이걸 니체 철학 쪽에서는 "힘에의 의지"라고 부르기도 하는 것 같다만 일단은 그런 용어 없이 이야기를 전개하고 싶다. 앞서 살펴보았듯이 내가 갖고 있던 더 강한 힘에 대한 집착은 공포에서 나오기도 했기 때문이다. 어쩌면 GDSC 떨어지고 나서 그렇게 방황했던 이유도 그런 공포 때문이 아닐까 하고 생각한다. 내 집착은 다른 사람에 비해 상당히 강해서 가끔 병적이지 않나 생각하기도 하지만, 이게 날 파괴한 적은 별로 없었던 것 같다. 관리를 나름 잘 했다고 본다. 힘을 원한다면 그 힘을 어떻게 해서 얻을 것인가? 나는 2가지 선택을 했다. 첫 번째 선택은 백준을 계속 하면서 알고리즘 공부를 더 하는 것이었고, 두 번째 선택은 함수형 프로그래밍, 디자인 패턴, 코루틴 같은 PL(Programming Language) 지식들이었다.
 
 27. 이런저런 순탄하거나 험난한 과정 끝에 지스트 백준 랭킹 1위라는 자리를 얻었다. 단 정확히는 solved.ac 랭킹 1위다. 난 주변 사람들에게 한국 사람이면 제발 백준 좀 하자고 말하고 다니곤 했다. 개발자 3대 운동은 그리디, DP, 그래프라고 말하곤 했다. 난 확실히 백준에서 얻은 것이 많다. 더 이상 웬만하면 파이썬 list에 in 연산자를 쓰거나 list.pop(0) 같은 구문을 쓰지 않는다. 시간복잡도를 잘 재게 되었다. 어떤 프로그래밍을 하더라도 완벽히 최적화하지는 못할지언정 시간복잡도만큼은 최적으로 유지하려고 노력하게 되었다. 문제가 생겼을 때 어디가 문제인지 한 번에 짚지는 못하더라도, 적어도 문제가 될 수 있는 부분의 후보 정도는 짚을 수 있게 되었다. edge case를 다루거나 만드는 실력이 늘었다. 버그가 생기지 않고 한 번에 코딩을 성공시킨 경험이 늘어갔다. 하지만 내가 백준을 통해 얻은 진짜 자산은 말로 설명하기 어려운 종류의 것이다. 이런 무형적인 것들은 원래 눈에 잘 보이지 않는다. 눈에 잘 보이지 않아야 정상이다.
 
 28. 지스트 백준 랭킹 1위 같은 자리를 얻으면 좋을 것 같지만 실제로 좋다. 다만 내가 무엇을 할 수 없는지 더 잘 알게 된다. 예를 들어 난 ICPC 본선에 무리 없이 진출할 수 있지만 수상까지는 힘들 것이다. 5시간 안에 다이아 문제를 적어도 하나 풀어야 하기 때문이다. 그런 사실을 떠올려보면 내 컴공 경력이 2년 반밖에 되지 않는다는 사실이 상당히 한탄스러워진다. 나한테는 사소한 단점이긴 한데 PL 의존증(...)이 있다. 단기 기억 용량이 같은 지스트 컴공 친구들보다도 작은 것 같다. 그래서 다른 친구들이 tuple로 대충 구현하는 것을 갖다가 굳이 class를 붙여야 하고, python의 경우에는 type hinting을 쓰지 않고는 거의 코딩이 불가능한 수준이다. 그래서 지스트 친구들이 구현하는 데 300줄 정도 걸리는 과제를 나는 400줄은 써야 구현할 수 있다. 어쨌든 구현할 수 있긴 하므로 별 피해는 안 보지만, 결국 말하고 싶은 것은 이것이다. 나에 대한 이런 사소한 단점까지 하나하나 다 알게 된다는 것.
 
 29. 한편 윙방에 있던 K는 나와는 다른 선택을 했고, 나는 나와 다른 선택을 하라고 말했다. K는 2023년 객지프 프로젝트를 하고 있었고 그 코드가 거의 3인 6,000줄 분량이 나왔다. K는 프론트엔드 특성상 코드가 긴 것은 어쩔 수 없다고 설명했지만, 어쨌든 유지보수가 쉬운 6,000줄 프로젝트란 없다는 사실에는 다들 동의할 것이다. K는 말했다. 이렇게 큰 프로젝트를 하면 다른 과목 공부를 못 하는데, 이걸 붙잡고 있는 게 맞나? 그리고 나는 그걸 붙잡으라고 했다. 다들 자기 적성에 가장 잘 맞는 무언가를 붙잡는 거라고. 내가 그렇게 말했던 이유는 이타심 같은 것도 있겠지만, 내가 그런 태도를 가져야만 반대로 나도 존중받는다는 것을 본능적으로 알고 있었기 때문이라고 생각했다.
 
 30. 나에게는 힘에 대한 집착이 있었고 그건 아마도 그때 6,000줄짜리 프로젝트를 했던 그들도 마찬가지였을 것이라 생각한다. 아무리 생각해도 wasm은 오버킬이다. 우리 객지프 무기였던 trie가 오버킬이듯이. 경제학적으로 볼 때 힘을 빼도 똑같은 성적이 나온다면 굳이 힘을 더 넣을 이유가 없다. 오직 힘에 대한 집착만이 오버킬을 만들어낼 수 있다. 그러니까 소수자로 살면(확실히 지스트에서 PL 파는 사람은 소수자가 맞구), 다수자를 원망하기 쉬워진다. 하지만 다수자 역시 그들만의 꿈이 있음을 나는 종종 놓치곤 했다. 음... 사실은 알고 있었다. 누가 모르겠어? 다만 나 역시 꿈이 있음을 여러분께 증명하고 싶었던 나머지 잠시 뒤로 밀어두기로 한 것이다. 그게 다다.
 

 
 수필만 읽으면 심심할까 봐 박은빈 사진도 넣음 (진짜 다음 박은빈 나오기 전까지 수필 무조건 끝낸다)
 
 31. 카이스트에 교환을 갔다. 내가 무엇을 할 수 없는지를 새롭게 확인할 수 있었던 중요한 시간이었다. 나와 맞는 공부 스타일이 있고 그 스타일을 안 따라가는 교수님을 만나면 학점이 안 나온다, 나는 생각보다 체력이 꽤 딸린다, 친구가 있다는 것은 정말 중요하다, 사람에 대한 스트레스를 안 받는 환경을 구축하는 것은 중요하다, 난 어려운 문제가 나오면 잘 풀지만 많은 문제가 나오면 못 푼다, 등등. 안타까운 사실은, 무엇을 할 수 없는지를 알게 되려면 나 자신을 극한으로 밀어붙여야 하고 그것은 보통 번아웃을 동반한다는 것이다. 그래서 번아웃이 왔다. 이제 난 하다하다 니체를 가지고 번아웃을 연성(...)하는 데 성공했다. 그래서 원래 겨울 인턴으로 예정되어 있던 동시성 프로그래밍 랩실을 하지 않기로 했다. 
 
 32. 인생이 수미상관일 확률은 거의 없지만 사건을 잘 잘라서 재배열하면 수미상관을 얼마든지 만들어낼 수 있다. 나도 그렇고. 후배들이 컴퓨터 프로그래밍 시험 치는 것을 내가 도와주기로 했다. 3년의 세월을 지나 다시 이전의 자리로 돌아오고 나서 알게 된 것은, 후배가 갖고 있던 시험지가 26문항이고 그중 6문항에 오류가 있는 것 같다는 사실이었다. 좀만 더 빨리 알았더라면, 나와 시험지 중 어느 쪽이 잘못이었는지 좀만 더 빨리 알았더라면 신소재로는 가지 않았을 텐데. 아쉽다.
 
 33. 다음에 대해서는 잘 모르겠다. 전에 말했듯이 지스트 백준 1등이라는 타이틀은 나에게 불필요하게 높은 자만심을 준다. 따라서 이것을 제거하고자 했고, 시행 결과 충분히 밀도 높은 번아웃을 합성하는 데 성공했다. 그 다음은 무엇인지 잘 모르겠다. 앞으로도 혼자서 많이 공부하고 혼자서 많이 외로워할 수도 있고, 내 동료를 찾을 수도 있겠지. 이제는 미래에 대한 생각이 아예 없어질 지경에 이른 것 같다. 아직도 세상 돌아가는 방식을 다 이해 못 해서 난 잠깐만 여기서 사라지기로 했다.

댓글