운체조교
3k
2022-07-01 09:43:17
26
21354

기술력을 갖고 싶다면: 코딩을 겁나 하세요.


"여러 언어/분야들을 많이 파보는게 좋을까요, 하나를 깊히 파보는게 좋을까요?" 와 같은 질문을 많이 받습니다.


사실 두 경우 다 잘하는 사람을 봤고, 사람들은 다양한 종류로 잘하기 때문에 여기에 답은 없습니다. 다만 하나 확실한 것은, 겁나 많이 해야 한다는 것입니다. 제 사례를 공유합니다.


===


참고로 제 시대에는 게임 프로그래머가 제일 잘나갔습니다. 주로 쓰는 언어는 C++이었습니다.


1.

저는 무식하게 C언어 책을 7번 봤습니다. 중학교 3학년 때 였는데, 그냥 거기 있는 코드를 7번 정도 다 따라쳤습니다. 이러고 나니 프로그래밍 언어 책을 보는게 무섭지 않고, IDE를 얼추 잘 쓰게 되었습니다.


2.

고등학교에 입학했습니다. 게임을 만들려면 C++을 해야 한답니다. 그래서 C++ 책을 보고 역시 또 겁나 따라 쳤습니다. (정리해 놓은 것을 보니 C++ 책만 30권은 봤더군요) 하지만 이렇게만 하면 재미도 없고, C++도 너무 방대하다 보니, 게임을 만들기 위해 DirectX (그래픽 카드 드라이버 API) 를 공부했습니다.


솔직히, 그 시점에는 이론에 대해 전혀 이해 못했습니다. 그냥 DirectX에 있는 코드를 그대로 따라 치는걸 많이 했고, 손에 익었습니다. 그냥 IDE에서 빈 프로젝트 만들고, main.cpp 라는 빈 파일을 만든 후에 어떤 자료에도 의지하지 않고 int main() 부터 시작해서 윈도우 창을 띄우고, DirectX context를 만든 뒤, RGB 그라데이션이 되는 삼각형을 띄울 수 있었습니다.


느끼시겠지만, 비효율의 극치입니다. 구글링도 안하고, 이해도 안하고, 그냥 예제랑 책만 따라쳐서 외워버린거니까요. 하지만 전 이 과정에서 배운게 너무나 많습니다.


1) 코딩이라는 행위에 너무나 익숙해 졌습니다. 대부분 공부를 할 때 완벽히 이해하는 것을 처음에 목표로 하는데, 프로그래밍은 그냥 생활이 되고 익숙해 져야 잘합니다. 다른 방법이 없습니다.

2) 템플릿에 의존하지 않다보니, 코드 한줄 한줄에 의문을 품으며 코딩을 했습니다. 한줄이 빠지면 화면이 검은색으로 나오거나 segmentation fault 를 일으키며 프로그램이 터지는데, 다시 책을 읽고, 코드 한줄의 의미를 최대한 이해해 보려 노력했습니다. 이때 제대로 공부하는 방법을 배울 수 있었던 것 같습니다.


이때 궁금한게 많이 생겼습니다. 왜 Texture (쉽게 말하면 이미지 파일) 를 GPU에 보내려면 Lock을 걸어야 하는지, 왜 DirectX context는 delete 문법이 아니라 해당 객체의 Release() method를 통해 메모리를 해제 해야 하는지 등등…

이 중에는 그 시점에 해결 된 것도 있고, 나중에서야 당연하게 받아들이게 된 것도 있었습니다. 포인트는, 외울 정도로 코딩을 많이 하고 책을 많이 봤다는 겁니다.

3. 이제 게임을 만들어야 합니다. 그냥 DirectX로 게임을 만들었습니다. (사실 저만 그런게 아니라 선배들이 다 그렇게 했습니다)

정말 참고할게 없어서, 어렵게 구한 오픈소스 게임 엔진을 컴파일 하고, 거기에 있는 코드들을 분석했습니다.

처음 보는 게임 엔진의 소스코드는, 내가 알던 C++이 아니었습니다. 너무 복잡하고, 상속 관계를 왜 이렇게 했는지도 모르겠고, 어떻게 Interface와 구현체를 분리하는지도 모르겠고…

그래서 그때도 무식하고 소스코드를 분석하고, 다른 한편에서는 제 게임 엔진을 DirectX를 갖고 해당 게임 엔진을 모방해서 만들어 보았습니다.

아주 간단한 기능도 만들기 힘들었지만, 얼추 기대한 틀이 나오자 OOP에 대해서 아주 잘 이해하게 됐습니다. 어떤 때 추상화를 해야하고, 다형성이 왜 좋고, loose coupling 을 하면 새로 코드 추가할 때 고려해야 하는 사항이 적어지는지… 이론으로 배우면 그냥 좋은 말 좋은 말이었지만, 실제로 겪으면 크게 와닿았습니다.


4. 게임엔진을 만들고, 친구들과 협업해서 게임을 만들었습니다.


재밌기도 하고, 정말 많이 성장했습니다. 엔진에서 의도한 것이 오버엔지니어링이라 오히려 코드가 복잡해지고, 알 수 없는 버그들이 많이 터졌습니다. 버그를 잡으면서 제 엔진을 고치고, 가끔은 귀찮으니까 대충 땜질만 하고…


결국 완성을 해서 공모전에 냈습니다. 이렇게 해본 경험이 저에게는 큰 자산이 되었습니다.


5. 대학에 입학했습니다.


저는 대학에서 배울게 없을 줄 알았습니다. 웬걸, 대학 들어오기 전에 프로그래밍을 4년을 열심히 했는데, 대학에서 제가 잘하는 과목은 총 140학점 중에 6-9학점 정도였습니다. 모르는게 너무 많더군요.


특히 프로그래밍을 배운 상태에서 듣는 C언어 수업은 쇼킹 했습니다. (그 전까지 배워 본 적이 없으니…) int 형을 표현하기 위해 내부에서는 MSB를 sign bit로, 그 외를 이진수로 담는구나, float 형은 sign, exponent, mantissa로 분리되어서 표현되는구나, 그래서 int가 float보다 처리하기 더 쉽겠다, 등등…


그때 제가 느낀건, 프로그래밍을 겁나 해보지 않은 사람이 대학 수업을 들으면 이해가 하나도 안갈 것 같다는 생각이었습니다. 실제로 많은 친구들이 프로그래밍을 포기하거나 전과를 했고 (그땐 컴공이 비인기 학과였습니다) 남은 친구들도 학점을 잘 받는 것에 바쁘지 프로그래밍 그 자첸는 많이 안했던 것 같습니다.


저는 학점은 좋지 않았지만, 대학 수업을 너무 재밌게 들었습니다. 운영체제와 컴퓨터구조를 들으면서 엔진을 만들면서 궁금했던 것들이 많이 풀렸고, 컴퓨터 그래픽스를 들으면서 이해를 못하고 쓰던 DirectX를 이해하게 됐습니다. 수학 과목들을 들으면서 저거 게임 만들 때는 이렇게 쓰던건데, 하던 생각이 들기도 하구요.


6. 하고 싶은 말


제 얘길 하다보니 두서가 없었지만, 결론은 명확합니다. “겁나 코딩을 많이 하셔야” 기술력을 쌓을 수 있습니다. 저는 머리가 좋은 편도 아니고, 이해가 빠른 것도 아니지만, 진짜 많이 했기 때문에 CS 과목들을 들으면서 이해가 쉽고 공감이 갔던 부분이 많았습니다.


그리고 꼭 저수준의 프로그래밍을 해보셔야 합니다. 예를 들어, Java & Spring을 하고 계시다면 Java만 가지고 HTTP 서버를 짜보고, DB 대신에 간단한 key-value store를 짜본 후 게시판 CRUD를 하기 위한 서버를 만들어 보세요. 웹 프론트엔드를 지향하신다면 React.js 를 쓰지 말고 바닐라 js 를 갖고 React.js 처럼 동작할 수 있게 짜보세요.


모든 공학이 그렇지만 이론은 쉽고 실제는 겁나 어렵습니다. 특히 CS는 추상화의 학문이기 때문에, 윗단에서만 코딩을 하다보면 무조건 한계가 올 뿐더러 공부해야 하는 양이 너무 많습니다. 아랫단을 잘 이해하고 있으면 윗단에 추가되는 것이 왜 추가 되는 것인지를 더 잘 이해하게 되실 것이라 확신합니다.


잔소리가 길었네요. 도움이 되길 바랍니다.

80
81
  • 댓글 26

  • jw_891
    1k
    2022-07-01 16:43:50

    흔히 삽질 많이해야 는다고하죠..ㅎ 

    좀 사족이긴한데... 글쓴 분만큼 우직하게 하는사람이 흔치는 않지만 입문단계일수록 좀 단순무식하게 접근 할 필요도 있는 것 같습니다. 

  • 현욱
    1k
    2022-07-02 02:30:08

    저는 글쓴분처럼 어렸을때 우직하게 하진 못했습니다. GW-BASIC으로 책 따라서 달력 만들다가 어디선가 오타 내서 안돌아가는걸 결국 디버깅 못해서 때려치고, Turbo-C도 몇번이나 공부하려다가 포인터 전후에서 포기를 몇번이나 했는지 모릅니다. 그래도 도스 세대라 config.sys도 만져보고, 게임 돌아가게 하려고 메모리 관리도 했던게 남아서 다른 친구들보다 파일 시스템이나 OS같은거 공부할 때 좀더 이해하기가 쉽더라구요.

    말씀하신대로 학부 레벨에서의 공부는 이론적이다보니 스스로 이걸 왜 공부해야하는지 동기부여하기가 쉽지 않은 것 같습니다. 그렇기 때문에 학교 공부만 할 것이 아니라 인턴쉽이나 사이드 프로젝트를 (학교를 휴학해서라도) 통해 이론과 실전을 융합하는 노력이 많이 필요한게 아닌가 싶네요. 대부분의 학생은 학교 이전에 코딩 경험을 쌓지 못하고 들어오니까요.

  • 코딩완전뉴비
    111
    2022-07-02 13:41:24

    좋은 글 감사합니다.

  • 나랑놀아
    20
    2022-07-03 01:52:03

    아는 만큼 보인다고 하죠. 언매니지드 언어도 공부해야 이해가 깊어진다하는데 아직 주언어도 부족해서 엄두가 안나네요..ㅠ 좋은 글 감사합니다.

  • Luna Jay
    127
    2022-07-03 11:39:19
    내공이 상당하신데 실례지만 개발 연차도 들려주실수 있을지요? 
  • 드루이드
    300
    2022-07-04 05:42:31

    글 잘읽었습니다. 저도 주변에서 프레임워크를 배우는 좋은 방법이 뭐냐고 물어보면 항상 프레임워크 없이 개발해 보는거라고 합니다. 스프링을 배우는 가장좋은 방법은 스프링없이 개발하는것 처럼요. 

  • 프로구라무
    111
    2022-07-04 06:26:29

    좋은 글 감사드립니다.

  • exexexe
    464
    2022-07-04 13:34:18 작성 2022-07-04 13:34:46 수정됨

    코딩에 익숙하고 싶다면,

    겁나게 코딩하세요.


    기술력을 갖고 싶다면,

    책을 열심히 읽고 생각의 힘을 키우세요.

  • Yous
    69
    2022-07-04 14:11:54
    많은 분들에게 도움이 되는 글이네요
  • 코딩잘하기
    2k
    2022-07-04 16:07:45

    공감하고 갑니다.


    밑바닥까지 파고면서 이론을 같이 갖추는게 중요하더라구요. 


    게임엔진쪽은 물리, 수학 (미분, 선형대수)도 잘 알아야하구요. 

  • choju
    1k
    2022-07-04 16:54:16

    굿굿... 진자 본질에 가까운것 같아요

  • 장독깨기
    6k
    2022-07-05 08:49:03 작성 2022-07-05 08:50:36 수정됨

    좋은 글 입니다.

    저 같은 경우 아주 오래된 사람인데 C언어로 시작했습니다. 비 전공이구요.

    그 당시엔 선택지가 없었습니다.

    ms-dos 에서 turbo-c 로 프로그래밍을 시작 했었죠.

    너무 재미 있었고, 이래 저래 하고 싶은거 많이도 만들어 봤습니다.

    지금은 선택지가 너무 많습니다.

    이 부분이 지금의 저 같은 경우에는 큰 장점이 됩니다. 골라 쓸 수 있으니까요.

    근데, 입문하시는 분들에게는 오히려 독이 되는거 같더군요.

    프로그래밍 본질 보다는 너무 실행, 개발 환경에 집착하고,

    이런 부분을 잘해야 실력이 좋은거라 오해도 많이 하는 거 같습니다.

    일전에 본질을 궁금해 하는 분에게 프레임웍, 데이터베이스 없이 뭔가 만들어 보시라 조언했습니다.

    근데, 몇몇 시니어 조차 의아하게 생각하는 분들이 있더군요. 답답한 노릇입니다.

    가령, 스프링 프레임웍을 이용한다 해서 객체지향 프로그래밍을 한다라고 착각하면 곤란합니다.

    객체지향 프로그래밍은 본인이 직접 클래스를 구조화하고 추상화할 수 있어야 하는거죠.


    뭐 암튼, 특히 입문하시는 분들은 이 글을 꼭 새겨 들으면 좋겠습니다.

  • 아구아구
    120
    2022-07-05 09:31:28

    바닐라js로 리액트처럼 만들기 해본적있거등여? ㄹㅇㄹㅇ 첨엔 체인지 이벤트 썻다가 걍 이벤트에 원초 옵저버로 만들어보고 그랫는데 해보고나서 느낀건 개발하기 편한세상이 왔다는거에여 모든기능을 리액트처럼 구현은 할순없지만 바닐라로 해보고나서 걍 프레임워크가짱이구나 느꼇습니다 그 이후에 제이쿼리라는 프레임워크랑 vue를 훨훨 더잘쓰게 됬습니다. 응?(리액트 좀 공부하다가 뷰쓰니깐 뷰가 짱편하더라구요..)

  • tttaaaammm
    601
    2022-07-05 14:05:48

    모 공부하려고 하는데요 강의 추천해주세요 

    라고 하는 모든 분들에게 읽어보라고 하고싶내요

  • 진돗개발령
    2
    2022-07-05 17:29:59

    글쓴이님의 글에 너무나도 많은 공감이 됩니다.

    코딩부터 하면 api의 사용방법 정도는 알 수는 있지만 깊은 내용을 모르기 때문에 다시 책을 보게 되고 다시 알게 되는 점들이 많죠

  • yoohg75
    95
    2022-07-06 09:32:56

    사실 전에 아는 후배한테 들었던 얘기가 생각나네요...코딩을 많이 해보고 어떻게 하면 코드 중복을 줄이면서 재상용을 잘 할 수 있을까를 고민하다 보니...주기적으로 리팩토링을 했었고, 그 과정에서 중복을 줄이고 재사용 가능하도록 기능별로 프로그램을 쪼개고...

    그래서 나중에 리팩토링 관련 책들을 보니 자기가 이미 하고 있던 게 꽤 많았다고 하더군요. 결국 운동이나 영어등도 마찬가지일 텐데 이론이 뛰어나다고 운동을 잘 하게 되거나 영어를 잘 하게 되는 게 아니듯이 결국은 코딩을 잘하려면 코딩을 많이 해보고 그 코딩이 돌아가는 거에 만족하지 않고, 좀 더 좋은 코드를 위해 고민하고 고쳐봐야 된다고 생각합니다. 그리고, 끓임없이 좋은 코딩을 위해 의심해 보는 게 필요할 것 같습니다.

    좋은 글 잘 봤습니다. 솔직히 나이가 들고 경력이 쌓이면서 코딩을 열심히 하는 게 점점 더 귀찮아지고 편한 것만 찾으려고 하는 것 같습니다. 그런 마음에 큰 자극이 된 것 같네요.

  • shirohoo
    2k
    2022-07-06 13:00:44

    1년 가까이 코드카타를 하고있는 입장에서 너무 공감되는 글입니다. 


  • SilverWood
    4
    2022-07-07 08:58:42

    좋은글 감사합니다. 신입개발자로 회사에 입사했는데. 등대와 같은 글을 본 기분이 드네요.

  • hjin2017
    519
    2022-07-07 10:05:21

    근대 저건 이런거랑 같은거라 하기 힘들꺼임 

    아침이 던 저녘이던지 매일 줄럼기 100개하고 자면 몸좋와 짐 ㅇㅇ 과 같은거라 본인이 하려고 맘 안먹구하면 어차피 안함 ㅋ

  • 빙수빙수
    31
    2022-07-07 16:28:41

    다른의견: 많이 짜서 실력이 오르는 레벨과 영역이 있고,  읽고 공부해야 실력이 오르는 경우도 많습니다. 실력이 좋게 되기 위해선 둘다 필요하기 때문에 반복과 실습은 필요하지만, 충분하다고 생각되지는 않네요.

    비효율도 인생에 한두번정도는 도움이 되지만, 비효율이 이효율임을 깨닫지 못하면 어느 시점부터는 독이 된다고 봅니다.

  • ignoreOrange
    2k
    2022-07-07 17:01:53

    히유 알면서도 실천이 정말 안되네요...

    꾸준함이 답인데

    다시 한번 자극 받고 갑니다!

  • 개발자123456
    43
    2022-07-08 01:27:51

    노력없이 되는것없죠

    개발자? 평생을 힘들게 살아야하는 인생.. 

    배우고 또 배우고.. 휴.. 난 20년배웟내요

  • 40대아재
    21
    2022-07-13 21:16:21 작성 2022-07-13 21:17:19 수정됨

    공감되는 말씀입니다.

    저도 게임프로그래머 출신인데 요즘은 유니티란

    쉬운 엔진이 있지만 pc에서 피처폰부터 개발해 온

    제 세대는 엔진은 무조건 만들어 썼습니다.

    실제 이미지포멧을 자기가 한번 만들어보고,

    한 픽셀 한 픽셀 저장한 파일을 화면에 제대로 찍힐때의 

    쾌감은 아직도 생생하네요.

    그 포멧을 바탕으로 게임 엔진 가장 밑단을 클래스로

    디자인 하고, 여러 이펙트 (이미지회전,확대 축소, 알파블렌딩 등..)들을 엔진에 붙이면서 결국

    자신만의 엔진을 만들어 쓸때, 자신이 그래도 조금은

    실력이 늘었구나 자신감이 붙었었습니다.

    지금은 좀 다른 일을 하고 있지만, 무언가를 빨리 빨리

    찍어내기에 급급한 요즘 세상이 조금은 씁쓸하단

    생각도 드네요.

    반가운 글 잘 읽고 갑니다.

    즐거운 저녁 되세요^^


  • 우주로가고픈유성
    1k
    2022-07-19 20:41:45

    문제는 시간과 연봉


  • 테크놀러지마
    1k
    2022-07-22 11:06:45

    겁나 하세요

    를 저는 코딩에 대한 공포감을 가져라는 줄 알았습니다. ㅜ.ㅜ 

  • kim
    443
    2022-07-24 14:23:11

    위에서 말한 코딩기술은 적어도 30대 중반까지는 통달해야 하는거구요, "기술력"이라고 부르기가 창피하군요.

    진정한 기술력은 돈버는 지식이고 이건 정답이 없고 들어도 내가하면 또 다름..

  • 로그인을 하시면 댓글을 등록할 수 있습니다.