5년의 밤 — ‘518일동안 단 하루도 빠지지 않고 알고리즘을 풀었다.’의 후속글

Jay Lee
devserum
Published in
25 min readFeb 21, 2024

--

> 글 읽으시면서 들을만한 음악링크(클릭)

별거아닌 비루한 개발자의 지루한 이야기 일테지만…

전에 읽은책들중 정확히 기억이 안나지만 인상에 남는 구절이 있었는데

‘프로젝트가 실패하는 이유들중 하나는 지식의 부재, 훈련부족으로 인한 역량의 부재’ 라는 늬앙스의 글이 있었다.

생각해보라, 당신이 지난 1달간 한 일을 다시 한다면 똑같이 1달이 걸리겠는가?

아마도 시간이 크게 단축 될것이고 이것은 당신이 학습하는데 꽤나 많은 시간을 소비 했다는것을 의미한다.

그렇다면, 우리가 이 생각하는 능력을 좀더 강화하거나 개선시킨다면, 이를테면 딱 13%만 개선 시켜도 우리는 1시간을 아낄 수 있다.

13%개선 시켜서 벌어들인 그 1시간을 다시 생각하는 방법 강화, 개선에 재투자 하고,
또다시 개선된 방법으로 또다시 시간을 절약하는 프로세스를 반복한다면…

어쩌면… 이것이 지속 가능한 향상 방법 아닐까?

라는 생각을 했다.

그리고 그 방법론으로 나는 이런 퍼즐(알고리즘)들을 풀면 사람의 두뇌를 꾸준히 훈련 시킴으로써 업무 생산성을 높일수 있다는 생각이 있었다.

그리고 이 가설을 검증 하기 위해 기꺼이 약 2년이 넘는 시간동안 실천 해 보았고 그 과정들에서 내가 느낀점을 적어 보려고 한다.

518일동안 단 하루도 빠지지 않고 알고리즘을 풀었다. 中

어느덧 ‘518일동안 단 하루도 빠지지 않고 알고리즘을 풀었다.’ 라는 글을 쓴 지 3년이 다 되어갑니다.

당시에 과분한 관심을 받아서 조금 부끄럽기도 했습니다만 누군가가 제 발자취를 쫓는다는 걸 알게 된 뒤로는 이따금씩 제 흔적을 남기는 것도 좋겠다 생각이 들었습니다.

그래서 얼마나 훈련하였습니까?

24년 2월 21일 기준 LeetCode에서 1008문제 CodeWars에서 868문제

총 1876문제 풀었습니다.

5년이 1825일이니 5년이 조금 넘은 셈이지요.

지금부터 써 내려갈 이야기는 별거 아닌 비루한 개발자의 지루한 이야기일 테지만 5년의 밤 동안 알고리즘을 트레이닝 하게 된 계기와 과정, 그리고 느낀 점을 담아보려 했습니다.

이야기의 시작 — 쓸모 있는 사람이 되고 싶었어요.

1800년대 아직 남극이 정복되지 않은 미지의 세계일 때 ‘어니스트 섀클턴’이 남극 탐험을 위해 아래와 같은 구인공고를 올리자 197:1의 경쟁률을 기록했다고 합니다.

구인
MEN WANTED

위험한 여정, 적은 임금, 혹한, 몇 달간 완전한 어둠, 끊임없는 위험, 무사귀환 불확실, 성공 시 명예와 영광.
for hazardous journey, small wages, bitter cold, long months of complete darkness, constant danger, Safe return doubtful, Honour and recognition in event of success.

- 어니스트 섀클턴 벌링턴 가 4번지.
Ernest Shackleton 4 Burlington st.

남들이 가보지 않은 길을 걸어가는 것, 누군가는 왜 그런 일을 하냐고 하겠지만 어쩌면 참 무모할 정도의 탐험가들에 의해서 항로가 개척되고 세상이 연결되어 문명을 발달시키게 된 것 아닐까 하는 생각을 합니다.

많은 동식물들은 자신의 시간이 끝날 때 마치 태초에 존재하지 않았던 것처럼 사라져갔지만, 인간만은 끊임없이 지식과 기술을 다음 세대에게 넘겨주며 한계를 밀어냈죠.

때론 어떤 연구나 실험은 여러 세대를 걸쳐서 하기도 하면서 말이에요.

심지어 그렇게 자기 평생을 바쳐 연구한 결과를 다음 세대에게 아무런 대가도 없이 나누기도 합니다.

소아마비 백신을 개발한 ‘조너스 소크’에게 특허 관련 인터뷰.
그는 결국 백신 제조 기술을 특허를 내지 않고 전 세계의 공유했다.

누군가는 이런 사람들을 두고 바보라 하겠지만, 그 바보들이 모여 자신의 지식과 기술을 나눠 문명을 이뤄냈지요.

그리고 이 순간에도 누군가는 바보처럼 살아가고 있을 겁니다.

아주 오래전 거의 20년 가까운 세월전에 리누스 토발즈님이 프롤로그를 쓴 ‘해커, 디지털 시대의 장인들’이라는 책을 접하게 되고 저도 쓸모 있는 사람이 되고 싶다는 생각이 자라났습니다.

그렇게 저의 모든 이야기의 시작은 쓸모 있는 사람이 되고 싶다는 생각에서 시작되었습니다.

그리고 어쩌면, 아주 어쩌면, 정성을 다하면 나 같은 사람도 언젠가 쓸모 있어질 수 있지 않을까 하는 생각이요.

여러분은 어떻게 개발자가 되었나요?

누군가에게 입 밖으로 꺼내어 말하진 않았지만 가슴 한편에 묻어두었던 꿈이 있지 않았나요?

언젠가 한 번쯤 나도 쓸모 있는 사람이 되고 싶다는 그런 꿈이요.

멋진 사람들에게 박수 쳐주기

학창 시절 공부할 때 GNU나 오픈소스 이야기를 듣긴 했지만 사실 그렇게 대단한 건 줄 잘 몰랐습니다.

경제학 수업도 종종 들었는데 경제학 원론이나 맨큐의 경제학 같은 책으로 공부하면서 가치 충돌이 발생했었습니다.

그때 즈음 하버드 대학교 교수님 마이클 샌델이 쓴 ‘돈으로 살 수 없는 것들’을 읽었었는데

“도대체 이들은 왜 이런 행동을 하는가?
나의 옮음과 그들의 옳음은 왜 다른 것인가?”

하는 생각이 들더군요.

그러나 실제로 현업에서 일해보니 오픈소스의 위상이나 그 역할은 감히 제 잣대로 평가할 수 있는 그런 게 아니었습니다.

세상에는 너무나 멋진 사람들이 많았습니다.

저는 감히 생각지도 못한 일들을 이룬 사람들이요.

사실 저는 개발자를 직업으로 삼기 전까지는 그래도 제가 머리가 중간은 간다고 생각했는데요 제가 끌어다 쓰는 오픈소스들 코드 보면서 아 나는 말하는 감자구나 생각이 들더라고요.

쓸모 있는 사람이 되고 싶어 나름의 공부를 시작했지만 제가 위대한 사람들에게 도움이 되기에는 갈 길이 너무 멀었습니다. 그저 남들이 만들어놓은 거 쓰기에만 급급한 그런 사람이었죠.

제가 할 수 있는 건 그저 먼발치에서 박수 치는 것 말고 할 수 있는 게 없더군요…

이 사람들이 오픈소스 안 만들었으면 나는 도대체 어떻게 개발을 할까 생각이 들었습니다.

마음은 제가 식사라도 한 끼 대접하고 싶지만 거리적 제약으로 그게 안되니 아쉬운 대로 멀리서 박수라도 치기로 합니다. 당신을 응원하는 사람이 있다는 걸 표현할 방법으로 떠오르는 게 후원이더군요.

그렇게 저의 첫 후원은 2015년에 제가 서버 배포에 많이 사용하던 Ubuntu Canonical이었습니다.

불과 5달러 밖에 되지 않는 돈이지만, 그마저도 비정기적이었지만 감사한 마음이 들 때마다 제 박수소리가 들리길 바라며 후원했습니다.

그리고 얼마 지나지 않아 Facebook이 React 라이선스를 바꾸며 작은 파장이 일었을 때 즈음 VueJS에 관심을 갖게 되고 이후 VueJS와 Vuetify에 정기후원을 시작했습니다.

(Vuetify는 꽤 오랜 기간 이후에 후원을 중단했습니다)

얼마나 지났을까요, 풀 스택으로 개발을 하다 보니 MDN 사이트를 방문할 일이 많은데 어느 순간 MDN 사이트가 wiki 기반의 비영리로 운영된다는 깨달았습니다.

그 수많은 이들이 아무런 대가 없이 지식의 탑을 쌓아 올렸다는 게 정말 대단하더군요…

그러던 중에 후원을 필요로 하는 문구를 봤던 기억이 있는데요 이후 정기 후원을 시작했습니다.

운명의 장난일까요?

미국 Wikipidea 들어가서 즐겁게 지식을 탐닉하는데 어느 순간 아래와 같이 도움 메시지가 뜨더라고요

출처 — This Is Why You Should Donate to Wikipedia — InsideHook

제가 봤던 메시지는 더 절박했었습니다.

서버비가 3달도 안 남았다는 메시지로 기억하거든요…
청천벽력 같은 소리죠…
그렇게 위키피디아 후원이 시작되었습니다.

그때 즈음 wiki에 더 많은 관심을 갖게 되었고 위 키 엔진을 개발해 볼까도 생각했는데 Nicolas Giard라는 사람이 wikijs라는 오픈소스를 개발하더군요.

슬랙 채널에서 몇 날 며칠을 대화해 봤는데 이런 사람이 더 많아지면 세상은 더 멋있어지겠다는 생각이 들었습니다.

이 사람이 부디 지쳐 쓰러지지 않기를 바라며 후원을 시작했습니다.

그렇게 정기 후원이 또 하나 늘어났지요.

일단 닥치는대로 공부를 해보았지만…

그렇게 멋진 사람들에게 박수 치며 뭐라도 해보려고 개발 서적들을 읽었습니다.

개발 서적을 계속 읽다 보니 많은 공통점들이 보이기 시작했고 어느 순간 파편화되어있던 지식의 퍼즐들이 하나 둘 맞춰지는 느낌이 들긴 했지만 뭔가 부족했습니다.

그러다 어느 순간 다리에 부상을 입게 되었는데, 치료하는 데 너무 오래 걸리더군요.

나름 꾸준히 하던 운동도 쉬고 하다 보니 마음도 울적해지더라고요.

이때는 다시 마음껏 걷는 게 소원이었습니다.

그때쯤 미국 회사 리모트 근무를 하고, 운 좋게 뉴욕에 3달간 출장을 가게 됩니다.

이때 제 삶의 낙은 퇴근해서 샌드위치 하나 사들고 공원에 가서 해지는 것을 바라보는 것이었어요.

석양을 보며 많은 생각을 했습니다.

압도적으로 쏟아져 나오는 논문들과 지식의 바닷속에서 깨달은 것은 제가 공부하는 속도보다 생산되는 지식의 양이 더 많다는 것, 우리는 태어나는 순간부터 죽어가기에 유한한 삶을 살기에 그걸 다 공부할 수 없다는 것, 심지어 제가 공부했던 지식들이 구시대의 유물이 되어버리는 속도도 빨라졌다는 것입니다.

뭔가 패러다임을 바꿔야 했습니다.

오늘 내가 배운 지식이 내일이면 구시대의 유물이 되어버리는 세상에서 살아남기 위해서는 필요할 때 무엇이든 빠르게 새로운 지식을 배울 수 있도록 유연한 사고를 갖추지 않으면 안 되겠다는 판단이 들었습니다.

그리고 멋진 일들은 대게 남들이 해본 적이 없는 새로운 일인 경우가 많기 때문에 더더욱 이런 역량이 필요할 테고요.

평생 남들 도움만 받다가 원래 존재하지도 않았던 것처럼 삶을 끝내고 싶지는 않았거든요.

저도 언젠가는… 다른 사람에게 도움을 주고 싶었어요.

그래서 생각하는 훈련이 잘 되어있다면 어떤 직업을 가지더라도, 어떤 일을 하더라도 생산성을 끌어올릴 수 있을 것이고 이것이 바로 ‘지속 가능한 방법’일 수도 있겠다는 가설을 세웠습니다.

최근에 알게 된 것입니다만, ‘신경 가소성’ 이란 것이 있더군요.

‘신경가소성에 관한 이론에 의하면, 경험은 실질적으로 두뇌의 물리적 구조와 기능적 조직 모두를 변화시킬 수 있다. ‘ -위키피디아

쉽게 얘기하자면 훈련으로 개선이 가능하다는 것이죠.

하지만 사람은 본능적으로 리스크를 회피하고 싶어 합니다.

그래서일까요 많은 사람들이 어떤 어려운 일들을 하기 전에 흔히들 하는 얘기가 보장만 되면 자기도 한다고 합니다. 아마도 노력이 자신을 배신했던 경험 때문에 움츠려 들어서 그럴 수도 있겠지요.

하지만 제가 깨달은 것은 노력은 우리를 배신할 수 있지만, 나태함은 결코 우리를 배신하지 않는다는 것, 인생은 마치 바다수영과 같아서 아무것도 하지 않으면 파도에 밀려버린다는 것이었습니다.

제가 좋아하는 영화 V for Vendetta에 이런 대사가 있습니다.

“There is no certainty, only opportunity.”
“확신은(보장은) 없고, 기회만 있을 뿐.”

가만히 있으면 아무 일도 일어나지 않는 게 보장되기에…

남들보다 멍청하면 좀 더 하면 되지 그런 생각으로 한번 제 자신을 훈련의 과정에 던져보기로 합니다.

훈련 진행에 따른 심경 변화

구인공고

위험한 여정, 적은 임금, 혹한, 몇 달간 완전한 어둠, 끊임없는 위험, 무사귀환 불확실, 성공 시 명예와 영광.

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

구인공고

지루한 여정, 무임금, 최소 몇 년간의 수면 부족, 매일 밤 끊임없는 새로운 정신적 고통, 포기하면 바로 귀환 가능한 끊임없는 유혹, 성공 보장 없음.

1년째 (300문제 가까이 풀었을때)

더닝-크루거 효과는 훈련 진행에 따른 심경의 변화를 설명하기에 정말 적절하죠.

알고리즘 트레이닝 사이트인 CodeWars와 LeetCode 중 CodeWars에서 수련을 하기로 결심한지 약 1년.

알고리즘을 푼 지 1년 정도 됐을 때는 우매함의 봉우리를 지나온 줄 알았지만 현실은 우매함의 봉우리에 정점에 서있었습니다.

거의 300문제쯤 풀었을 때는 제일 멍청했던 시기인 것 같아요.

이 글을 쓰는 제가 제 자신을 돌아봐도 멋쩍은 웃음이 나오는데 다른 사람이 보면 어땠을까요?.

영화 매트릭스 장면 중에 네오가 짧은 전투 훈련을 하고 모피어스에게 “저 쿵푸를 할 줄 알아요” 한 뒤에 뚜드려 맞는 장면이 있는데 제 마음가짐이나 상황이 딱 이 정도였던 것 같습니다.

영어기반 수학 & 알고리즘공부

기존에도 영어 공부를 했지만 아직 한참 멀었다 생각이 들더군요.

세상에 널린 게 지식인데 대부분이 영어기반이다 보니 영어 공부도 지속적으로 하게 되었습니다.

MIT나 Stanford 알고리즘 강의 듣는데 잘 이해가 안 되더라고요.

특히 수학 얘기 나오면 이게 무슨 소린지 잘 모르겠었습니다.

이때 이미 글로벌 팀에서 영어로 일한 경력도 있고 미국 회사에서 영어로 일하고 있었지만 그럼 뭐 합니까? 알아들을 수가 없는데.

자존심 깔끔하게 접고 Khan Academy라는 사이트에서 수학을 유치원 과정부터 다시 다 했습니다.

위 스크린샷은 2018년 1월 1일부터 2020년 12월 31일까지 khan academy라고 불리는 곳에서 학습한 시간 통계이다.

문제 푼시간 10094분 + 영상 시청시간 20416 = 30510 분.

3년간 약 508시간을 공부했다.
518일동안 단 하루도 빠지지 않고 알고리즘을 풀었다. 中

이후 대학수학 할때 고생좀 했습니다만 NASA출신 엔지니어 강의 덕분에 구사일생으로 살아 돌아왔더랬죠.
(YouTube에서 Math and Science 채널을 운영하고, 여기서 맛보기 강의를 올린후 mathtutordvd.com 에서 본 강의를 판매하는 형태입니다)

이때쯤 다리도 컨디션이 좋아진것 같아 열심히 재활도 시작했습니다.

2년째 — 868문제, CodeWars 랭킹 상위 0.31%

CodeWars에서 1년 반쯤 풀었을 때쯤 Top 2%에 진입한 것 같은데 다들 Top 1%가 들어가고 싶은지 이때 즈음엔 자고 일어나면 랭킹이 내려가고 있더라고요.

이때는 “너넨 잠도 안 자냐?” 이런 생각이 들더군요;…

머리가 똑똑했으면 몸이 고생을 덜했을 텐데요…

그렇게 CodeWars에서 무릎 꿇은 날도 많았지요…

힘들 때마다 생각이 든 건

어쩌면 지금 이 순간이 남들이 포기했던 그 순간이겠지…
한 번만 더해보자.

이런 생각이었는데요 아마 이때쯤, 프로젝트도 바쁘고, 알고리즘도 풀어야 하고, 공부도 해야 하고 할 일이 너무 많다 보니 피로가 누적되더라고요.

프로젝트가 어느 정도 마무리되어서 퇴근하고 팀 회식하러 가려고 회사 건물 나서는데 숨이 턱 막히더라고요. 긴장이 풀려서 그런 걸까요? 제대로 걸어지지가 않더군요.

그길로 응급실로 향해 병실에 누워 이런저런 검사를 받았는데 별 이상을 못 찾으시 더군요.

새하얀 응급실 천장을 보고 네 시간 정도 있으면서 많은 생각이 들었습니다.

그렇게 한 네 시간 누워있었으려나요. 다시 괜찮아지더라고요.

아마 과로였나 봅니다.

그런 말 있잖아요 니체가 한 유명한 말이 ‘나를 죽이지 못하는 나를 더 강하게 만든다’인데 사람들이 간과하는 것은 ‘하지만 거의 죽을뻔했다’라는 것입니다.

이후에 롱 런 하기 위해서 바쁘거나 문제 안 풀리면 쉬운 거 풀고 자기로 맘을 고쳐먹었습니다.

점심시간에 공부하려고 단백질바 같은 걸로 대충 먹었었는데요, 야채 들어간 서브웨이 샌드위치로 식단을 변경했지요.

이때쯤 다리 컨디션이 많이 좋아져서 운동에도 더 신경을 쓰기 시작했어요

그렇게 수많은 문제들과 고수님들 앞에서 무릎 꿇고 이제 막 겸손이란 걸 배울 즈음에 연속 콤보가 깨지는 대참사가 벌어지면서 회고 차원에서 ’518일 동안 단 하루도 빠지지 않고 알고리즘을 풀었다.’ 글을 작성했습니다.

뒤돌아보니 Top 2%에 들어가는 노력보다 Top 2%에서 1%까지 들어가는 게 더 힘들었던 것 같습니다.

근데 막상 1% 이내까지 올려놓고 나니까 랭킹이 더 이상 떨어지지 않더라고요.

아마 많은 사람들이 여기서 하산 하나 봅니다.

저도 랭킹 0.3%를 달성한 이후 868문제를 마지막으로 CodeWars를 하산하고 LeetCode에서 문제를 풀어보기로 결정합니다.

3년째 — 똑똑똑, 여기가 무림 고수들이 있다는 LeetCode 입니까?

“천재라니! 지난 37년간 하루도 빼먹지 않고 14시간씩 연습했는데 이제는 나를 천재라 부르는구나.” — 천재 바이올리니스트 파블로 데 사라사테

https://youtu.be/d7ddJ4Tx7Js?si=tm7JYXYMmq7LPHN6

세상에 제 앞에 500만 명이 있다고요?

5만 등에는 들어가야 상위 1%가 된다는 것이군요?

아래는 머신러닝의 전설적인 인물 앤드류 응(Andrew Ng)의 인터뷰인데요

리포터가 앤드류 응에게 어떤 공부 습관을 가지고 있냐고 묻자 그냥 한다고 합니다.

천재들의 공통점은 그냥 컨디션과 상관없이 그냥 연구를 하고 연습을 하는 것 같더군요

저도 한 3년 차부터는 거의 아무 생각 없이 하기 시작한 것 같습니다.

내일 뭐 하시냐는 질문에 “글쎄요 내일 토요일이니까 미디엄 문제 풀고 헬스장 가서 하체해야죠” 대답하고 거의 미친놈 취급 당하기도 한 시점이기도 합니다;…

4 ~ 5년째 너무나 소중한 Easy 문제들, 거인의 어깨 위에 올라타기

너무나 소중한 Easy 문제들,

한때 이지 문제가 거의 고갈 상태여서 헉헉대던 시기가 있었는데 요 몇 달 사이에 가끔씩 열댓 문제씩 추가로 출제를 해줘서 겨우겨우 생명 연장했습니다;…

그 외에 변화가 있다면 이전 글을 썼을 때는 TypeScript(JavaScript), Python을 주로 풀었는데 폭을 좀 더 넓혔습니다.

코드워즈 & LeetCode 통계

codewars에서는 주로 JavaScript와 Python 문제를 풀었죠.

LeetCode에서는 TypeScript, Python, Go를 메인으로 밀면서 풀었는데요 이때쯤부터 MLOps에 관심이 있기도 했고, Python, TypeScript, Go를 쓰는 회사에 다니기도 했습니다.

그리고 좋으나 싫으나 수학 공부를 계속할 수밖에 없더군요.

거인의 어깨위에 올라타기

한 1000문제쯤 까지는 그냥 악으로 풀었던 거 같아요.

무조건 내가 어떻게든 풀겠다 이런 생각이었는데 혹시 남들은 어떻게 하나 보니 하다 안되면 다른 사람들 답을 보고 공부하는 것도 방법이라는 의견이 있더군요.

가만히 보니까 틀린 말이 하나도 없더라고요.

아니 애초에 내가 무조건 해낼 거라는 생각이면 학교도 다닐 필요가 없겠지요.

이때부터는 두어 시간 풀다가 안 풀리는 문제는 묵혀두고, 나중에 다시 몇 번 봐도 안되면 구글링해서 도대체 어떻게 푸는 것인가 찾아보기도 합니다

제가 너무 부족하고 거인의 어깨 위에 올라타는 것이 더 낫다 생각하기 때문입니다.

애초에 그러니 학교도 다니고 배우는 것 아니겠어요?

(그럼에도 이따금씩 ‘아~ 조금만 하면 될 것 같은데’라는 희망고문에 꼬박 밤을 지새우기도 합니다 ㅠㅠ)

그러나 항상 올라탈수는 없었다!

최근에 기억에 남는 문제는 LeetCode의 91. Decode Ways 입니다.

문제는 굉장히 심플합니다.

들어오는 String을 1은 A, 26은 Z라 할때 이 숫자 조합으로 만들수 있는 문장 혹은 알파벳의 조합을 알아내는것입니다.

이를테면 “11106” 라는 문자열이 들어왔을때

1 1 10 6 으로 그룹핑해서 ‘AAJF’로 해석 할 수도있고
11 10 6 으로 그룹핑해서 ‘KJF’로 해석 할 수도 있을겁니다.

사실 이 문제가 잘 안풀려서 고민을 좀 오래 하고 다른 사람들의 방법도 찾아봤는데요

여튼 본론으로 돌아오면 대부분 tree 기반으로 설명하고 memoization 테크닉을 설명하더라고요.

위 썸네일에서 나오는 방법들은 linear recursion으로 풀면서 memoizaiton으로 캐싱하는걸 설명하는데

이걸 보면서 머리속에 드는 생각은
“아니 그래 알겠어, 알겠는데, 그냥 뭐가 좀… 꼭 linear recursion으로 풀어야 할까?”

생각이 들더라구요

“Dynamic programming은 과거의 연속된 이벤트를 이용하는건데 이 문제에서 데이터는 선형인데 이것도 Linear Iterative로 풀수 있지 않을까?”

해서 결국 아래처럼 풀었습니다.

훈련을 해보니 실제로 어떠한 변화가 있었나요?

아래 부록으로 추가한 Chat GPT가 언급한 예상되는 개선 효과를 포함해서 제가 많이 느낀 것들을 몇 가지 적어보려고 합니다.

영어

애초에 영어를 모르면 문제를 읽을 수 없습니다.

대한민국 인구는 약 5천만으로써 전 세계 78억의 1퍼센트도 채 되지 않습니다.

대부분의 지식이 영어 기반으로 공유 되는만큼 더 나은 검색, 더 방대한 지식을 위해서는 영어는 필수이며 이 능력을 필연적으로 향상시켜 줄 것입니다.

문제 분석 능력

현재 상황을 분석하지 못한다면 애초에 문제를 풀 수 없습니다.

또한 ‘잘못’ 분석할 경우에도 풀 수 없겠지요.

이러한 반복된 훈련은 실제 업무에서도 문제 분석 능력이 필연적으로 상승하게 됩니다.

정확한 요구사항 분석을 위해 고객 혹은 업무지시를 준 사람과 더 많은, 더 빠른 피드백을 선호하게 되고 이는 자연스레 애자일 프로세스에 녹아듭니다.

멘탈 유연성 & 자기 인식 강화

당신의 목소리가 크거나, 사회적 지위가 높거나 나이가 많다는 이유로 혹은 똑같은 이야기를 수십 번 하면 상대방이 지쳐서 그냥 당신이 옳다고 해줄 수 있을 겁니다.

그러나 알고리즘을 풀 때는 당신이 소리를 지르거나, 당신이 나이가 많거나, 똑같은 답안을 수십 번 제출한다고 해서 옳다고 해주지 않습니다.

알고리즘을 풀 때에는 자신이 스스로 틀린 것을 인정하고 접근 방식을 바꾸기 전까지 문제를 풀 수 없기 때문에 ‘인정하는 척’이 아니라, ‘인정해야지만’ 문제를 풀 길이 보이기 때문에,

자신의 주장(코드가) 틀린 것을 인정하는 훈련을 하게 됩니다.

이러한 훈련이 매일 밤 반복되어 자기 인식 강화 상태가 될 경우 어떤 문제를 해결할 때 자신의 approach가 틀릴 가능성에 대해 다방면으로 고려하기 시작하며, 실제 어떠한 문제를 해결할 때, 이를테면 System-Design 등의 작업을 할 때 지위 고하를 막론하고 Fact 기반의 토론을 가능하게 해줍니다.

어제 내가 아는 지식이 오늘 구시대의 유물이 되어버리는 급격한 변화의 물결 속에서 저의 알량한 자존심을 굽히는 훈련에 이만큼 좋은 게 또 있을까 하는 생각이 듭니다.

스트레스 관리와 인내심 증가

알고리즘 처음 푸는 사람들 보면 꽤나 많은 사람들이 답답해하고 화를 냅니다.
저도 500문제 정도까진 그랬던 것 같습니다.
다 쓸모없는 자존심 때문이었지요.

자존심과 자부심은 다릅니다.

운동선수들이 매일 훈련을 하는 것은 그들이 자존심이 없어서가 아닙니다.
최고가 되고 싶다면 자신의 부족함을 인정하고 최고의 감독을 찾아가서 배우겠지요?
그리고 수십수백 번 좌절하고 다시 일어서며 훈련할 겁니다.

그래서 지금은 어떤일을 하고 계세요?

근래 제 관심을 끈 주제가 있었는데요, 바로 산불이었습니다.

한국에서 어쩌다 한번 나는것 같은 대형 산불은 미국과 유럽, 호주에서는 면적이 넓은만큼 끊임없이 나고 있습니다. 미국만 해도 남한 면적의 97.5배에 달하는 광활한 영토가 펼쳐져 있으니까요.

그리고 더 나쁜 소식은 기후변화로 인해서 앞으로 더 많은 산불이 나게 될 것이라는겁니다.

NASA 자료 — 1

지구는 지난 140년간 최소 1.1도 이상 온도가 증가했다고 합니다.

출처 — C2ES.org 출처 Climate.gov

좌측이 미국 서부지역 대형산불 통계인데요 대부분의 지역에서 지속적으로 증가하고 있습니다.

우측 사진은 미래 지구온도 증가 예측인데요 140년동안 1.1도 올랐는데, 앞으로는 80년 내에 최소 1.1도, 최대 6.4도 오른다고 합니다.

즉 훨씬 많은 산불이 발생하게 될것이라는거죠.

처음부터 산불에 관심이 많았던건 아니고, 제가 손가락에 꼽는 똑똑한 개발자 지인중 한명이 이직을 해서 하고있는일이 산불 관련된 일이더군요.

테크 컨퍼런스를 보면 많은 저마다 자신들이 세상을 바꾼다고 하는데요, 그런것도 좋겠지만 다음 세대도 우리가 살고 있는 이 푸른 지구를 볼 수 있도록 지키는일, 낭만 있더라구요.

어느덧 낭만이 사치가 되어버린 시대가 되어버린것 같습니다만 한번쯤은 저도 낭만이 있는 삶을 살아보고 싶었습니다.

제가 있는 이상감지팀은 AI기반의 24시간 잠들지 않는 화재감지 시스템을 만들고 끊임없는 개선을 하고 있어요.

먼 훗날에 누군가 저에게 당신은 젊을때 무엇을 했냐 물을때 살며시 미소지으며 푸른 지구를 푸르게 만드는 일을 했다고 대답할수 있길 바라면서 이상감지 팀에 합류한지 어느덧 일년이 되었네요.

언젠가 수십년뒤에 누군가 제 젊은날을 물어온다면, 낭만이 있는 삶을 살았노라고 말할수 있는 그런 삶이요.

낭만 하나쯤 있는것도 괜찮잖아요?

물론 아무리 멋진일도 그에 맞는 노력이 없다면 다 허울뿐인 슬로건이 되어버리고 말텐데요, 언젠가 우리가 나이들어서 생을 마감할때쯔음 젊은 날들을 회상할때 ‘우리 참 낭만있었지’ 라는 생각 할수있기를 바라며 저희 팀 연구원들은 매일 논문 한편씩 읽고, 엔지니어링 인원들도 수시로 알고리즘을 풀고 기술서적도 보고 있고요.

낭만 쫒는 일이라고 해도 직장생활이다보니 당연히 어려울때도 있습니다.
사실 뭐 직장생활이란게 하다보면 굳이 제가 안해도 티도 안나는 영역들이 많죠.
잘못되도 제 책임 아닌 그런일들이고, 잘되야 본전인 일들이요.

근데 그냥 놔두자니 나락 갈거 같은일들을 할지말지 고민될때, 제 휴대폰에 넣어둔 종이 문구를 바라봅니다.

“내가 하고 있는 일은 돈이 전부가 아니에요"

맺음말 — 6 년을 맞이하는 지금, 근황

누가 그러더라고요 무슨재미로 사냐고.

그럴때마다 맘속에 넣어둔 낭만을 떠올립니다.
언젠가 나도 쓸모 있는 사람이 되고싶다는 낭만이요.

여전히 아침에 눈뜨면 모닝 커피로 시작해 여전히 출근길에 수학 강의를 보고, 퇴근후에 헬스장을 갔다가 알고리즘을 풀고 아쉬운 공부 조금하다 잠에듭니다.

이렇게 말하면 엄청 잘한다고 생각하시더라고요.
잘했더라면 제가 왜 공부를 하겠습니까?…
못하니까 하는 겁니다 ㅠㅠ…

회사일하랴, 공부하랴, 알고리즘풀랴 정말 잠을 잘 시간이 부족합니다.
아래는 올해 제 수면시간 통계입니다.

이 글을 쓰면서 확인해보니 1월 2월 모두 일 평균 5시간 30분정도 잤더라구요.
전에는 더 극단적으로 몰아붙였었는데 그때는 꿈과 현실의 경계선에 서는 느낌이기도 했고 “너 그러다 치매로 간다~” 이야기 듣고 수면시간을 늘리려고 노력하고 있습니다.

개인적으로 7시간은 자야 개운한데 하루가 24시간뿐이니 이러지도 못하고 저러지도 못하고 이러다 정말 치매 걸리는 거 아닌가 걱정이 되긴 해요…

아! 주변에 지인들이 어떻게 일어나냐고 물으시더라고요.
저는 만성 수면부족이기때문에 전기충격 시계로 일어납니다!

https://shop.pavlok.com/products/pavlok3

그리고 지난 5년간 알고리즘 풀면서 재활 운동도 잘 해내고 근력 운동도 꾸준히 해서 건강해지고 있습니다!

누군가 저에게 물었습니다. 그렇게 하면 힘들지 않냐고.

적은 노력으로 많은것을 얻고싶은 마음이야 누군들 없겠습니까?
하지만 어쩌겠습니까?
다른방법이 없는걸요.

봄에는 어느새 꽃핀 화분에 물을주고,
여름엔 시원한 아이스 커피를 한잔 타고,
가을엔 낙엽한장 주워다 책상에 올려놓고,
겨울엔 창문너머 내리는 눈을 바라보며,

때론 기쁜 날들도,
때론 슬픈 날들도 있었지만
그 수많은 밤과 수많은 날들동안,
그렇게 다섯번의 계절을 오롯이,
당신이 이 글을 읽는 이순간에는 여섯번째 계절을 맞이한채로

언젠가 이 순간들을 뒤돌아볼때
“다시 돌아가도 그때보다 더 열심히 할 수 있을것 같지가 않아” 라고 말할수 있기를 바라며 오늘도 어김없이 저는 책상 한켠에서 알고리즘을 풀고 있겠죠.

제가 이 글을 쓴 이유는,
누군가를 비난하기 위해서도, 저를 드높이기 위해서도 아니라
그저 이 세상에 이런 길을 가는 개발자도 있다는것,
행여나 당신이 나와같은 길 걷고 있는 개발자라면
당신이 틀린게아니라, 그저 우리가 아직 다른이들은 가보지 않은 다른길을 걷고 있을 뿐이라고, 그리고 우리 언젠가 꼭 좋은 인연으로 만나길 바라는 마음입니다.

혹시 압니까? 당신과 내가 먼 미래에 어떤 멋진 일을 함게 하고 있을지.

그렇게 5년의 밤을 보낸 지금, 저는 5년 만에 처음으로 컴퓨터를 내려놓고 전자책을 가지고 휴가를 떠납니다.
그동안 출장이든 휴가든 항상 컴퓨터를 챙겨가서 매일 알고리즘을 풀었는데요 컴퓨터를 놓고 가려니 너무 이상한 기분이 드네요.
오랜만에 느지막이 아침에 눈을 뜨고, 자고 싶을 때 자고, 눕고 싶을 때 눕고, 석양을 마음껏 바라보고, 기술책에 뒷전으로 밀린 인문학 책도 좀 읽고…
그러고 싶어요.

5년의 밤 끝.

PS. 언젠가 한번 같이 일해보고 싶은분은 링크드인 연락 주세요 감사합니다.

부록 — ChatGPT는 제 생각에 다해 어떤 의견을 가졌을까요?

제가 알고리즘 훈련을 하려고 고민할때에는 ChatGPT가 없어서 저의 이런 생각을 물어보지 못했습니다만, 이 글을 쓸때쯤에서야 뒤늦게 한번 물어봤습니다.

Q1. 지속적인 학습이 뇌의 기능을 향상 시킬수 있는가?

Q2. 지속적으로 코딩 알고리즘 문제를 푸는 행위가 위에서 언급한 신경 가소성의 긍정적인 효과를 도출 할 수 있는가?

Q3. 직업이 개발자인 사람이 만 5년동안 꾸준히 코딩 알고리즘을 풀었을때 업무적으로, 업무 외적으로 어떠한 개선 효과들을 기대 할 수 있을까?

어느날 누군가 제게 그랬습니다.

자신도 젊은 날에 매일 논문을 읽고 공부했다고.

사람은 언제나 자신이 하지 않는일을 정당화 하기위해 남을 깎아내리기 마련이라고,

당신을 시기하고 깎아내리려는 사람들이 있을테지만 포기하지말고 자신의 길을 가라고.

--

--