넷을 돌아다니다가 To. 개발자를 꿈꾸는 분들에게 (부제 : 개발자로 산다는 것은..) 이라는 글을 보았다.

사실 주니어 개발자가(개발이 아니더라도, 대부분의 분야에서) 더닝-크루거 효과 속에서 저런 글을 쓰는 건 흔한 일이지만, 저 경우에는, 하필이면 GameDev를 지망하는 중3에게 전혀 도움이 안 되는 조언을 하고 그것이 올바른 조언이라고 생각하는 것은, 그리고 댓글들이 해당 글이 놓친 문제를 (꽤 공격적인 어투라는 문제가 있음) 다루고는 있지만, 댓글이라는 매체 특성상, 제약되는 것이 많기에, 저 글의 문제에 대해 써 보고자 한다.

물론 나 또한, 경험해온 것의 범위가 한정적 (Web BE, DB, Embedded F/W, System hack, etc…) 이기에 이 글이 모든 다른 분야에 마법처럼 적용되진 않을 것이다. 이 부분을 감안하고 읽어주길 바란다.

AI가 코딩하는 세상?

GitHub Copilot 이후로, 가까운 미래에는 AI가 코드 작성 과정을 상당히 대체할 것이다 같은 말들이 많이 오간다. 하지만 이 부분에는 여전히 맹점이 있다.

GitHub Copilot 을 돌리는 OpenAI Codex 는 단지 이전 코드와 현재 코드를 참조해서 그럴듯한 코드를 생성할 뿐, 동작하는 코드를 생성하지 못한다. 경험 상 짧은 추론 (.map_err(), .unwrap_or_else() 안에 인자로 들어갈 람다를 작성한다던가 등) 에서는 동작하는 코드가 생성되지만, 긴 코드 생성(함수 이름을 가지고 코드 생성하기) 같은 경우에서는, 해당 기능에 얼추 때려맞는, 하지만 타입 추론이 모조리 틀린 코드를 생성하는 게 전부다.

만약 이런 모든 문제가 마법(tm)처럼 해결된다고 해도, 다른 장벽이 존재한다. Explainable Artificial Intelligence 분야는 아직도 걸음마 분야인지라(괜히 얘가 DARPA 연구 프로그램에 있는 게 아니다!) 코드 생성 AI는 ISO 26262 표준의 도구 영향과 도구 에러 감지 부분에서 충분히 높은 신뢰도를 얻지 못할 것이므로, 코드 생성 AI가 해당 산업 분야에(ISO 26262가 요구되는 오토모티브에 더불어, 신뢰도가 요구되는 Medical 분야에도) 받아들여지는 데는 꽤 오랜 시간이 소요될 것이다.

철학적 기반과 인문학적 소양?

해당 글에서 작성자는

🧑🏻‍💻 개발자 == 현실의 문제를 인문학적 상상력을 바탕으로 프로그래밍 언어로 풀어내는 사람

라고 말했다.

작성자는 현실의 문제를 해결하는 것이 “인문학적 상상력” 이라고 했지만, 현실의 문제를 풀기 위해서는 “상상력” 이 아닌, 현실에서 일어나는 현상을 관찰하고, 이를 모델링하며, 이 모델에 소프트웨어가 어느 부분에 끼어들어서 개선할 수 있는지를 판단하여, 이를 구현하는 능력이 필요하다.

이러한 능력은 단순히 “책을 많이 읽는다” 고 해서 느는 능력이 아닌, 많이 해 보면서 훈련해야 하는 능력이다.

수학 공부 vs 영어 공부

가능하다면 영어공부에 집중시켜주세요.

사실상 프로그래밍은 수학이 (생각보다 많이) 중요하지 않습니다.
(단, AI나 데이터스트럭처 기반의 개발자는 수학이 중요하며 석사 이상의 자격을 요합니다.)
프로그래밍의 핵심은 논리력이며, 이는 언어 이해도와 언어 구사력에 많은 관련이 있습니다.
또한, 대부분의 언어의 official document 들은 영어로 되어있습니다.

사람들이 흔히 착각하는 것이 “프로그래밍에는 수학이 필요하지 않아” 이다. 하지만 이는 대체로 틀렸다.

프로그램을 작성할 때, 프로그래머는 문제를 해결하는 여러 방법 중, 가장 적합한 방법을 고르게 된다. 이에 있어, 이산 수학 분야에 얼마나 능숙한가에 따라 (흔히 Computational thinking 이라고 부르는 그것), 해당 프로그래머가 작성하는 코드의 효율성이 달라지게 된다.

더불어, 질문자가 지망하는 GameDev 의 경우, 3D좌표계를 주로 다루는 데 더불어, Shader programming 같은 경우에는, Vector, Matrix를 모르면 개발 자체를 할 수 없으므로 이산 수학을 넘어서, 선형대수와 짱친을 먹어야 하는 상황이 펼쳐지게 된다.

I don’t need math! 게임 개발자 밈 이미지.

물론, 프로그래밍에 수학이 필요하다고 해서 K- 혹은J- 맛 “수학” 처럼 시험을 위한 시험 혹은 단순히 계산 속도만 트레이닝하는 무언가가 도움이 되진 않는다. 계산은 느리더라도, 해당 수학의 컨셉을 이해하고, 다룰 줄 알고, 응용할 수 있는 능력이면 충분하다.

영어에 대해서는, 한국은 오래 전부터 번역 인프라가 정말로 망해버린 사례기 때문에, 현재도 그렇고, 앞으로도 그렇겠지만, 이러한 상황이 해결되기 전 까지는 어느 분야에서나 영어가 꽤나 중요한 위치를 차지하는 상황이 유지될 것이다. 하지만 그렇다고 해서 영어를 유창하게 할 필요까지는 없고, 기술 문서를 독해할 정도만 되면 크게 문제가 되진 않을 것이다.

오히려 영어, 수학 둘 중 하나만 고르라 하면, 주저없이 수학을 하라고 할 것이다. (그렇다고 한국형이나 일본형 수학 하라는 소리는 절대!!! 아니다!)

장비 지원

(글에 Mac 이 리눅스 기반이라고 작성해놓은 치명적 오류는 둘째 치더라도 — POSIX 에 뿌리는 두고 있지만, Linux Kernel 과 Darwin 은 지원하는 POSIX version과 이의 확장 또한 확연히 차이가 난다!) 글쓴이는 지원이 가능하다면 맥북이라고 하지만, 개인적으로는 이를 추천하지는 않는다.

질문자 같은 GameDev 의 경우에는 (모바일 할 거 아니라면) Windows 위에서 개발하는 게 나을 거고 (비 윈도우즈 게이머들에게는 슬픈 현실이지만, (모바일을 제외한다면) 게임은 대부분 Windows 타겟 개발이 대부분이다. — 더불어 비 윈도우 플랫폼에서 윈도우 플랫폼으로의 유니티 크로스 빌드는 VR챗 아바타를 리눅스에서 빌드하겠다는 의지 가득한 리눅스 게이머나 저지르는 기행이지 다른 GameDev 들이 하는 짓거리가 아니기도 하고…)

Web(사파리 테스트 해야 한다면 제외) / EmbeddedDev / System programming(Linux) 을 한다 하면 (iOS/Mac OS 대상 개발을 안 한다는 전제 하에) 더 저렴한 가격에 더 나은 성능의 장비를 IBM-PC 호환 기종에서는 마련할 수 있고, 리눅스를 네이티브건 VM이건 깔아 쓰면 맥북에 비해서는 별로 아쉬울 게 없다고 본다. (그리고 대부분의 리눅스 배포판이 homebrew 보다는 더 쓸만한 패키지 매니저를 가지고 있기도 하고)

결론 (이라고 적고 TL;DR)

  • AI 코드젠은 시기상조다
  • 문제 해결 능력은 책이 아니라 훈련이다
  • 영어보다는 일단 수학 해라. 그 다음 영어
  • 장비는 GameDev면 윈도머신 쓰고 아니면 원하는 거 써라. 돈 많아서 맥 살 수 있고 맥이 좋으면 맥 쓰는거지 뭐.