1. 시작: 부트캠프에서의 좌절
막막함의 순간
초보 개발자의 여정에는 공포스러운 깨달음의 순간이 찾아옵니다. 단순히 뒤처진 것이 아니라, 어떻게 따라잡아야 할지조차 감이 잡히지 않는 막막함입니다.
부트캠프의 현실
부트캠프에서 다른 사람들은 마치 전생에 코딩을 해본 듯 자연스럽게 타자를 치고, 서로 웃으며 도와주고 진도를 나갔습니다. 하지만 저는 20분째 화면 앞에서 꽉 막혀 있었고, 일하는 척해야 하는 조용하고 굴욕적인 상황에 처했습니다.
낙인과 시선
•
힐끔거리는 사람들의 시선
•
강사가 세 번째 설명할 때 미세하게 경직되는 목소리
•
"곧 이해하게 될 거야"라는 동기들의 위로 (실제로는 "너 전혀 이해 못 하고 있어"라는 뜻)
2. 잘못된 학습 방법
수동적 학습의 함정
절박함에 더 열심히 공부했지만, 방법이 잘못되었습니다:
•
눈이 따가울 정도로 튜토리얼 시청
•
강의를 반복해서 돌려보고, 멈추고, 되감기
•
코드를 한 줄 한 줄 그대로 베껴 쓰기
•
노트는 가득 차지만 머릿속에는 아무것도 남지 않음
지루함의 진짜 의미
공부를 하면 할수록 더 지루해졌습니다. 이는 평범한 지루함이 아니라, 똑바로 앉아 있는데도 하품이 나오고 '난 재능이 없는 걸까?'라는 생각이 드는 무거운 지루함이었습니다.
깨달음: 지루함은 재능 부족이 아니라, 뇌가 싸우기를 멈췄다는 신호였습니다. 저는 배우고 있던 게 아니라 '소비'하고 있었습니다. 10시간 동안 코딩 영상을 봐도 빈 파일 앞에서는 여전히 무력했습니다.
3. 첫 번째 전환점: 능동적 학습
도망치지 않기로 결심
어느 날 밤, 에러 메시지 앞에서 늘 하던 대로 영상을 틀려다가 멈췄습니다. "아냐, 이번엔 도망치면 안 돼."
혼돈 속의 성장
그 후 30분은 혼돈 그 자체였습니다:
•
무언가를 시도하면 더 망가짐
•
다른 걸 시도하면 새로운 에러 발생
•
지우고, 다시 짜고, 또 망가지고...
재미있지는 않았지만, 지루하지도 않았습니다. 뇌가 깨어나서 날카로워졌고, 사냥을 시작했습니다.
스스로에게 던진 질문들
•
"내가 뭘 바꿨지?"
•
"테스트할 수 있는 가장 작은 단위는 뭐지?"
•
"이 코드는 뭘 기대하고 있지?"
•
"내가 어떤 가정을 잘못하고 있는 거지?"
핵심 깨달음
지루한 건 '일' 그 자체가 아닙니다. 진짜 지루한 건, 실제로 일을 하지 않고 있을 때입니다. 더 좋은 튜토리얼을 찾아서가 아니라, '관객'이 아닌 '탐정'처럼 행동하기 시작했기 때문에 빨리 배울 수 있었습니다.
몰입(Flow)의 발견
뇌가 능동적인 문제 해결 모드로 바뀌자 시간이 사라지기 시작했습니다. 공부하려고 앉았다가 고개를 들어보니 새벽 3시였던 밤들이 있었습니다. 억지로가 아니라 완전히 빠져들었기 때문이었습니다.
결과
반에서 꼴찌였던 제가 사람들이 도움을 청하는 사람으로 변했고, 부트캠프에서 가장 먼저 취업에 성공했습니다.
4. 첫 직장: 실무의 현실
기대와 현실의 괴리
취업하면 자신감도 함께 올 줄 알았지만, 실무는 튜토리얼 프로젝트와는 완전히 달랐습니다.
실무 코드베이스의 특징
5년 동안 서로 다른 의견, 기준, 기분을 가진 10명이 만들어 놓은 코드:
•
화가 난 사람이 쓴 주석
•
temp 2_final final two 같은 정리되지 않은 함수 이름
•
지진이 났을 때 짠 것 같은 로직 (하나를 고치면 다섯 개가 망가짐)
중요한 깨달음
더 이상 수동적인 학습자로 남을 여유가 없습니다. 수동적인 학습자는 실제 환경에서 살아남지 못합니다. 그들은 AI에 의해서가 아니라, 현실에 의해 대체됩니다.
생존을 위한 질문들
목숨이 걸린 것처럼 배우기 시작했습니다. 콘텐츠를 더 보는 대신, 더 어려운 질문을 스스로에게 던졌습니다:
•
"이 시스템의 '진실의 원천(Source of Truth)'은 어디인가?"
•
"데이터는 실제로 어떻게 이동하는가?"
•
"실패하면 어떤 일이 벌어지는가?"
•
"부하가 걸리면 어디가 가장 먼저 터지는가?"
•
"내가 이해하지 못한 부분은 어디인가?"
혼란스러운 부분을 발견할 때마다 피하지 않고, 그 주위를 맴돌며 싸웠고, 다음 타겟으로 삼았습니다.
5. 두 번째 전환점: 필요에 의한 학습
핵심 원칙
편한 것을 배우는 걸 멈추고, 필요한 것을 배우기 시작하는 것입니다.
정체성의 한계
한동안 제 정체성은 '클라이언트 개발자'였습니다. Unity, UI, 게임플레이 로직. 통제감과 즉각적인 피드백이 좋았습니다.
서버 프로그래밍은 어두운 방처럼 느껴졌습니다. 네트워크, 데이터베이스, 멀티플레이어 동기화... 단순히 어렵다기보다 저와는 상관없는 일처럼 느껴졌습니다.
깨달음의 순간
무언가를 만들다가 깨달았습니다:
•
서버 프로그래밍을 배우지 않으면 평생 '반쪽짜리' 게임만 만들게 됨
•
평생 의존적인 사람이 됨
•
시작한 일을 끝내려면 항상 다른 사람이 필요함
필요가 만든 관련성
갑자기 서버 프로그래밍을 사랑하게 되어서가 아닙니다. 필요해졌기 때문이고, 그 필요가 관련성을 만들어냈습니다.
서버 프로그래밍은 더 이상 그냥 '서버'가 아니었습니다:
•
"이걸 어떻게 실제 멀티플레이어 게임으로 만들지?"
•
"플레이어 데이터를 어떻게 보호하지?"
•
"믿을 수 있는 온라인 시스템은 어떻게 만들지?"
고통 속의 성장
고통으로 시작했습니다:
•
네트워크 동기화의 악몽
•
식은땀 나게 하는 데이터베이스 마이그레이션
•
'뭔가 잘못됐다'는 것 외엔 아무것도 알려주지 않는 에러들
하지만 이상하게도, 고전할수록 더 몰입하게 되었습니다. 그 고통이 실제로 배우고 있다는 증거였으니까요.
6. 리더십과 책임
게임 프로그래밍에서 리드를 맡게 되었을 때
게임 프로그래밍에서 리드를 맡게 되었습니다. 첫 리드 경험은 팀의 게임플레이 시스템을 안정적으로 묶고, 출시 일정 안에서 품질을 지키는 일이었습니다.
무게감의 변화
사람들은 고립되었고, 불안이 도처에 깔려 있었습니다. 늦은 밤 화면을 보며 생각했습니다: "이 앱이 불안정하면, 누군가의 실제 삶이 더 힘들어진다."
그 순간 코딩은 직업이 아니라 책임이 되었습니다.
책임감이 주는 힘
책임감은 다른 종류의 연료입니다. 일이 중요해지면:
•
좌절감조차 견딜만해집니다
•
지루한 작업조차 신성해집니다
•
테스트 코드를 짜고, 엣지 케이스를 처리하고, 아무도 보지 못할 버그를 고치는 일들
재미있어서 하는 게 아닙니다. 하지 않으면 누가 다칠지 알기에 하는 겁니다.
7. 대규모 시스템:
규모의 무게
수백만명의 동시접속자가 있는 게임의 개발을 진행 하였습니다.
대규모 시스템의 현실
•
버그가 귀여운 수준이 아님
•
잘못된 결정 하나가 수천 명에게 동시에 영향
•
시스템 설계를 자랑하기 위해서가 아니라 생존하기 위해 배움
배워야 했던 것들
•
제약 조건(Constraints)
•
부하(Load)
•
지연 시간(Latency)
•
장애(Failure)
•
복구(Recovery)
•
트레이드오프(Trade-offs)
8. AI 시대의 개발자
흔한 질문
"이제 코딩 배우는 게 의미가 있나요?"
진실
AI는 엔지니어를 대체하지 않습니다. 엔지니어를 '발가벗깁니다(Expose)'.
AI 시대의 차이
당신이 뭘 만들고 있는지 이해하지 못한다면:
•
AI는 일주일 동안은 당신을 빠르게 만들어 줄 것
•
하지만 시스템이 지저분해지고, 요구사항이 모호해지고, 버그가 이상해지고, 사용자가 예상치 못한 행동을 할 때
•
당신은 깨닫게 됨: 당신은 짓고(Building) 있었던 게 아니라 빌리고(Borrowing) 있었다는 것을
그게 AI를 사용하는 진짜 프로그래머와 '바이브 코더(분위기로 코딩하는 사람)'의 차이입니다.
핵심 교훈 정리
1. 능동적 학습
관객이 아닌 탐정처럼 행동하라. 소비가 아닌 문제 해결에 집중하라.
2. 필요에 의한 학습
편한 것이 아닌 필요한 것을 배워라. 필요가 관련성을 만들고, 관련성이 동기를 만든다.
3. 책임감
일이 중요해지면 모든 것이 달라진다. 코딩은 직업을 넘어 책임이 된다.
4. 깊이 있는 이해
AI 시대에는 더더욱 깊이 있는 이해가 필요하다. 도구는 진짜 프로그래머를 더 강하게 만들고, 가짜를 드러낸다.
