Найти в Дзене
Physics.Math.Code

20 самых рекомендуемых книг для программистов на русском языке

В интернетах были проанализировали миллионы вопросов и ответов в крупнейшем сообществе программистов Stack Overflow. Всё для того, чтобы найти книги, на которые чаще всего ссылаются разработчики. Также своими мнениями насчёт некоторых изданий поделились отечественные эксперты сообщества Physics.Math.Code.

1. «Эффективная работа с унаследованным кодом», Майкл К. Физерс

-2

Кроме того, в этой книге представлены 24 способа разрыва зависимостей, помогающих работать с элементами программного обеспечения обособленно, чтобы сделать внесение изменений в код более безопасным. Учитесь извлекать максимум пользы из унаследованных систем, повышая их производительность, функциональность, надежность и сопровождаемость! Можете ли вы без особого труда изменить код и тут же получить ответную реакцию на внесенные изменения? Насколько понятен этот код? Если вы ответите на эти вопросы отрицательно, значит, вы имеете дело с унаследованным кодом и понапрасну тратите время и средства на разработку. В своей книге Майкл Физерс предлагает полноценные стратегические приемы эффективной работы с крупными базами унаследованного нетестированного кода. В основу этой книги положен материал, подготовленный автором к известным семинарам, организуемым компанией Object Mentor, включая приемы, которым автор обучил сотни разработчиков, технических руководителей и тестирующих программное обеспечение подчинять себе непослушные унаследованные системы.
В этой книге освещаются следующие вопросы:
● Представление о механизмах внесения изменений в программное обеспечение, включая ввод новых свойств, устранение программных ошибок, улучшение структуры кода, оптимизацию производительности.
● Перенос унаследованного кода в средства тестирования.
● Написание тестов, препятствующих внесению новых ошибок в код.
● Применение методов, подходящих для любого языка или платформы, с примерами кода на Java, C++, C и C sharp.
● Точное выявление мест в коде, где требуется внести изменения.
● Работа с унаследованным кодом, который не является объектно-ориентированным.
● Обращение с приложениями, у которых, на первый взгляд, нет вообще никакой структуры.

2. «Приёмы объектно-ориентированного проектирования. Паттерны проектирования», Эрих Гамма и другие

-3

В предлагаемой книге описываются простые и изящные решения типичных задач, возникающих в объектно-ориентированном проектировании. Паттерны появились потому, что многие разработчики искали пути повышения гибкости и степени повторного использования своих программ. Найденные решения воплощены в краткой и легко применимой на практике форме. Авторы излагают принципы использования паттернов проектирования и приводят их каталог. Таким образом, книга одновременно решает две задачи. Во-первых, здесь демонстрируется роль паттернов в создании архитектуры сложных систем. Во-вторых, применяя содержащиеся в справочнике паттерны, проектировщик сможет с легкостью разрабатывать собственные приложения. Издание предназначено как для профессиональных разработчиков, так и для программистов, осваивающих объектно-ориентированное проектирование.

3. «Чистый код. Создание, анализ и рефакторинг», Роберт К. Мартин

-4

Даже плохой программный код может работать. Однако если код не является "чистым", это всегда будет мешать развитию проекта и компании-разработчика, отнимая значительные ресурсы на его поддержку и "укрощение". Эта книга посвящена хорошему программированию. Она полна реальных примеров кода. Мы будем рассматривать код с различных направлений: сверху вниз, снизу вверх и даже изнутри. Прочитав книгу, вы узнаете много нового о коде. Более того, вы научитесь отличать хороший код от плохого. Вы узнаете, как писать хороший код и как преобразовать плохой код в хороший.
Книга состоит из трех частей. В первой части излагаются принципы, паттерны и приемы написания чистого кода; приводится большой объем примеров кода. Вторая часть состоит из практических сценариев нарастающей сложности. Каждый сценарий представляет собой упражнение по чистке кода или преобразованию проблемного кода в код с меньшим количеством проблем. Третья часть книги - концентрированное выражение ее сути. Она состоит из одной главы с перечнем эвристических правил и "запахов кода", собранных во время анализа. Эта часть представляет собой базу знаний, описывающую наш путь мышления в процессе чтения, написания и чистки кода.

4. «Предметно-ориентированное проектирование», Эрик Эванс

-5

Классическая книга Э.Эванса освещает наиболее общий, стратегический круг вопросов, связанных с объектно-ориентированной разработкой программного обеспечения. Это переработка и структуризация знаний о предметных областях, применение типовых архитектурных шаблонов, построение и анализ моделей предметных областей, проектирование программных объектов с точки зрения качества их взаимодействия и передачи логической структуры знаний, организация программ на основе крупномасштабных структур, выработка общего языка и стратегии коммуникации в группе. Подход автора строится на динамичном рефакторинге модели и постоянной дистилляции знаний. Это позволяет достигнуть высокой степени гармонии между логикой предметной области и кодом программы, а также достаточной гибкости программной архитектуры для целей удобной доработки и интеграции программного обеспечения. Книга насыщена практическими примерами из реальных проектов.
Мировое сообщество программистов признает, что моделирование предметных областей - ключевой раздел проектирования программного обеспечения. В моделях предметных областей разработчики выражают сложные функции своих программ, реализуя их затем в таком виде, который отвечает реальным потребностям пользователей. Но несмотря на очевидную важность предмета, существует очень мало пособий по эффективному внедрению моделирования предметных областей в практику разработки программ.
Книга Эрика Эванса заполняет этот пробел. Она посвящена не отдельным технологиям, а систематическому предметно-ориентированному подходу. В ней представлен широкий набор приемов и методик, основанных на практическом опыте, и фундаментальных принципов, помогающих в реализации программных проектов из сложных предметных областей. Органично переплетая практику проектирования и реализации программ, эта книга содержит множество фактических примеров, иллюстрирующих применение общих стратегических принципов в реальных программных проектах.
Из книги читатель узнает, как с помощью модели предметной области придать разработке сложной системы нужную направленность и динамику. Выделены основные приемы и образцы-шаблоны, образующие общий язык группы разработчиков. Особо подчеркивается необходимость рефакторинга не только кода, но и модели в его основе, что в сочетании с итерационной agile-методикой приводит к углублению знаний о предметной области и повышению качества взаимодействия между специалистами и программистами. Подход книги строится именно на этом фундаменте, предлагая модели и архитектуры для систем и организаций любой сложности.

5. «JavaScript: сильные стороны», Дуглас Крокфорд

-6

Любой язык программирования имеет свои сильные и слабые стороны, однако язык JavaScript в большей степени состоит из последних, так как был разработан в спешке и практически не отлаживался. В этой книге среди множества самых ужасных JavaScript-конструкций выделены наиболее надежные, понятные и удобные в сопровождении - то подмножество языка, которое позволяет создавать по-настоящему расширяемый и эффективный код. Автор - уважаемый среди разработчиков эксперт в области JavaScript - выделяет массу интересных идей, которые делают JavaScript прекрасным объектно-ориентированным языком программирования. Эта книга откроет вам красивый, элегантный, простой и выразительный язык программирования, позволяющий создавать эффективный код независимо от того, управляете вы библиотеками объектов или просто пытаетесь заставить Ajax работать быстрее. Если вы разрабатываете сайты или приложения для Интернета, эта книга вам просто необходима.

6. «Шаблоны корпоративных приложений», Мартин Фаулер и другие

-7

Создание компьютерных систем — дело далеко не простое. По мере того как возрастает их сложность, процессы конструирования соответствующего программного обеспечения становятся все более трудоемкими, причем затраты труда растут экспоненциально. Как и в любой профессии, прогресс в программировании достигается исключительно путем обучения, причем не только на ошибках, но и на удачах — как своих, так и чужих. Книга дает ответы на трудные вопросы, с которыми приходится сталкиваться всем разработчикам корпоративных систем. Автор, известный специалист в области объектно-ориентированного программирования, заметил, что с развитием технологий базовые принципы проектирования и решения общих проблем остаются неизменными, и выделил более 40 наиболее употребительных подходов, оформив их в виде типовых решений. Результат перед вами — незаменимое руководство по архитектуре программных систем для любой корпоративной платформы.
Это своеобразное учебное пособие поможет вам не только усвоить информацию, но и передать полученные знания окружающим значительно быстрее и эффективнее, чем это удавалось автору. Книга предназначена для программистов, проектировщиков и архитекторов, которые занимаются созданием корпоративных приложений и стремятся повысить качество принимаемых стратегических решений.

7. «Совершенный код. Мастер-класс», Стив Макконнелл

-8

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

8. «Рефакторинг. Улучшение существующего кода», Мартин Фаулер и другие

-9

Подход к улучшению структурной целостности и производительности существующих программ, называемый рефакторингом, получил развитие благодаря усилиям экспертов в области ООП, написавших эту книгу. Каждый шаг рефакторинга прост. Это может быть перемещение поля из одного класса в другой, вынесение фрагмента кода из метода и превращение его в самостоятельный метод или даже перемещение кода по иерархии классов. Каждый отдельный шаг может показаться элементарным, но совокупный эффект таких малых изменений в состоянии радикально улучшить проект или даже предотвратить распад плохо спроектированной программы. Мартин Фаулер с соавторами пролили свет на процесс рефакторинга, описав принципы и лучшие приемы его осуществления, а также указав, где и когда следует начинать углубленное изучение кода с целью его улучшения. Основу книги составляет подробный перечень более 70 методов рефакторинга, для каждого из которых описываются мотивация и техника испытанного на практике преобразования кода с примерами на Java. Рассмотренные в книге методы позволяют поэтапно модифицировать код, внося каждый раз небольшие изменения, благодаря чему снижается риск, связанный с развитием проекта.

9. «Паттерны проектирования», Эрик Фримен, Элизабет Фримен и другие

-10

В мире постоянно кто-то сталкивается с такими же проблемами программирования, которые возникают и у вас. Многие разработчики решают совершенно идентичные задачи и находят похожие решения. Если вы не хотите изобретать велосипед, используйте готовые шаблоны (паттерны) проектирования, работе с которыми посвящена эта книга. Паттерны появились, потому что многие разработчики искали пути повышения гибкости и степени повторного использования своих программ. Найденные решения воплощены в краткой и легко применимой на практике форме. Особенностью данного издания является уникальный способ подачи материала, выделяющий серию «Head First» издательства OReilly в ряду множества скучных книг, посвященных программированию. Книга будет интересна широкому кругу веб-разработчиков, от начинающих до профессионалов, желающих освоить работу с паттернами проектирования.

10. «Язык программирования C», Брайан У. Керниган, Деннис М. Ритчи

-11

Классическая книга по языку С, написанная самими разработчиками этого языка и выдержавшая в США уже 34 переиздания! Книга является как практически исчерпывающим справочником, так и учебным пособием по самому распространенному языку программирования. Предлагаемое второе издание книги было существенно переработано по сравнению с первым в связи с появлением стандарта ANSI С, для которого она частично послужила основой. Книга не рекомендуется для чтения новичкам; для своего изучения она требует знания основ программирования и вычислительной техники. Книга предназначена для широкого круга программистов и компьютерных специалистов. Может использоваться как учебное пособие для вузов.

11. «Эффективное использование С++. 55 верных способов улучшить структуру и код ваших программ», Скотт Майерс

-12

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

12. «Экстремальное программирование: разработка через тестирование», Кент Бек

-13

Возвращение знаменитого бестселлера. Изящный, гибкий и понятный код, который легко модифицировать, который корректно работает и который не подкидывает своим создателям неприятных сюрпризов. Неужели подобное возможно? Чтобы достичь цели, попробуйте тестировать программу еще до того, как она написана. Именно такая парадоксальная идея положена в основу методики TDD (Test-Driven-Development - разработка, основанная на тестировании). Бессмыслица? Не спешите делать скороспелые выводы. Рассматривая применение TDD на примере разработки реального программного кода, автор демонстрирует простоту и мощь этой методики. В книге приведены два программных проекта, целиком и полностью реализованных с использованием TDD. За рассмотрением примеров следует обширный каталог приемов работы в стиле TDD, а также паттернов и рефакторингов, имеющих отношение к TDD. Книга будет полезна для любого программиста, желающего повысить производительность своей работы и получить удовольствие от программирования.

13. «Алгоритмы. Построение и анализ», Томас Х. Кормен и другие

-14

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

Первое издание книги "Алгоритмы. Построение и анализ" давно стало стандартным справочным руководством для профессионалов и учебным пособием для университетов. Второе издание было дополнено новыми главами, раскрывающими такие темы, как вероятностный анализ и рандомизированные алгоритмы, линейное программирование. Третье издание также существенно дополнено и пересмотрено. В него вошли две совершенно новые главы, посвященные деревьям ван Эмде Боаса и многопоточным алгоритмам, а глава, посвященная рекуррентности, существенно расширена. Изменена подача такого материала, как динамическое программирование и жадные алгоритмы, и введено новое понятие потока, основанного на ребрах, в материале о транспортных сетях. В третье издание книги "Алгоритмы. Построение и анализ" также было добавлено множество новых упражнений и задач.

Фундаментальный труд "Алгоритмы. Построение и анализ" известных специалистов в области информатики достоин занять место на полке любого человека, чья деятельность так или иначе связана с вычислительной техникой и алгоритмами:

  • для профессионала эта книга может служить настольным справочником,
  • для преподавателя - пособием для подготовки к лекциям и источником интересных нетривиальных задач,
  • для студентов и аспирантов - отличным учебником.

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

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

Томас Кормен - профессор информатики в колледже Дартмута и бывший директор Института литературы и риторики Дартмутского колледжа. Чарльз Лейзерсон - профессор информатики и электротехники в Массачуссетском технологическом институте, где также работает и профессор Рональд Ривест. Клиффорд Штайн - профессор организации производства и исследования операций в Колумбийском университете.
Отзывы о книге:

"В свете взрывного роста количества данных и распространения вычислительных приложений эффективные алгоритмы востребованы в еще большей степени, чем ранее. Эта прекрасно написанная, тщательно продуманная и организованная книга является отличным введением в разработку и анализ алгоритмов. Первая ее половина представляет собой эффективный учебник теории алгоритмов, а вторая в большей степени предназначена для научных работников и любознательных студентов, которые хотели бы получить дополнительные знания об этой интересной науке".
Шан-Хуа Тенг, Университет Южной Каролины
"Это настоящая библия в указанной области, исчерпывающий учебник, охватывающий весь спектр современных алгоритмов: от быстрых алгоритмов и структур данных до алгоритмов с полиномиальным временем работы для решения очень сложных задач, от классических алгоритмов теории графов до специализированных алгоритмов поиска подстрок, вычислительной геометрии и теории чисел. Нельзя не упомянуть появившиеся в третьем издании деревья ван Эмде Боаса и многопоточные алгоритмы, важность которых постоянно увеличивается".
Дэниел Шпильман, факультет информатики Йельского университета
"Как преподаватель и исследователь в области алгоритмов с более чем двадцатилетним стажем, могу с уверенностью утверждать, что книга Кормена - лучший из встречавшихся мне учебников. Это умный, энциклопедичный и современный подход к изучению алгоритмов; наш факультет продолжит использовать эту книгу как в качестве учебника для студентов и аспирантов, так и в качестве рекомендуемого справочного пособия".
Габриэль Робинс, факультет информатики Университета Вирджинии

14. «Регулярные выражения», Джеффри Фридл

-15

Книга Джеффри Фридла "Регулярные выражения" откроет перед вами секрет высокой производительности. Тщательно продуманные регулярные выражения помогут избежать долгих часов утомительной работы и решить проблемы за 15 секунд. Ставшие стандартной возможностью во многих языках программирования и популярных программных продуктах, включая Perl, PHP, Java, Python, Ruby, MySQL, VB.NET, C# (и других языках платформы .NET), регулярные выражения позволят вам автоматизировать сложную и тонкую обработку текста.
В третье издание включена информация о РНР и его мощном механизме регулярных выражений. Кроме того, обновлены и дополнены сведения о других языках программирования, включая расширенное и углубленное описание пакета java.util.regex компании Sun, при этом особое внимание уделено различиям между Java 1.4.2 и Java 1.5/1.6. Рассматривается принцип действия механизма регулярных выражений, сравниваются функциональные возможности различных языков программирования и инструментальных средств, подробно обсуждается оптимизация, которая дает основную экономию времени! Вы научитесь правильно конструировать регулярные выражения для самых разных ситуаций и сможете сразу же использовать предлагаемые ответы для выработки элегантных и экономичных практических решений широкого круга проблем. Кроме того, автор демонстрирует наиболее распространенные ошибки и показывает, как их избежать.

15. «CLR via C sharp. Программирование на платформе Microsoft.NET Framework 4.5 на языке C sharp », Джеффри Рихтер

-16

Эта книга, выходящая в четвертом издании и уже ставшая классическим учебником по программированию, подробно описывает внутреннее устройство и функционирование общеязыковой исполняющей среды (CLR) Microsoft .NET Framework версии 4.5. Написанная признанным экспертом в области программирования Джеффри Рихтером, много лет являющимся консультантом команды разработчиков .NET Framework компании Microsoft, книга научит вас создавать по-настоящему надежные приложения любого вида, в том числе с использованием Microsoft Silverlight, ASP.NET, Windows Presentation Foundation и т.д. Четвертое издание полностью обновлено в соответствии со спецификацией платформы .NET Framework 4.5, а также среды Visual Studio 2012 и C# 5.0.

16. «Современное проектирование на C++», Андрей Александреску

-17

В книге "Современное проектирование на C++" изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно-ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге Александреску "Современное проектирование на C++" изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга Александреску "Современное проектирование на C++" предназначена для опытных программистов на С++

17. «Microsoft ASP.NET 2.0. Базовый курс», Дино Эспозито

-18

Эта книга - подробное руководство для профессионалов-разработчиков приложений ASP.NET. В ней описаны технологии создания эффективных, масштабируемых и надежных сайтов на платформе ASP.NET 2.0, обладающих разнообразным и согласованным пользовательским интерфейсом. Вы узнаете, как создавать эталонные страницы, персонализировать вывод сайта и адаптировать его к возможностям браузера, познакомитесь с широким ассортиментом средств ASP.NET для работы с данными, научитесь эффективно кэшировать информацию, аутентифицировать пользователя и авторизировать его доступ к серверным ресурсам. Книга адресована тем, кто не ограничивается прикладными сведениями, почерпнутыми из обычных учебных пособий, а намерен разобраться во всех деталях внутреннего функционирования исполняющей среды ASP.NET 2.0; состоит из 15 глав и предметного указателя.

18. «Шаблоны тестирования xUnit. Рефакторинг кода тестов», Джерард Месарош

-19

В данной книге показано, как применять принципы разработки программного обеспечения, в частности шаблоны проектирования, инкапсуляцию, исключение повторений и описательные имена, к написанию кода тестов. В части I рассматриваются теоретические основы методов разработки тестов и описываются концепции шаблонов и "запахов" тестов (признаков существующей проблемы). В частях II и III приводится каталог шаблонов проектирования тестов, "запахов" и других средств обеспечения большей прозрачности кода тестов. Кроме этого, в части III сделана попытка обобщить и привести к единому знаменателю терминологию тестовых двойников и подставных объектов, а также рассмотрены некоторые принципы их применения при проектировании как тестов, так и самого программного обеспечения. Книга ориентирована на разработчиков программного обеспечения, практикующих гибкие процессы разработки. В основном здесь рассматриваются примеры для существующих реализаций инфраструктуры xUnit, но затронуты и более новые инфраструктуры тестирования на основе данных.

19. «Компиляторы. Принципы, технологии и инструментарий», Альфред В. Ахо и другие

-20

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

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

Строгость изложения материала смягчается большим количеством практических примеров. Написание компиляторов охватывает такие области знаний, как

  • языки программирования,
  • архитектура вычислительных систем,
  • теория языков,
  • алгоритмы и технология создания программного обеспечения.

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

20. «Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET», Кржиштоф Цвалина, Брэд Абрамс

-21

Издание позволит разработчикам освоить лучшие приемы разработки многократно используемых библиотек для Microsoft .NET Framework. Расширенное и обновленное для .NET 3.5, это новое издание фокусирует внимание на разработке тех частей, которые непосредственно определяют применение в программах библиотеки классов, особенно общедоступных API. Книга облегчит работу любого .NET-разработчика, который разрабатывает код, предназначенный для других разработчиков. Она содержит аннотации к правилам, принадлежащие тридцати пяти выдающимся архитекторам и программистам .NET Framework, оживленные обсуждения причин, по которым были введены данные правила, а также примеры, показывающие, когда можно нарушить обсуждаемые правила.

21. Искусство программирования [4 тома] Дональд Кнут

-22

«Искусство программирования» (англ. The Art of Computer Programming) — фундаментальная монография известного американского математика и специалиста в области компьютерных наук Дональда Кнута, посвященная рассмотрению и анализу важнейших алгоритмов, используемых в информатике. В 1999 году книга была признана одной из двенадцати лучших физико-математических монографий столетия.

Проект написания книги был начат автором в 1962 году. Изначально планировалось выпустить её одним томом, но объём материала оказался столь большим, что количество томов было увеличено до семи. Первые три тома были изданы достаточно быстро: том 1 — в 1968 году, том 2 — в 1969 году, том 3 — в 1973 году. После этого последовал перерыв до февраля 2005 года, в котором автор опубликовал первую часть четвёртого тома. Было принято решение выпускать остальные части четвёртого тома приблизительно по две в год отдельными выпусками, после чего официально издать весь четвёртый том. На протяжении 2005—2009 годов были изданы выпуски 0, 1, 2, 3 и 4, а в 2011 году был выпущен том 4А, в который вошла информация из этих выпусков. Также в 2005 году был выпущен выпуск 1 «MMIX — RISC-компьютер для нового тысячелетия», информация из которого войдёт в новое, четвёртое издание первого тома. В 2015 году был издан выпуск 6 Satisfiability, представляющий собой среднюю треть будущего тома 4B.

Поскольку Кнут всегда считал «Искусство программирования» основным проектом своей жизни, в 1993 году он вышел на пенсию с намерением полностью сконцентрироваться на написании недостающих частей и приведении в порядок существующих. Он полагал, что на завершение работы потребуется 20 лет.

Основной чертой монографии Кнута, выгодно отличающей её от других книг, посвящённых программированию, является исключительно высоко поднятая планка качества материала и академичности изложения, а также глубина анализа рассматриваемых вопросов. Благодаря этому она стала настоящим бестселлером и настольной книгой каждого профессионального программиста. Журнал American Scientist включил «Искусство программирования» в список 12 лучших физико-математических монографий XX-го столетия вместе с работами Дирака по квантовой механике, Эйнштейна по теории относительности, Рассела и Уайтхеда по основаниям математики и немногочисленными другими.

Обложка третьего издания первого тома книги содержит цитату Билла Гейтса: «Если вы считаете себя действительно хорошим программистом…, прочитайте „Искусство программирования“ (Кнута)… Если вы сможете прочесть весь этот труд, то вам определённо следует отправить мне резюме». Впрочем, фольклор также приписывает эти слова Стиву Джобсу

Изначальный план написания книги предполагал следующую разбивку материала.

Том 1. Основные алгоритмы.
— Глава 1. Основные понятия.
— Глава 2. Информационные структуры.
Том 2. Получисленные алгоритмы.
— Глава 3. Случайные числа.
— Глава 4. Арифметика.
Том 3. Сортировка и поиск.
— Глава 5. Сортировка.
— Глава 6. Поиск.
Том 4. Комбинаторные алгоритмы.
— Глава 7. Комбинаторный поиск.
— Глава 8. Рекурсия.
Том 5. Синтаксические алгоритмы.
— Глава 9. Лексикографический поиск.
— Глава 10. Синтаксический поиск.
Том 6. Теория языков.
Том 7. Компиляторы.

Том 1. Основные алгоритмы.
Том 2. Получисленные алгоритмы.
Том 3. Сортировка и поиск.
Том 4. Комбинаторные алгоритмы.
Том 5. Синтаксические алгоритмы.
Том 6. Теория языков.
Том 7. Компиляторы.

Видеообзор книг

Скачать архив с Искусством программирования

22. Структура и Интерпретация Компьютерных Программ. [EN + RU] Structure and Interpretation of Computer Programs — SICP

-23

Книга под названием "Структура и Интерпретация Компьютерных Программ" была выпущена в далёком 1979 году. Раньше по ней преподавали вводный курс в программирование среди студентов MIT. Сейчас книга находится в свободном доступе в Интернете, и любой желающий может скачать и изучать её в своё удовольствие. Помимо книги, в сети также есть цикл видео-лекций от авторов, они расположены на ресурсе MIT OpenCourseware, мне кажется они могут неплохо дополнять друг друга по ходу изучения материала.

Чем же примечательна эта книга? Да хотя бы отзывами на Amazon :) Среди рецензентов есть такие личности как Peter Norvig и Paul Graham. К слову, сейчас у книги рейтинг 3.8 из 5, отчего некоторые известные личности недоумевают.

А если серьёзно, то это фундаментальный классический труд в области программирования (ничем не хуже небезызвестной книги The Art of Programming от Д. Кнута, которую никто не читал). Единственным непонятным моментом для меня является факт преподавания курса программирования для новичков по этой книге.

Представляю как можно напугать новоиспечённых студентов её содержимым. Интересно, есть ли в сети статистика по которой можно узнать много ли людей, посещавших этот "адский" курс, предпочли в дальнейшем поменять свой major :) Если бы организаторы
Code.org пропагандировали программирование по этой книге, получился бы знатный epic fail.

Итак, по-моему мнению, книга явно не для новичков в программировании, так как концепции в ней сложны для восприятия людьми "не нюхавшими пороху", более того, понадобится недюжинный запас мотивации и терпения, так как упражнения после каждой секции сложны и требуют от читателя изрядно "попотеть". Но награда стоит того. Я прочитал лишь первую главу этой книги (их всего 5), проработал часть упражнений и, признаюсь, почувствовал как стал лучше разбираться в некоторых вещах (обрёл какой-никакой фундамент).

СИКП — не книга про языки программирования или разработку программного обеспечения, не книга по ООП, функциональному программированию или паттернам проектирования.

СИКП — книга об информатике (computer science). Восприятии компьютеров как абстрактных машин, используемых для манипулирования данными. Несмотря на то, что книга впервые опубликована в 1979, она до сих пор не потеряла свою актуальность и не потеряет в будущем. СИКП неизменно находится в топе лучших книг по обучению программированию на протяжении десятков лет.

Стоит ли её читать? Однозначно стоит всем разработчикам на любых языках программирования с любым опытом. СИКП — достаточно сложная книга, поэтому появилось руководство, которое вы прямо сейчас читаете.

Очень краткое содержание

Абстракция с помощью функций
Элементы программ
Выражения
Вычислительные стратегии
Подстановочная модель вычислений
Функции и процессы порождаемые ими
Линейная рекурсия и итерация
Древовидная рекурсия
Функции высшего порядка
Функции как аргументы
Функции как обобщения
Функции как возвращаемые значения
Абстракция с помощью данных
Введение в абстракцию данных
Барьеры абстракции
Что такое данные?
Иерархические данные и свойство замыкания
Представление последовательностей
Иерархические структуры
Последовательности как стандартные интерфейсы
Символьные данные
Цитирование
Множественные представления абстрактных данных
Тегирование данных
Программирование управляемое данными. Аддитивность.
Модульность, Объекты и Состояние
Присваивание и локальное состояние
Преимущества присваивания
Недостатки присваивания
Модель с окружениями
Правила вычисления
Применение
Фреймы как репозитории локального состояния
Моделирование с изменяемыми данными
Изменяемый список
Представление очереди
Представление таблиц
Многозадачность
Потоки
Метаязыковые абстракции
Вычисление с помощью регистровых машин

Рекомендации

Первое, что нужно понимать: СИКП — не просто книга. Это университетский курс, записанный в виде книги. Он сложный и объёмный, его бесполезно проходить без практики. Практику придумывать не придётся. После каждой главы есть блок задач, которые авторы просят выполнить. Некоторые из них сугубо математичесские (просят что-то доказать), либо подразумевают хорошую математическую базу. Их можно и даже нужно пропускать, иначе вы можете очень быстро потерять мотивацию.

Сколько читать

СИКП условно можно разделить на две части. В первую часть входят главы 1, 2 и 3. Во вторую — 4 и 5. Разница в том, что во вторую часть входят главы, копающие очень глубоко, и пройти сквозь них может только по-настоящему увлеченный человек. По этой причине Хекслет рекомендует поставить себе планкой прохождение первых трех глав. Остальное можно с легкостью отложить на потом.

Язык

Для примеров и практики в книге используется язык Scheme (Ским), созданный авторами курса. Это один из диалектов семейства Lisp. Как и полагается любому Lisp-языку, Scheme имеет примитивный синтаксис, который можно изучить буквально за несколько часов. Он очень необычен для тех, кто имел дело только с широко распространенными языками, но обладает рядом серьезных достоинств, о которых говорится в книге.

Его выбор, в качестве основного языка для курса обоснован тем, что Scheme позволяет сосредоточиться на сути вещей вместо синтаксиса, увидеть чистые концепции в первозданном виде. Scheme как и любой Лисп, обладает невероятно высокой выразительностью благодаря тому, что в языке всё есть выражение, а инструкции отсутствуют вообще.

Вторая причина — гомоиконность. Свойство языков, в которых данные и код — одно и тоже. Этот тезис сложно понять на словах, его нужно прочувствовать на практике. Есть еще и третья причина — макросы, но они в книге не используются.

Однако, сам Scheme не развивается и уже не актуален. Его заменил язык Racket, который изначально был реализацией языка Scheme, но вырос во что-то большее. Другими словами, на базовом уровне Scheme и Racket выглядят идентично, что крайне удобно при прохождении СИКП. Хекслет рекомендует проходить СИКП именно на Racket. Специально для этого гайда мы подготовили репозиторий, который можно использовать как основу для кода. Не забудьте правильно настроить редактор. Lisp языки относятся к тем языкам, для которых нужна поддержка со стороны редактора для комфортной работы.

Оформление

На Гитхабе можно найти множество репозиториев, в которых лежат решения задач из СИКП на всех возможных языках программирования. Мы настоятельно рекомендуем поступать также: создать репозиторий в своем аккаунте и выкладывать в него все свои решения. Идеально, если каждое решение будет сопровождаться тестами. Такой подход хорош не только тем, что вы дополнительно прокачиваетесь в git и получаете дополнительную мотивацию, но и тем, что у вас появляется код, который можно показать при поиске работы. Более того, велика вероятность, что собеседовать вас будет человек, знающий про СИКП. Это добавит очков в карму и даст возможность продуктивно пообщаться.

СКАЧАТЬ Структура и Интерпретация Компьютерных Программ

23. Теория синтаксического анализа, перевода и компиляции (в 2-х томах) [1978] Ахо, Ульман Дж

-24

Том 1. Синтаксический анализ. Первый том фундаментальной монографии известных американских ученых содержит основной математический аппарат (в частности, теорию грамматик и автоматов), краткий обзор процесса компиляции, начала теории синтаксически управляемого перевода и обстоятельное изложение методов синтаксического анализа. Рассмотрены и систематизированы почти все известные алгоритмы разбора. Для некоторых из них впервые дается полное и корректное описание, для большинства доказывается корректность и оценивается сложность. Приведено большое количество упражнений.

Особенность книги в том, что она трактует теоретические вопросы в связи с потребностями реализации языков программирования, н этим она отличается от книг по системному программированию.
Книга предназначена тем, кто работает в области системного и теоретического программирования, преподает или изучает эти дисциплины, а также математикам, интересующимся приложениями теории грамматик и автоматов.

Том 2. Компиляция. Второй том фундаментальной монографии известных американских ученых посвящен методам оптимизации синтаксических анализаторов, теории синтаксически управляемого перевода, а также способам организации памяти при переводе. Большое внимание уделяется методам оптимизации объектной программы. Авторы проделали значительную работу по отбору и систематизации многочисленных результатов, полученных в последние годы; они строят изложение на едином подходе к задачам перевода и задачам оптимизации программы.

Книга предназначена тем, кто работает в области системного и теоретического программирования, преподаст или изучает эти дисциплины, а также разработчикам математического обеспечения ЭВМ.

Скачать архив со всеми книгами из статьи

Еще много полезного и интересного вы сможете найти на наших ресурсах:

Physics.Math.Code в контакте (VK)

Physics.Math.Code в telegram

Physics.Math.Code в YouTube

Репетитор IT mentor в VK

Репетитор IT mentor в Instagram