페이지

2018년 5월 6일 일요일

남들이 짠 코드 읽기...

처음 개발자로서 일할때는 모든 프로젝트가 정말 바닥부터 코딩을 했다. 한마디로 main으로 코딩을 시작했다. 이런 코딩은 아주 재밌다. 내가 모든 것을 지배하니까..
그런 즐거움도 잠시 대기업이 들어간 이후 부터 지금까지 남들이 짜 놓은 방대한 코드에 뭔가 기능을 구현해야했다. 이때 부터 본격적인 코드 읽기가 시작되었다. 방대한 코드를 이해하는 것은 쉽지 않다. 그냥 코드만 읽어서는 절대 이해할 수 없는 것이 코드 읽기다. 오죽하면 이런 책도 있다.  그래서 지금까지 경험한 것을 잠깐 공유하려고 한다.

1.gdb로 step into를 통해 프로그램 동작을 이해한다.
call graph를 복사해 놓고 sequence diagram을 그려 놓으면 좋다. 이것을 바탕으로 class diagram을 그려놓고 프로그램 전체 구조를 이해한다. 그리고 layered architeture diagram을 그려 놓는 것도 좋다.

2. 버그를 잡는다.
오픈소스인 경우 버그를 잡아본다. 그러면서 코드를 이해한다. 버그를 잡은 경우에는 어떻게 잡았는지 잘 문서화 해 놓는다. 이렇게 여러군데 버그를 잡다보면 부분 부분 이해가 늘어나고 어느새 전체 구조를 이해하게된다.

3. 기존 문서나 비디오 등을 꼭 본다.
기존 개발자가 만들어 놓은 기술 문서, 기술 토크 비디오를 찾아서 질리도록 본다. 사실 코드가 자주 바뀌지만, 대부분 문서를 아주 자세한 경우가 드물기 때문에 좀 오래된 문서들도 도움이 된다.

4. 프로젝트내에 있는 작은 데모, 테스트케이스 코드를 본다.
이들 프로그램은 꼭 필요한 코드만 담겨져 있어서 이해가 쉽다.

5. Design Pattern에 익숙해진다.
많은 프로젝트가 익숙한 Design Pattern을 사용한다. 디자인 패턴에 익숙할 수록 코드 이해가 빠르다.

6.  Concurrent programming, IPC에 익숙해진다.
Chromium이 Multiple Process Model을 도입한 이후, 프로그램 동작을 이해하기가 까다로워졌다.

7. API에 익숙해진다.
당연한 이야기지만, 윈도면 윈도 API, 유닉스면 POSIX API에 익숙해져야 한다..

8. Domain knowledge에 익숙해진다.
웹브라우저를 개발한다면, 웹기술에 익숙해져야 하듯이, 게임을 만든다면, 게임 자체를 이해해야 한다.

9. Refactoring을 해본다.
한동안 Blink Editing component을 기여한적이 있었다. Chromium 코드 가운데 복잡하기로 악명 높은 코드다. 여러 사람이 개발을 했고 Editing API가 표준화가 덜 된 탓도 있다. 어찌되었던 이런 시도는 코드 건강에 좋다.

지금 끝도 없는 방대한 코드를 보려다가, 그냥 두서 없이 정리해보았다. 자 이렇게 남의 코드를 볼 노력으로 그냥 나만의 프로그램을 만들자. ㅎㅎ

참고로 읽어본 글

2018년 4월 22일 일요일

hanterm

한글 관련 오픈소스 프로젝트를 좀 찾아봤는데, hanterm과 libhangul/nabi가 떠올랐다. libhangul은 지금도 잘 관리되고 있는데,  hanterm 은 2000년에 마지막 업데이트가 있었던 것 같다.

소스코드를 찾아보니, 우분투에도 흔적이 있고,
https://bazaar.launchpad.net/~ubuntu-branches/ubuntu/feisty/hanterm-classic/feisty/files

젠투에도 코드가 남아있다.
https://gpo.zugaina.org/x11-terms/hanterm

han.ccomp.hangul에서도 hanterm에 대한 글을 찾을 수 있다.
https://groups.google.com/forum/#!searchin/han.comp.hangul/hanterm%7Csort:date

kaist ftp 사이트에서 여러버전의 hanterm과 다른 유닉스, 윈도우에 포팅된 코드도 있는 것 같다.
ftp://ftp.kaist.ac.kr/hangul/terminal/hanterm/

한텀을 처음 만드신 송재경님 인터뷰도 찾았다.
https://sites.google.com/site/koreainternethistory/interview/interview-for-writing-a-book/jksong

현재 홈페이지는 접속이 안되며, archive.org를 통해서 예전 홈페이지 내용을 볼 수 있다.
https://web.archive.org/web/20070205200906/http://www.hanterm.org:80/
한글 처리에 대한 정보 등이 담겨져 있다.

시간나면 빌드를 해봐야할 듯.

2018년 4월 21일 토요일

나만의 프로그램

Windows 3.11 workspace.png
By Self-taken screenshot., Link

옛날 이야기다. 윈도 3.1을 사용할 때, 도스 프로그램을 프로그램 관리자에 등록하면 MSDOS 아이콘이 생성된다. 아이콘을 클릭하면 화면 모드가 바뀌면서 도스 프로그램이 샐행되었다.  윈도에 내장된 아이콘 개수는 많지 않았고, 원하는 아이콘을 그리고 싶은데, 그릴 수 있는 툴이 기본으로 포함되어 있지 않았다.

우연히 아마도 PC통신으로 다운로드 받았던 아이콘 편집기가 있었는데,  일종의  쉐어웨어인, 카드웨어였다. 카드웨어로 배포된 프로그램을 사용하려면 저자에게 그림 엽서를 보내야했다. 물론 안보내도 그만이다. 초기 리눅스 커널도 카드웨어였다.

이런 카드웨어가 나에게는 굉장히 대단해보였다. 그리고, 이 때 부터 나만의 프로그램을 만들어보고자 하는 꿈을 갖게되었다.  여러 사람이 내가 만든 프로그램을 쓴다.. .  사실, 그 오랜꿈은 이루지지 않았다. 그동안 고객을 위한 프로그램을 만들었고, 거대한 오픈소스에서 몇줄의 코드를 고쳤다. 물론, 보람도 있지만,  나만의 프로그램에 대한 갈증을 해결되지 않았다.

자유/오픈소스 소프트웨어 만화를 그리면서 한가지 배운 것은  바로 "나만의 프로그램을 바로 시작하자"라는 것이다. 처음에는 나만의 프로그램이지만, 세상을 바꿀 그 무엇이 될 수도 있다. 한가지 조건을 건다면, 지금까지 누구도 시도하지 않았던 새로운 프로그램을 만드는 것이다.  그리고 요즘 한가지 아이디어를 얻었다.  이 아이디어가 과연 세상에 나올 수 있을까? 오늘도 또 꿈을 꿔본다.