Питер Сейбел - Кодеры за работой. Размышления о ремесле программиста
- Название:Кодеры за работой. Размышления о ремесле программиста
- Автор:
- Жанр:
- Издательство:Символ-Плюс
- Год:2011
- Город:Санкт-Петербург
- ISBN:978-5-93286-188-2
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Питер Сейбел - Кодеры за работой. Размышления о ремесле программиста краткое содержание
Программисты - люди не очень публичные, многие работают поодиночке или в небольших группах. Причем самая важная и интересная часть их работы никому не видна, потому что происходит у них в голове. Питер Сейбел, писатель-программист, снимает покров таинственности с этой профессии. Он взял интервью у 15 величайших профессионалов: Кена Томпсона, создателя UNIX, Верни Козелла, участника первой реализации сети ARPANET, Дональда Кнута, Гая Стила, Саймона Пейтон-Джонса, Питера Норвига, Джошуа Блоха, Брэда Фицпатрика, создателя Живого Журнала, и других. Все они “подсели” на программирование еще в школе. Тогда, на заре зарождения отрасли, лишь в немногих учебных заведениях читались курсы по компьютерным наукам. Поэтому будущим гуру приходилось покорять профессиональные вершины самостоятельно, но всех их отличает творческое горение и полная самоотдача любимому делу.
Вы узнаете, что они думают о будущем программирования и как сами научились программировать, как, по их мнению, нужно проектировать ПО, как выбор языка программирования влияет на продуктивность и можно ли облегчить выявление труднонаходимых ошибок.
Кодеры за работой. Размышления о ремесле программиста - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
У меня есть исходный код Дейкстры операционной системы THE. Я его не читал, лишь пока проглядел, но я нашел его, потому что уверен, что мне интересно будет почитать его в свободное время. Однажды я сломал руку, катаясь на велосипеде, и практически ничего не мог делать целый месяц, поэтому читал исходный код, в котором, как я слышал, применялись некоторые интересные недокументированные идеи. Думаю, этот опыт был очень важен для меня.
Сейбел:Как вы читаете исходный код? Ведь непросто читать даже то, что написано на известном вам языке программирования.
Кнут:Но это действительно того стоит, если говорить о том, что выстраивается в вашей голове. Как я читаю код? Когда-то была машина под названием Bunker Ramo 300, и кто-то мне однажды сказал, что компилятор Фортрана для этой машины работает чрезвычайно быстро, но никто не понимает почему. Я заполучил копию его исходного кода. У меня не было руководства по этому компьютеру, поэтому я даже не был уверен, какой это был машинный язык.
Но я взялся за это, посчитав интересной задачей. Я нашел BEGIN и начал разбираться. В кодах операций есть ряд двухбуквенных мнемоник, поэтому я мог начать анализировать: “Возможно, это инструкция загрузки, а это, возможно, инструкция перехода”. Кроме того, я знал, что это компилятор Фортрана, и иногда он обращался к седьмой колонке перфокарты - там он мог определить, комментарий это или нет.
Спустя три часа я кое-что понял об этом компьютере. Затем обнаружил огромные таблицы ветвлений. То есть это была своего рода головоломка, и я продолжал рисовать небольшие схемы, как разведчик, пытающийся разгадать секретный шифр. Но я знал, что программа работает, и знал, что это компилятор Фортрана — это не был шифр, в том смысле что программа не была написана с сознательной целью запутать. Все дело было в коде, поскольку у меня не было руководства по компьютеру.
В конце концов мне удалось выяснить, почему компилятор работал так быстро. К сожалению, дело было не в гениальных алгоритмах - просто там применялись методы неструктурированного программирования и код был максимально оптимизирован вручную.
По большому счету, именно так и должна решаться головоломка: составляются таблицы, схемы, информация извлекается по крупицам, выдвигается гипотеза. В общем, когда я читаю техническую работу, это такая же сложная задача. Я пытаюсь влезть в голову автора, понять, в чем состоял его замысел. Чем больше вы учитесь читать вещи, написанные другими, тем более способны изобретать что-то свое - так мне кажется.
Мы должны публиковать код. Доступны комментарии Джона Лайонса к 6-й версии UNIX, с исходным кодом. И программы Билла Аткинсо-на теперь находятся в открытом доступе благодаря Apple, и уже скоро мы сможем их прочитать. Это очень хорошо документированный код со множеством новаторских графических алгоритмов.
Сейбел:Конечно, благодаря политике открытого исходного кода у нас сейчас гораздо больше кода для чтения, чем раньше.
Кнут:Да, это так. И по-прежнему каждый может применять разные виды нотации - не стоит читать только тех программистов, которые пишут так же, как и вы.
Библиография
The Art of Computer Programming, Donaid Knuth (Addison-Wesley, 1997). [76] Дональд Э. Кнут “Искусство программирования”. - Вильямс, 2008.
Beautiful Code: Leading Programmers Explain How They Think, Andy Oram, Greg Wilson (eds.) (O'Reilly, 2007). [77] Под ред. Энди Орама и Грега Уилсона “Идеальный код”. - СПб.: Питер, 2009.
Byte, Vol. 6, No. 8, "Smalltalk issue," August 1981.
Code Complete, Steve McConnell (Microsoft Press, 1993). [78] Стивен Макконнелл “Совершенный код”. - СПб.: Питер, 2007.
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] Эрик Гамма и др. “Приемы объектно-ориентированного проектирования. Паттерны проектирования”. - СПб.: Питер, 2007.
A Discipline of Programming, Edsger W. Dijkstra (Prentice Hall, Inc., 1976).
Effective Java, Joshua Bloch (Prentice Hall, 2008). [80] Джошуа Блох “Java. Эффективное программирование”. - Лори, 2002.
The Elements of Programming Style, Brian Kernighan and P.J. Plauger (Computing McGraw-Hill, 1978). [81] Керниган Б., Плоджер Ф. “Элементы стиля программирования”. - М.: Радио и связь, 1984.
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] Генри Уоррен мл. “Алгоритмические трюки для программистов”. - М.: Вильямс, 2007.
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).
Java Puzzlers: Traps, Pitfalls, and Corner Cases, Joshua Bloch and Neil Gafter (Addison-Wesley, 2005).
The Lisp 1.5 Programmer's Manual, John McCarthy (MIT Press, 1962).
Literate Programming, Donald Knuth (Center for the Study of Language and Information, 1992).
Machine Intelligence 1, N.L. Collins and Donald Michie (eds.) (Oliver and Boyd, 1967).
Machine Intelligence 2, Ella Dale and Donald Michie (eds.) (Oliver and Boyd, 1968).
Machine Intelligence 3, Donald Michie (ed.) (Edinburgh University Press, 1968).
Machine Intelligence 4, Bernard Meltzer and Donald Michie (eds.) (Edinburgh University Press, 1969).
Magic House of Numbers, Irving Adler (HarperCollins, 1974).
"META II a Syntax-Oriented Compiler Writing Language," D.V. Schorre in Proceedings of the 1964 19th ACM national conference, (ACM, 1964).
Mindstorms: Children, Computers, and Powerful Ideas, Seymour A. Papert (Basic Books, 1993).
The Mythical Man-Month: Essays on Software Engineering, Frederick P. Brooks (Addison-Wesley Professional, 1995). [83] Ф. Брукс “ Мифический человеко-месяц или Как создаются программные системы”. -СПб.: Символ-Плюс, 2000.
Principles of Compiler Design, Alfred Aho and Jeffrey Ullman (Addison-Wesley, 1977). [84] А. Ахо, Р. Сети, Д. Ульман “Компиляторы. Принципы, технологии, инструменты”. - Вильямс, 2003.
"Proof of a Program: FIND", C.A.R. Hoare in Communications of the ACM, Vol. 14, Issue 1 (ACM, 1971).
Programming Pearls, Jon Bentley (ACM Press, 1999).
Purely Functional Data Structures, Chris Okasaki (Cambridge University Press, 2008).
A Retargetable С Compiler: Design and Implementation, David Hanson and Christopher Fraser (Addison-Wesley Professional, 1995).
Smalltalk-80: The Interactive Programming Environment, Adele Goldberg (Addison-Wesley, 1983).
Smalltalk-80: The Language & Its Implementation, David Robson and Adele Goldberg (Addison-Wesley, 1983).
Structure and Interpretation of Computer Programs, Harold Abelson and Gerald Jay Sussman (MIT Press, 1996). [85] X. Абельсон, Д. Сассман “Структура и интерпретация компьютерных программ”. - Добросвет, 2006.
TeX: The Program, Donald Knuth (Addison-Wesley, 1986).
The Programming Language LISP: Its Operation and Applications, Edmund Berkeley and Daniel Bobrow, eds. (MIT Press, 1966).
The Psychology of Computer Programming: Silver Anniversary Edition, Gerald Weinberg (Dorset House, 1998).
The TeXbook, Donald Knuth (Addison-Wesley Professional, 1986). [86] Дональд Кнут “Все про ТеХ”. - М.: “Вильямс”, 2003.
Writers at Work: The Paris Review Interviews, Malcolm Cowley (Penguin, 1977).
Zen and the Art of Motorcycle Maintenance: An Inquiry into Values, Robert Pirsig (Bantam, 1984).
1
Поколение “бэби-бума” (Baby Boom Generation) - жители Соединенных Штатов, рожденные в 1945-1964 гг. Окончание Второй мировой войны ознаменовалось ростом рождаемости, в результате чего на свет появилось почти 80 млн человек. - Прим. науч.ред.
Читать дальшеИнтервал:
Закладка: