Кодеры за работой. Размышления о ремесле программиста [заметки]
1
Поколение “бэби-бума” (Baby Boom Generation) - жители Соединенных Штатов, рожденные в 1945-1964 гг. Окончание Второй мировой войны ознаменовалось ростом рождаемости, в результате чего на свет появилось почти 80 млн человек. - Прим. науч.ред.
2
Хакер - ИТ-специалист высшей квалификации, в совершенстве изучивший работу компьютерных систем и ПО. Хакерами часто называют взломщиков программ, что в общем случае неверно. - Прим. науч. ред.
3
Язык программирования APL отличается очень короткой нотацией (большинство операций обозначаются одним-двумя символами), что делает программы крайне непонятными для чтения, но достаточно простыми для записи. - Прим. науч. ред.
4
Речь о компьютерах, аппаратно оптимизированных для выполнения приложений на Лиспе, в отличие от обычных компьютеров, оптимизированных для ассемблерного кода. Такие компьютеры широко применялись для исследования задачи искусственного интеллекта, поскольку компьютеры общего назначения с ними просто не справлялись. См. en.wikipedia.org/wiki/Lisp_machine. - Прим. науч. ред.
5
Речь идет о коммерческой реализации языка Common Lisp компании Lucid, получившей название Lucid Common Lisp. Позднее права перепродавались от одной компании к другой, пока не перешли к компании Lisp Works, которая и продает эту реализацию под маркой Lucid Common Lisp. - Прим. науч. ред.
6
Упреждающее исполнение команд (Speculative Execution), или исполнение команд по предположению, - это совокупность методов, позволяющая ЦП с конвейерной архитектурой обрабатывать команды без уверенности в том, что они реально будут исполняться в программе (например, в случае условного перехода). Если предположение оказывается верным, то исполнение команд продолжается и выигрывается время, а если нет (misspeculation), результаты упреждающего исполнения аннулируются. - Прим. науч.ред.
7
Теоретически, при наличии условия, должна выполняться только одна ветвь программы, но благодаря упреждающему исполнению команд выполнялись обе ветви, хотя результаты одной из них затем отбрасывались. -Прим. науч. ред.
8
GDB (GNU Project Debugger) - переносимый отладчик проекта GNU, который работает на многих UNIX-подобных системах и умеет выполнять отладку многих языков программирования, включая Си, C++ и Фортран. -Прим. науч. ред.
9
vi (сокр. от visual) - серия текстовых редакторов операционных систем семейства UNIX, которые применялись совместно с компиляторами GCC для разработки ПО. - Прим. науч. ред.
10
В зависимости от реализации некоторые компиляторы могут преобразовывать исходный текст на языке ЛИСП сразу же в машинный код (native code), а некоторые вначале компилируют исходный код в промежуточный (байт-код), который уже затем интерпретируется в машинный код конкретной машины. Для Emacs были реализованы компилятор и интерпретатор. - Прим. науч. ред.
11
wget - программа для загрузки файлов по сети.
12
XScreenSaver - коллекция из более чем двухсот различных заставок (screen saver) для UNIX и Mac OS. Создана Джейми Завински в 1992 году и до сих пор им поддерживается. - Прим. науч.ред.
13
Сейчас все уже пользуются отладчиками, позволяющими проходить по исходному тексту программ, но так было не всегда. В то время, о котором идет речь, не все среды разработки имели подобные отладчики. - Прим. науч. ред.
14
Имеется в виду раскол 1991 года, когда ряд разработчиков GNU Emacs отделились для развития собственной ветки под названием XEmacs. - Прим. науч. ред.
15
Абельсон X. “Структура и интерпретация компьютерных программ”. - М.: Добросвет, 2006.
16
Гамма Э. и др. “Приемы объектно-ориентированного проектирования. Паттерны проектирования”. - СПб.: Питер, 2007.
17
Дональд Э. Кнут “Искусство программирования”. - Вильямс, 2008.
18
BBS (Bulletin Board System) - электронная доска объявлений. Когда кабельные компьютерные сети были редкостью, пользователи компьютеров широко применяли этот способ общения посредством коммутируемых телефонных сетей. - Прим. науч.ред.
19
AOL - America Online, американская медиакомпания, поставщик онлайновых сервисов. - Прим. науч. ред.
20
GFS (Google File System) - распределенная файловая система компании Google, кластерная система, оптимизированная для работы с большими блоками данных по 64 Мбайт и обладающая повышенной защитой от сбоев. - Прим. науч. ред.
21
Имеется в виду новая версия языка C++, которую в настоящее время принято называть C++ Од:. Ключевое слово auto позволяет не указывать явно тип, вместо этого компилятор определит его автоматически (строгая типизация сохраняется). Что касается циклов, то здесь речь идет о так называемом range-based for, который в значительной степени упрощает итерирование коллекций. - Прим. науч.ред.
22
JNI (Java Native Interface) - инфраструктура, позволяющая взаимодействовать коду внутри JVM с “неуправляемым” (native) кодом, таким как API операционной системы или любой код на Си или C++. - Прим. науч. ред.
23
SWIG (Simplified Wrapper and Interface Generator) - инструмент с открытым исходным кодом, предназначенный для взаимодействия языков программирования C/C++ с языками сценариев, такими как Tel, Perl, Python, Ruby и др. - Прим. науч.ред.
24
Google Арр Engine - сервис хостинга сайтов и веб-приложений на серверах Google с помощью различных служб Google. См. http://ru.wikipedia.org/wiki/Google_App_Engine. - Прим. науч. ред.
25
epoll - новый системный вызов, который появился в Linux 2.6. Призван заменить устаревший select (а также poll). В отличие от старых системных вызовов, длительность работы которых зависела от количества прослушиваемых дескрипторов, epoll использует алгоритм, который не зависит от количества дескрипторов, позволяя добиться хорошего масштабирования при увеличении количества прослушиваемых дескрипторов. - Прим. науч. ред.
26
reddit.com - социальный новостной сайт, на котором зарегистрированные пользователи могут размещать ссылки на какую-либо информацию в Интернете. Как и другие подобные сайты, reddit поддерживает систему голосования за понравившиеся сообщения - наиболее популярные из них оказываются на главной странице сайта. - Прим. науч. ред.
27
iptables - утилита командной строки, стандартный интерфейс управления работой брандмауэра netfilter для ядер Linux версий 2.4 и 2.6. - Прим. науч. ред.
28
Code golf - состязания в программировании: побеждает программа с минимальным количеством знаков, решающая данную задачу. Понятие пошло именно из языка Perl (Perl Golf Context), но потом распространилось и на другие языки программирования. - Прим. науч.ред.
29
XS - интерфейс, определяющий формат файлов для взаимодействия кода на Си/С++ и кода на Perl. - Прим. науч.ред.
30
Дональд Э. Кнут “Искусство программирования”. - Вильямc, 2008.
31
Симптом зависания программ, работающих под управлением MAC OS: курсор превращается во “вращающийся пляжный мяч смерти” (Spinning Beach Balls of Death). - Прим. науч. ред.
32
CPAN (Comprehensive Perl Archive Network - всеобъемлющая сеть архивов Perl) - архив документации и ПО на языке Perl. - Прим. науч.ред.
33
Elisp, или Emacs Lisp - диалект языка Лисп, используемый в текстовых редакторах GNU Emacs и XEmacs. - Прим. науч. ред.
34
Саннивейл - один из крупных городов Кремниевой долины. - Прим. науч. ред.
35
Space Invaders (Космические захватчики) - игра для игровых автоматов, Рас-Man (Пакман) - компьютерная игра в жанре аркады. Две эти игры, разработанные в Японии в конце 1970-х, стали культовыми и сильно повлияли на развитие компьютерной индустрии. - Прим. науч.ред.
36
Аватар, или юзерпик (от user picture - картинка пользователя) - небольшое изображение, используемое для персонализации пользователя какого-либо сетевого сервиса. - Прим. науч. ред.
37
Мэшап (mash-up) - веб-приложение, объединяющее данные из нескольких источников в один интегрированный инструмент; например использует картографические данные Google Maps для добавления к ним данных о недвижимости с Craigslist, в результате создавая новый уникальный веб-сервис, изначально не предлагаемый ни одним из источников. - Прим. науч. ред.
38
Имеется в виду четвертая версия стандарта ECMAScript, работа над которой так и не была завершена. - Прим. науч. ред.
39
Закон дырявых абстракций, сформулированный Джоэлом Спольски, гласит, что использование абстракции любой нетривиальной концепции в любом случае потребует от ее пользователя четкого понимания внутренних аспектов реализации, в противном случае он рано или поздно столкнется с проблемами, с которыми не сможет справиться. См. http://www.joelonsoftware.com/articles/LeakyAbstractions.html - Прим. науч. ред.
40
K&R - стиль оформления кода с помощью отступов, названный так в честь Брайана Кернигана и Денниса Ричи, поскольку все примеры кода в их книге “Язык программирования Си” отформатированы подобным образом. Основной отступ состоит из 8 (реже 4) пробелов (или одной табуляции) на уровень вложенности. - Прим. науч.ред.
41
Дональд Э. Кнут, автор книги “The Art of Computer Programming” (Искусство программирования” - Вильямс, 2008 г.).
42
Крис Фрейзер (Chris Fraser) и Дэвид Хэнсон (David Hanson), авторы книги “A Retargetable С Compiler: Design and Implementation” (Перенацеливаемый компилятор Си: проект и реализация). - Прим. науч.ред.
43
“Никто не ждет испанскую инквизицию” (No one expects the Spanish Inquisition) - ставшая крылатой фраза из британского юмористического телешоу “Монти Пайтон”. - Прим. ред.
44
А. Ахо, Р. Сети, Д. Ульман “Компиляторы. Принципы, технологии, инструменты”. - Вильямс, 2003.
45
X. Абельсон, Д. Д. Сассман “Структура и интерпретация компьютерных программ”. - Добросвет, 2006.
46
Синтаксический сахар (syntactic sugar) - дополнения синтаксиса, которые не добавляют новые возможности, но делают язык программирования более удобным в использовании. - Прим. науч. ред.
47
Геттер, сеттер - специальные методы, используемые в объектно-ориентированном программировании и позволяющие реализовать гибкий меха низм инкапсуляции. -Прим. науч.ред.
48
Race conditions - ошибки в многопоточном коде из-за одновременного изменения объекта в памяти несколькими потоками, оставляющими объект в некорректном состоянии. - Прим. науч.ред.
49
“Wolf fence” - алгоритм поиска, аналогичный методу поимки льва в пустыне (здесь - волка на Аляске). Реализуется размещением в коде инструкций print, позволяющих определить местоположение ошибки. – Прим.ред.
50
Джо Шмо - аналог Васи Пупкина. - Прим. ред.
51
Джошуа Блох “Java. Эффективное программирование”. - Лори, 2002.
52
Генри Уоррен мл. “Алгоритмические трюки для программистов”. - Вильямс, 2007.
53
Дональд Э. Кнут “Искусство программирования”. - Вильямс, 2008.
54
Керниган Б., Плоджер Ф. “Элементы стиля программирования”. - М.: Радио и связь, 1984.
55
Ф. Брукс “Мифический человеко-месяц или Как создаются программные системы”. - СПб.: Символ-Плюс, 2000.
56
Обобщенные типы и символы подстановки часто упоминаются как “generics” и “wildcards”. -Прим. науч.ред.
57
Предметно-ориентированые языки также известны как DSL (Domain Specific Language). - Прим. науч.ред.
58
REPL (read-eval-print loop) - собирательное название интерактивных сред разработки языков семейства Лисп, Python, Ruby и др. - Прим. науч.ред.
59
Под ред. Энди Орама и Грега Уилсона “Идеальный код”. - СПб.: Питер, 2009.
60
Дональд Э. Кнут “Искусство программирования”. - Вильямс, 2008.
61
X. Абельсон, Д. Сассман “Структура и интерпретация компьютерных программ”. - Добросвет, 2006.
62
Стивен Макконнелл “Совершенный код”. - СПб.: Питер, 2007.
63
Jargon File - англоязычный онлайн-словарь сленга хакеров. - Прим. перев.
64
Дональд Кнут “Все про ТеХ”. -М.: “Вильямс”, 2003.
65
Второй том пятитомного труда Д. Кнута “Computers & Typesetting”. Содержит исходный код ТеХ, написанный методом литературного программирования. - Прим. ред.
66
По первым буквам слов capitalize (сделать заглавной), lowercase (нижний регистр - строчные), uppercase (верхний регистр - заглавные) - Прим. науч. ред.
67
Пер. Н. Демуровой.
68
Дональд Э. Кнут “Искусство программирования”. - Вильямс, 2008 г.
69
Fellow - высшее звание в технической карьере. Обычно сочетается с постом вице-президента или исполнительного директора компании. - Прим. ред.
70
В английской литературе принято название mixin. - Прим. науч. ред.
71
Арифметическая линейка - одна из модификаций счислителя Куммера. -Прим. ред.
72
“Разделяй и властвуй” - важная парадигма разработки алгоритмов, заключающаяся в рекурсивном разбиении решаемой задачи на две и более подзадачи того же типа, но меньшего размера, и комбинировании их решений для получения ответа к исходной задаче. - Прим. ред.
73
Команда UNIX-подобных операционных систем, позволяющая пользователю войти в систему под другим именем. - Прим. науч. ред.
74
Westinghouse Science Talent Search (сейчас известен как Intel Science Talent Search) - конкурс научных работ для старших школьников. - Прим. науч. ред.
75
Дональд Э. Кнут “Искусство программирования”. - Вильямс, 2008 г.
76
Дональд Э. Кнут “Искусство программирования”. - Вильямс, 2008.
77
Под ред. Энди Орама и Грега Уилсона “Идеальный код”. - СПб.: Питер, 2009.
78
Стивен Макконнелл “Совершенный код”. - СПб.: Питер, 2007.
79
Эрик Гамма и др. “Приемы объектно-ориентированного проектирования. Паттерны проектирования”. - СПб.: Питер, 2007.
80
Джошуа Блох “Java. Эффективное программирование”. - Лори, 2002.
81
Керниган Б., Плоджер Ф. “Элементы стиля программирования”. - М.: Радио и связь, 1984.
82
Генри Уоррен мл. “Алгоритмические трюки для программистов”. - М.: Вильямс, 2007.
83
Ф. Брукс “ Мифический человеко-месяц или Как создаются программные системы”. -СПб.: Символ-Плюс, 2000.
84
А. Ахо, Р. Сети, Д. Ульман “Компиляторы. Принципы, технологии, инструменты”. - Вильямс, 2003.
85
X. Абельсон, Д. Сассман “Структура и интерпретация компьютерных программ”. - Добросвет, 2006.
86
Дональд Кнут “Все про ТеХ”. - М.: “Вильямс”, 2003.
Наиболее полная на сегодняшний день биография знаменитого генерального секретаря Коминтерна, деятеля болгарского и международного коммунистического и рабочего движения, национального лидера послевоенной Болгарии Георгия Димитрова (1882–1949). Для воссоздания жизненного пути героя автор использовал обширный корпус документальных источников, научных исследований и ранее недоступных архивных материалов, в том числе его не публиковавшийся на русском языке дневник (1933–1949). В биографии Димитрова оставили глубокий и драматичный отпечаток крупнейшие события и явления первой половины XX века — войны, революции, массовые народные движения, победа социализма в СССР, борьба с фашизмом, новаторские социальные проекты, раздел мира на сферы влияния.
В первой части книги «Дедюхино» рассказывается о жителях Никольщины, одного из районов исчезнувшего в середине XX века рабочего поселка. Адресована широкому кругу читателей.
Книга «Школа штурмующих небо» — это документальный очерк о пятидесятилетнем пути Ейского военного училища. Ее страницы прежде всего посвящены младшему поколению воинов-авиаторов и всем тем, кто любит небо. В ней рассказывается о том, как военные летные кадры совершенствуют свое мастерство, готовятся с достоинством и честью защищать любимую Родину, завоевания Великого Октября.
Автор книги Герой Советского Союза, заслуженный мастер спорта СССР Евгений Николаевич Андреев рассказывает о рабочих буднях испытателей парашютов. Вместе с автором читатель «совершит» немало разнообразных прыжков с парашютом, не раз окажется в сложных ситуациях.
Из этой книги вы узнаете о главных событиях из жизни К. Э. Циолковского, о его юности и начале научной работы, о его преподавании в школе.
Со времен Макиавелли образ политика в сознании общества ассоциируется с лицемерием, жестокостью и беспринципностью в борьбе за власть и ее сохранение. Пример Вацлава Гавела доказывает, что авторитетным политиком способен быть человек иного типа – интеллектуал, проповедующий нравственное сопротивление злу и «жизнь в правде». Писатель и драматург, Гавел стал лидером бескровной революции, последним президентом Чехословакии и первым независимой Чехии. Следуя формуле своего героя «Нет жизни вне истории и истории вне жизни», Иван Беляев написал биографию Гавела, каждое событие в жизни которого вплетено в культурный и политический контекст всего XX столетия.