나의 프로그래밍 로그
05 Aug 2019- 2015년 6월 12일 첫번째 정리
- 2019년 2월 24일 업데이트
- 2019년 8월 5일 업데이트
- 2021년 12월 31일 업데이트
잠 안오고 심심해서 써보는 나의 프로그래밍 로그
- 1990년, 처음으로 MS-Dos와 GW-Basic를 접해봄.
- 1992년, 마이컴이라는 잡지에서 Turbo-C가 짱 좋다는 이야기를 접함.
- 1993년, 마이컴이라는 잡지에 실린 ‘나의 자랑 나의 프로그램’이라는 코너에 실린 C 프로그램을 Turbo-C에서 하나하나 타이핑 해봄. 그러나 C 문법에 대해 1도 모르던 꼬꼬마 린델은 or 연산자 |와 표 그릴때나 쓰던 확장 아스키 코드를 헷갈려 하며 무수한 에러가 나는 장면만 봄. 당연히 영어도 할 줄 몰랐으니 에러를 고치는 방법 따윈 몰라서 포기.
- 1996년인가 쯤, PC통신을 하면서 Game13H라는 라이브러리를 알게되어 화면에 점 하나 찍는걸 해보고 즐거워함. (아마도 내 기억에 13H라는건 320x240x256Color 모드를 의미했던걸로 기억)
- 1997년 겨울, 걸출한 프로그래머 친구를 만나 같이 게임을 만들려고 하면서 프로그래밍에 손놓고 그림만 그리기 시작.
- 2000년, 대학교 입학 후 Visual C 6.0을 접함. void main()으로 시작하여 printf()가 난무하는 콘솔 프로그램이나 숙제로 낼 수 있을 정도로만 겨우겨우 만들수 있게됨.
- 2001년, C의 포인터를 이해하는데 머리를 쥐어짬.
- 2002년, malloc()이라는 함수를 처음 써봄. 그리고 처음으로 ‘잘못된 연산에 의해 프로그램을 종료합니다…‘를 남발하는 숙제용 프로그램 완성.
- 2003년 봄, 파일 구조라는 수업을 들으면서 처음으로 파일 입출력이라는걸 억지로 해봄.
- 역시 2003년 봄, 처음으로 Visual C에 Breakpoint라는 기능이 있다는 걸 알게 됨. 또한 포인터로 선언된 값에 0xCCCCCCCC가 들어있으면 그건 잘못된 거라는 사실도 처음 알게됨 (!).
- 2003년 가을, DB 수업을 들으면서 PHP를 처음 접해봄. 무리하게 프로젝트를 해보았으나 결과는 GG…
- 2004년 봄, 컴퓨터 그래픽스 수업을 들으며 OpenGL을 처음 접해봄. 처음으로 콘솔창이 아닌 그림 그리는 화면을 윈도우에 띄워봄…
- 2004년 1학기 끝나갈 무렵, 학기말 프로젝트에 처음으로 C++ 클래스를 도입해 봄. 그러나 왜 C++을 써야하는지 그 필요성은 전혀 못느끼고 말았음…
- 2004년 1학기 끝나갈 무렵, 학기말 프로젝트 프로그램의 간지와 인터페이스를 위해 Win32 프로그래밍이라는걸 해봄.
- 2005년 석사 입학한 뒤, 다관절 강체 물리 엔진을 C 구조체와 함수로만 만들려고 시도. 그래서 모든 함수의 첫 파라미터가 C 구조체인 상황이 시작되고… 처음으로 C++ 클래스를 써볼껄 하면서 후회함. 아무튼 이걸 만들면서 왜 헤더 파일에는 ifndef 매크로를 붙이는지 이해하기 시작.
- 2005년, OpenGL 삼각형으로 구, 원통 같은걸 직접 그려보기 시작.
- 2005년, 모션 캡처 데이터 BVH 파일을 읽어들여 구와 원통 같은걸로 모션 캡처 애니메이션을 그려보기 시작.
- 2005년, Matlab을 처음 접해보고 행렬 연산의 편의성면에서 C와는 비교할 수 없는 편리함을 느끼고 핥기 시작.
- 2006년, 대학원 수업에서 스케치 기반 인터페이스 수업을 들으면서 나만의 선형대수 라이브러리가 있어야겠단 생각이 들어 모두 inline으로 점철된 선형대수 라이브러리를 만들게 됨. 그 뒤로 대충 7년간 잘 씀…
- 2006년, OpenCV라는걸 처음 접해보고, 이걸로 사진을 읽어서 이것저것 할 수 있다는 것을 알게됨.
- 2007년, Matlab 핥기의 정점에 도달… 모션 캡처 로더와 모션 뷰어, 물리 엔진을 모두 Matlab으로만 구현해보게됨…
- 2006년인가 2007년인가 쯔음… 컴파일러를 만드는 컴파일러가 있단 사실을 구체적으로 알게됨. JavaCC라는 녀석을 프로젝트 때문에 사용해보게 됨. AST를 만들고 이걸 방문하는 Visitor 인터페이스에 대한 개념을 배우게 되면서 자연스럽게 추상 클래스와 구체 클래스간의 차이 및 쓸모를 알게 됨.
- 2006년인가 2007년에 컴파일러 수업을 들을 때, 처음으로 스택 메모리와 힙 메모리의 차이를 알게됨.
- 2006년인가 2007년에 컴파일러 수업을 들을 때, 자바를 줄기차게 쓰면서 “자바의 클래스 변수는 선언한다고 초기화 되지 않는다”는 사실을 처음 알게됨.
- 2008년, 모션 시그널 필터를 구현하면서 처음으로 클래스 상속이란걸 제대로 써보게 됨.
- 2009년 언젠가, 데이터 형이 다르지만 같은 짓을 하는 코드를 대충 6번정도 작성하다가 템플릿이란 거에 손을 대보게 됨. 컴파일하면서 썡고생 경험.
- 2009년인가 2010년인가, OpenGL로 직접 UI 버튼이니 슬라이더니 하는 것들을 구현해 봄.
- 2009년인가 2010년인가, Qt를 처음 접하고 기존에 MFC가 정말 프로그래밍하기 개떡같았다는 걸 뼈저리게 느낌.
- 2010년인가 2011년, 처음으로 svn이니 git이니 하는 형상관리툴의 존재를 알게됨. 그러나 익숙해지는데는 어마어마한 시간이 지난 후…
- 2011년인가 2012년인가 python을 처음으로 접해봄. 쩌는 텍스트 처리 능력을 보고 앞으로 C/C++ 가지로 파서 만들지 말아야겠다고 다짐… (했으나 걸핏하면 어딨는지 못찾겠어서 obj 로더같은거는 그냥 C로 파서 만들기를 수차례 반복)
- 2013년, inline c 함수 기반의 선형대수 라이브러리를 몽땅 클래스 + 연산자 오버로딩으로 개조함. 이때 연산자 오버로딩을 처음 제대로 써봄. 그리고 변수에 붙은 const, 함수에 붙은 const가 어떤 의미인지 제대로 이해하기 시작. 처음으로 ‘설계때부터 프로그래머의 사용방식을 적절히 제한하는 것이 왜 유용한지’ 이해하게 됨.
- 2013년, kinect SDK를 써보면서 다시는 쓰고 싶지 않았던 win32 프로그래밍에 또 손을 댐. 그렇지만 이번에는 맥에서도
돌려보고 싶은 욕구를 위해 모든 c파일에 include
를 떡칠하는 우를 범하지 않게 됨. - 2013년, 안드로이드 프로그래밍을 처음 접함.
- 2013년, 싱글톤이라는 패턴 클래스를 처음 만들어보고, 왜 이렇게 만드는게 편리한지 뼈저리게 깨달음.
- 2014년, 예전에 공부한 클래스 상속 / 템플릿을 이용해 모션 데이터를 처리하는 프로그래밍을 하기 시작.
- 2014년, RFL이라는 혼자 쓸 목적의 라이브러리 프로젝트를 만들면서 문서화를 깔짝대봄
- 2014년, 전신 모션 트래킹을 위한 패턴 매칭 기반의 트래커 문제를 풀어봄. 먼저 CPU로 풀면 얼마나 느린지 확인하고 (초당 3프레임?), 이걸 OpenCL을 이용하여 가속화 하는 작업을 2015년에 진행함
- 2015년, OpenCL 코드를 잘못 놀리면 어떻게 되는지 뼈아프게 느낌. macos에서 OpenCL 코드를 잘못 놀리면 커널 패닉이 일어나는 것을 보고 신기해함 (…)
- 2015년, OpenCL로 kinect fusion 비스무리한 것을 구현하기 위해서 3D TSDF (Truncated Signed Distance Field)를 만들어내는 알고리즘 구현을 해봄. 이와 동시에 rigid ICP를 구현.
- 2015년, XML 기반 serialization을 하는 낡은 코드를 드러내고 JSONCpp를 붙여봄
- 2015년, Freetype을 이용하여 직접 vector font를 읽어 OpenGL로 렌더링하는 짓을 해봄. 처음에는 Freetype에서 제공하는 rasterizer를 이용해서 texture를 굽고 OpenGL로 이 텍스처를 뿌리다가, 확대하면 생기는 깍두기를 보면서 회의를 느낌…
- 2015년, 그러다가 존경해 마지않는 Blinn 선생이 quadratic Bezier curve의 경우 convex 혹은 concave 영역을 삼각형으로 던지면 채워넣어주는 쉐이더를 만들수 있음을 알려주는 논문을 읽고 이걸로 폰트 렌더러를 직접 구현해봄. 회사에서 이걸 보고 예능 자막 스타일 짤방을 만드는 앱으로 발전시키기 시작, Boodl이라는 앱을 만들게 됨…
- 2015년, 크로스 플랫폼이란걸 해보고 싶어서 같은 C++ 소스 코드를 유지하는 프로젝트를 visual studio용, xcode용 등등으로 따로 만들어대다가 너무 불편해서 cmake를 건드려보기 시작함
- 2016년, C++ 프로젝트를 js로 컴파일하는 방법이 있다하여 emscripten이라는 녀석을 이용해보기 시작함. 다양한 삽질 끝에 브라우저에서 직접 만든 C++ 렌더러 돌리기 성공.
- 2017년 6월경, 러스트 기본 문서가 2판으로 업데이트 된 것을 보고 읽기 시작하다가 내용이 친절하고 재밌어서 원문 저장소를 포크하고 원저자에게 한국어로 번역하겠다고 이슈를 만들어 알리고 작업 시작. 2018년 10월 즈음에 appendix를 제외한 대부분의 문서 번역이 완료됨.
- 2017년 8월경, 백엔드 및 인프라를 담당하던 친구들이 개인 사정으로 인해 회사를 그만두면서, 급하게 백엔드와 인프라를 땜빵하기 위한 공부를 시작. 급하게 공부한 백엔드 환경은 ruby-on-rails였고, 인프라는 aws였음…
- 2017년 12월경, 프론트엔드를 담당하던 친구가 역시 개인 사정으로 회사를 옮기면서, react-redux-saga 기반의 싱글 페이지 프론트엔드 만드는 법에 대해서도 공부를 하게 됨. 애초에 javascript를 딥하게 써본적도 없는데, 온갖 모던한 문법으로 작성된 redux-saga 코드는 머릿속을 엉키게 만들기에 딱 좋았음
- 2018년, aws의 기본적인 사용 방법을 알게 되면서 node 기반 백엔드를 약간 핥기 시작함.
- 2018년 12월, 회사의 모든 iOS 인력이 사라지면서 (…) swift를 꾸역꾸역 공부하기 시작함. 덕분에 RxSwift를 실컷 만져보게 됨.
- 2019년 초부터, es6 등등의 스펙에 맛들려서 거의 모든 js project 세팅을 babel로 돌리고, async/await를 일반 콘솔용 프로그램에도 적극적으로 활용하기 시작함.
- 2019년 7월, 개인적으로 사용하려고 만든 binary-to-c-header 툴을 public으로 올렸더니 어떤 외국인 친구가 빌드 방법을 알려달라는 issue를 달아둠… 오픈 소스란 이런 것이구나?
- 2019년 8월, 난생 처음으로 오픈 소스 컨트리뷰팅을 해봄. bgfx라는 renderer에 vulkan backend를 기본 구현하여 pull request. 대략 4박 5일간의 리뷰 핑퐁 후에 머지됨. 나름 뿌듯한 경험.
- 2020년 3월, 영상 처리를 위해 gstreamer를 파보기 시작했으나… g-object라는 녀석이 함수 시그니처만 가지고서는 도저히 lifecycle을 알 수 없으며, 수많은 플러그인 중 상당수를 나몰라라 한다는 사실에 좌절
- 2020년, 결국 ffmpeg으로 갈아타는 대신, 구닥다리 패킷 처리를 어떻게 할 방법이 없을까 하다가 rxcpp를 사용해보기 시작