Gsong's Blog

SICP 2008/10 정기모임


SICP 정기모임을 갔다 왔습니다. 참석자는 지아님, 컴키드님, 디군님, 솔리드원님, 꼬니님 그리고 저까지해서 총 6명. 체크인하면서 지난 시간 동안 어떤 일들이 있었는지 이런 저런 얘기들을 하고, 곧 이어 컴키드님이 유닛테스팅에 대한 발표를 해주셔서 그에 대한 토론이 오갔습니다. 그렇잖아도 유닛테스팅을 좀 배워서 써먹어 볼까 하는 때에 아주 큰 도움이 되는 세션이었습니다.

발표가 끝난 후 자연스레 유닛테스팅과 TDD 에 대한 토론으로 이뤄졌는데, 저는 둘 다 시도해보지 않았던 터라 질문만 했습니다. 회사 내부에서 쓰는 유닛 테스팅 프레임웍이 있을 것 같은데 한번 찾아봐야 될 것 같더군요.

그렇게 해서 어쩌다 보니 2시간이 후딱 지나가버렸네요. 시작하기 전에 한 15 분 정도를 그냥 보내고 해서 그런가 싶기도 했구요. 던킨도넛으로 자리를 옮겨서 얘기하는 시간을 가졌지만, 흐름이 끊겨서 토론의 주제가 이어지지는 않았습니다. 그래서 다음번엔 주제 토론을 압축적으로 할 수 있는 방법들 찾아서 얘기해보면 좋겠다 싶기도 했습니다.

아래는 오늘 세션중에 언급됐던 책들입니다.


실용주의 프로그래머를 위한 단위 테스트 with JUnit
데이비드 토머스 외 지음, 이용원 외 옮김/인사이트


테스트 주도 개발
켄트 벡 지음, 김창준 외 옮김/인사이트


레거시 코드 활용 전략
마이클 C. 페더스 지음, 이우영.고재한 옮김/에이콘출판

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/10/28 11:38 2008/10/28 11:38
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/448

  1. Tracked from 일일신우일신 2008/10/27 15:13 DELETE

    Subject: SICP 스터디 10월 정기모임 후기

    어김없이 10월에도 정기모임을 하고 돌아왔습니다. 지난 토요일 오후 강남에서 만났습니다. 그 동안은 오후 1시에 미리 만나서 같이 점심을 먹었었는데, 1시에 시간 맞춰 오시는 분들이 점점 줄?

  2. Tracked from 일상 혹은 이상 2008/10/27 22:32 DELETE

    Subject: SICP : 10월 정기 모임 후기

    SICP 10월 정기모임에 다녀왔다. 집에서 나올 때 하늘에 먹구름이 가득하길래 설마 비 따위가 오겠어 하며 버스에 올랐는데 서울에 도착할 무렵이 되니 비가 꽤 많이 오기 시작했다. 매 모임에

 

SICP 연습문제 풀이 2.57


(define (deriv exp var) (cond ((number? exp) 0) ((variable? exp) (if (same-variable? exp var) 1 0)) ((sum? exp) (make-sum (deriv (addend exp) var) (deriv (augend exp) var))) ((product? exp) (make-sum (make-product (multiplier exp) (deriv (multiplicand exp) var)) (make-product (deriv (multiplier exp) var) (multiplicand exp)))) ((exponentiation? exp) (make-product (exponent exp) (make-product (deriv (base exp) var) (make-exponentiation (base exp) (- (exponent exp) 1))))) (else ((error "unknown expression type -- DERIV" exp))))) (define (variable? x) (symbol? x)) (define (same-variable? v1 v2) (and (variable? v1) (variable? v2) (eq? v1 v2))) (define (make-sum a1 a2) (cond ((=number? a1 0) a2) ((=number? a2 0) a1) ((and (number? a1) (number? a2)) (+ a1 a2)) (else (list '+ a1 a2)))) (define (make-product m1 m2) (cond ((or (=number? m1 0) (=number? m2 0)) 0) ((=number? m1 1) m2) ((=number? m2 1) m1) ((and (number? m1) (number? m2)) (* m1 m2)) (else (list '* m1 m2)))) (define (sum? x) (and (pair? x) (eq? (car x) '+))) (define (addend s) (cadr s)) (define (product? x) (and (pair? x) (eq? (car x) '*))) (define (multiplier p) (cadr p)) (define (=number? exp num) (and (number? exp) (= exp num))) (define (exponentiation? x) (and (pair? x) (eq? (car x) '**))) (define (base x) (cadr x)) (define (exponent x) (caddr x)) (define (make-exponentiation base exponent) (cond ((=number? exponent 0) 1) ((=number? exponent 1) base) ((and (number? exponent) (number? base)) (fast-exp base exponent)) (else (list '** base exponent)))) (define (fast-expt b n) (cond ((= n 0) 1) ((even? n) (square (fast-expt b (/ n 2)))) (else (* b (fast-expt b (- n 1)))))) (define (square x) (* x x)) ;Solution 2.57 (define (augend s) (if (null? (cdddr s)) (caddr s) (cons '+ (cddr s)))) (define (multiplicand p) (if (null? (cdddr p)) (caddr p) (cons '* (cddr p))))
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/10/12 18:03 2008/10/12 18:03
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/443

 

SICP 연습문제 풀이 2.56


(define (deriv exp var) (cond ((number? exp) 0) ((variable? exp) (if (same-variable? exp var) 1 0)) ((sum? exp) (make-sum (deriv (addend exp) var) (deriv (augend exp) var))) ((product? exp) (make-sum (make-product (multiplier exp) (deriv (multiplicand exp) var)) (make-product (deriv (multiplier exp) var) (multiplicand exp)))) ((exponentiation? exp) (make-product (exponent exp) (make-product (deriv (base exp) var) (make-exponentiation (base exp) (- (exponent exp) 1))))) (else (error "unknown expression type -- DERIV" exp)))) (define (variable? x) (symbol? x)) (define (same-variable? v1 v2) (and (variable? v1) (variable? v2) (eq? v1 v2))) (define (make-sum a1 a2) (list '+ a1 a2)) (define (make-product m1 m2) (list '* m1 m2)) (define (sum? x) (and (pair? x) (eq? (car x) '+))) (define (addend s) (cadr s)) (define (augend s) (caddr s)) (define (product? x) (and (pair? x) (eq? (car x) '*))) (define (multiplier p) (cadr p)) (define (multiplicand p) (caddr p)) (define (=number? exp num) (and (number? exp) (= exp num))) ;Solution (define (exponentiation? x) (and (pair? x) (eq? (car x) '**))) (define (base x) (cadr x)) (define (exponent x) (caddr x)) (define (make-exponentiation base exponent) (cond ((=number? exponent 0) 1) ((=number? exponent 1) base) ((and (number? exponent) (number? base)) (fast-exp base exponent)) (else (list '** base exponent)))) (define (fast-expt b n) (cond ((= n 0) 1) ((even? n) (square (fast-expt b (/ n 2)))) (else (* b (fast-expt b (- n 1)))))) (define (square x) (* x x))
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/10/12 18:02 2008/10/12 18:02
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/444

 

SICP 연습문제풀이 2.42


;2.42 (define (queens board-size) (define (queen-cols k) (if (= k 0) (list empty-board) (filter (lambda (positions) (safe? k positions)) (flatmap (lambda (rest-of-queens) (map (lambda (new-row) (adjoin-position new-row k rest-of-queens)) (enumerate-interval 1 board-size))) (queen-cols (- k 1)))))) (queen-cols board-size)) (define (flatmap proc seq) (accumulate append nil (map proc seq))) (define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) (define nil (list)) (define (filter predicate sequence) (cond ((null? sequence) nil) ((predicate (car sequence)) (cons (car sequence) (filter predicate (cdr sequence)))) (else (filter predicate (cdr sequence))))) (define (enumerate-interval low high) (if (> low high) nil (cons low (enumerate-interval (+ low 1) high)))) ;Solution (define empty-board (list)) (define (adjoin-position new-row k rest-of-queens) (append rest-of-queens (list new-row))) (define (safe? k position) (define (iter col i) (cond ((= i k) #t) ((and (SafeCol? position (- k i) col) (SafeCol? position (- k i) (+ col i)) (SafeCol? position (- k i) (- col i))) (iter col (+ i 1))) (else #f))) (iter (colValue k position) 1)) (define (colValue k position) (if (= k 1) (car position) (colValue (- k 1) (cdr position)))) (define (SafeCol? position checkcol col) (not (= col (colValue checkcol position))))
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/10/04 13:58 2008/10/04 13:58
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/435

 

SICP 연습문제풀이 2.39


(define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) (define fold-right accumulate) (define (fold-left op initial sequence) (define (iter result rest) (if (null? rest) result (iter (op result (car rest)) (cdr rest)))) (iter initial sequence)) (define nil (list)) (define (reverse_ sequence) (fold-right solution nil sequence)) (define (reverse_2 sequence) (fold-left solution2 nil sequence)) (define solution (lambda (x y) (append y (list x)))) (define solution2 (lambda (x y) (cons y x))) 'test result > (reverse (list 1 2 3 4 5)) (5 4 3 2 1) > (reverse_ (list 1 2 3 4 5)) (5 4 3 2 1) > (reverse_2 (list 1 2 3 4 5)) (5 4 3 2 1) >
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/09/30 22:09 2008/09/30 22:09
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/434

 

SICP 연습문제 풀이 2.6


(define zero (lambda (f) (lambda (x) x))) (define (add-1 n) (lambda (f) (lambda (x) (f ((n f) x))))) (define one (lambda (f) (lambda (x) (f x)))) (define (plus a b) (lambda (f) (lambda (x) ((b f) ((a f) x))))) (define (test n int) (equal? int ((n (lambda (x) (+ x 1))) 0))) ' test result > (test zero 0) #t > (test one 1) #t > (test (add-1 zero) 1) #t > (test (plus zero zero) 0) #t > (test (plus zero one) 1) #t > (test (plus one one) 2) #t > (test (plus one (plus one one)) 3) #t >
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/09/30 21:42 2008/09/30 21:42
top

미투데이로 한마디트위터로 한마디페이스북에 한마디

TRACKBACK ADDRESS :: http://www.gsong.pe.kr/tc/trackback/433