프로그래머는 이렇게 산다
by 우하하 이글루스 피플
이글루 파인더
최근 등록된 덧글
굿잡~~~
by 가이아 at 08/28
아 님 짱임. 울컴은 왜 ..
by ㄳ at 08/17
부러워요 +_+
by jong10 at 08/16
^^// 멋지십니다!
by zest5815 at 08/16
리소스는 얼마나 먹나요?
by 이상훈 at 08/16
활용~!!
카테고리
생활의흔적
프로그래밍
컴퓨팅환경
요즘읽는책
블로그활용
공개자료실
아갖고싶다
디카작품전
즐겨서찾기
해야할일들
해보고싶은
작성중인글(비공개)
우하하실록
가보고싶은
결혼이야기
웃어보자구
영화이야기
음악이야기
부자만들기
소프트웨어
개발기록지
라이프 로그
읽고있는 책 읽고싶은 책
최근 등록된 트랙백
Doxygen 설치및 설정
by Flexible
[스크랩] 한글로 된 ..
by For Further Future!
대통령이 무엇을 하는 ..
by 네잎크로바
Mantis (버그 추적 시..
by :: bluewiz.tistory.co..
이전 블로그
2008년 09월
2008년 08월
2008년 07월
2008년 06월
2008년 05월
2008년 04월
2008년 03월
2008년 02월
2008년 01월
2007년 12월
2007년 11월
2007년 10월
2007년 09월
2007년 08월
2007년 07월
2007년 05월
2007년 03월
2007년 02월
2007년 01월
2006년 12월
2006년 11월
2006년 10월
2006년 09월
2006년 07월
2006년 06월
2006년 05월
2006년 04월
2006년 03월
2006년 02월
2006년 01월
2005년 12월
2005년 11월
2005년 10월
2005년 09월
2005년 08월
2005년 07월
2005년 06월
2005년 05월
2005년 04월
2005년 03월
2005년 02월
2005년 01월
2004년 12월
2004년 11월
2004년 09월
2004년 08월
2004년 07월
2004년 06월
2004년 05월
2004년 04월
2004년 03월
2004년 02월
2004년 01월
2003년 12월
메뉴릿


태그
NET 교통사고 모바일 개발 C mantis
rss

skin by 봉팔
누워서 읽는 알고리즘
누워서 읽는 알고리즘
임백준 지음 / 한빛미디어

책을 읽으면서 마음에 새기고자 하는 문장 정도는 밑줄을 그어가면서 읽는 것이 책을 쓴 사람에 대한 예의가 아닐까...하고 생각해본다.

그런 의미에서 이 책을 읽으면서 밑줄 그은 문장들 중에서 특히나 공감가는 부분들을 한번 정리해보았다.

"일단 구체적인 날짜를 확인해 주었으면 시간을 엄수하는 것은 직업적 프로그래머에게는 생명과 다를 바 없는 약속이다. 프로그래머는 프로그램을 잘 짜면서 시간도 잘 지키는 사람과 프로그램은 다소 서툴게 짜지만 시간은 잘 지키는 사람으로 구분할 수 있다. 시간을 제대로 지키지 못하는 사람은 아예 프로그래머라고 불릴 자격이 없다."

실제로 프로젝트를 진행하다보면 최초 결정한 예상일정보다 늦어지는 일이 비일비재한 것이 현실이다. 늦어지는 이유를 따져보면...
1. 해당 업무 이외에 투자해야 하는 시간이 당초 예상보다 훨씬 많아서.
2. 해당 업무를 소화하는데 있어서 예상외의 일(알고리즘의 비효율성, 예상할 수 없었던 문제점 발생 등)이 터져서.
3. 몸이 아파서 또는 술을 너무 많이 마셔서.
4. 소스를 통째로 날려먹는 등의 천재지변성 사고에 의해서.
등등이 있을 것이다.

그래도 프로그래머라는 직업을 자신의 천직이라고 생각하는 사람이라면 예상일정을 좀 더 현실적으로 계획하거나 계획된 예상일정은 곧 죽어도 지켜야 한다는 것이 나의 지론이다.
어쩔 수 없이 일정을 지킬 수 없게 되는 경우(이런 경우...많다) 미리 PM에게 이야기를 해서 좀 더 시간을 벌거나, 일정을 지킬 수 있는 한도까지만 업무를 해결하는 것도 하나의 방법일 것이다.
너무 완벽하게 하려하면 너무도 당연하게 예상일정을 못 지키는 사태가 속출하고 만다.

예전에 회사워크샵에 가서 어떤 동료와 설전을 벌였던 기억이 떠오른다.
완벽하게 만드는 것이 진정한 프로그래머다. 라는 주장과 완벽하게는 못하더라도 기한내에 완성할 수 있는 능력을 갖춘 것이 진정한 프로그래머의 자세다. 라는 주장의 대립이었다.

나 역시 완벽함을 추구하는 사람 중의 하나이지만 전자의 주장을 쉽게 동의할 수는 없었다.
지금에 와서는 더욱 더 후자의 주장을 설파하고 다니는 상황이다.

"아무리 간단한 코딩이라고 해도 프로그래머는 '실수'로부터 자유롭지 못한 인간이기 때문에 꼼꼼한 테스트는 '선택'이 아니라 '필수'다. 간단한 테스트를 통해서 미리 발견할 수 있었던 버그를 실제 사용자가 발견하는 것은 비용의 손실이기 이전에 프로그래머의 수치다."

그렇다. 맞다. 프로그래머의 수치다. 그런데 이런 현상이 "나도 어쩔 수 없다구" 라는 변명에 파묻혀 자꾸만 반복되면 나 자신에 대한 용서가 자연스러워지며 다른 사람들로부터도 자연스럽게 용서받을 수 있는 상황이 되어버린다. 아무렇지도 않게 용인되고 묵인되는 상황이 되다보면 프로그래머의 존재 자체는 무의미해져 버리게 된다.
프로그래머 존재의 이유는 프로그래머 스스로 만들어가야 하지 않을까라는 생각이 든다.

"실전 프로그래밍에서 발생하는 버그는 많은 경우에 특정한 알고리즘 자체가 품고 있는 논리적 결함보다는 프로그래머가 방어적 프로그래밍(defensive programming)을 게을리해서 발생하는 경우가 더 많다."

이 말 역시 크게 동감하는 부분이다. 버그는 바로 프로그래머 자신이 만드는 것이다. 따라서 버그를 줄이는 것 역시 프로그래머가 할 수 있는 부분이다.
방어적 프로그래밍 방법을 배우기 좋은 책을 추천하자면 "Writing Solid Code : 버그 안녕" 이 있다. 이 책에서는 버그를 줄일 수 있는, 그리고 버그를 빨리 발견할 수 있는 여러가지 코딩 기법들을 소개하고 있는데, 실제로 나에게 많은 도움을 주었다.

"프로젝트의 일정에 쫒기다 보면 사실 '방어적 프로그래밍'을 할 시간적 여유를 찾기 어려울 때가 많다. 하지만 그것이 습관이 된다면 결코 많은 시간이 걸리지 않을 것이다."

방어적 프로그래밍이 습관이 되어 있지 않기 때문에 그것을 습관화시키는데 드는 비용과 시간은 감수해야 한다. 말 그대로 습관을 바꾸면 그것이 습관이 되는 것이기 때문이다.

"타인의 시선을 의식하지 않고 혼자만의 코드를 작성하는 사람은 진정한 의미에서 결코 좋은 프로그래머라고 할 수 없다."

코딩 스타일에 대한 이야기이다. 나의 경우에는 가장 우선적으로 내가 읽기 편하게 코드를 작성한다. 예를 들면 (A == B) ? "yes" : "no"; 라고 쉽게 한 줄로 작성할 수 있다고 하더라도 굳이 일부러 다음과 같이 쉽게 풀어쓴다.
if (A == B)
{
    "yes";
}
else
{
    "no";
}
내가 쉬우면 다른 사람도 쉬울 확률이 크기 때문이다.

"좋은 프로그래머는 소설도 읽고, 영화도 보고, 농구도 하고, 기타도 치고, 정치 토론에도 참여하고, 연애도 하고, 술도 마시는 열정적인 사람이다. 진정한 상상력은 삶의 속살을 이해할 때 비로소 풍부해지기 때문이다."

그래서 나는 요즘 소설도 읽고, 영화도 보고, 정치 토론에도 참여하고, 연애도 하고, 술도 마시고 있다. 프로그래머는 창의성을 가진 사람이어야 하고, 창의성은 많은 것을 경험해봐야만 쉽게 이룰 수 있다고 생각하기 때문이다. 아직도 경험해봐야 할 것들은 많다.

아직 정리하지 못한 것들이 많은데, 차차 또 정리해 나가도록 하겠다.



by 우하하 | 2005/03/07 02:25 | 요즘읽는책 | 트랙백 | 덧글(2) | ▲ Top
트랙백 주소 : http://woohaha.egloos.com/tb/925718
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by bsnmjr at 2005/03/07 08:43
"방어적 프로그래밍 방법을 배우기 좋은 책을 추천하자면 이 있다." 에서 책 제목이 빠진 것 같은 데, 책 제목 좀 알려주세요. 내용이 공감이 가서 책 제목이 무척 궁금해지네요.
Commented by 우하하 at 2005/03/07 10:53
# bsnmjr님 : 방어적 프로그래밍에 대한 추천 도서이름부분을 수정해 두었습니다. ^^

:         :

:

비공개 덧글



◀ 이전 페이지 다음 페이지 ▶