분류 전체보기
-
창의적인 일을 찾지 말고 창의적으로 일을 하라.Leader/Developer Leading 2014. 3. 31. 13:56
창의성은 평소에 행하는 삶의 태도이다. 즉, 다른 먼 곳의 이야기가 아니라는 것이다. 평소에 삶과 가까운 것을 개선하는데 노력해보자. 창의성에 대한 사전적 정의는 "새롭고 남다른 것을 생각해내는 성질"이다. 풀어서 설명하자면, 관습적이고 상투적인 생각에서 벗어나서 새로운 사고를 하는 것이다. 개발자들은 반복적인 회사 업무에 싫증을 느끼며 개발자 천국이라고 알려진 회사를 동경한다. 몸은 지금의 회사에 있지만 마음은 이미 동경하는 회사에 있다. 회사 업무는 배울 것이 없고 창의력을 갈아먹는 일이라 여기고 설계나 코드 품질 등을 적당히 수준에서 타협하고 끝마친다. 당신은 여러가지 핑계를 대며 현재의 업무에서 그것을 발휘하지 않고 있다. 다른 멋진 회사나 팀을 동경하고 상상하고 있다. 누군가 만들어 놓은 창의적..
-
프로젝트 초반에 완벽한 설계에 공들이 필요가 없는 이유Programmer/Etc 2014. 3. 19. 10:38
프로젝트 초반에 설계에 많은 시간과 공을 들이는 것에 대해서 부정적으로 생각한다. 혹시나 오해하는 분이 계실까봐서 미리 말하자면, 설계가 필요없다는 것은 아니다. 프로젝트의 과정을 간단히 말하면 "설계-구현-테스트"의 반복이며 각각의 비중은 같다. 즉, 설계와 테스트의 단계 역시 구현과 동일하게 중요하다. 하지만, 아래 설명할 몇가지 이유로 프로젝트 초반에 설계를 결정지으려고 하기보다는, 프로젝트 초반에는 대략적인 스케치로 시작해서 프로젝트 전반에 걸쳐 반복 작업을 통해서 구체화하여야한다. 프로젝트 전반에 걸쳐서 설계는 수시로 변할 수 밖에 없다. 그 이유를 몇가지 나열하자면, 프로젝트를 수행하면서 프로젝트에 대한 이해가 넓고 깊어진다. 프로젝트의 배경 지식과 더불어 개발의 지식과 경험도 늘어간다. 프로..
-
간단한 데이타베이스를 TDD 로 개발하기 소스 코드Programmer/Programming 2014. 3. 19. 10:04
아래는 간단한 데이타베이스를 TDD로 개발하기의 최종 결과물이다. cd-db.lisp (defpackage :cd-db (:use :common-lisp) (:export #:dump-db #:drop-db #:make-record #:add-record #:save-db #:load-db #:where #:select #:update #:make-comparison-expr #:make-comparisons-list #:delete-records)) (in-package :cd-db) (defvar *db* nil) (defun dump-db () *db*) (defun drop-db () (setf *db* nil)) (defun make-record (title artist rating ripped..
-
간단한 데이타베이스를 TDD 로 개발하기 3회: add-recordProgrammer/Programming 2014. 3. 19. 10:02
이번 강의에서는 CD 레코드를 DB에 추가하는 함수 add-record를 개발한다. 이 함수는 인자로 CD 레코드를 받는다. 비어있는 DB에 add-record로 레코드를 추가하면, (add-record (make-cd "Home" "Dixie Chicks" 9 t)) dump-db는 다음과 같은 결과를 출력한다. '((:title "Home" :artist "Dixie Chicks" :rating 9 :ripped t)) 1차 테스트의 구현과 통과는 쉽고 간단함으로 빠르게 진행하자. (define-test add-record-test (add-record (make-cd "Home" "Dixie Chicks" 9 t)) (assert-equal '((:title "Home" :artist "Dixie ..
-
간단한 데이타베이스를 TDD 로 개발하기 2회: make-cdProgrammer/Programming 2014. 3. 19. 09:57
이번에는 CD의 레코드를 만드는 함수를 만들어보자. 함수의 이름은 make-cd이며 인자로 제목, 아티스트, 순위, 리핑 여부를 전달한다. (make-cd "Home" "Dixie Chicks" 9 t) 반환값은 이전 강의에서 언급한 속성 리스트를 출력한다. (:title "Home" :artist "Dixie Chicks" :rating 9 :ripped t) 우리가 예상하는 동작을 토대로 테스트를 작성하자. (define-test make-cd-test (assert-equal '(:title "Home" :artist "Dixie Chicks" :rating 9 :ripped t) (make-cd "Home" "Dixie Chicks" 9 t))) 우선 가장 단순한 방법으로 위 테스트를 통과시키자...
-
간단한 데이타베이스를 TDD 로 개발하기 1회: dump-dbProgrammer/Programming 2014. 3. 19. 09:47
앞으로 몇번에 걸쳐서 연재할 내용은 Peter Seibel가 쓴 “Practical Common Lisp” 중에 3장 “A Simple Database”를 테스트 주도 개발(Test-Driven Development: TDD)로 재구성한 것이다. 책과 비교해서 프로그램의 작성 순서만 달리할 뿐 소스는 책의 것과 같다. 이번 연재에는 테스트 프레임워크로 lisp-unit을 이용한다 CD 데이타베이스인 cd-db 패키지와 테스트가 있는 cd-tests 패키지로 분리하여 개발을 시작한다. (defpackage :cd-db (:use :common-lisp) (:export #:dump-db)) (in-package :cd-db) (defpackage :cd-tests (:use :common-lisp :lis..
-
국내에서 IPv6 주소를 접하기 어려운 이유Programmer/Computer Science 2014. 3. 14. 15:51
IPv4의 주소 고갈 문제, IPv6의 전환, IPv6와 멀티미디어 데이타의 증가 등의 얘기가 나온지 꽤 오래되었다. 사실 이미 IANA(Internet Assigned Numbers Authority)에서의 할당은 더 이상 없는 상태다. 관련 종사자들은 이미 “왜?”라는 필요성에 대해서는 공감대의 형성은 지났고 지금은 “어떻게?”라는 IPv6로의 전환 방법에 대해서 연구하고 있다. 그런데, 인터넷 콘텐트 전송 서비스를 개발하고 서비스하는 사람으로써 IPv6을 전혀 체감하지 못하고 있다. 개똥이네 금송아지 얘기를 듣는 기분이다. 뭔가 굉장한 것이 있다고는 하는데, 한번도 본적이 없다. 그러면서 개똥이는 자기네 금송아지를 볼 준비를 하라한다. 즉, 실제 서비스 운영에서는 그것의 그림자도 본적이 없는데, 개..
-
현상을 분석하여 문제의 원인을 찾아내라Programmer/Programming 2013. 11. 12. 17:46
현상을 재현하고 로그를 세심하게 살펴보고 필요하면 다른 도구(디버거, 성능 분석 도구 등)를 사용해서 분석한 후에 문제의 원인을 밝혀야 한다. 대충 추론하고 수정하여 적용한 뒤에 결과를 보는 방법은 생각보다 효과적이지 못하다. 소스를 공개하지 않은 상용 소프트웨어의 파일 읽기 플러그인을 개발하였다. 지금까지 탈없이 잘 쓰고 있었는데, 최근에 시스템에 문제가 생기면 플러그인과 상관없는 부분에서 행(hang)이 걸리는 문제가 발생하었다. 처음에는 문제의 원인을 추측하고 수정하고 검증하는 것을 반복하는 방법으로 접근하였다. 문제는 직감에 기반한 추론은 확율이 떨어졌다. 검증할때마다 여전히 문제가 발생하여, 수정과 검증의 과정을 여러번 반복해야 했다. 검증 과정을 준비하고 결과를 분석하는데도 상당한 시간이 들었..