해럴드애빌슨,제럴드제이서스먼,줄리서스먼
저자해럴드애빌슨(HaroldAbelson)은매사추세츠공과대학(MIT)의전기공학&컴퓨터과학학부(DepartmentofElectricalEngineeringandComputerScience)에서컴퓨터과학을가르치며,미국전기전자기술자협회(IEEE)의특별회원이다.CreativeCommons와PublicKnowledge,자유소프트웨어연합(FSF)을세우는일을이끌었으며,MIT교육기술자문위원회의공동의장으로일한다.
목차1.프로시저를써서요약하는방법1.1프로그램짤때바탕이되는것1.1.1식1.1.2이름과환경1.1.3엮은식(combination)을계산하는방법1.1.4묶음프로시저(compoundprocedure)1.1.5맞바꿈계산법(substitutionmodel)으로프로시저를실행하는방법1.1.6조건식과술어(predicate)1.1.7연습:뉴튼법(newtonmethod)으로제곱근찾기1.1.8블랙박스처럼간추린프로시저1.2프로시저와프로세스1.2.1되돌거나(recursion)반복하는(iteration)프로세스1.2.2여러갈래로되도는프로세스1.2.3프로세스가자라나는정도1.2.4거듭제곱1.2.5최대공약수1.2.6연습:소수찾기1.3차수높은프로시저(higher-orderprocedure)로요약하는방법1.3.1프로시저를인자로받는프로시저1.3.2lambda로나타내는프로시저1.3.3일반적인방법을표현하는프로시저1.3.4프로시저를만드는프로시저2.데이터를요약해서표현력을끌어올리는방법2.1데이터요약데이터간추리기,데이터내용감추기2.1.1연습:유리수를위한산술연산2.1.2요약의경계(abstractionbarrier)2.1.3데이터란무엇인가?2.1.4집중과제:구간산술연산만들기2.2계층구조데이터와닫힘성질2.2.1차례열의표현방법2.2.2계층구조2.2.3공통인터페이스로써차례열의쓰임새2.2.4연습:그림언어2.3글자기호데이터2.3.1따옴표연산2.3.2연습:글자식의미분(symbolicdifferentiation)2.3.3연습:집합을나타내는방법2.3.4연습:허프만인코딩나무2.4요약된데이터의표현방식이여러가지일때2.4.1복소수표현2.4.2타입을표시한데이터2.4.3데이터중심프로그래밍과덧붙임성질2.5일반화된연산시스템2.5.1일반화된산술연산2.5.2타입이다른데이터를엮어쓰는방법2.5.3연습:기호식대수3.모듈,물체,상태3.1덮어쓰기와갇힌상태(localstate)3.1.1갇힌상태변수(localstatevariable)3.1.2덮어쓰기가있어서좋은점3.1.3덮어쓰기를끌어들인대가3.2환경계산법3.2.1계산규칙3.2.2간단한프로시저계산하기3.2.3물체에상태를넣어두는곳,변수일람표3.2.4안쪽정의3.3변형가능한데이터로프로그래밍하기3.3.1변형가능한리스트3.3.2큐3.3.3표3.3.4디지털회로시뮬레이터3.3.5관계알리기(constraintpropagation)3.4병행성竝行性:시간은중요하다3.4.1병행시스템에서시간의성질본질3.4.2병행성을다스리는방법3.5스트림3.5.1스트림과(계산을)미룬리스트3.5.2무한스트림(infinitestream)3.5.3스트림패러다임3.5.4스트림과셈미룸계산법3.5.5모듈로바라본함수와물체4.언어를처리하는기법4.1메타써큘러실행기4.1.1언어실행기의알짜배기4.1.2식을나타내는방법4.1.3언어실행기에서쓰는데이터구조4.1.4언어실행기를보통프로그램처럼돌려보기4.1.5프로그램도데이터처럼4.1.6안쪽정의(internaldefinition)4.1.7문법분석과실행과정을떼어놓기4.2Scheme바꿔보기-제때계산법4.2.1식의값을구하는차례-정의대로계산법과인자먼저계산법4.2.2제때계산법을따르는실행기4.2.3제때셈리스트와스트림4.3Scheme바꿔보기-비결정적계산4.3.1amb와찾기4.3.2비결정적프로그램짜기4.3.3amb실행기구현4.4논리로프로그램짜기4.4.1연역식정보찾기4.4.2쿼리시스템의동작방식4.4.3논리프로그래밍은수학논리를따르는가?4.4.4쿼리시스템만들기4.4.4.1드라이버루프와쿼리값찍어내기(instantiation)4.4.4.2실행기(evaluator)4.4.4.3패턴매칭으로참말찾아내기4.4.4.4규칙과동일화4.4.4.5데이터베이스의관리4.4.4.6스트림연산4.4.4.7쿼리의문법을처리하는프로시저4.4.4.8일람표와정의5.레지스터기계로계산하기5.1레지스터기계설계하기5.1.1레지스터기계를묘사하는언어5.1.2기계디자인에서의속내용감추기(abstraction)5.1.3서브루틴5.1.4스택(stack)을이용해되돌기(recursion)구현하기5.1.5명령어정리5.2레지스터기계시뮬레이터5.2.1기계모형5.2.2어셈블러5.2.3명령에해당하는실행프로시저만들기5.2.4기계성능지켜보기5.3메모리할당(memoryallocation)과재활용(garbagecollection)5.3.1벡터로나타낸메모리5.3.2무한히많은메모리인양보이기5.4제어가다보이는실행기5.4.1제어가다보이는실행기의핵심부5.4.2시퀀스계산과꼬리되돌기(tailrecursion)5.4.3조건식,덮어쓰기(assignment),정의5.4.4실행기돌리기5.5번역(compilation)5.5.1번역기의구조5.5.2프로그램식의번역5.5.3조합식번역하기5.5.4명령줄한데합치기5.5.5번역된코드의예5.5.6텍스트에서변수의정의를파악하기(lexicaladdressing)5.5.7번역된코드를실행기에연결하기용어대역표연습문제목차참고문헌찾아보기
출판사서평프로그래밍이무엇인가돌아보게해주는MIT의컴퓨터과학입문교과서마법사책(WizardBook)이라는별명으로도유명한이책은독특하기로소문난,MIT컴퓨터과학입문교과과정에서쓰는교과서로,프로그래밍언어문법이아닌프로그램의뼈대를구성하는기술을익히게해준다.흔한프로그래밍입문서와달리,난해하다는평을듣는LISP에서갈라져나온Scheme을활용하며,요약(abstraction)과조립식설계(modularity)에따라복잡한프로그램을간단하게짜는전략을보여준다.그뿐아니라,...프로그래밍이무엇인가돌아보게해주는MIT의컴퓨터과학입문교과서마법사책(WizardBook)이라는별명으로도유명한이책은독특하기로소문난,MIT컴퓨터과학입문교과과정에서쓰는교과서로,프로그래밍언어문법이아닌프로그램의뼈대를구성하는기술을익히게해준다.흔한프로그래밍입문서와달리,난해하다는평을듣는LISP에서갈라져나온Scheme을활용하며,요약(abstraction)과조립식설계(modularity)에따라복잡한프로그램을간단하게짜는전략을보여준다.그뿐아니라,상태(state)가있는물체,덮어쓰기(assignment),병행프로그래밍,함수프로그래밍,제때계산법(lazyevaluation),비결정적프로그래밍(non-deterministicprogramming)등다양한프로그래밍이슈를살펴보며한걸음씩프로그램을설계하고짜맞추고살펴보고고쳐쓰면서,'과연프로그래밍이란무엇인가'돌이켜보게하고,생각하는방식과그생각을표현하는방식을가르쳐준다.프로그래머를기르는마법서(WizardBook)이책에담긴교과과정은한때세계300여대학에서사용되었으며,지금도100개넘는이름난대학에서가르치고있을만치,세계최고수준의프로그래밍교육이라일컫기에조금도모자람이없습니다만,아직도우리나라에서는이책의값어치가생각만큼그리널리알려지지는않은듯싶습니다.···(중략)···제경험으론,이책에담긴가르침이보기드물게깊고도넓은만큼,읽는사람들의오해도컸습니다.프로그램짜기를처음배우는이보다는,흔히들쓰는언어로프로그램을한참짜본사람들가운데서,이책의가르침을어긋나게받아들이거나우습게넘겨버리는이가훨씬많았습니다.저는적어도이책의3장까지차분히읽어가면서손수코드도쳐서돌려보고연습문제도꾸준히풀어보지않으면,이책이주는값어치를올바르게가늠하기어렵다고생각합니다.-역자서문에서