Кодеры за работой. Размышления о ремесле программиста - [231]
Мне не удалось передать ничего этого своим студентам. В современной компьютерной науке есть те, кому это удается (их не так много). Но я могу пересчитать по пальцам одной руки тех, кто разделяет мою любовь к чтению первоисточников.
У меня большая коллекция исходных кодов. Есть компиляторы, компиляторы Digitek 1960-x, созданные в очень интересной манере. В них использован собственный язык, идентификаторы длиной 30 символов, но они были очень описательными; эти компиляторы заметно превосходили своих тогдашних конкурентов - эта компания производила мейнстримовые компиляторы в 1963 или 1964 году.
У меня есть исходный код Дейкстры операционной системы THE. Я его не читал, лишь пока проглядел, но я нашел его, потому что уверен, что мне интересно будет почитать его в свободное время. Однажды я сломал руку, катаясь на велосипеде, и практически ничего не мог делать целый месяц, поэтому читал исходный код, в котором, как я слышал, применялись некоторые интересные недокументированные идеи. Думаю, этот опыт был очень важен для меня.
Сейбел: Как вы читаете исходный код? Ведь непросто читать даже то, что написано на известном вам языке программирования.
Кнут: Но это действительно того стоит, если говорить о том, что выстраивается в вашей голове. Как я читаю код? Когда-то была машина под названием Bunker Ramo 300, и кто-то мне однажды сказал, что компилятор Фортрана для этой машины работает чрезвычайно быстро, но никто не понимает почему. Я заполучил копию его исходного кода. У меня не было руководства по этому компьютеру, поэтому я даже не был уверен, какой это был машинный язык.
Но я взялся за это, посчитав интересной задачей. Я нашел BEGIN и начал разбираться. В кодах операций есть ряд двухбуквенных мнемоник, поэтому я мог начать анализировать: “Возможно, это инструкция загрузки, а это, возможно, инструкция перехода”. Кроме того, я знал, что это компилятор Фортрана, и иногда он обращался к седьмой колонке перфокарты - там он мог определить, комментарий это или нет.
Спустя три часа я кое-что понял об этом компьютере. Затем обнаружил огромные таблицы ветвлений. То есть это была своего рода головоломка, и я продолжал рисовать небольшие схемы, как разведчик, пытающийся разгадать секретный шифр. Но я знал, что программа работает, и знал, что это компилятор Фортрана — это не был шифр, в том смысле что программа не была написана с сознательной целью запутать. Все дело было в коде, поскольку у меня не было руководства по компьютеру.
В конце концов мне удалось выяснить, почему компилятор работал так быстро. К сожалению, дело было не в гениальных алгоритмах - просто там применялись методы неструктурированного программирования и код был максимально оптимизирован вручную.
По большому счету, именно так и должна решаться головоломка: составляются таблицы, схемы, информация извлекается по крупицам, выдвигается гипотеза. В общем, когда я читаю техническую работу, это такая же сложная задача. Я пытаюсь влезть в голову автора, понять, в чем состоял его замысел. Чем больше вы учитесь читать вещи, написанные другими, тем более способны изобретать что-то свое - так мне кажется.
Мы должны публиковать код. Доступны комментарии Джона Лайонса к 6-й версии UNIX, с исходным кодом. И программы Билла Аткинсо-на теперь находятся в открытом доступе благодаря Apple, и уже скоро мы сможем их прочитать. Это очень хорошо документированный код со множеством новаторских графических алгоритмов.
Сейбел: Конечно, благодаря политике открытого исходного кода у нас сейчас гораздо больше кода для чтения, чем раньше.
Кнут: Да, это так. И по-прежнему каждый может применять разные виды нотации - не стоит читать только тех программистов, которые пишут так же, как и вы.
Библиография
The Art of Computer Programming, Donaid Knuth (Addison-Wesley, 1997).[76]
Beautiful Code: Leading Programmers Explain How They Think, Andy Oram, Greg Wilson (eds.) (O'Reilly, 2007).[77]
Byte, Vol. 6, No. 8, "Smalltalk issue," August 1981.
Code Complete, Steve McConnell (Microsoft Press, 1993).[78]
Compiling with Continuations, Andrew W. Appel (Cambridge University Press, 1992).
The Design and Analysis of Computer Algorithms, Alfred V. Aho, John E. Hopcroft, and Jeffrey D. Ullman (Addison-Wesley, 1974).
Design Patterns: Elements of Reusable Object-Oriented Software, Eric Gamma, Richard Helf, Ralph Johnson, and John M. Vlissides (Addison-Wesley Professional, 1994).[79]
A Discipline of Programming, Edsger W. Dijkstra (Prentice Hall, Inc., 1976).
Effective Java, Joshua Bloch (Prentice Hall, 2008).[80]
The Elements of Programming Style, Brian Kernighan and P.J. Plauger (Computing McGraw-Hill, 1978).[81]
Elements of Style, William Strunk and E.B. White (Longman, 1999).
Expert С Programming, Peter van der Linden (Prentice Hall PTR, 1994).
Founders at Work, Jessica Livingston (Apress, 2007).
Hacker's Delight, Hank Warren (Addison-Wesley, 2002).[82]
Higher-Order Perl, Mark Jason Dominus (Morgan Kaufmann, 2005).
Java Concurrency in Practice, Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, and Doug Lea (Addison-Wesley, 2006).
Наиболее полная на сегодняшний день биография знаменитого генерального секретаря Коминтерна, деятеля болгарского и международного коммунистического и рабочего движения, национального лидера послевоенной Болгарии Георгия Димитрова (1882–1949). Для воссоздания жизненного пути героя автор использовал обширный корпус документальных источников, научных исследований и ранее недоступных архивных материалов, в том числе его не публиковавшийся на русском языке дневник (1933–1949). В биографии Димитрова оставили глубокий и драматичный отпечаток крупнейшие события и явления первой половины XX века — войны, революции, массовые народные движения, победа социализма в СССР, борьба с фашизмом, новаторские социальные проекты, раздел мира на сферы влияния.
В первой части книги «Дедюхино» рассказывается о жителях Никольщины, одного из районов исчезнувшего в середине XX века рабочего поселка. Адресована широкому кругу читателей.
Книга «Школа штурмующих небо» — это документальный очерк о пятидесятилетнем пути Ейского военного училища. Ее страницы прежде всего посвящены младшему поколению воинов-авиаторов и всем тем, кто любит небо. В ней рассказывается о том, как военные летные кадры совершенствуют свое мастерство, готовятся с достоинством и честью защищать любимую Родину, завоевания Великого Октября.
Автор книги Герой Советского Союза, заслуженный мастер спорта СССР Евгений Николаевич Андреев рассказывает о рабочих буднях испытателей парашютов. Вместе с автором читатель «совершит» немало разнообразных прыжков с парашютом, не раз окажется в сложных ситуациях.
Из этой книги вы узнаете о главных событиях из жизни К. Э. Циолковского, о его юности и начале научной работы, о его преподавании в школе.
Со времен Макиавелли образ политика в сознании общества ассоциируется с лицемерием, жестокостью и беспринципностью в борьбе за власть и ее сохранение. Пример Вацлава Гавела доказывает, что авторитетным политиком способен быть человек иного типа – интеллектуал, проповедующий нравственное сопротивление злу и «жизнь в правде». Писатель и драматург, Гавел стал лидером бескровной революции, последним президентом Чехословакии и первым независимой Чехии. Следуя формуле своего героя «Нет жизни вне истории и истории вне жизни», Иван Беляев написал биографию Гавела, каждое событие в жизни которого вплетено в культурный и политический контекст всего XX столетия.