За най-новата версия на тази книга и допълнителни материали, visiVersion: 19 август 20ca creativeIonsAttribution-Noncommercial-Share Alike 3
0 Лиценз на Съединените щати
Компютърна история на човечествотоЕдсгер Дайкстра, 1972 г. Награда Тюринг Лекция по-трудно Ние сме разработили инструменти, които усилват физическата сила с трилиони чрез разработени инструменти за усилване на техните физически способности, само хората са развили интелектуални способности, които са позволили на хората да доминират на планетата Първият ключов усилвател на интелекта беше език Езикът предоставя способността да предаваме нашите мисли на другите, както и да използваме собствения си ум по-ефективно
Следващият ключов интелект и дистанция. Компютърът е върховното умение. Компютърът е променил света повече от всяко друго изобретение от последните сто години и е проникнал в почти всички. Ние сме само в началото на компютърната революция; днешно виждане на потенциалаИма две причини, поради които всеки трябва да учи компютриПочти всички от най-вълнуващите важни за движението технологии, изкуства и научни форми на Разбирането на компютрите осветява дълбоки прозрения и въпроси към културата на природата и Iverseeye sur, който изпрати запитване до Google, гледа Tooy Story , трябваше да ги учи LASIK да четат хирургия, използваха смартфон, гледаха шоу на Cirque Du Soleil, пазаруваха с безразрешителна карта или пекоха пица в микровълнова фурна, трябва да бъдат убедени в първата причина Нищо, но това би било възможно без огромния напредък в компютърните технологии през последните половин век Локхарт Въпреки че тази книга ще засегне някои вълнуващи приложения на компютрите, основният ни фокус е върху сезона, който може да изглежда по-изненадващ
Процеси, процедури и компютри Компютърът променя начина, по който мислим за проблемите и начина, по който разбираме Теорията на тази книга е1 Процеси, процедури и компютриnинформация Компютърната наука е изучаване на информационни процеси Процесът е последователност процеси от стъпки Всяка стъпка променя състоянието на светът по някакъв малък начин и резултатът от всички стъпки създава някакво целево състояние. Например печенето на торта, лепенето на писмо и засаждането на дърво са всички процеси, тъй като те включват физически компоненти като захар и мръсотия, но те не са чисти информационните процеси и процесите представляват по-скоро абстрактна информация, отколкото физически неща. Границите между физическия свят и чистите информационни процеси обаче често са размити. Истинските компютри работят във физическия свят: тези (напр. потребител натиска клавиш върху клавиатура, показана на екрана) фокусиране върху абстрактни физически начини за представяне и манипулиране на информация по-добро разбиране и разсъждение процедура Процедурата е описание на процес
Един прост процес може да бъде описан чрез изброяване на стъпките. Списъкът със стъпки е процедурата: актът на тяхното следване е процесът. Алгоритъм, който може да бъде следван без каквото и да е, което е механична процедура, алгоритъмът е механична процедура, която е напълно завършиНапример, ето процедура за приготвяне на кафе, адаптирана от действителните указания, които съпоставят Ердос. Затворете капака. Поставете празната гарафа върху. Натиснете бутона върху. Описването на процеси, като просто изброите стъпки като това, има много ограничения. например, стъпка трета операторът разбира разликата между двете и готовото кафе и може да заключи, че тази употреба на кафе се отнася за всички, тъй като крайната цел на този процес е да се направи кафе, годно за пиене. Други стъпки, тъй като уредът е включен и седи. повече подробности за нашата процедура и направете езика по-прецизен от този Дори когато са положени много усилия за писане на недвусмислен Ето защо данъчният кодекс на Съединените щати е дълъг 3 4 милиона думи, но ние може да прекарваме години в спорове за това, което означава, че няма друг проблем с този начин на описание на процедура е, че размерът на
Описанието на C3 е пропорционално на броя на стъпките в процеса. Това е подходящо, което може да се изпълни от време на човек, но тези, които искаме да изпълним на компютри, включват трилиони eps. Това ни трябват по-ефективни начини да ги опишем от просто инструмент за изброяване, който ни позволява да описателно Тъй като операциите се извършват от машина, всяко трябва да бъде описано по-смислено" (например, за да знаем как да напълним кафемашината с вода, без да обясняваме, че водата идва от кран, и как да отворим крана) Вместо това имаме нужда механични процедури, които могат да бъдат следвани без никакво мислене. Машина, която може да бъде въведена от човек, който пише на клавиатура, получена по мрежа или предоставена автоматично от сензори, прикрепени към него. Изпълнение на механична процедура, т.е. са данни, показани на човек, но може да поеме такива астрични сигнали, които контролират как работи дадено устройство. Компютрите съществуват в широка гама от форми и хиляди компютри са устройства всеки ден, но не мислете за телефони, телевизори, микровълнови печки и карти за достъп Нашите основният фокус е върху универсалните компютри, като се извършват всички възможни изчисления върху дискретни входове, с изключение на практическите ограничения на пространството и ума и hngys"chetime
следващият раздел яде дискретни входове означава: Chape Изследвайте по-задълбочено какво означава един компютър да бъде вселен2 Измерване на компютърни мощни машини, ние можем да сравним мощността на различни машини, като измерим количеството механична работа, която те могат да извършат за даден период от време Тази мощност може да бъде уловена с единици като hwatt. Физическата мощност не е много полезна мярка за изчисляване, тъй като се консумира голяма енергия, когато коркомпютърът работи, но се съдържат две свойства, които измерват мощността на компютърната машина Колко информация Колко бързо се отлага, като се има предвид второто свойство до Част I, но помислете за първата 121 Информация. Неформално ние използваме информацията, за да означава знание. Но за да разберем информацията-информация количествено, като нещо, което можем да измерим, се нуждаем от по-точен начин да мислим за
1 2 Измерване на изчислителната мощност Начинът, по който компютърните специалисти измерват информацията, се основава на това как това, което е известно, получаването на информацията е малко.
Тъй като ухапването извършва дебело, но не разкрива резултата, половината от времето монетата ще кацне на "глави", а другата половина от времето на опашки" без krправилен отговор са Един бит информация или глави", или "опашки", ние caПо подобен начин един бит може да разграничи стойностите 0 и YthThereидентифицира действителното число, тъй като един бит може да различи само bnot достатъчно d използва fivТова обаче е доста неефективно, тъй като се нуждаем от до пет въпроса, за да идентифицираме стойността (и средно очакваме да имаме нужда от 33 въпроса ) Можем ли да идентифицираме
Целта ни е да идентифицираме въпроси, при които отговорите „да“ и „не“ са еднакви, предоставя най-много информация, но това не е случаят, ако започнем със „Стойността 6 ли е?“, тъй като този отговор се очаква да има времева стойност поне 42 Ако отговорът е „да“, знаем, че ult е 4, 5 или 6 С още два бита можем да направим разлика между поздравленията (обърнете внимание, че два бита всъщност са достатъчни, за да се направи разлика между четирите информация тук се губи) По същия начин, ако първият въпрос е не, знаем, че резултатът е 1, 2 или 3. Имаме нужда от още два бита, за да разграничим коя от трите стойности е. По този начин, с три бита, ние разграничаваме всичките шест възможни резултата. Трите бита могат да предадат повече информация, отколкото само шест двоични дърво на въпросите, има някои въпроси, при които отговорът е еднакво вероятно да бъде "да" и "не" (например, очакваме отговорът на стойността 3be " да от три пъти) Следователно, ние не получаваме пълни битове, които можем правете разлика между 2* 2*2-8 възможности
Като цяло, с можем да правим разлика между 2 възможности. Обратно, разграничаването между ksвъзможни стойности изисква логаритъмът да е дефиниран така, че ако a= b логаритъм, тогава logh. Тъй като всеки бит има възможности, ние използваме, за да определим броя на битовете, за да правим разлика между набор от различни двоични въпроси, но , въпросите са дискретни: не можем да зададем 058 на въпрос, soinary queTrees Фигура 11 изобразява структура от двоични въпроси от осем стойности. Ние наричаме тази структура двоично дърво. Ще видим много полезни двоични дървета на дърво-Компютърните учени рисуват дървета наопаки надолу, Коренът е върхът на дървото, а листата са числата в долната част (o) Има уникален път от дървото до всяко листо. По този начин можем да опишем всеки от eigl
1 2 Измерване на изчисления Povible стойности с помощта на thers към въпросите надолу по дървото fNo","No"и"Neaf 5 Тъй като всичко това е двоично дърво, можем да опишем всяко неотрицателно по този начин, като просто добавим допълнителни ниваe дърво, което да разграничим между 6 възможно добавете нови числа между 0 и 7, ако отговорът е „Да, подобно на theath Дълбочината на едно дърво е дължината на theth от theeaf Примерното дърво има дълбочина три
Двоично дърво с дълбочина d може да различи до 2ere0357Figure ll Usin
g три бита за разграничаване на осем възможни стойности Единици информация Един байт се дефинира като осем бита Следователно, един байт информация съответства на осем двоични кеса и може да различи между 28 (256) различни стойности За по-големи количества информация използваме метрични префикси, но вместо мащабиране с фактори 1000 f20(1024lence, един килобайт е 1024 байта; един мегабайт е 24 (приблизително един) байта; един гигабайт е 2 (приблизително един милиард) байта; и един терабайт е 240 (приблизително един трилион) байта Упражнение 1 1 Теглене двоично дърво с минималната възможна дълбочина тота на годинатаCУпражнение 12 Колко бита са необходими humd За еднозначно идентифициране на всеки атом в наблюдаваната вселена? Упражнение 13 Всички примери използват двоични въпроси, за които има два отговора. Да предположим, че нашите решения на битове, ние базираме на trits, където един trit може да направи разлика между три еднакво вероятни стойности Foach trit, ние можем да зададем qu(въпрос с три възможни отговора, всички trits са необходими за разграничаване, убедителният отговор ще покаже троично дърво с въпросите и отговоритеIsb* Измислете обща формула за конвертиране между битове и трици
Колко Exploration 11: GuesTheer (избиращият) избира между I и 100 (включително) и тайно го записва. Другият играч, който отгатва) се опитва да отгатне числото. След всяко отгатване, избиращият отговаря с "правилно" (отгатващият е познал число и играта свърши) по-високо" (действителното число е по-високо от по-малкото" (Обяснете защо малкото малко информацияb Ако приемем, че избиращият ги избира на случаен принцип (т.е. всички стойности между I и 100 са еднакво вероятни), кои са най-добрите първи предположения? Обяснете защо тези предположения са по-добри от всяко друго предположение (Съвет: има две еднакви c Какъв е максималният брой предположения, от които трябва да се нуждае вторият играчнамерете числото d какъв е средният брой необходими предположения (приемайки, че избирателят избира* Да предположим, че вместо избирайки на случаен принцип, избиращият избира числото с цел да определи броя на предположенията, от които вторият играч ще има нужда и тя да избере? fКак предполагащият трябва да коригира стратегията си, ако иска противниково g ** Кои са най-добрите стратегии за двамата играчи в състезателната игра на предположение за число където целта на избирателя е да избере начално число, което увеличава максимално броя на предположенията, от които се нуждае, а целта на познатия е да
Съдържание22 Представяне на данни23 Растеж на изчислителната мощg и либералните изкуства22 Езикова конструкция990223 Рекурсивни преходни мрежи3 1 Проблеми с естествените езици32 Езици за програмиране33 Схема341 Примитиви3
42 Приложни изрази4 Проблеми и процедури41 Решаване на проблемиПроцедура21 Процедури като входове и изходи43 Рекурсивно решаване на проблеми44 Оценяване на рекурсивни приложения45 Разработване на сложна програма451Pri
452 Проследяване46Si5 Данни52 Двойки521 Създаване на списъци по двойки43 Процедури, които конструират списъци5
6 Абстракция на данни Част II: Процедури за анализ История на изчислителните машини62 Механизиране на логиката622Cg операции1163 Режим64 Резюме7 1 Емпирични измервания222n3311222233336674444драстичен растеж от експоненциалния растеж33344444446 Непрекратяващи процедури Сортиране и търсене1 53
813 По-бързо сортиране588 1 4 Двоични дървета815 Бързо сортиране Неструктурирано търсене6788Дексирано търсене Част III: Подобряване на изразителността9 Мутация2 Въздействие на имена на мутации, места, рамки и среди922 Правила за оценка със състояние93 Променливи двойки и списъци9 4 Императивни pr942 Императивни контролни структури0 Обекти0
1 Процедури за опаковане и състояние66668688980 1 1 Капсулиране10 1, 2 Съобщения0 2 1 Внедряване на подкласове, заменящи методи03 Обектно-ориентирано програмиранеPython програмиIs и извиквания4 Контролни инструкции3 Оценител33 Дефиниции и имена35 Приложение36 Завършване на Interprete4 Мързеливо оценяване1 41 Мързелив интерпретатор4 2 Мързеливо програмиране
5 ОбобщениеЧаст IV: Границите на компютрите2C2 1 Механизиране на разсъжденията, теорията за непълнотата24022 Проблемът със спирането2
4 Доказване на неизчислимост4525 Резюме Ine53253Списък с изследвания Power of Language Systemsrecipes for丌3 Рекурсивни дефиниции и игри5board puzzleWebDetList of Figurespletransition networkn network with subnetworks5 RTNting“ Alice runs26 System power relationshipsroduc8 Converting the MoreDigits productions to rTN
3 1 Изпълнение на Scheme program4e преобразува входове в изход42 Composition43 Circular Composi44 Recursive Composition5 Corneri5 1 Pegboard PuzzleComputing и с wine62 Comig logical or and not with wine63 Computing and3 чрез композиране на две и функции65 Правила за проверка на балансирани скоби Turing Machine66 Проверка на parer7
1 Оценка на fibo7 2 Визуализация на наборите O(), Q() и O()73 Редове на растеж91 Sarenvironments92 Envirbigger 3 493 Околна среда след оценяване(define inc(make-ader 1))9 4 Envirent за ee body of (inc 149)95 Променлива двойка, създадена чрез оценяване(set-mcdr! двойка двойка9 6 Списък с промени чрез оценяване(mlist 1 2 3)6770 1 Околна среда, произведена от оценяване02 Наследяване hierarch103 Клас на брояч hierar21 Incote и непоследователен axiomatic23 Машина с две състояния Busy beaver
първа част от изображенията в книгата, включително плочките на корицата, са генерирани. Някои от изображенията на плочките на корицата са от flickr creative commons licensesfe, Dunechaser, MichaelFitz, Wolfie Fox, glingl, jurvetson, KayVee INC, michaeldThe Van Изображението на Gogh Starry Night от Section 122 е от oogle ArtProject Изображението на Apollo Guidance Computer в Section 1 23 е публикувано от НАСА и е обществено достояние Светофарът в Section 2
1 е от iStockPhoto, а въртящият се пътен сигнал е от wikimedia Commons. Снимката на Грейс Хопър в Глава 3 е от Computer History Museplaying картичките в Глава 4 са от iStockPhoto Изображенията на GaussHeron и Грейс Хоп Глава 4 е лицензиран от United Feature Syndicate, Inc. Триъгълникът на Паскал Ada Lovelace в глава 6 е от Wikimedia Commons, на картина от Изображението на одометъра в глава 7 е от iStockPhethe изображението на разочарования ученик The Python snake charmer in Section 111 ism iStockPhoto Изображенията на Dynabook в theof глава l от статията на Alanay Комиксът xked в края на глава 1l се използва под творческия Randall mi
Предговор Тази книга започна от предпоставката, че компютърните науки трябва да се преподават като либерално изкуство, а не индустриално умение, имах привилегията да взема 6001 от GerrySussman, когато бях първа година студент в MIT, и този курс събуди силата и красотата ми , и ме вдъхнови да преследвам рекламен изследовател в областта на компютърните науки. Когато пристигнах като нов факултет, видях веднага да открия, че въвеждащите компютърни курсове се фокусираха върху преподаването на индустриални умения и времето, посветено на обясняване на техническата сложност, остава време, за да се запозная със стипендията и Националната администрация, предоставена нов въвеждащ курс по компютърни науки, предложен за първи път през пролетта на 2002 г., с помощта на изключителна група от асистент-треньори
поради някои от първата половина на изучаването на курса, но малък, безстрашен, благодарение на усилията им, че тази книга съществува, курсът и следващите няколко предложения, използваха изключителния учебник на Абелсън Сусманс Структура и интерпретация на компютърни програми (SICP) заедно с Дъглас Хофстадтърс Гьодел, Escher, Bach: An Eternal Golden braid鷙Hargaictor Clay Yountront: Grace Deng, Rachel Dada, Jon Erdman (Assistant Coachalone in thinking SICP е може би най-великият учебник, писан някога. С голямо безпокойство се опитах да разработя нова надежда, която получената книга улавя духомутинифициран от SICP, но по-подходящ за въвеждащ курс за студенти. Снимки, които не са включени в SICP. Анализ, обекти и способности, Въпреки че книгата е проектирана около въвеждащ курс за един семестър, тя също трябва да е подходяща за студенти за самообучение и за хора със значителен програмен опит, но без подобни познания по компютърни науки
Задължен съм на много хора, които помогнаха за разработването на този курс и книгата Wesey като първия човек, който преподаваше тази книга и неговата задълбочена и проницателна обратна връзка доведе до подобрения в цялата
Грег Хъмфрис, Пол Рейнолдс и Марк Шериф също са преподавали с благодарност на всички помощник треньори през годините, особено на Сара Бергкуист (2004), Андрю Конърс (2004), Рейчъл Дада (2003), Пол Диорио (2an (2002)) , Итън Фаст (2009), Дейвид Фокнър (2005), Жак Фурние (2003) Чард Хсу (2007), Рейчъл Латбъри (2009), Майкъл Лю (2009), Стивън Лиа 2002), Дан Маркъс (2007), Рейчъл Рейтър (2009) ), Спенсър Стокдейл (2003), ДанЪптън (2005), Портман Уилс (2002), Кейти Уинстанли (2003 и 2004) и Ребека Запфел (2009) Уилям Айело, Анна Чефтър, Крис Фрост, Джонатан Гриър, Тад Хюз, Алън Кей, Тим Koogle, Jerry McGann, Gary McGraw, Radhika NagShawn O'Hargan, Mike Peck и Judith Shatin също направиха важни conu, най-дълбоките благодарности са на съпругата ми, Нора, която е неизменна, моите благодарности на всички минали, настоящи и бъдещи студенти, които използват тази книга 201 август