2005년 5월 4일 수요일
유무선 IP 공유기 사용하기
가격 : 6.8만원
주소 : http://www.terawork.co.kr/
http://www.gigabyte.com.tw/
유선공유방법
환경 : 회사, DHCP IP setting
. WAN를 회사 라인에 연결
. LAN1을 내 컴퓨터에 연결
. 설정 끝
. 관리자 페이지 : http://192.168.1.25
계정 : admin/admin
무선공유방법
. 유선공유방법으로 PC를 연결
. 관리자 페이지 : http://192.168.1.25
-> 무선네트워크 설정 -> SSID : ilashman(적당히 설정)
. 사용할 수 있는 무선 네트워크 보기
-> ilashman -> 연결
참고)
다른 무선 AP들과 범위가 겹쳐져도 상관없는 것 같음.
2005년 5월 3일 화요일
[책]Writing Solid Code - Steve Maquire
올해 읽은 개발관련 책 중에서
그리 어렵지 않고 아주 짧은 예제를 가지고
많은 것을 배우게 하는 책인 것 같다.
뭔가 거창한 새로운 방법이라기 보다는
malloc, free, realloc, type range, type cast등을 이용해서
최대한 간단하게 설명하고 있다.
assert()라는 너무나도 간단한 매크로를
정말 Guru답게 이용하고 있다.(마법처럼..)
Function Protype, type의 강력한 필요성도 PL 수업보다 더 간단하고
실용적으로 증명하고 있다.
다른 책들이라면 연습문제나 tip, 수수께끼 구석에나 나올법한
사소해 보이지만 찾기는 매우 까다로운 버그들을 언급하고 있다.
Peopleware 같은 책은 품질이 성능과 프로젝트 일정에 미치는 영향을
통계적, 추상적으로만 설명하고 있지만
Writing Solid Code는 매우 구체적으로 실제 까다로운 예들을 보여주고 있다.
진작 이런 걸 보고 팀의 다른 프로그래머들에게도 보여줬었다면 좋았을 텐데.
Programming Pearl 같은 책을 많이 읽어서 알고리즘 하나 더 익히는 것보다
이런 책을 읽어서 버그를 하나 줄이는 편이 실력을 향상 시키는 더 좋은 방법인 것 같다.
Matin Fowler의 Refactoring보다 훨씬 간결하고 핵심만 짚고 있다면 점도 멋진 것 같다.
솔직히 Refactoring은 너무 두껍고 장황하고, 예제도 길다.
배우기 업무
사람들은 배우는 것을 힘들어한다.
새로운 것에 대한 두려움일 때도 있는 데.
다른 팀원들에게 미안하기 때문일 때도 있다.
다른 사람들은 모두 성과를 내고 바쁘게 일하는 데,
자신만 책을 보고 공부를 하는 건 염치없다고 생각한다.
하지만 junior라면 배우는 것이 업무이다.
미안하다면 더 열심히 배우면 되는 것이지
열심히 배우지 않고 성급하게 업무에 뛰어들게 되면
나중에 더 많은 실수와 낭비를 하게 되고
팀원들에게 정말로 미안해지게 된다.
아기가 아무리 효녀, 효자라도 엄마를 고생시키지 않으려고
10개월을 채우지 않고 세상 밖으로 나와버리면
미숙아가 되서 엄마는 더 큰 고통과 비용을 감수해야 한다.
그리고 중요한 것은 단지 10개월이나 2년 같은 시간이 아니라
자신이 충분히 성숙되었을 시점인 것이다.
어떤 사람은 그 전 직장의 경험이라든지,
어떠한 백그라운드, 혹은 천재성에 의해 빠를 수도 있고,
대기 만성형이라면 좀 느릴 수도 있다.
대붕은 하루만에 하늘을 날지 않는 다.
날개가 다 자랄 때까지 기다린다.
그리고 심지어 이미 성공한 사람이라도
배우는 것은 여전히 업무의 연장이다.
안식년이나 휴급 휴가도 사실은 업무다.
그 시간동안 다음 업무에 필요한 내용을 배우고 힘을 기르는 것이다.
배우고, 가르치는 것이 일이 아니라면
교사라는 직업은 이 땅에서 사라져야 할 것이다.
Wrapper Function을 쓰는 이유
. Porting이 쉽게 가능해진다.
(Single point 수정으로 가능할 수도 있다.)
. 자신의 Coding Convention(Function Naming)과
다른 사람이 만든 Library의 convention이 다를 때.
다른 사람의 소스를 직접 바꿀 수는 없다.
wrapper function의 이름은 내가 바꿀 수 있다.
. Namespace를 자신이 적절히 정의할 수 있다.
. 함수 Prototype을 자신에서 알맞게 고칠 수 있다.
. 원래 함수의 바깥쪽에 Assertion을 추가할 수 있다.
. 각 function의 수행시간을 더 쉽게 측정할 수 있다.
. 간단한 초기화 작업을 대신해 줄 수 있다.
참고)
Writing Solid Code
문서화
인수인계를 위해 지난 2년간 내가 만들어둔 문서들을 살펴봤다.
남들이 보면 잘 못 알아 볼 것 같다는 생각이 들었다.
그렇다고 더 잘 할 수 있었나 생각해보면 아닌 것 같기도 하다.
(겸손하지 못하게도 :$)
나름대로 해볼만큼은 한 것 같다.
게으름이라기보다는 실력 부족이라는 말이다.
전반적으로 관련 모듈들도 설계가 부실해서 혼자 해볼 방법도 별로 없었고,
쓸만한 툴을 잘 찾지도 못했다.
(새로운 툴 하나 찾아내는 것도 어렵고, 잘 쓰는 것도 어렵다.)
점점 나아지고 있기는 하다.
다음 번에 다시 한다면 이번보다는 나을 것 같다.
관련 모듈들이 좋아진다면 나도 따라서 나아질 것 같다.
뭔가 시도해보고 싶은 것은 매우 많은 데,
실력이 따라 주지를 않는 다.
그림도 좀 그려넣고, 기반 라이브러리부터 착실히 쌓아가면 좋을 텐데.
그게 하루 아침에 되는 게 아니니까.
공부해야할 것이 너무 많다는 데는 여전히 한숨이 나오지만
2년 전보다 많은 것을 알고 있다는 생각은 든다.
1개 배우면 10개 모르는 게 생기는 건 어쩔 수 없지뭐. :$
말만 많고 실력이 없는 사람인 것도 확실하지만
말을 많이 해야 실력도 느는 것 같다.
@ 정리해보자면 아직 '훌륭한 프로그래머'는 아니지만 '훌륭한 습관을 가진 프로그래머'가 되려고 노력하고 있다.
컴퓨터 교육 - 부모들의 걱정
친척 어른들이 내게 요즘은 이런 걸 많이 물으신다.
"네 사촌 동생 컴퓨터 좀 가르쳐야 겠는 데, 걱정이다.
그리고 제발 게임 좀 못하게 해라."
내 생각에는 별로 걱정할 필요 없을 것 같다.
싸이월드에 글 쓸 줄 알고, 이메일 보낼 줄 알고,
메신져도 쓰고, 스킨도 결제하고 친구와 카트라이더를 즐기고,
검색엔진에서 숙제 찾아서 할 수 있고,
주소 불러주면 들어가서 이것저것 클릭할 줄 알면 충분하다.
모든 꼬마들은 Computer Programmer나 Network Administrator로
만들 수는 없으니까.
컴퓨터를 조금 저렴하게 사고 싶다면 옥션이나 Danawa같은 게 가보면 되는 거지
한 학기짜리 Computer Architecture강의를 들려줄 필요는 없다.
HTTP, HTML 이런거 몰라도 Blog 사이트 가입만 하면 홈페이지 비슷한 거
만들 수도 있다.
어른들(40~50대 이상)이야 말로 컴퓨터 공부가 필요한 것 같다.
어른들의 IT에 대한 무지는 걱정할 만한 수준이다.
꼬마들만큼만 적응한다면 충분하다.
충동적으로 비싼 물건을 사거나 잘못된 싸이트에서 해메지 않을 정도면 된다.
게임 중독도 심하긴 하지만 1~2시간 하는 건 나쁘지 않다.
인터넷 같은 건 친구들과 놀면서 배우는 거니까.
친구들 싸이월드에 글쓰고, 게임 해보기 위해서 컴퓨터 배워서 업그레이드 하고, MP3 다운 받는 법 보면서 E-commerce나 Network이 어떤 건지 알게 된다.
메신저, 카페, Club에 가입해서 Social Network이 뭔지도 배우고.
'와이브로', '블루투스'가 뭔지 모른다고 슬퍼할 필요도 없다.
(솔직히 나도 이름만 알지, 저것들이 어떻게 동작하는 지 잘 모르겠다.)
좀 있으면 다 대중화되서 5만원짜리 장비로 나올 텐데.
그 때 자신이 필요한 장비에 필요한 기반 기능으로 내장되어 있다면
사기만 하면 그만이다.
신문 기사 IT면 일주일에 한, 두번 읽고 그런가보다 하면 남들보다 잘 하는 거다.
'옴의 법칙', '초전도체' 모른다고 전기밥솥 못 쓰는 거 아니니까.
'베르누이 원리'를 몰라도 돈만 내면 비행기 태워준다.
비행기 예매 하는 법, ticketing하는 법만 한 번 해보면 된다.
[Tech]Unix Network Programming(By Steven) 공부하기
Unix Network Programming(By Steven) 책을 보고 있으니,
어느 Kernel Hacker가 이렇게 말한다.
"TCP Stack을 보려면 Kernel부터 공부해. 뭘 이런 책을 보고 그래.
TCP, Socket structure가 어떻게 되있는 지 알아야지."
봐서 나쁠건 없지만, 내게 당장 볼 시간은 없을 것 같다.
TCP 공부하는 cost보다 지저분하고 복잡하기 그지없다는 kernel에
파묻힐 위험이 더 크다.
특히 TCP 같은 것을 처음 공부하는 학부 2~4학년생에게는 매우 힘든 주문이다.
괜히 열어봤다가 겁만먹고 좌절하기 십상이다.
(커널을 뜯어 고쳐보기도 힘들고, 컴파일도 좀 복잡한가..
부팅 안되거나 로딩 안되면 더 낭패)
Socket, File Descriptor를 왜 만들었는 지도 생각해보면
그런 복잡한 일들을 kernel에서 맡기고 쉽게 보기 위함이다.
저자가 이런 책을 쓴 이유도 수많은 좋류의 Unix Kernel들을 열어보거나
직접 써보고 Trial and Error하는 삽질없이도 빠르게 배우라고 만든 것이다.
이런 책이 없었더라면 이 정도 수준의 내용을 얻기위해
Kernel을 몇 년간 몇 대의 컴퓨터에서 돌려보고
RFC든 뉴스그룹이든 수만개의 글을 읽어야 한다.
그리고 결정적으로 세상 어떤 kernel도 표준을 완벽하게 구현하지 못하고 있고,
Kernel마다 구현이 다르기 때문에 한, 두가지 implementation에 의존하는 코드를 짜면
이식성이 떨어지고 위험하다.
학부 수업시간에 Assembly도 조금 배우기는 하지만
그 후 언어들과 비교해보고 얼마나 primitive한지 느껴보기 위함이 더 크다.
실제로 assembly 몰라도 할 수 있는 일은 충분히 많고
배워야할 다른 것들도 많다.
"영어를 공부하려면 라틴어를 먼저 배워라."
"영문법를 배우기 전에 변형생성 문법을 먼저 배우면 좋다."라는 말과 똑같다.
나중에 Kernel Hacker나 Network Device Driver쪽 일을 하게 된다면 그 때 봐야겠다.
학교 다닐 때는 그런 것을 해야만 Advanced한 개발자라고 생각했는 데,
그것 말고도 많은 길들과 많은 툴들, 많은 선택이 있다.
----------
UNP가 나오기 전에 TCP를 공부한 선배 해커의 조언이라서.
그는 자신이 공부할 때 이런 책들이 없어서 삽질을 참 많이 한 것 같다.
이 분은 Kernel 뜯고, Boot strapping 과정 개입 같은 걸 좋아하시는 데.
나는 Design Pattern, Generic Programming(Template) 같은 게 더 맘에든다.
반대로 그분은 design pattern이나 generic programming은 별 관심 없으시다.
Function call이나 inheritance, Component를 쓰면 performance가 떨어진다나..
(원래 performance를 고려하고 만든게 아니니까.)