самые лучшие книги по истории программирования
9 лучших книг про IT и программирование, которые вы могли пропустить
Помните, Льюис Кэрролл писал: «Здесь приходится бежать со всех ног, чтобы только остаться на том же месте, а чтобы попасть в другое место, нужно бежать вдвое быстрее»? Это фраза прекрасно подходит для IT-мира: технологии быстро развиваются, и каждый день нужно осваивать что-то новое, чтобы оставаться востребованным специалистом. У каждого программиста наверняка есть 5-6 бумажных книг, ставших классикой. О некоторых таких книгах мы уже писали. Но чтобы оставаться востребованным кодером, надо постоянно обновлять библиотеку. В прошлом году портал DevMountain сделал подборку из семи не слишком популярных книг для начинающих программистов. Учитывалась не только оценка портала, но и отзывы на Amazon, а также рекомендации популярных блогов. Автор GeekBrains Илья Бубнов внимательно изучил этот список, а также дополнил подборку парой свежайших экземпляров.
Python Tricks: A Buffet of Awesome Python Features
Открывает наш рейтинг лучшая книга по Python, выпущенная в прошлом году. Здесь представлены best practice, лаконичные решения сложных задач, а также совсем простые примеры с пошаговым описанием.
Python Tricks идеально подойдёт тем, кто уже освоил синтаксис и основные возможности языка, но пока «плавает» в алгоритмах. С этой книгой можно сосредоточиться на практических навыках, создании чистого и, главное, рабочего кода.
The Complete Software Developer’s Career Guide
Code: The Hidden Language of Computer Hardware and Software
Чарльз Петцольд является одним из семи «пионеров Windows» — высшей награды Microsoft, вручаемой за вклад в популяризацию ОС. О программировании и IT он пишет с 1984 года. «Code:…» был впервые опубликован в 2000 году и быстро стал настоящим бестселлером. Сегодня это одна из лучших книг в мире IT благодаря простому объяснению, как код встроен в наши жизни и почему крайне полезно его изучить. Петцольд говорит об истории, развитии технологий, первых языках высокого уровня, ориентируясь на широкую аудиторию. Результат – даже ребенок поймёт описанное в «Code:…», после чего без проблем сделает первые шаги в программировании. Кстати, эта книга есть и в русском переводе.
Hacking: The Art of Exploitation, 2nd Edition
Упрощённо говоря, хакерство – это просто дисциплина, занимающаяся поиском и решением проблем в коде. Иногда это требует нетрадиционных подходов, иногда это просто использование очевидных «дыр». Благодаря этой книге читатели смогут взглянуть на мир программирования с точки зрения хакера: узнают про слабые места в криптографии и взлом через сети, а практические задания позволят любому желающему размять руки и мозг.
The Art of Invisibility: The World’s Most Famous Hacker Teaches You How to Be Safe in the Age of Big Brother and Big Data
Автор книги, Кевин Митник, называет себя «самым известным хакером в мире». Его карьера началась в 13 лет, когда он взломал систему проездных карт, чтобы бесплатно кататься на автобусе по Лос-Анджелесу. Позднее он совершил ещё несколько киберпреступлений разной сложности, пока в итоге не был пойман ФБР. В тюрьме он провёл 5 лет – с 1995 по 2000 год. Теперь Митник ведёт лекции о том, как оставаться невидимым в эпоху Большого Брата и больших данных. Эта книга – базовое пособие для новичков. Здесь не только советы общего характера, но и практические указания на то, как не надо программировать. Для опытных программистов у Митника есть книги «повышенной сложности» – «The Art of Intrusion: The Real Stories Behind the Exploits of Hackers, Intruders and Deceivers» и «The Art of Deception: Controlling the Human Element of Security».
Javascript Design Patterns
Шаблоны проектирования существуют во всех языках, JavaScript здесь не исключение. Если у вас нет фундаментального понимания, что это такое – эта книга станет отличным учебником. Всегда где-то есть начинающий программист, который борется с теми же проблемами, что и вы. И всегда есть тот, кто эту проблему уже решил. Javascript Design Patterns содержит множество проверенных решений для типовых задач, поэтому эта книга пригодится как для обучения, так и в качестве подручного помощника.
Managing Humans: Biting and Humorous Tales of a Software Engineering Manager
Майкл Лопп – ещё один автор популярного блога (Rands in Repose), который решил выпустить книгу. Лопп имеет за плечами опыт работы в Symantec, Netscape и Apple, поэтому познакомиться с этой смесью мемуаров и навигатора по карьере будет интересно как руководителям, так и рядовым специалистам. Он рассказывает, каково это – работать в Силиконовой долине, управляя «дисфункциональными яркими людьми». Этим термином Лопп описывает поведение сотрудников, игнорирующих любые различия коллег: по возрасту, полу, статусу, культуре, образованию и т.д. Независимо от того, чью сторону вы займете при прочтении книги, несколько полезных советов для себя наверняка вынесете.
Make Your Own Neural Network
Создание ИИ и нейронных сетей – актуальный тренд в IT. Несмотря на то, что почти вся практическая часть книги приведена на Python, в основе лежит математика и теория нейронных сетей в целом. «Make Your Own Neural Network» знакомит читателей с концепцией искусственного интеллекта через простые и понятные примеры. После прочтения этой книги даже те, кто ничего не понимает в программировании, получат исчерпывающие знания о нейронной сети и том, как они применяются в современном мире.
The Self-Taught Programmer: The Definitive Guide to Programming Professionally
Кори Алтофф – программист-самоучка. Когда он устроился на работу в eBay, он понял, насколько далеко находится от статуса профессионала. Эта книга предназначена для новичков, но и опытным self-taught программистам она пригодится – для развития и оттачивания профессиональных навыков. Темы предельно общие: объектно-ориентированное программирование, основы компьютерной архитектуры и алгоритмов, методы кодирования для разработки ПО.
Какие свежие или просто не зачитанные до дыр книги по программированию порекомендуете вы?
Мой топ IT книг из прошлого века, актуальных до сих пор
В этой статье автор предложил написать свои книги, которые относятся к разряду неувядающей классики. Я написал несколько книг в комментариях, а потом решил, что достойных книг гораздо больше, и решил написать статью. Если в оригинальной статье был сделан упор на электронику, то у меня будет упор на разработку программ.
Disclaimer: это мой личный топ из тех книг, которые я лично прочитал, и у которых первое издание было в прошлом веке, даже если она переиздавалась недавно (при условии актуальности именно того издания, которое было в прошлом веке).
В данном топе книги не упорядочены по важности, они все очень хорошие, но есть одна книга, которая равнее других.
Я решил разделить список книг на две части: теоретическая, относящаяся к алгоритмизации и практическая, относящаяся к реализации.
Computer Science aka Теоретическая Информатика
Перефразируя @ne555, законы математики, как и физические законы, нельзя поменять в новых версиях.
Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. Алгоритмы: построение и анализ (первое издание 1990г. и ещё без Штайна).
Эта книга является первой в моём топе среди всех IT книг (и вообще среди всех нехудожественных книг). Монументальный труд по алгоритмам. Написана очень хорошим и понятным языком. Алгоритмы не только описаны на псевдокоде, но ещё и тщательно разжёваны. А так же в каждой главе есть упражнения для закрепления материала. Книга настолько хороша, что если вы качественно изучите только эту книгу, (сделаете упражнения и самостоятельно реализуете большинство алгоритмов) и не прочитаете больше ни одной книги, то вы будете в программировании лучше большинства выпускников IT-вузов нашей страны (это моё оценочное суждение, основанное на опыте проведения собеседований). Тут недавно проскакивала статья о том, как не надо изучать программирование от @nsnurlan. Так вот, я убеждён, что человек, прочитавший (и понявший!) эту книгу от корки до корки и осиливший самостоятельно реализовать процентов 70 изложенных в ней алгоритмов (ну хорошо, хотя бы половину) на любом понравившемся языке программирования, способен получить работу программистом.
Дональд Кнут. Искусство программирования.
Ещё один монументальный труд, который берёт своё начало из шестидесятых годов. Сам труд давно стал классикой, а его автор – живой легендой. Несмотря на то, что она до сих пор пишется и дорабатывается, первые тома абсолютно не потеряли своей актуальности. Следует отметить, что книга имеет высокий порог входа и может отпугнуть некоторых людей. Например, в ней в начале первого тома в качестве упражнения «со звёздочкой» предлагается доказать великую теорему Ферма. Я бы рекомендовал эту книгу тем, кто хочет углубиться в хардкорную информатику так, чтобы мозги закипели.
Иосиф Владимирович Романовский. Дискретный анализ.
Альфред Ахо, Моника С. Лам, Рави Сети, Джеффри Ульман. Компиляторы: принципы, технологии и инструменты.
Классический учебник по компиляторам. Если вы собираетесь всерьёз заняться разработкой компилятора, эта книга, как раз, то, что надо. Но я рекомендовал бы её начать читать только после того, как вы освоите базовые алгоритмы, например, по книге Кормена.
Дэн Гасфилд. строки деревья и последовательности в алгоритмах.
Рано или поздно в любом состоявшемся проекте появляется свой класс строки. Это нормально. Не стесняйтесь этого делать.
Если мне надо что-то вспомнить про строковые алгоритмы, я всегда сначала обращаюсь к этой книге. Если вам потребовался свой класс строки, вы теперь знаете, куда идти.
Фрэнк Харари. Теория графов.
Ещё один классический труд, который никогда не устареет. Можно, конечно, сказать, что это книга по чистой математике, и в ней не обсуждаются алгоритмы поиска пути в графе, но математика и теоретическая информатика настолько переплетены, что сложно сказать, где кончается одно и начинается другое. Хотя, на мой взгляд, теоретическая информатика является разделом математики, но это уже философский вопрос. Тем не менее, графы являются важной частью информатики и (программирования в целом), и, порой, в разработке ПО появляются задачи, для решения которых не хватает знаний из книги Кормена.
Григорий Михайлович Фихтенгольц. Основы математического анализа.
Куда же без матана.
Математику уже затем учить надо,что она ум в порядок приводит
Но причина, почему ты в принципе воспринимаешь мир как-то адекватно, состоит в том, что когда-то ты мог это [взять интеграл] сделать, и твой мозг глубоко математичен.
© математик Алексей Савватеев про экономику и теорию игр, но к программированию тоже применимо.
Борис Павлович Демидович. сборник задач и упражнений по математическому анализу.
Я сейчас очень рад тому, что, когда я учился в университете, у меня не было Wolfram Mathematica (не знаю, умела она тогда аналитически брать интегралы или нет; кажется, не умела, но это не точно) и я все положенные 70 интегралов взял сам.
Разработка
Фредерик Брукс. Мифический человеко-месяц.
Несмотря на то, что IT мир со времени написания этой книги сильно изменился, очень многие мысли из неё актуальны до сих пор. Например, глава «Системный программный продукт»: понятно, что сейчас команды разработчиков пишут существенно больше 1000 операторов в год, однако подход к оценке трудозатрат не изменился: программный продукт стоит раза в три дороже просто работающей программы. А также глава, давшая название всей книге и сформулированный в ней закон Брукса:
Если проект не укладывается в сроки, то добавление рабочей силы задержит его еще больше.
Эрих Гамма, Джон Влисидис, Ральф Джонсон, Ричард Хелм, (Они же Gang of Four aka GoF aka «Банда четырёх»). Приемы объектно-ориентированного проектирования. Паттерны проектирования.
В новом издании книга называется Паттерны объектно-ориентированного проектирования.
Как нетрудно догадаться из названия, книга о том, как проектировать ПО. Данная книга обязательна к прочтению всем разработчикам ПО.
Мартин Фаулер. Рефакторинг. Улучшение существующего кода.
Ещё одна книга, которая повлияла на развитие всей отрасли. Вместе с Кентом Беком придумал термин «код с душком»
Если что-то плохо пахнет, это что-то надо поменять
Книга описывает, что таке рефакторинг, принципы проведения рефакторинга и содержит большой каталог рефакторингов. Помимо этого описаны best practices в разработке ПО (см., например, главу «Рефакторинг и производительность»).
Брайан Керниган, Деннис Ритчи. Язык программирования С.
Учебник языка С от его автора. Написан настолько хорошо, что, несмотря на то, что у С несколько раз обновился стандарт, до сих пор является одной из лучших книг для его изучения.
Брайан У. Керниган, Роб Пайк. Практика программирования.
Книга о том, что такое хорошо и что такое плохо в программировании для новичков. Написана простым языком и понятным языком. Она затрагивает практически все аспекты программирования, начиная от именования переменных и заканчивая написанием производительных, надёжных и переносимых систем. Все советы из неё обоснованы и подкреплены примерами из практики. Когда я передавал её племяннику, я поймал себя на мысли, что не могу воспроизвести ни строчки из неё. Но, полистав её, я пришёл к выводу, что уже автоматически следую практически всем советам из неё во время работы. Особенно ценно в ней то, что в каждой главе есть раздел «Дополнительная литература», для того, чтобы углубиться в тему. А также из этого раздела я нашёл следующую книгу из данного топа.
Стив Макконнелл. Совершенный код. Практическое руководство по разработке программного обеспечения.
А это моя любимая книга из данного раздела. Она долго была моей настольной книгой. О ней даже здесь была статья. Невероятно полезная книга, которую просто обязан прочитать каждый новичок. При этом, она будет полезна и для людей с опытом.
Топ-10 книг для разработчика
Совершенствоваться в сфере разработки — это не только писать хороший код, но и читать о том, как его писать.
Привет, хабр! Продолжаю делиться полезными подборками. Совсем недавно я опубликовал 2 поста с перечнем Github репозиториев: Часть1 и Часть2. На этот раз предлагаю вашему вниманию подборку полезных книг для разработчиков. Кому интересно — добро пожаловать под кат.
Помимо всех благ современного мира — подкастов, видео, блогов и т. д., чтение хорошей книги — это то, что все еще пользуется спросом. Я прочитал много хороших книг, посвященных технологиям и разработке ПО, и до сих пор читаю, чтобы быть в курсе новых шаблонов и лучших практик.
Найти отличные книги для разработки программного обеспечения — непростая задача, так как экосистема меняется настолько быстро, что многие вещи устаревают в короткие сроки. Особенно это касается тех книг, в которых описана определенная версия языка программирования.
Тем не менее, существуют “вечные” книги: они посвящены мета-темам, шаблонам проектирования или общим представлениям.
Следующая подборка состоит из самых популярных и самых читаемых книг. Книги, которые все еще актуальны сегодня и которые опытные разработчики часто рекомендуют начинающим специалистам. Я знаю, что время драгоценно, особенно для разработчиков. Но если вам удастся прочитать некоторые из этих книг, это определенно поможет вам и вашей карьере. Обратите внимание, что книги из списка не расположены по степени значимости — они все одинаково рекомендованы к прочтению.
1. Cracking the Coding Interview или Карьера программиста
Настоятельно рекомендую эту книгу всем тем, кто хочет основательно подготовиться к интервью. Автор, Г. Лакман Макдауэлл, опытная инженер-программист, была и интервьюером, и кандидатом. Она научит вас находить скрытые детали в вопросах, разбивать проблемы на небольшие куски, а также поможет улучшить навык обучения.
Кроме того, автор предоставляет нам 189 реальных вопросов на интервью и их реальных решений, чтобы вы могли хорошо подготовиться к следующему интервью.
2. Code Complete или Совершенный код
Эта книга Стива Макконнелл — одна из тех книг, которую каждый программист, скорее всего, листал хотя бы раз в жизни.
Это всесторонний анализ проектирования программного обеспечения, хорошо написанный и востребованный в отрасли. В книге освещаются такие темы как дизайн, написание кода, отладка и тестирование.
Эта книга, вероятно, станет самым окупаемым вложением для разработчиков с профессиональным опытом от одного до трех лет. Но я также рекомендую издание и новичкам, так как оно помогает на старте разработки ПО.
Основной вывод: разработчики должны управлять сложностью и писать код, который легко поддерживать и читать как самому себе, так и другим.
3. Clean Code или Чистый код
Книга Роберта Мартина (или дяди Боба) “Чистый код” — одна из самых популярных книг по программированию. Она была написана для обучения инженеров-программистов принципам написания чистого программного кода. Книга содержит множество примеров, показывающих, как выполнять рефакторинг кода с целью сделать его более читабельным и поддерживаемым. Но учитывайте то, что издание ориентировано именно на Java. Хотя некоторые из шаблонов и техник распространяются на общее программирование и на другие языки, основной аудиторией книги являются Java-разработчики.
Следует также отметить, что книга вышла в 2008 году. Некоторая информация, например, форматирование кода, сегодня менее актуальна из-за доступных инструментов и IDE сред. Но все же, это отличная книга.
4. Refactoring или Улучшение проекта существующего кода
Второе издание книги Мартина Фаулера объясняет, что такое рефакторинг на самом деле, впрочем, как и первое издание, выпущенное 20 лет назад. После прочтения книги вы найдете ответы на следующие вопросы:
5. Head First Design Patterns или Паттерны проектирования
Эта книга, у которой сразу 4 автора, учит вас шаблонам проектирования и лучшим практикам, используемым другими разработчиками для создания функционального, повторно используемого, и гибкого ПО. В издании много наглядных представлений, которые помогут вам легче освоить новые концепции.
Если вы хотите узнать о таких вещах, как фабрики, синглтоны, внедрение зависимостей и т.д., эта книга — отличный выбор. Примеры написаны на Java, поэтому было бы неплохо знать этот, либо любой другой объектно-ориентированный язык.
6. Patterns of Enterprise Application Architecture или Шаблоны корпоративных приложений
Еще одна отличная книга Мартина Фаулера, посвященная разработке корпоративных приложений. После краткого руководства Мартин предлагает вам более 40 шаблонов в качестве решения распространенных проблем при разработке корпоративных приложений. В книге вы найдете большое количество UML визуализаций и примеров кода, написанных на Java или C#.
Прочитав книгу, вы сможете разделять корпоративные приложения на уровни, знать основные подходы к организации бизнес-логики, использовать MVC шаблоны для организации веб-приложений и управлять параллельной обработкой нескольких транзакций.
Однако, книга довольно старая, поэтому современные концепции, например REST, cloud или JSON, не упоминаются. Это хороший материал для изучения, но все же будьте к нему критичны.
7. Working Effectively with Legacy Code или Эффективная работа с унаследованным кодом
В книге автор предлагает стратегии для работы с большими, непокрытыми тестами базами legacy-кода. Вы можете подумать: “На дворе 2020 год. Legacy-код больше не проблема, ведь у нас есть чистый, поддерживаемый код и микросервисы.” Позвольте мне заверить вас, что это ошибочное представление. Legacy-код по-прежнему является одной из самых сложных проблем для многих компаний.
Прочитав эту книгу, вы сможете понять общие механизмы изменения программного обеспечения, например: добавление функций, исправление багов, оптимизация производительности и улучшение проектирования. Кроме того, вы узнаете, как подготовить унаследованный код к тестированию и определить, где его необходимо изменить.
В книге приведены примеры, написанные на Java, C ++, C и C #, а также в ней есть советы по работе с legacy-кодом, который не относится к объектно-ориентированному.
8. The Clean Coder или Идеальный программист
Еще одна книга дядюшки Боба, которая учит методам, практикам и инструментам настоящего мастерства в области программного обеспечения. Она содержит практические советы по оценке проектов, написанию кода, рефакторингу и тестированию.
Прочитав эту книгу, вы научитесь справляться с конфликтами, плотным графиком и нерациональностью менеджеров; научитесь бороться с постоянным давлением и избегать выгорания; узнаете, как управлять своим временем, как писать качественный код и способствовать созданию среды, в которой разработчики и команды могут успешно развиваться.
Эта книга довольно популярна, но я думаю, что не все в ней — чистое золото. Она содержит много историй из жизни и гипотетических разговоров, которые в большинстве случаев приводят к выводу, что разработчик в конечном счете несет ответственность за то, что он делает. Иногда такие отрывки заходят слишком далеко: в одном из таких отрывков разработчику, чей код породил ошибку, предлагается компенсировать компании финансовые потери.
Поэтому я советую прочесть эту книгу внимательно и с долей критики.
9. Introduction to Algorithms или Алгоритмы: построение и анализ
Это издание — не что иное, как обязательное руководство к алгоритмам различного типа. Книга очень широкого профиля и подойдет как начинающим, так и профессионалам. Материал изложен четко и раскрывает саму суть вопроса. Но в то же время, книга не совсем простая.
Она охватывает такие темы, как структуры данных, быстрые алгоритмы, полиномиальные алгоритмы для труднорешаемых задач, теория графов, вычислительная геометрия и многое другое. Хотя книга и содержит несколько примеров псевдокода, на мой взгляд, она очень “теоретическая”.
10. The Pragmatic Programmer или Программист-прагматик
Это одна из самых серьезных книг, которые я когда-либо читал. Издание полно как технических, так и профессиональных практических советов, которые помогли мне во многих проектах, а также помогли мне стать лучше как разработчику.
Книга очень актуальна даже в 2020 году, особенно последнее издание. Здесь автор анализирует, что значит быть современным разработчиком, исследуются различные темы: от личной ответственности и карьерного роста до архитектурных приемов.
Прочитав книгу, вы поймете, что такое непрерывное обучение и насколько оно важно; изучите, как писать гибкий, адаптируемый и динамический код, как решать проблемы конкурентности, как стоять на страже безопасности, как тестировать “безжалостно и эффективно”, и многое другое.
Если бы я должен был выбрать только одну книгу, которую вам посоветовать, я бы выбрал именно эту!
Заключение
Это был список одних из самых популярных книг для разработчиков. Лучшая из списка, на мой взгляд, — “Программист-прагматик” Э.Ханта и Д.Томаса. Книги Роберта С. Мартина востребованы и нравятся многим разработчикам, но я бы посоветовал быть критичным при их чтении, так как я не согласен с дядей Бобом во многих вопросах.
Наверняка, многие из этих книг вы уже читали или хотя бы держали их в руках, или хотя бы видели на просторах интернета. Как выразился автор статьи, это “вечные” книги, которые посвящены основам. Если у вас есть чем дополнить список — делитесь в комментах, думаю, всем будет полезно.