avatar

Как стать программистом (Книги)

Конечно же, для того чтобы стать программистом надо читать книги: учебники, справочники, монографии… Мне очень сложно порекомендовать что-либо "для начала", потому, что сейчас я не знаю насколько просто их будет читать начинающим. С другой стороны, сам я в свое время потратил очень большое количество времени на изучение бездарно написанной литературы, поэтому маленький список тех книг, которые, я думаю, будут полезны, приведу, при это порядок появления книг в списке отражает разумный порядок чтения.

Н. Вирт, "Алгоритмы + структуры данных = программы." Существует два варианта этой книги, одна с примерами на Паскале, другая — с примерами на Модуле-2, последнюю недавно переиздали. Настоятельно рекомендую: просто написано и, тем не менее, достаточно подробно, в общем очень хорошая книга.

А. Шень, "Программирование: теоремы и задачи." Книга отличительна по своей структуре: в ней подобраны задачи и все алгоритмы рассматриваются как решения к тем или иным задачам, все это подается при минимуме математических вычислений. Написана специально для школьников известной 57 московской школы, но будет полезна и на первых курсах института. Кроме прочих качеств, свободно распространяется Шенем в сети Интернет.

Н. Вирт, "Язык программирования Паскаль." Если в качестве изучаемого языка программирования был выбран Паскаль, то эта книжка просто обязательно для прочтения. Все-таки, никто не сможет точнее, чем автор, описать свой язык программирования. К сожалению, насколько мне известно, в последнее время не переиздавалась.

Ч. Уэзерелл, "Этюды для программистов." Это достаточно простая для восприятия книжка наглядно показывает основные приемы при создании программ. С другой стороны, книга для одного прочтения: впоследствии она вам не понадобится, ее нельзя использовать как справочник, это исключительно учебник, простой и удобный. Опять же, в последнее время она не переиздавалась, так что найти ее можно только в библиотеках.

А. Ахо, Д. Хопкрофт, Д. Ульман, "Структуры данных и алгоритмы." В нескольких словах, эту книгу можно охарактеризовать как усеченный вариант другой книги, "Построение и анализ вычислительных алгоритмов" тех же авторов, при этом усечению подверглась вся математика, но от этого книга стала как раз такой, какая нужна в нашем случае. Она была недавно выпущена в русском переводе, так что ее до сих пор можно найти в книжных магазинах.

Т. Кормен, Ч. Лейзерсон, Р. Ривест, "Алгоритмы: построение и анализ." В книге используется минимум математических методов, при этом все они достаточно подробно объясняются перед использованием, таким образом ее можно порекомендовать в качестве дальнейшего чтения. Издавалась МЦНМО, я ее постоянно встречаю в книжных магазинах, так что проблем с ее приобретением в случае необходимости быть не должно. Стоит она относительно дорого, но это вполне оправдано.

Д. Кнут, "Искусство программирования." Эта книга — лучший и, фактически, самый сложный учебник по программированию, несмотря на то, что чаще всего его используют как справочник. Нет, это действительно учебник, причем очень хорошо продуманный. На самом деле я не очень надеюсь на то, что учащийся последних классов школы сможет сесть и осилить его, но если такое все-таки случится, то я могу только порадоваться за него. Книга в любом случае понадобится в дальнейшем, она попросту обязательна для прочтения любому программисту, так что если есть возможность приобрести три этих относительно дорогих тома, приобретайте не задумываясь. Кстати сказать, на lib.ru есть набранные в TeX'е полтора тома первого издания "Искусства программирования", так что если средств на приобретение книги нет, то, как вариант, можно заняться и воровством.

Б. Кернинган, Д. Ричи, "Язык программирования C." Очень хорошая книга, такая же практическая, как и сам язык C. Рекомендую читать именно ее, когда придет время к изучению С, лучше про него ничего не написано. Второе издание недавно вышло и лежит в книжных магазинах.

Б. Страуструп, "Язык программирования C++." В отличие от аналогичной книги по C (аналогичной в том смысле, что тоже написана автором языка), эта книга не практическая, а, скорее, философская. Она очень сложна для восприятия и поэтому мне всегда крайне неловко советовать ее для изучения C++, но другого варианта просто не существует, так как большая часть остальных книг по C++ написаны как будто о другом языке: кто-то описывает Паскаль, кто-то Smalltalk, кто-то C или ассемблер. Поэтому читать придется Страуструпа, но это и к лучшему. Книга действительно о философии программирования, а отдельная глава о проектировании программных продуктов, на мой взгляд, лучше многих книг подобной тематики. В общем, когда наступит время изучать C++, его можно изучать только по этой книге, хотя это и трудно.

Э. Дейкстра, "Дисциплина программирования." Опять же непростая книга, но если вы осилили Страуструпа и Кнута, то она будет вам по зубам. Эта книга как вершина некоторого холма, она сама по себе не даст особенно много нового в практических знания по отношению к информации из предыдущих книг, но позволит структурировать уже накопленные знания; кроме того, я уверен, что если все читать примерно в той последовательности, в которой книги находятся в моем списке, то после ее прочтения откроются совершенно новые горизонты в изучении информатики. Книгу, опять же, надо читать, она попросту входит в джентельментский набор программиста. К сожалению, эта книга не переиздавалась в последнее время, так что найти ее можно только либо у знакомых, либо в библиотеке.

Отдельной категорией я бы хотел выделить книги, основанные на личном опыте авторов по созданию программных комплексов. Все эти издания стоит читать только после того, как предыдущая часть списка в основном уже будет усвоена. И не надо обманывать себя! Усвоение это не просто беглый просмотр страниц, это понимание материала, изложенного в книгах. Индекс доверия описанных ниже книг высок, но только в том случае, если вы правильно поняли авторов — уж очень скользкая тема и слишком много трактовок. Таким образом, читать надо, при этом, когда вы окажетесь в этих ситуациях, вы их сразу же узнаете. Грубо говоря, по форме искр из глаз можно будет понять на какие грабли наступили без повторного "контрольного" попадания на те же грабли.

Ф. Брукс, "Мифический человеко-месяц." Книга о том, как создаются программные системы. Отличительная черта — реальность, никаких новомодных диаграммок или графиков, только личный опыт автора и его мысли; материал изложен очень легко и, на первый взгляд, тривиален. Но поверьте мне, во время реальной работы вы столкнетесь со всеми теми проблемами, которые описаны у Брукса. Все это будет, несмотря на известные предупреждения, поэтому не помешает узнать об этих проблемах.

Э. Йордон, "Путь камикадзе." Не настолько легкая по изложению книга, как предыдущая, но полезная в том смысле, что может несколько отрезвить программиста, в первый раз устраивающегося на работу. Содержит достаточно много всяких гадостей об этой профессии, лейб-мотивом книги служит утверждение о том, что жизнь дается только одна а здоровья потом не купишь. Очень правильная книга, жалко только то, что является лишь констатацией фактов и не содержит рецептов по исцелению. Таким образом, по этой книге можно узнать правду о трудностях программирования.

В окончании этого списка приведу пару книг с несколько меньшим "индексом доверия", чем у предыдущих, назовем их "сборниками правил." Читая подобные книги просто необходимо помнить, что в любом правиле есть исключения и что важно знать не столько сами правила, сколько причины их возникновения. Вообще, "правило" это не инструкция о том, как сделать хороший программный продукт, таких инструкций не существует; "правило" это всего-лишь декларация каким-либо программистом своего опыта, то есть того, что он считает важным. При этом он обязательно о чем-либо забудет… Наверное, очень хорошо просматривать подобные книги примерно раз в год, чтобы по своим реакциям на текст отслеживать собственные изменения. Итак:

А. Голуб, "Правила программирования на C и C++." Опять же, очень легкая книга, вся состоит из рецептов счастья. По ней очень хорошо отслеживается характер самого автора, что, в общем-то, тоже неплохо. Читается запоем за несколько дней, по некоторым из правил с автором хочется спорить, а за другие, наоборот, хочется пожать руку. В общем, читайте и помните о том, что правила не только полезны, но и вредны.

Б. Кернинган, Р. Пайк, "Практика программирования." Здесь правила появляются по ходу решения той или иной практической задачи, что предоставляет книге особенную ценность. Авторы показывают свои приемы отладки программ, измерения производительности, оптимизации и т.д. В профессионализме авторов сомневаться не стоит, но к правилам все равно надо придираться. Книга появилась в переводе относительно недавно, поэтому ее можно спокойно купить в магазинах.

На этом список книг я закончу. В него не попало громадное количество других хороших книг, но перечислять их все слишком сложно и не нужно, так как можно запросто испугать обилием названий. В любом случае, этот список книг примерный, но, я уверен, что прочитав и прочувствовав их вы обязательно состоитесь как программист. Понятно, что эти книги изобилуют упражнениями, так что выполняя их хотя бы частично вы не останетесь без практики и опыта.

Заметьте, что в список книг не попало ни одной по какой-либо современной технологии или аппаратуре. Могу объяснить почему: подобные вещи быстро устаревают, кроме того, скорее всего, вы сами попытаетесь их изучать и что-либо делать, а технологий такое великое количество, что порекомендовать книгу по каждой попросту невозможно, да и не в моих это силах. Поэтому изучайте какую угодно "модную технологию", все равно через несколько лет она либо будет выглядеть по другому, либо вокруг нее будет совершенно неузнаваемый интерфейс. Опять же, на мой взгляд (я не настаиваю) сейчас интереснее всего изучать архитектуру современных процессоров и сети.

Кстати сказать, есть и неизменяемые вещи. API Unix'а, к примеру (posix), но это святое. Это почти религия. (на всякий случай поясню — этот абзац шутка, хотя в ней есть и доля правды)

Есть другая проблема: как отличить плохую книгу от хорошей? Могу лишь описать свои действия в книжном магазине; стоит пояснить, что в свое время (на первых курсах института) я покупал практически любую книгу компьютерной тематики, которая появлялась на прилавках; на книги я мог истратить практически все имеющиеся в наличии деньги. Сейчас и денег много больше, и переводных книг больше, а покупаю я их очень редко. Уж очень много всякой откровенной глупости было издано, к сожалению. Тем не менее, я точно знаю, что если в книге часто попадаются фрагменты пользовательского интерфейса той или иной среды программирования, то книга уже точно никуда не годится. Я уверен, что в хорошей книге не может быть инструкций по работе с целевой операционной системой, мне очень сложно себе представить, чтобы программист не умел выполнять простейшие пользовательские действия. В общем, в хороших книгах никогда не опускаются до "слюнтяйства."
1 комментарий RSS
avatar
Д. Кнут, «Искусство программирования», том 1-3
С. Макконнелл, «Совершенный код»
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.