태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

'SICP'에 해당되는 글 18건

  1. 2011.09.03 An introduction into SICP (6)
  2. 2011.07.13 Reading: How To Design Programs(HTDP)
  3. 2011.04.27 SICP study: 근황 (3)
  4. 2009.12.01 SICP 근황 (8)
  5. 2009.01.21 Parameter vs Argument (3)
  6. 2008.10.26 후기: SICP 스터디모임 10월 정모 (4)
  7. 2008.09.30 SICP 스터디모임 9월 정모 늦은 후기 (6)
  8. 2008.08.01 투명 필름 문제(Scheme) (4)
  9. 2008.07.29 SICP 스터디 7월 정모 (5)
  10. 2008.07.20 주말 된장짓(?) - 던킨 망고츄이스티 맛있다! +_+
  11. 2008.07.06 7월 5일, 촛불집회 다녀왔슴다 (6)
  12. 2008.06.15 후기: SICP 스터디 모임 6월(+5월) 정모 (5)
  13. 2008.04.26 SICP 스터디 모임 4월 정기모임 (3)
  14. 2008.03.27 SICP 스터디 모임 늦은 후기 (4)
  15. 2008.02.23 지름: SICP (8)
  16. 2007.11.15 Nonnegative integers without numbers
  17. 2007.11.05 Fibo2 ... (3)
  18. 2007.11.02 Fib(n) = Fib(n-1) + Fib(n-2), Fib(1) = Fib(2) = 1 (4)

An introduction into SICP

Daily life/Hard study 2011.09.03 21:37
SICP는 Structure and Interpretation of Computer Programs 의 약자다. 마법사 책(wizard book)으로도 알려져 있으며, 한때(지금도?) MIT에서 1학년들에게 가르쳤다고 한다. 해커를 동경하거나, 이미 해커이거나, 해커가 되어가고 있는 사람들이라면 LISP의 한 방언인 Scheme의 존재는 알고 있을테고, scheme을 언급할 때 함께 튀어나올 수 밖에 없는 책으로 해커 문화와 뗄 수 없을 것 같... 다고 마음대로 생각한다.

유명세에 비해서 완독한 사람은 생각보다 많지 않은데, 책의 난이도가 - 혹은 읽는데 드는 잉여력이 - 꽤 높기 때문이다. 프로그래밍 스킬과는 별도로 체계적이고 논리적인 사고, 적절한 추상화 능력, 2차 이상의 Higher order 를 상상할 수 있는 능력 그리고 어느 정도의 하드웨어 지식을 요구한다. 거꾸로, 이 책에서 주려는 것이 저런 능력이기 때문에 잉여력만 충분하면 읽으며 깨달아가도 된다. 이런 경우까지 고려하여 이 책을 읽기 위한 최소한의 요구사항은 끈기Scheme 코드를 돌려볼 수 있는 환경이다.

책은 총 5개의 챕터로 구성되어 있으며, 각각

1. Building abstractions with procedures
2. Building abstractions with data
3. Modularity, Objects and State
4. Metalinguistic abstraction
5. Computing with register machines

이런 제목을 가지고 있다. 각 챕터에 대한 간략한 소개를 하자면,

1장:
 스킴의 기본적인 문법부터 시작한다. 프로시져-그러니까, 그냥 함수라고 하자-를 만들고 사용하는 연습을 주로 한다. 만들어진 프로시져 여러개를 조합해서 Compound procedure 를 만들면서 Building block을 쌓는게 이런거구나 느껴보게 된다. 그리고 장 말미에 Procedure 를 만드는 Procedure 를 만드는 Procedure ... 같은 Higher order procedure 의 맛을 좀 보게 된다.

2장:
 1장의 연결이라는 느낌이다. 1장에서 다룬 프로시져 사이를 넘나드는 "데이터"를 조명한다. 그리고, 프로시져와 데이터를 엮어 인터페이스의 생성 - 즉 추상화 배리어가 어떤 의미를 가지는지에 대해서 구구절절 설명하고 실습하게 된다. 그리고 Data-directed programming 이라는 짓을 하게 되는데, 이 부분은 Object-oriented 쪽의 정수와 맞닿아 있다. 거의 타입 시스템과 Message-passing 시스템을 직접 구현해 올리게 되는 (꽤) 놀라운 체험을 하게 된다.

3장:
 1, 2장까지의 Scheme 은 순수한 함수형 언어였다. 모든 프로시저는 referential transparency 를 가지고 있었다. 여기부턴 안그렇다. 시간에 따라 변화하는 상태가 등장하기 시작하며 머리가 조금 아파지기 시작한다. 기초적인 concurrency 에 대한 개념, 따라오는 문제, 이런 문제를 다루는 방법 등에 대해 맛을 볼 수 있다. (미친듯한 회로 시뮬레이션-_-) 그리고 3장 마지막에 나오는 stream - 사실 3장의 핵심은 이거다. Stream이 무엇인가? 어떻게 동작하는가? 에 대한 설명을 하며 다음 장에 본격적으로 등장할 Lazy evaluation 을 준비시킨다.

4장:
 책의 주제가 슬슬 드러나기(난이도가 급상승하기) 시작하는 곳이다. 책 표지에 왜 Apply-Eval 이 있을까? 에 대한 답이 시작된다. 우리는 스킴으로 스킴 코드를 실행시키는 인터프리터를 만들게 된다. 그 와중에 깨알같은 최적화들이 나오게 되고, 일반적인 인터프리터나 컴파일러가 이런 짓을 하겠구나 - 싶은 영감을 좀 얻을 수도 있다. 특히, Evaluator 를 만들고 여기에 Lazy-evaluation 을 적용시키는 작업을 직접 해보면, 꽤 많은 걸 느껴볼 수 있게 된다. 앞에서 주구장창 이야기했던 추상화의 소중함이랄까 ... 그리고, 뒤쪽 두 개의 소챕터는 amb로 설명되는 nondeterministic computing과, logic programming이 어떻게 구현될 수 있는지 맛보기를 보여준다. (STREAM!) 텍스트가 아이디어->구체화->코드, 의 과정을 설명하고 있는데 읽고 나면 간단해 보이지만, 책을 덮고 직접 그 길을 따라가 보면 이 책을 쓴 사람들이 얼마나 미친 내공의 소유자들인지 깨닫게 된다. ...

5장:
 4장에서 우리는 소프트웨어 세상의 끝을 보았다. 4장에서 코드를 실행시키는 코드를(Metacircular) 만들었으니까... 이제 한 단계 아래로 내려간다. Higher order이기 때문에 주의해서 읽어야 한다. 우리는 일반적인 가상의 기계어를 정의한 후에, 이 기계어를 시뮬레이션 하는 스킴 코드를 만들고, 이 기계어로 스킴 실행기를 만들어서, 기계어로 만들어진 스킴 실행기에 스킴 코드를 넣어 실행하는 시뮬레이션을 한다. 그리고 나서, 이번엔 실행기가 아니라 스킴 코드를 우리가 정의한 기계어로 컴파일하는 컴파일러를 만든다. 인터프리터와 컴파일러가 어떻게 다른지, 컴파일러가 만든 코드가 인터프리터에 비해 어떤 최적화를 더 할 수 있어서 빠른건지를 이해할 수 있게 된다. 연습문제들이 앞 3, 4 장에서 만들었던 유틸리티 코드를 많이 재사용하기 때문에 앞 장을 대강 읽었거나 문제를 하나도 안풀고 그냥 넘어왔다면 5장에서 능욕당하게 된다.
 
텍스트와 함께 많은 수의 연습문제들이 배치되어 있는데, 이 책을 제대로 읽은 사람들이 하나같이 "연습문제를 풀어보지 않으면 읽었다고 말할 수 없다"고 이야기한다는 점에 주목할 필요가 있다. 위에서 말한 완독이라는 표현은, 연습문제를 풀어보았다 - 라고 말할 정도를 뜻한다. 참고로 나는 모든 문제를 풀어본 상태는 아니고, 모든 문제에 대해 풀이를 시도해본 정도이다. 몇몇 난이도가 미친듯한(혹은 잉여력 스카우터를 폭발시킬듯한) 문제를 제외하고는 대부분 풀긴 했다. ... 사실 연습문제를 풀지 않으면, 끝까지 읽는게 불가능할지도 모르겠다. 이런 부분이 많지는 않지만, 앞쪽 연습문제에서 다룬 내용을 뒤쪽 텍스트에서 당연하다는 듯이 사용하고 있으니까.

나같은 경우에는, 연습문제를 풀면서 많이 배웠다. 진짜로, 많이. 원래 훌륭한 사람이라면 나만큼 많이 배울게 없을수도 있긴 하다. 어쨌거나 텍스트만 읽을 때 보다 연습문제까지 풀었을 때에 얻을 수 있는게 훠어어얼씬 많다는 것은 확실하다.

이 책을 읽을, 연습문제를 풀 사람들에게 줄 만한 조언은,

1. 1장, 2장은 뒤쪽을 위한 몸풀기다. 여기서 어려움을 느끼면 곤란하기 때문에, 책을 읽으며 순서대로 문제를 풀려는 생각은 버리고 책을 빠르게 여러번 읽으며 내용을 씹어먹으며 연습문제를 푸는게 좋을 것 같다.

2. 3장부터는 바로 실행해보기 귀찮거나 어려운 녀석들이 등장한다. 특히 stream 관련해서 텍스트에 있는 내용이나 연습문제를 돌려보기가 까다로운 경우가 있다. 일단, 스트림 관련 코드가 나오면 sicp 홈페이지에서 코드를 구하던가 아니면 문제는 스킵하고 텍스트에 있는 코드를 먼저 입력해서 "실행해볼 수 있는" 환경을 만든 후에 문제를 푸는게 좋다. 실행 환경을 먼저 만드는 것은, 이 후 책 끝까지 언제나 중요하다. 

3. 일단 풀어보거나, 혹은 구체적인 접근 방법을 떠올리기 전에 다른 사람의 풀이를 보지 않는다.

4. 삽질 기록을 어딘가(연습장이나 위키, 그 외 어디라도) 정리해 가기를 강추. 코드도 함께 남기면 나중에 앞 장의 코드나 풀이 기록이 필요할 때(4장부터는 앞쪽을 다시 읽어보게 되는 경우가 많다) 큰 도움이 된다. 나중에 앞을 다시 봤는데 기억이 안나고 기록도 없으면 책을 다시 읽고, 연습문제를 다시 풀어야 할지도 모른다.

5. 직접 만들어도 되고 있는 것을 써도 되는데, 테스트 코드 작성을 추천. 1, 2, 3장까지는 특히나 엄청나게 매우매우 유용하다. 나는 컴키드님 자작 테스트 툴을 썼는데 큰 도움이 되었다. 4장 이후로는 테스트가 곤란한 것들이 많아서 유명무실 ...

6. Pencil & Paper 를 항상 가까이에. 

특히 실행 환경 구성이 꽤 시간을 많이 잡아먹고, 우리를 지치게 하는 부분이다. SICP와 함께 자주 거론되는 책으로 HTDP(How To Design Programs)가 있는데, 이 책 저자들은 SICP를 타산지석 삼아서 - 실제로 SICP의 악명으로부터 HTDP가 나왔다고도 한다 - HTDP에서는 테스트해볼 수 있는 환경 구축에 신경을 매우 많이 썼다. 심지어 SICP 연습문제 풀이에도 MIT Scheme 보다 Dr.Racket(PLT Scheme) 이 더 나을 정도.

SICP를 씹어먹고 나면 CS, 혹은 프로그래밍 세계에서 자주 나오는 여러가지 개념들에 대해 보다 깊은 이해를 할 수 있게 된다. 왜냐, 거의 대부분의 주제를 (기초적인 수준이지만) from scratch 로 삽을 떠 보기 때문에 ...

몇 년째 SICP를 읽고 문제를 풀고 있다고 하면 재귀나, 고차함수 같은거 실제 필드에서는 쓸일 없는데 알아서 뭐하냐, 라는 태클이 간간히 들어오기도 했다. 여기에 대해 답을 하자면 재귀, 고차함수 이런게 실제로 프로덕션 코드에 쓰이는 일이 있는지 없는지 나야 잘 모르지만, 그게 중요한 게 아니다. 중요한 것은 생각의 도구/단위를 얻는 것이다. GOF 디자인 패턴 책에 설명된 패턴 중 상당수가, 함수가 1차 객체인 많은 언어들에서는 큰 의미가 없어진다. 언어의 패러다임을 이해하고 적절한 개념을 갖추고 있는 일반적인 개발자에게는 너무 당연한 스킬이라서. 자바에서 몇백 라인에 걸쳐 십수개의 클래스를 정의해가며 구현한 패턴들이 파이썬이나 루비, 루아 혹은 스킴에서는 단 몇 줄로(가끔은 One-liner)해결되는 경우가 꽤나 많다.

적절한 개념을 탑재하고 있으면, 적절한 개념이 지원되는 언어로 적절한 코드를 만들 수 있다. 그 개념이 자연스럽게 지원되지 않는 언어라면, 그 개념을 흉내내는 바탕을 깔(배운 용어를 써보자면, 추상화 단계를 만들) 수 있다. 이런 삽질들이 모여서 새 언어가 만들어지고, 기존 언어의 스펙이 확장되고, 여러가지 프레임웍들이 생겨나는 것이다.

문법을 알고 있는 아무 언어나 골라서, 이 언어로 쓰여진 규모 있는 오픈 소스 프로젝트의 저장소를 하나 받아와보자. 언어의 문법을 알고 있는 사람이라면 누구나 이 코드를 읽을 수 있다. 하지만 언어의 문법을 알아도 1년동안 이 프로젝트의 코드베이스를 이해하지 못하는 사람이 있는 반면, 몇 시간이면 대강의 구조를 파악하고 재미삼아 코드 수정까지 하는 사람이 있다. 코드 한 줄 한 줄이 모여 만들어내는 보다 큰 논리단위의 구성을 읽는 능력의 차이인데, 다른 말로 일반적으로 쓰이는 추상화 블럭들을 읽어내는 능력이다. 한 권의 책 치고, SICP가 커버하는 프로그래밍의 핵심 블럭들은 굉장히 넓은 범위에 분포되어 있으며, 아마 자주 쓰이는 대부분의 개념에 대해 맛을 볼 수 있으리라 생각한다.

SICP를 읽으면 뭘 할 수 있게 되요? 혹은 어떤 내공이 쌓여요? 라고 묻는다면, 간단하게 이렇게 대답하련다. 코드 말고 프로젝트 단위의 읽고 쓰기를 위한 내공을 조금 얻을 수 있다고. 물론, 이 책 말고 다른 곳에서도 얻을 수 있다. 얻어야 하는 것이 무엇이건 간에 도달하는 방법은 여러가지일 수 있다는게 이 책의 중요 포인트 아니던가.

'Daily life > Hard study' 카테고리의 다른 글

도깨비(tokebi) 더미 API  (5) 2012.07.12
2012/07/05: Hello world in xcode  (5) 2012.07.05
An introduction into SICP  (6) 2011.09.03
Reading: How To Design Programs(HTDP)  (0) 2011.07.13
D 프로그래밍 언어 - 오타(?)  (3) 2011.05.12
SICP study: 근황  (3) 2011.04.27
tags : SICP, 리뷰, 추상화
Trackbacks 1 : Comments 6

Reading: How To Design Programs(HTDP)

Daily life/Hard study 2011.07.13 21:52
SICP와 자주 비교되곤 하는 HTDP를 읽으며 천천히 문제 풀이 중이다.

확실히 SICP보다는 좀 더 상냥한 책이다. SICP를 읽으며 항상 아쉬웠던 부분인 "코드를 실행해 볼 수가 없어!" 라는 포인트를 정확하게 짚어내어 공략했다. 언어에 따라가는 Dr. Racket 이라는 개발 환경에서 Teach-pack 이라는 개념으로 대부분의 예제/문제 코드를 GUI 까지 있는 상황에서 실행해볼 수 있다. 그리고 다루는 주제들이 SICP보다 훨씬 평이하다. SICP에서 Newton method, Fixed-point 이런걸 보며 떡실신한 사람이 꽤 있는데(그 중 1인), 여기서는 비슷한 곳에서(책의 백분위 위치로 볼때) 숫자 맞추기 게임 정도의 예를 사용한다.

당연하다면 당연한데, 단점으로는 too verbose, too slow 라는 느낌. 열심히 공부해야지! 하며 불타오르지 않는... 다지만, 그건 SICP 를 몇년째 계속 보고 있어서 그렇게 느껴지는걸지도 모르겠다. ㅠㅠ

밀당같은거 하지 말고 입문자를 확실히 잡기 위해서라면 HTDP 를 먼저 읽게 하는게 나을 것 같다는 생각이 든다.

뭐랄까, 경시대회나 올림피아드를 준비하고 싶어? 그럼 SICP를 보렴. 내신/수능 성적을 위한거라면 HTDP 를 보렴. 이런 느낌이랄까? 절반 이상 읽고 나면 SICP 와 다시 한번 비교하는 글을 써 봐야지.

'Daily life > Hard study' 카테고리의 다른 글

2012/07/05: Hello world in xcode  (5) 2012.07.05
An introduction into SICP  (6) 2011.09.03
Reading: How To Design Programs(HTDP)  (0) 2011.07.13
D 프로그래밍 언어 - 오타(?)  (3) 2011.05.12
SICP study: 근황  (3) 2011.04.27
예술의 전당 수묵화반, 전시회 준비  (3) 2010.10.21
Trackbacks 0 : Comments 0

SICP study: 근황

Daily life/Hard study 2011.04.27 00:48

http://mitpress.mit.edu/sicp/full-text/book/book.html

이제 4년차다. 슈레인은 뭐 그리 느리냐고 줄창 까대지만, 흔들리지 않고 꿋꿋하고 느긋하고 여유있게 나가고 있다. 본래 우리 스터디의 수장이신 지아님의 뜻이 널럴하고 오래가는 스터디 아니었던가!

대강 훑어서 읽은 걸로는 수십번을 읽었고, 문제를 풀면서 뒤적뒤적, 앞에 했던거 기억이 안나서 돌아가 다시보기, 뒤에 나오는걸 미리 가져다 쓴다고 하면 뒤에 가서 보고 오기 ...

이제 5.1장을 막 덮었다. 괄호 범벅인 코드로 어셈코드와 이걸 해석하는 어셈블러, 레지스터 머신을 만들고 있으니 기분이 묘해진다.

여기까지 모든 문제를 다 푼 건 아니다. 내맘대로 스킵한 것도 있고, 풀고 정리하지 않은 것도 있긴 하지만 - 적어도 모든 문제를 다 읽었다고는 말할 수 있다. 풀지 못했거나, 잘못된 풀이를 내놓았더라도 문제가 무엇을 물어보는지, 무엇을 알아야 풀 수 있는지, 내가 어떤 시도를 했었는지에 대해서는 말할 수 있다는 정도?

아무래도 여름 즈음에는 일단 끝까지 다 볼 것 같다. (이후엔 HTDP를 좀 볼까 ... 생각중)

그러니 이제 슬슬 회고: 이 책이 나를 어떻게 바꿨는지, 내가 SICP를 읽으면서 어떤 성장을 했는지, 혹은 문제를 푸나 안푸나 별 차이 없었을지 - 에 대해서 정리 준비를 해야 하는데, 잘 모르겠다. 으앍 ㅋ 가장 크게 느껴지는건 꾸준히 공부하는 습관을 들인거, 스터디 멤버(대표적으로 지아대장님을 비롯한 컴키드님, 지송님, 솔리드원님, 야라님, 그리고 스쳐지나가셨던 모든 분들 + 옆 스터디(응?) 멤버들 ㅋㅋㅋ)들과 친해진 거 두가지인데, 사실 얘네들은 SICP와는 직접적인 관계가 없으니까 빼고 ... ... ...

분명 내가 몇년이나 질질 끌면서 이 책을 읽고 문제를 깨작거린 이유가 있을텐데, 이걸 깔끔하게 정리해야 한다. 그래야 다른 사람한테 추천할 수 있겠지?

으으, 고민해보자.

-----

http://wiki.dgoon.net/doku.php?id=sicp:structureandinterpretationofcomputerprograms
http://code.sicp.or.kr
http://wiki.sicp.or.kr

어쩌다보니 sicp.or.kr 을 내가 들고 있다. ( ... )
Trackbacks 0 : Comments 3

SICP 근황

Tech 2009.12.01 20:47
3장 연습문제를 풀다가, 스트림이라는 아이가 나왔다.

cons-stream, delay 등등을 "이렇게 동작해" 라면서 코드를 보여주는데, 얘네들이 보여주는 코드를 가지고 문제를 풀면 스트림이 스트림이 아니게 된다.

(stream-enuerate-interval 0 100000)

이런걸 만들면, 만드는 순간 모두 evaluation 되어 버리는 것. 그 이유는,


여기 각주에 있음. 요는 cons-stream, delay 가 Special form 이 아니라 Function 이면 방법당한다는 것. 천천히 코드를 따라가 보면 당연하다. 책에서 주는 정의대로 하면 스트림이 부지런해져서 만들어지는 순간 끝까지 다 생긴다규 ㅠㅠ

mit-scheme 에는 빌트인으로 cons-stream 이 있어서 이걸 써서 하면 제대로 동작한다. PLT-scheme 에서도 뭔가 할 수 있긴 한것 같은데, 그건 컴키드님이 찾아서 메일링 리스트에 공유해주실 듯.

아 짱나 =3=3

Add:
PLT-Scheme 에서,
  1. 언어를 "Module" 로
  2. 소스코드 맨 위에 "#lang planet neil/sicp" 를 한줄 넣는다
실행하면 뭔가 받아와서 설치함. ... SICP 연습문제들 돌릴 수 있음. ... 책에 정의된 cons-stream, delay 를 쓰고 있다면 지우자. 뒤쪽 infinite-stream 에서 방법(무한시간+공간)당한다.

'Tech' 카테고리의 다른 글

git/git-svn on working machine  (2) 2009.12.17
Links on xml and related techs  (1) 2009.12.09
SICP 근황  (8) 2009.12.01
django 삽질  (3) 2009.11.19
CUDA Driver/Toolkit/SDK 설치하기 (Ubuntu 9.04 Jaunty)  (2) 2009.09.17
Parameter vs Argument  (3) 2009.01.21
Trackbacks 0 : Comments 8

Parameter vs Argument

Tech 2009.01.21 22:44
파라미터, 아규먼트 - 보통 구분하지 않고 사용하는 단어였다. 그런데 어제 SICP 스터디 소모임에서 누군가가 질문들 던졌다.

Parameter와 Argument의 차이가 뭐죠?

... 결국 위키에서 (나름) 깔끔하게 설명된 문서를 찾았다.

몇몇 문장만 뽑아서 대충 번역해보면,

A parameter represents a value that the procedure expects you to supply when you call it. The procedure's declaration defines its parameters.

Parameter는 당신이 프로시져를 호출할 때 함께 함께 주었으리라고 기대하는 값을 의미한다. 프로시져 선언에서 Parameter를 정의하게 된다.

An argument represents the value you supply to a procedure parameter when you call the procedure. The calling code supplies the arguments when it calls the procedure. The part of the procedure call that specifies the arguments is called the argument list.

Argument는 당신이 프로시져를 호출 할 때 Parameter에 전달하는 값을 의미한다. 호출하는 쪽의 코드에서 프로시져를 부를 때 Argument를 넘긴다. 프로시져 호출에서 Argument를 지정하는 부분을 Argument list라고 한다.

 In practice, distinguishing between the two terms is usually unnecessary in order to use them correctly or communicate their use to other programmers
실제적으로, 이 용어들을 구분하는 것은 올바른 사용이라던가 다른 프로그래머들에게 그 용도를 전달하는 것 등에 별로 필요하지 않다.

the words actual and formal can be used to distinguish between an argument and a parameter, respectively. For example, the equivalent terms actual argument and actual parameter may be used instead of argument; and formal argument and formal parameter may be used instead of parameter.

actual 과 formal 이라는 단어가 argument, parameter 를 구분하는데 쓰일 수 있다. 예를 들어, actual argument, actual parameter 라는 용어를 argument 대신 쓸 수 있다. 그리고 Formal argument, formal parameter 라는 단어를 parameter 대신 쓸 수 있다.


이정도 되겠다. 

요약하면, 함수 정의 등에서 넘어온 값을 받아서 함수 Scope 안에서 사용할 bound variable 을 파라미터(parameter, formal parameter, formal argument)라고 한다. 함수를 호출 할 때 함수 Scope 안에서 사용할 bound variable 에 넣어주세요 ~ 라고 주는 녀석들을 아규먼트(argument, actual argument, actual parameter) 라고 한다.

Caller의 눈으로 본 것이 Argument - Actual
Callee의 눈으로 본 것이 Parameter - Formal

번역할 때에는 파라미터 - 매개변수, 아규먼트 - 인수/인자/독립변수, 등으로 사용되는 듯 하다.

-----

후다닥 찾아본거라 잘못된 정보일 수 있으니, 오류가 있다면 가르쳐주세요 ~

'Tech' 카테고리의 다른 글

django 삽질  (3) 2009.11.19
CUDA Driver/Toolkit/SDK 설치하기 (Ubuntu 9.04 Jaunty)  (2) 2009.09.17
Parameter vs Argument  (3) 2009.01.21
GEB: MU puzzle  (4) 2008.10.20
MySQL -> XML: CDATA Sanitize?  (2) 2008.09.26
하위 디렉토리에 있는 모든 .svn 을 날리는 법  (5) 2008.09.11
Trackbacks 1 : Comments 3

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

Daily life/Hard study 2008.10.26 23:02
이번에는 2시간짜리, 짧고 굵은 모임이었습니다.

역시 대장이신 지아님과 컴키드님, GSong님, 솔리드원님, 꼬니님, 그리고 저 D군 이렇게 여섯명이 모였습니다. 지아님, 컴키드님과는 좀 일찍 만나서 점심을 같이 먹었고, 다른 분들은 토즈로 바로 오셨네요. 사보텐이 좀 비쌌습니다. ... 만 카드깡 와중에 500원 정도의 수익을 냈습니다. 꺄핫 >_< ... (하지만 나중에 ...)

그리고 2시부터 토즈에서 모임이 시작되었습니다.

체크인, 월간회고 따위는 패쓰. 오늘의 하이라이트는 컴키드님의 "유닛테스트, 하지 않겠는가?" 라는 발표였습니다. 컴키드님 Presentation 에 소질이 좀 있으신듯. 내용도 내용이지만, PPT 한장 한장이 참 인상깊었습니다. ;-) 발표자료는 여기에 있습니다.

그리고 발표 와중에 나왔던 TDD, Unit test등에 대한 쌓였던 이야기들이 참 흥미로웠습니다. 사실 저도 TDD로 일컬어지는 이야기들에 대한 거부감이 없는건 아니었는데 ... =_= 이번 기회를 통해서, 내가 무얼 모르는 것인지를 알 수 있었습니다. 유익한 시간이었어요.

좀 아쉬웠던건, 이렇게 떠들만한 떡밥이 훌륭하게 던져졌는데 두시간밖에 시간이 없어서 ... 라고 하지만, 사실 던킨으로 이동해서 떠들 수 있었기 때문에 나쁜건 아니었어요. 오히려 발표타임과 떠드는 타임이 나뉜게 좋을지도 모르겠군요. ;-)

그리고, 중간에 잠깐 이걸로 모두에게 웃음을 선사할 수 있었습니다. 히힛 ~

... 그리고, 토즈가 할인에서 적립으로 바뀌는 바람에 카드깡 와중에 약 2500원 정도의 손해가 생겼습니다. 점심에 500원 벌었던걸 다 까먹고도 더 까먹었군요. :'(

왠지 짧고 굵은 느낌이 드는 모임이었습니다.

ㅎㅎㅎ

이걸로 날림후기 완료. 사진은... 어떻게 전달하는게 좋을까효 ... =_=

'Daily life > Hard study' 카테고리의 다른 글

안드로메다 #1  (2) 2009.12.05
코딩도장: 회고  (1) 2009.01.09
후기: SICP 스터디모임 10월 정모  (4) 2008.10.26
SICP 스터디모임 9월 정모 늦은 후기  (6) 2008.09.30
Firefox plugin: 분홍이+Scrapbook >_<=b  (2) 2008.08.03
SICP 스터디 7월 정모  (5) 2008.07.29
Trackbacks 3 : Comments 4

SICP 스터디모임 9월 정모 늦은 후기

Daily life/Hard study 2008.09.30 22:59
아, 아, 지난 9월 27일(토요일) SICP 스터디 모임의 9월 정기모임에 다녀왔습니다. ... 8월 모임이 없었기에 두달만의 회동이었죠.

7월 모임에서 미쳤던 D군이 Map/Reduce에 대한 발표를 하겠습니다, 라고 질러버려서 덜덜덜 떨던 시간들... 본래대로라면 8월 모임에서 발표를 했어야 하는데, 훌렁 건너뛰고 9월 모임에서 하게 되었습니다. ... 하지만, 이바닥의 생리가 그렇듯이 준비 기간은 의미 없고, 발표 전 2-3일 정도 후다닥 준비해서 결국 날림으로 해치웠습니다. 두달간의 부담을 이틀만에 후딱 털어내버리고 뻔뻔하게 웃음짓고 있는 D군. - 그래서 체크인 단어가 뻔뻔 이었습니다 >_</ 아쉽게도 개인적으로 쓰던 위키가 죽어버려서(SenA RIP) 자료가 없군효. 언넝 다른곳 어딘가에 둥지를 틀고 위키를 다시 올려야겠습니다. ㅠㅠ

참석자는 대장이신 지아님과, 자주 보던 컴키드님, 솔리드원님, 그리고 저 D군 - 이 올드페이스(늙어보인다는 뜻 아님!)였고, 뉴페이스로 8con님, Yarra님, 신글님이 오셨네요. - Yarra님 블로그 찾으려 스토킹중... >_<

토론 주제를 즉석에서 정해서 뭔가 깔쌈한게(하나 있긴 했지만 비밀) 별로 없었던게 좀 아쉬웠습니다.

  • 최근 읽은 책
  • * 공부하세요?
  • 테크트리

이야기들이 나왔습니다. 사실 이날 교보문고에 3번... -_-; 갔는데(어쩌다 보니), 세번째는 모임 이후였지요. 모임에서 나왔던 책들을 몇 찾아볼 수 있었습니다. 컴키드님이 말씀하셨던 독서법에 대한 책이 베스트 셀러 근처에 있더군효.

그리고 여기에 [언제|왜|어디서|어떻게|누가?|무엇을] 공부하세요? 에 대한 답을 각 한문장씩으로 정리합니다. ;-)

  • 언제? 보통 아침 회사일 시작 하기 전 한시간 정도. 혹은 주말에 약속 없을때. 밤에는 공부 안한다.. =_=
  • 왜? 내가 아는 세상을 넓히는 것은 여행과 마찬가지이다. 난 죽을때까지 새로운 땅을 밟아가련다.
  • 어디서? 차 한잔이 손에 잡히는 곳. 평일에는 아무도 오지 않은 새벽의 회사에서, 주말에는 던킨/커피빈/스타벅스 같은곳에 짱박혀서.
  • 어떻게? 평일 아침에는 보통 코딩도장의 문제를 풀거나, 찾아봐야 해 - 라고 적어두었던 것들을 좀 찾아보고 정리하거나, 위키에 제목만 달아놓은 문서를 계속 써나가거나. 주말에는 보통 짱박혀서 연필과 종이를 손에 쥐고 책을 읽는다.
  • 누가? - 음, D군은 보통 혼자 공부한다.
  • 무엇을? 한시간 이내의 코딩문제는 보통 UVA, TopCoder스타일의 문제 - 요즘에는 코딩도장 문제 - 를 해본다. 책은 SICP, Introduction to IR 정도를 읽고 있다. (G.E.B. 는 읽는다고 하기 쫌 뭐하지) 전공 이외의 공부로는 일본어를 하는 척만 하다가 좀 본격적으로 시작해보려고 준비중.

그리고 테크트리에 대한건... 사실 애매하죠. 답도 애매했습니다. 좀 안습... :'(

이후에 어딘가에 있는 커피볶는 집에 짱박혀서 이런저런 수다를 떨다가 제가 사람들을 낚아서 데리고 나왔습니다. ;; 신글님이 이런 저런 질문들을 하셨는데, 제가 평소 가지고 있던 고민들이랑 비슷한 물음들을 많이 던지셔서 인상깊었습니다.

... 이후에는, 위에 이야기한대로 교보문고에 잠시 들렀습죠. 거기서부터 몸이 좀 안좋아서 뻗었슴둥. ㅠㅠ



'Daily life > Hard study' 카테고리의 다른 글

코딩도장: 회고  (1) 2009.01.09
후기: SICP 스터디모임 10월 정모  (4) 2008.10.26
SICP 스터디모임 9월 정모 늦은 후기  (6) 2008.09.30
Firefox plugin: 분홍이+Scrapbook >_<=b  (2) 2008.08.03
SICP 스터디 7월 정모  (5) 2008.07.29
지름: GEB  (0) 2008.07.19
Trackbacks 1 : Comments 6

투명 필름 문제(Scheme)

Tech 2008.08.01 08:44
코딩도장에서 풀고 있는 투명 필름 문제. UVA 에서 뽑아온 문제인데 ... 그쪽 스타일은 입출력이 귀찮아서 열심히 하기는 싫다. 그냥 내맘대로 문제를 줄여서(-_-a) scheme 으로 뚝딱. 아직 공부가 부족한가보다. ... 더 잘 할 수 있을텐데. 위키보다는 여기가 어울릴 것 같아서(문서가 아니라 코드!) 붙임. SICP 스타일로,

Representation 정하기
Selector 등 Abstraction layer 만들기
Logic 구현

의 순서를 밟았다. 실제로 Abstraction layer를 만들어둔게 디버깅 할때 꽤나 큰 도움이 되었다. <시작, 끝> 에서 시작이 끝보다 작은 필름의 경우 make-film을 고치는 것 만으로 해결된 것.

-----
(load "utility.scm")

; My film system!
(define (make-film s e t)
(if (> s e)
(list e s t)
(list s e t)))
(define (start-point film) (list 's (car film) (transparency film)))
(define (end-point film) (list 'e (cadr film) (transparency film)))
(define (start-point? point) (eq? 's (car point)))
(define (end-point? point) (eq? 'e (car point)))
(define (point-pos point) (cadr point))
(define (point-transparency point) (caddr point))
(define (transparency film) (caddr film))

; Test cases!
(define test-case-1 (list (make-film 2.0 9.0 0.9)
(make-film 4.0 13.5 0.7)
(make-film 7.0 17.0 0.8)))
(define test-case-2 (list (make-film 6.0 24.0 0.9)
(make-film 5.5 22.0 0.7)
(make-film 9.0 18.0 0.8)
(make-film 16.0 16.0 0.9)
(make-film 8.5 15.0 0.7)
(make-film 4.0 11.0 0.8)
(make-film 2.2 5.0 0.9)
(make-film 90.5 1.0 0.7)))
(define test-case-3 (list (make-film 1.0 2.0 0.5)
(make-film 1.0 3.0 0.5)
(make-film 2.0 3.0 0.5)))

; Main solver
(define (solve films)
; Input manager
(define (adjoin-point-list p l)
(cond ((null? l) (list p))
((< (point-pos p) (point-pos (car l))) (cons p l))
((or (> (point-pos p) (point-pos (car l))) (= (point-pos p) (point-pos (car l))))
(cons (car l)
(adjoin-point-list p (cdr l))))
(else
(error "Error!"))))

(define (make-point-list l)
(cond ((null? l) '())
((= (point-pos (start-point (car l))) (point-pos (end-point (car l))))
(make-point-list (cdr l))) ; for a vertical film
(else
(adjoin-point-list (start-point (car l))
(adjoin-point-list (end-point (car l))
(make-point-list (cdr l)))))))

(define expanded-input (make-point-list films)) ; This is the very input for main solver function

; Utility functions for main solver
(define (add-film cur-transparency added-transparency)
(* cur-transparency added-transparency))

(define (sub-film cur-transparency added-transparency)
(/ cur-transparency added-transparency))

; Main solver
(define (iter output before cur-trs remaining_input)
(let ((next-point (if (null? remaining_input)
'() ; It's not gonna be used
(car remaining_input))))
(if (null? remaining_input)
output
(iter (append output (list (list before (point-pos next-point) cur-trs)))
(point-pos next-point)
(if (start-point? next-point)
(add-film cur-trs (point-transparency next-point))
(sub-film cur-trs (point-transparency next-point)))
(cdr remaining_input)))))

; Direct output from main solver. It has some duplicates and useless info
(define raw-output (iter '() 0 1 expanded-input))

; Filter out some meaningless output element
(define output-filter
(lambda (sequence)
(filter (lambda (x)
(< (car x) (cadr x)))
sequence)))

; Combine(Reduce) some outputs for compact result
(define (combinable? x y)
(and (= (cadr x) (car y))
(= (caddr x) (caddr y))))

(define (combine x y)
(list (car x) (cadr y) (caddr x)))

(define output-reducer
(lambda (sequence)
(cond ((null? (cdr sequence)) sequence)
((combinable? (car sequence) (cadr sequence))
(cons
(combine (car sequence) (cadr sequence))
(cddr sequence)))
(else (cons
(car sequence)
(output-reducer (cdr sequence)))))))

; So, this is my final output!
(output-reducer (output-filter raw-output)))
-----

ordered-list 에 대한 일반적 구현을 만들어서 분리하면 코드가 확 줄어들 것 같다.

'Tech' 카테고리의 다른 글

하위 디렉토리에 있는 모든 .svn 을 날리는 법  (5) 2008.09.11
Spiral number galaxy  (4) 2008.08.09
투명 필름 문제(Scheme)  (4) 2008.08.01
Statement vs Expression  (4) 2008.07.22
emacs: switch indentation  (0) 2008.07.18
방법당하다 by python-mysqldb 1.2.1_p2  (5) 2008.06.11
Trackbacks 0 : Comments 4

SICP 스터디 7월 정모

Daily life/Hard study 2008.07.29 23:01
지난 토요일, 모종의 코딩 할 꺼리가 있었지만 생각보다 일찍 끝나서 ... SICP 7월 정모에 얼굴을 비칠 수 있었습니다. 살짝(?) 늦었지만, 뭐 그닥 문제는 아니었네요.

... 예고한대로, 분홍이가 왔기 때문에 후기를 씁니다. 그런데 아직 키보드에 익숙해지지가 않아서 좀 힘들어요. 으워어어 ~ 그러니 날림으로 짧게 쓰고 마치겠습니다. 캬캬캬 ~

올드페이스: 지아님, 컴키드님, gsong님, D군!
뉴페이스: soonoh님, 하야로비님

처음부터 그랬지만, SICP 스터디 모임의 정모는 SICP를 읽느라 지친 개발자들이 잠시 쉴 수 있도록 여유를 제공하는 자리이므로 절대 SICP 에 대해서 토론하지는 않습니다. 이번에도 역시 마찬가지였네요.

체크인 - 초심, 패닉 등등 여러가지 나왔습니다. 전 그냥 "우쭐우쭐" 이었네요. 지난 한달은 나름 열심히 문제를 풀었다지요.
발표, 토론 - 제가 최근에 삽질하면서 했던 생각인 Statement, Expression은 뭐가 다른건가? 를 잠시 이야기했습니다. 그리고 책 이야기들을 했어요. 저는 할말이 없어서 SICP! 라고 한번 외쳐 주었습니다.

배운뇨자가 되신 지아님을 보며, 저도 책도 좀 보고 공부도 좀 하고 배운총각이 되어야겠다고 생각했습니다. ;-)

여튼, 그렇게 짧은(실제로 짧았습니다) 토즈에서의 모임을 마치고 (무늬만) 북카페인 나무그늘로 이동해서 수다를 떨었습니다. 하야로비님의 게임 이야기들이 재미있었어요. ... 개발자 모임과 오덕 모임은 0.96 정도의 상관도가 있는 것 같습니다. ;-) 이야기를 해보니 우리나라에서의 게임 개발은 누구나 한번쯤은 생각해보거나 거쳐가는 관문... 혹은 테크타다 보면 반드시 들르는 곳 - 정도 된다는 느낌을 받았네요. ^^

그리고 저는 후다닥 soonoh님과 종각으로 떳습니다. soonoh님이 모임에서는 이야기가 별로 없으셨는데, 버스를 타고 가면서 회사 이야기를 좀 들었습니다. 재미있는(혹은 배울만한게 많은?) 회사에 계신 것 같아요. 다음에 더 흥미로운 이야기들을 들을 수 있을 것 같습니다. 모두 기대 ;-)

---

여기부턴, SICP와 상관 없지만, 전 그날 소백산맥을 마신 듯 합니다... :'( 쿨록쿨록

'Daily life > Hard study' 카테고리의 다른 글

SICP 스터디모임 9월 정모 늦은 후기  (6) 2008.09.30
Firefox plugin: 분홍이+Scrapbook >_<=b  (2) 2008.08.03
SICP 스터디 7월 정모  (5) 2008.07.29
지름: GEB  (0) 2008.07.19
후기: 코딩도장 오프모임  (2) 2008.06.16
후기: SICP 스터디 모임 6월(+5월) 정모  (5) 2008.06.15
Trackbacks 4 : Comments 5

주말 된장짓(?) - 던킨 망고츄이스티 맛있다! +_+

Daily life 2008.07.20 22:09
주말에 일 없으면, 집앞이나 강남 어딘가에 짱박혀서 책을 읽거나 손코딩을 하는걸 즐기는 편이다. 이런걸 보고 된장이라고 하는 사람도 있지만, 그렇게 말하기에는 너무 헝그리하게 살고 있다.

아침을 거른다. 아침겸 점심겸 군것질로 강남 2번출구 던킨에서 오리지널R(2100)+망고츄이스티(1400)+핫브레드(3500) 도합 7000원을 쓴다 - 합이 7000이었는데, 저 가격들이 맞는지는 확실히 기억이 안남. 먹으면서 준비해간 책 - SICP - 을 읽는다. 아... MSI U100 이 도착했으면, 손코딩은 안해도 됐는데 안타깝다. :'(

두끼+군것질+혼자놀기 를 단돈 7천원에! 왕복 차비까지 생각해도 만원이 넘지 않는다. >_<=b ...

잡설이 길었는데, 알고보니 망고츄이스티는 이번 7월 신상품이라고 한다. 어쩐지... 전에 못봤던거였는데. 본래 던킨보다는 미스터도넛의 폰테를 좋아하는데(단종된 녹차폰테 ㅠ_ㅠ), 색이 이뻐서 먹어본 망고츄이스티가 나름 내 입맛을 훌륭하게 만족시켜줘서 한마디 끄적일 기운을 얻었다.

일단 사진 고고싱.

사용자 삽입 이미지

아쉽게도 망고츄이스티가 약간 가려서 일부밖에 보이지 않지만... 저 뼝아리색 츄이스티의 자태는 확인할 수가 있다. 먹을때 주의해야 하는데 - 저 노란것(뭐라고 부르지?)이 굳어있는 상태라 먹다가 흘리기 쉽다. 엄지손톱보다 큰 조각이 바닥에 떨어지면 참 가슴이 아프다. :'(

여튼, 저기서 군것질을 하며 SICP 3장을 다 읽었음. ....

뜽금없지만, 1, 2장은 Abstraction에 대해 이야기하며 책을 시작했다고 하면, 3장은 Indirection을 추가했을때 지금까지 설명한 것들이 어떤 변화 국면을 맞는지를 이야기하고 있다.

아우, 아이스커피 마시고싶다.

'Daily life' 카테고리의 다른 글

지름: 분홍이 !  (6) 2008.07.29
디군 캐릭터  (8) 2008.07.24
주말 된장짓(?) - 던킨 망고츄이스티 맛있다! +_+  (0) 2008.07.20
7월 5일, 촛불집회 다녀왔슴다  (6) 2008.07.06
근황: 떡실신  (1) 2008.06.22
있을땐 모른다  (0) 2008.06.17
Trackbacks 0 : Comments 0

7월 5일, 촛불집회 다녀왔슴다

Daily life 2008.07.06 01:12
SICP 스터디 모임메타스쿨 고아라 분들을 만났습니다.

2시 정도부터 헤메이다가 지아님을 만나 8시 정도까지 왔다갔다 했습니다.

처음에 지아님을 만나서 가져오신 김밥을 라면과 함께 후다닥 먹고 - 시청 광장을 헤메다가, 비를 좀 맞았습니다. 돗자리 깔고 시국미사를 기다렸지만, 빗줄기만 더 강해지고 해서 다섯시 정도에 그냥 청계천 쪽으로 이동 -_-; 고아라 분들을 찾아볼까 했지만 안뵈더군요. 청계천 소라 옆에 있는 TOM N TOMS에서 수다떨며 커피도 마시고 책도 좀 보다가(증거샷 첨부) 다시 시청쪽으로 갔습니다.

Book

TOM N TOMS - 공부의 증거!


그리고 수다를 떨고 몸을 좀 녹인 후에 다시 시청으로 고고싱. 다시 해가 질때까지 돗자리를 깔고 앉아있었는데, 시청광장쪽은 왠지 ... 도로에 계신 분들에 비해 좀 따로노는 느낌이었습니다. 그냥 소풍나온듯한? -_-/ 그래서 지아님이랑 좀 아쉬워하다가 ... 드디어 아샬님에게 연락이 왔습니다. 시청역 2, 3번 출구쪽에 있다고!

... 가서 보니, 시청역 안에서 노래를 부르며 모금을 하셨더군요. 지아님과는 계속 지상만 쏘다니며 찾았으니 보일리가... ㄷㄷㄷ

그리고 시청광장에 있을땐 몰랐는데 고아라에 합류해서 밥먹으러 가면서 보니 후덜덜하게 사람이 많았습니다. 6월 10일때의 2-3배 정도 되는 것 같더군요. 솔직히 사람이 어디까지 있는지 끝이 보이지 않아서 셀 수가 없었습니다. ;;

대충 저녁을 먹고 나서 고아라 님들과 함께 시청-종각 사이 어딘가로 가서 또 모금을 좀 했습니다. 아샬님이 긴 머리를 휘날리며 기타를 치고 노래도 부르고, 저는 급조 피켓을 들고 옆에서 조금 알짱거리고 ... ;; 피켓은 이렇게 생겼습니다.

고아라 피켓

고아라 급조 피켓



아, 고아라는 아고라의 오타( ;; ) 일지도 모릅니다. ㄷㄷㄷ

그리고 나서 지아님, POD님과 함께 집으로 고고싱.

뭔가 자세한 후기를 쓰고 싶지만, 너무 길어질 것 같습니다. 그냥 갔다왔다 - 정도만 기록에 남기고 나머지는 마음속에 갈무리 ... =_=/ 사람이 모이는(그것도 엄청나게) 곳인만큼 이런저런 사소한 일들이 많았습니다. 독특한 깃발 하며, 사람들끼리의 사소한 충돌, 레이스 달린 우비를 입은 꼬맹이들, ...

마지막으로 촛불소녀 낮 버전, 밤 버전 입니다. ;-) 촛불소녀 팬클럽 할래요!

촛불소녀-밤

촛불소녀 - 밤

촛불소녀-낮

촛불소녀 - 낮

'Daily life' 카테고리의 다른 글

디군 캐릭터  (8) 2008.07.24
주말 된장짓(?) - 던킨 망고츄이스티 맛있다! +_+  (0) 2008.07.20
7월 5일, 촛불집회 다녀왔슴다  (6) 2008.07.06
근황: 떡실신  (1) 2008.06.22
있을땐 모른다  (0) 2008.06.17
리눅스 커맨드 오타  (8) 2008.06.12
Trackbacks 0 : Comments 6

후기: SICP 스터디 모임 6월(+5월) 정모

Daily life/Hard study 2008.06.15 23:35
실제로 문제 풀이는 지지부진하지만(핑계는 있습니다만... 없는 무덤이 어디 있겠습니까 -_-;) 그래도 나름 Heartbeat을 유지하고 있는 구글 그룹스의 SICP 스터디 모임의 6월 정모에 다녀왔습니다. 5월에 정모를 하지 못해서, 6월 정모를 좀 일찍 하고 5+6월 합동 오프 모임이라고 볼 수 있습니다. 장소는 강남 토즈, 선발대들은 오무토토마토에서 점심을 함께 먹으며 지난 모임때의 쿠폰 사건(ㅠ_ㅠ)과, 최근의 촛불 정국에 대한 이야기들을 나누었습니다. ^^

일단, 모임의 참석자는 지아님, D군(The Me!), 솔리드원님, 꼬니님, gsong님 이었고, 컴키드님이 중간에 난입(?) 하셔서 자리를 빛내 주셨습니다. ;-)

흐름은 체크인 -> 월간회고 -> 발표(The Me! 가 LaTeX에 대해 짧게 설명했습니다) -> 자유토론, 이었습니다. 간단하게 각 단계에서의 임팩트를 짚고 넘어가도록 하겠습니다.

체크인: 모두 오늘의 각오(?)랄까, 한 Word, 혹은 Phrase로 표현하며 운을 떼는 것입니다. 다른 분들이 백지, 내려놓자, 가능성, 촛불 등의 멋있는 단어들을 선택하시는 와중에, 저 역시 있어 보이기 위해 용자를 택했습니다. 이렇게 공부도 지지부진하고, 다른 분들에게 자극적인걸 던져주지도 못하며 정체되어 있는 안타까운 상황을 어떻게 뚫고 나갈 것인가 - 를 생각하다 떠오른 단어입니다.

다시 한번 밑줄 쫙 - 뚫고 나갈 것인가 - 에서 그래 이거다! 라는게 떠올랐습니다. 여기서 아하! 떠오르지 않으신다면 천원돌파 그렌라간을 한번 보실 것을 강권합니다. 어디서 구해야 할지 모르겠다 싶으시면 저를 찌르셔도 됩니다. ;-) ... 여튼! 공부도 용자처럼 해야 합니다. 그것이 우리 SICP단(?)의 방식입니다! 좌절과 나태로 점철된 스터디의 역사에 바람구멍을 뚫어놓을 용자! ... +_+ 비록 하루짜리 열정이라도 말입니다. ;-)

월간회고: 모두모두 이제 미안하고 또 미안하다 못해 미안하지조차 않게 되어버린 경지에 이르러 있었습니다. 좀 가슴아프기도 하지만, 이런 문제의식의 공유가 이 후 자유토론의 씨앗이 되었던 것 같습니다. 그리고 들어보니 모두들 훌륭한 핑계(?)가 있었단 말이지요. 대장이신 지아님이 "우리는 공부 (강제로) 권하는 사회가 되지 말자" 라는 비전을 제시했고, 대부분이 따라가기로 했으니 그닥 큰 문제는 되지 않는 것 같습니다. 공부는 스스로 하는거지요. ... (추가하자면, 위에 말했듯 용자처럼 스스로!)

발표: 제가 약 30분 정도 LaTeX 사용에 대해서 이야기를 했습니다. 발표라고는 했지만 그냥 위키 페이지 띄워놓고 간단하게 설명하면서 터미널에서 latex 문서를 만들고 pdf 파일로 뽑아내는 과정을 보여드린 것 뿐이었습니다. 제가 일단 latex에 익숙하지 않아서 핵심을 제대로 짚어줄 수 없어서 좀 안타까웠습니다. 최근 인터뷰 보러 다니느라 정신줄을 놓고 있다가 준비를 제대로 못해서 ... =_=

그래서, 다음달에 반성하는 의미로 발표를 하나 더 하기로 했습니다만, 좀 애매합니다. 이건 자유토론과 연관되는 것이니 뒤로 패스.

자유토론: 스터디 모임의 방향성, Goal 에 대한 이야기들이 많이 나왔습니다. 큰 줄기 몇개를 챙겨보면,

  • 대화가 필요하다. 어떤 종류의 소통이던 간에, 대화가 있어야 모임에 피가 흐른다.
  • 누가 "저 모임에 가면 뭘 얻을 수 있니?" 라고 물었을 때, 대답할 것이 있어야 한다.
  • 고기동성을 위해 모임 내에서 Sub-모임이 나타나 공대 만들어 사냥하고 다니는 것도 좋다.
  • 스터디+문제풀이 외에 프로젝트라던가, 공부를 도와줄 수 있는 프로그램 구성을 만들어봤으면?

이런 것들이(더 많았습니다...) 있었습니다. 무얼 할지 정확하게 정해지지는 않았지만, 저 네번째 것 - 스터디+문제풀이 이외의 코드 작성 - 에 대하여 "제가 할께요. 알아서 페이지 만들어서 뭔가 정리해 나가고, 다음달에 발표해 보겠습니다." 라고 발언해 버렸습니다. ... 용자라는 단어 때문일까요, 한 5분정도 엄청 Proactive member가 되었었는데 딱 그 5분에 삘받아서 손들어 버렸습니다... ㄷㄷㄷ 이제 발언에 책임을 지기 위해 한동안 고생좀 해야 할 것 같습니다. ... =_=

다음달 모임은 7월 중순이나 말 정도로 예상되는데요 ... 그 전까지 뭔가 가시적인, 혹은 가시적이지는 않아도 우쭐댈 정도는 되는 결과가 나오길 바랍니다.



그리고 모임 후에, 저는 솔리드원님을 따라서 광화문 쪽에 있다는 다른 (어둠의 비밀결사같은 느낌을 주었던) 모임에 갔었는데 ... 이곳도 대단히 흥미로운 경험이 되어서, 후기를 별도로 작성해야 할 것 같습니다.



;-) 다른분들 후기 기다려요 ~


'Daily life > Hard study' 카테고리의 다른 글

지름: GEB  (0) 2008.07.19
후기: 코딩도장 오프모임  (2) 2008.06.16
후기: SICP 스터디 모임 6월(+5월) 정모  (5) 2008.06.15
SICP 스터디 모임 4월 정기모임  (3) 2008.04.26
SICP 스터디 모임 늦은 후기  (4) 2008.03.27
지름: SICP  (8) 2008.02.23
Trackbacks 3 : Comments 5

SICP 스터디 모임 4월 정기모임

Daily life/Hard study 2008.04.26 23:29
오늘 SICP 스터디 모임의 4월+두번째 정기모임이 있었습니다. 사실, 전 요즘 좀바빠서 아무것도 준비하지 못했어요... ㅠㅠ 그래서 참으로 미안한 마음을 안고, 그렇지만서도 뻔뻔하게 가긴 갔습니다.

오늘 참석자는 D군을 포함해서 총 다섯명이었습니다. + 지아님, 컴키드님, 명명님, 솔리드원님

오무토 토마토에서 오므라이스를 먹고 강남 토즈로 이동 후 이야기를 시작했습니다. 순서는 이야기꺼리 하나씩 적어내기 -> 체크인 -> 4월 회고 -> 컴키드님의 마인드맵 발표 -> 이야기꺼리 하나 잡아서 토론 -> 다음 이야기꺼리 잡아서 토론 -> 장소이동(어딜까요? ㅎㅎ) 후 연습문제 1.19 풀어보기, 였습니다.

지난 모임때와 같은 장소, 같은 시간이었지만 사람이 절반으로 줄어서 실제로 한명 한명이 떠들었던 시간은 훨씬 길어졌습니다. 영양가 있는 이야기는 아닌 것 같았지만, 그래도 뭔가 많이 떠들었다는게 만족스럽네요. 으히히~ 지난번엔 한마디씩 두바퀴 도니까 그냥 시간이 다 되어버려서 좀 아쉬웠단 말이죠... =_=a

각 과정에 대해 한마디씩만 정리하면,

체크인에서는 대부분(?)의 분들이 공부 못해서 미안해 - 라며 죄책감에 시달리는 모습을 보여주셨습니다.
4월 회고에서는 공부하면서 느낀것+어려웠던 것 들에 대한 이야기가 좀 나왔습니다.
마인드맵 발표에서는 툴의 사용법, 생각을 정리하는 방법(흩어놓은 후 묶는다) 등에 대한 이야기가 있었습니다.
토론꺼리 하나 - Top-down, Bottom-up 방식의 차이, 사고의 방향에 대해 이야기가 나왔습니다. 해결해야하는 과제가 있을때 양쪽을 왔다갔다 하게 된다는 이야기도 했군요. - 이때쯤 명명님이 가셨던 것 같습니다.(가물가물)
토론꺼리 둘 - 훌륭한 사람이 되려면? 지금보다 나은 사람이 되려면? 어찌해야 하는가, 에 대한 이야기들이 있었습니다. - 이걸 마치고 솔리드원님이 가셨군요.
그 후 노닥거리면서, 회사이야기들이 좀 나오다가, 연습문제 1.19를 한번 풀어보고 나서 남은 세명이 빠이빠이 ~

평소에 듣기 힘든 이야기들이 많이 나와서 좋았습니다. 사실 이런 이야기 할 기회가 흔한건 아니거든요. ;-)

그리고... 정말 오랜만에 블로그에 글을 씁니다. 일단 월욜만 지나고 나면 한숨을 돌릴 수 있을테니, 빨리 그날이 지나길... (이라지만 월욜 이후에는 지구에 없을지도 ㅠㅠ)

추가: 다음 정모(5월)때 D군이 latex 사용법에 대해 발표합니다. ;-) 우어어어 ~~~

'Daily life > Hard study' 카테고리의 다른 글

후기: 코딩도장 오프모임  (2) 2008.06.16
후기: SICP 스터디 모임 6월(+5월) 정모  (5) 2008.06.15
SICP 스터디 모임 4월 정기모임  (3) 2008.04.26
SICP 스터디 모임 늦은 후기  (4) 2008.03.27
지름: SICP  (8) 2008.02.23
지름: Programming Erlang(pdf)  (2) 2008.02.17
Trackbacks 2 : Comments 3

SICP 스터디 모임 늦은 후기

Daily life/Hard study 2008.03.27 22:22
SICP를 프린트해서 보다가... 최근에서야 책을! 샀다. 그리고 이번엔 좀 제대로 문제를 모두 풀어서 정리하겠노라! 라고 생각하던 차에... 검색하다 SICP 스터디 모임이라는 그룹을 발견해서 후딱 가입했다. 모르는게 있으면 물어봐야지 ~ 라고 생각했었는데, 왠걸 그 모임도 이제 막 시작한거였다. ... 뭐, 생각해보니 더 좋다. 함께 풀어가는게 어찌 즐겁지 않겠는가? ;-)

그리고, 지난 토요일 아기다리 고기다리 던 대망의 첫 정모가 있었다. 원랜 바로 후기를 썼어야 하지만 회사에서 좀 바빠서 치이다 보니 제대로 정리도 못하고 오늘에서야 ... 지아님 죄송해요 ㅠ_ㅠ

여튼, 지아님 카리스마 아래 줄줄이 - 십여명의 개발자들이 모여서,
  1. Check-in: 모임의 감상을 한마디로
  2. 월간회고
  3. 구글 그룹스 사용법 by comkid
  4. Intermission: 1.13 증명 by Me!
  5. 앞으로의 스터디 방향
에 대한 이야기를 했다. ... 사실, 업계에 진짜로 나온지는 채 몇 달이 되지 않기 때문에 나와 다른 곳에서 프로그래밍을 하고 있는 사람을 만나본 일이 별로 없어서 기대 만빵이었다. 자바를 다룬다는 분, 임베디드(우왕>_<=b)쪽 일을 하신다는 분이 계셨고... 웹 쪽도 있었던 듯? 체크인때도 한 이야기지만, 웹에서 보던 사람들이 NPC가 아니라 정말로 세상에 존재하는 사람들이라는게 참 신기하다. 새로운 사람들과의 만남은 항상 (즐거운 것 만은 아니고 괴로울 뿐인 것 또한 아니지만) 짜릿하다.

일단 첫 모임은 자기 소개라던가 그룹 사용법 등 일반적인 이야기들이 주가 되었는데 ... 다음 모임에서는 뭔가 주제나 문제를 잡아서 이야기를 하게 된다고 한다. 히히, 약간 기대 >_</

삼천포로 빠지면 어쩌나 걱정도 좀 했었는데, 지아님이 잘 이끌어 주셔서 알찬 시간이 되었던 듯 하다. 아쉬운 것은 카메라.... ㅠ_ㅠ 와 3시간이 너무 짧았다는 것. 그리고 마우스와 키보드 USB 케이블을 들고가지 않았던 것 반성합니다... ㅠ_ㅠ

아아... 약발을 바로 받았어야 하는데 회사 일로 흐름이 끊겨서 좀 걱정이다. ... 일단 오늘까진 놀고 내일부터 다시 달려봐야지. ...

모두 반가웠어요!

'Daily life > Hard study' 카테고리의 다른 글

후기: SICP 스터디 모임 6월(+5월) 정모  (5) 2008.06.15
SICP 스터디 모임 4월 정기모임  (3) 2008.04.26
SICP 스터디 모임 늦은 후기  (4) 2008.03.27
지름: SICP  (8) 2008.02.23
지름: Programming Erlang(pdf)  (2) 2008.02.17
책(TAOCP, ConcreteMathematics) 도착!  (5) 2007.11.22
Trackbacks 1 : Comments 4

지름: SICP

Daily life/Hard study 2008.02.23 16:10
그동안 ... 그냥 인쇄해서 보던 문서(...)하나를 결국 책으로 사버렸음. 뒤져보면 꽤 이래저래 사연이 많은데 ...

계기 1. 문화상품권이 갑자기 들어왔다.
계기 2. 내가 알고 있던 가격보다 훨씬 싼 물건(!)이 떳다.

SICP는 뭐, 다 알겠지만, Structure and Interpretation of Computer Programs 의 줄임말이다. MIT에서 컴퓨터 처음 배우는 애들한테 읽게 시킨다는 것으로 유명하며, 수많은 초보 공학도들을 돌고래에게 무릎꿇게 만들었다고도 한다... -_-; 번역서는 최근에서야 나왔고(무려 ht**w*** 님이 번역에 참여하셨다니?), 저게 미친듯이 읽고 싶었을 당시에는 돈이(군인이었다) 없어서 부대 물품을 좀 ... 해서 인쇄해서 봤었다. 최근엔 회사에서 한번 더 인쇄해버렸는데 ... 그래도 책으로 사서 책장에 좀 꽂아두고 싶은 녀석이라 이번 기회를 잘 노렸지! 히히 ~

교보문고에서 SICP 2/E, HardCover가 3만5천원에 뜬 것을 약 10분쯤 전에 확인. 바로 질렀음. 이해는 못하겠지만 동일한 책(SICP 2/E, HardCover 이면 똑같은거 아닌가? ISBN-10 넘버도 확인했음. 같더라)이 정가 9만얼마에 할인가 7만 얼마로 있던데 ... -_-;

뭐, 대강 한번 읽고 연습문제도 (거의) 풀어보긴 했지만, 그래도 Wizard 한 녀석 정도 서가에 키우는것도 좋을듯 하다. 일단 간지 좔좔 - >_<v 그나저나, 읽는 속도보다 책을 사는 속도가 더 빨라서 낭패다. 주말에 좀 달려야 할듯.

사용자 삽입 이미지


- 하지만 안타까운 것은, 인터넷 교보문고는 문화상품권 결제를 지원하지 않는다. ... 는 것과, 기왕 사는 김에 하면서 Amazon에서 "The Complete Peanuts" 를 검색해서 장바구니에 지금 넣어버렸다는거... 당연히 아마존도 상품권 못씀. 결국 상품권은 기스 하나 없이 그대로 ... ㅠㅠ

P.S. 책 표지 이미지는 인사이트(http://www.insightbook.co.kr/)에서 가져왔음. (죄송, 무단...;) 얼마전 JCO에서 경품으로 받았던 책(사랑하지 않으면 떠나라! - 다 읽고 리뷰 ㄱㄱ)도 이제보니 인사이트다. 출판사명 기억해두겠음.

'Daily life > Hard study' 카테고리의 다른 글

SICP 스터디 모임 4월 정기모임  (3) 2008.04.26
SICP 스터디 모임 늦은 후기  (4) 2008.03.27
지름: SICP  (8) 2008.02.23
지름: Programming Erlang(pdf)  (2) 2008.02.17
책(TAOCP, ConcreteMathematics) 도착!  (5) 2007.11.22
지름: TAOCP, CONtinuous disCRETE Mathematics  (2) 2007.11.16
Trackbacks 0 : Comments 8

Nonnegative integers without numbers

Tech 2007.11.15 01:10
Ex 2.6 In case representing pairs as procedures wasn't mind-boggling enough, consider that, in a language that can manipulate procedures, we can get by without numbers (at least insofar as nonnegative integers are concerned) by implementing 0 and the operation of adding 1 as

(define zero (lambda (f) (lambda (x) x)))

(define (add-1 n)
    (lambda (f) (lambda (x) (f ((n f) x)))))

Tis representation is knows as Church numerals, after its inventor, Alonzo Church, the logician who invented the λ calculus.

Define one and two (not in terms of zero and add-1) Give a direct definition of the addition procedure +.

=> 저게 왜 'zero'고 저게 대체 왜 '더하기 1'이냐 -_-; 라고 쭝얼거리길 몇분... ㄷㄷㄷ 한참을 뚫어져라 쳐다보니 알듯. 결국, nonnegative integer n은 입력 f를 받아서 fn(x) 라는 함수를 내보내는(입력과 출력이 함수인 함수, meta-function, procedure as data  ...  뭐라 표현하건 간에 -_-;) 함수이다. 자, 그렇다면 시킨대로 one, two 와 이녀석들을 더할 수 있는 프로시져를 만들어 보자.

(define one (lambda (f) (lambda (x) (f x))))

(define two (lambda (f) (lambda (x) (f (f x)))))

(define (add a b)
    (lambda (f) (lambda (x) ((a f) ((b f) x)))))

음, 그리고 이게 제대로 동작하는지 확인하기 위해서 이렇게 만들어진 녀석들을 우리가 볼 수 있는 숫자 형태로 바꿔주는 프로시져도 추가로 만들자. n이 fn(x)으로 표현된다고 하니 f: x->x+1, 시작은 0으로 정의하면 해당 숫자를 얻어낼 수 있다.

(define (tonum n)
    ((n (lambda (x) (+ x 1))) 0))

음 add 프로시져가 여러개의 입력도 받을 수 있으면 좋겠다. car, cdr을 잘 써서 넣으면 될 듯 한데 이건 일단 오늘은 패스.


'Tech' 카테고리의 다른 글

Hadoop 0.15.2 -> 0.17.0  (4) 2008.03.20
Dokuwiki: latex plugin ...  (7) 2008.03.08
Nonnegative integers without numbers  (0) 2007.11.15
ofstream redirect to stdout  (3) 2007.11.10
하둡의 퍼포먼스 (삽질기)  (7) 2007.11.09
Fibo2 ...  (3) 2007.11.05
Trackbacks 0 : Comments 0

Fibo2 ...

Tech 2007.11.05 23:02
SICP Exercise 1.19

a <- bq + aq + ap
b <- bp + aq
Transformation T, 그리고 p=0, q=1 에서 시작, 이것이 피보나치 수열을 구하는 transformation 이라고?

당연히 T^n 은 n번째 피보나치 수열을 구하는 Transformation 이 된다. 이것은 successive squaring에 사용할 수 있다. 이를 이용하여 피보나치 수열을 구하는 함수를 만들면,

(define (fibo2 n)
 (define (square x)
  (* x x))
 (define (fib-iter a b p q counter)
  (cond ((= counter 0) b)
        ((even? counter) (fib-iter a
                                   b
                                   (+ (square p) (square q))
                                   (+ (square q) (* 2 (* p q)))
                                   (/ counter 2)))
        (else (fib-iter (+ (* b q) (* a q) (* a p))
                        (+ (* b p) (* a q))
                        p
                        q
                        (- counter 1)))))
 (fib-iter 1 0 0 1 n))

기본 Iteration 으로 5만번째 피보나치 수를 구하는데 15초, 위 코드로 50만번째 피보나치 수를 구하는데 5초...

사실 transformation 은 2x2 행렬이므로 p, q, r, s 네개의 변수가 있으면 가능하다. 하지만 r, s 도 p, q를 이용하여 표현할 수 있나보다. 피보나치 행렬(?)은 두개의 변수로 표현 가능하다고 하는데... 연습장을 조금 더 끄적여봐야 겠음.

전에꺼도 제곱으로 하는거라 successive squaring은 되는데... 숫자가 너무 커지면 낭패니 C로는 무리. 그렇다고 스킴이나 루비같은걸로 옮기기도 귀찮. ;;

'Tech' 카테고리의 다른 글

ofstream redirect to stdout  (3) 2007.11.10
하둡의 퍼포먼스 (삽질기)  (7) 2007.11.09
Fibo2 ...  (3) 2007.11.05
Fib(n) = Fib(n-1) + Fib(n-2), Fib(1) = Fib(2) = 1  (4) 2007.11.02
Nutch Crawler, briefly  (1) 2007.10.31
String matching  (3) 2007.10.31
tags : fibonacci, scheme, SICP
Trackbacks 0 : Comments 3

Fib(n) = Fib(n-1) + Fib(n-2), Fib(1) = Fib(2) = 1

Tech 2007.11.02 23:26
재귀호출이나 반복문의 예제로 자주 나오는 피보나치 수열. 이렇게 구할 수도 있다. 음, recursion tree의 terminal node를 세면(그럴싸한 방법이지?) fib(n) = pi^n / sqrt(5) 에 가장 근접한 정수, pi = (1+sqrt(5))/2  와 같은 식을 얻을 수 있다(고 한다). 이걸 보니 정말? 이라는 생각이 들어 C로 만들어 봤다... sqrt 함수를 직접 만들어 썼더니 fib(63) 에서 1의 오차가 생겼고, sqrt 를 math.h 에서 가져다 썼더니 fib(72) 에서 1의 오차가 생기기 시작... 대략 잘 맞는다. 신기하구먼 ㅎㅎㅎ

#include <stdio.h>
#include <math.h>

typedef long long ll;

ll fibo(int n) {
        double pi = 0.5*(1.0 + sqrt(5));
        double t = 1.0;
        int i;

        for (i = 0; i < n; i++)
                t *= pi;

        return (ll)((t + 0.5)/sqrt(5));
}

int main(int argc, char ** argv) {
        int n = atoi(argv[1]);

        printf("%llu\n", fibo(n));

        return 0;
}

이나이 되도록 이런것도 모르고... 공부좀 더 해야겠다. ㅠ_ㅠ

'Tech' 카테고리의 다른 글

하둡의 퍼포먼스 (삽질기)  (7) 2007.11.09
Fibo2 ...  (3) 2007.11.05
Fib(n) = Fib(n-1) + Fib(n-2), Fib(1) = Fib(2) = 1  (4) 2007.11.02
Nutch Crawler, briefly  (1) 2007.10.31
String matching  (3) 2007.10.31
SSH Key distribution  (2) 2007.10.24
tags : fibonacci, SICP
Trackbacks 0 : Comments 4