Написать пост

Библиотека программиста: 37 книг для того, чтобы разобраться в IT

Аватарка пользователя Ирина Тюльпакова

Winderton делится подборкой книг, которые помогут новичку разобраться в IT. Основы компьютер-сайенс, обучение языкам программирования и не только.

Два года назад IT-блогер Winderton опубликовал собственную подборку из книг про программирование. Его библиотека включает как базовые книги по алгоритмике и основам компьютерных наук, так и более конкретные, посвященные языкам. Несмотря на то, что к 2024 году некоторые книги получили переиздание, список всё так же можно назвать мощной подготовительной базой для начинающего специалиста.

Превью видео chT3O9hIFvM

Ниже — транскрибация ролика, дополненная ссылками.

Шесть лет назад я, Виндертон, будучи в состоянии аффекта, выкладываю вот этот вот ролик, который посмотрело уже больше 100 тысяч человек: «Техническая литература для программистов». Чтобы сэкономить вам 10 минут вашего времени, там были показаны вот эти вот книги.

Библиотека программиста: 37 книг для того, чтобы разобраться в IT 1

Вопросов нет. Кнут — это классный автор с крутыми материалами. На кто его потянется со всей этой математикой, если даже вот эти челы не тянут, а конкретно тот, что с бородой — Шон Магресс. Тадембаум — та же самая история. Классный материал, но настолько сложное задание, что порой вгоняет в депрессию. Корман заставляет писать вас вообще деревья с нуля без примеров.

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

Ну а мы разбиваем видео на три части:

  1. Введение в программирование и ядро computer science.
  2. Моя библиотека. GameDev, прочее.
  3. Языки программирования.

Введение и основы computer science

«Внутри машины», или как работает ваш компьютер, у нас это называется еще «архитектура ЭВМ». Как устроен процессор, память и вся организация железа. Если у вас нулевой бэкграунд, вам нравятся картинки и тоненькие книжки (~300 страниц), то это то, с чего вам точно стоит начать.

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

«Код» Петцольда. Эта книга, как и первая, тоже для полных новичков, без бэкграунда в сфере. Там рассказывается про то, что такое железо, операционная система, компиляторы, языки программирования, как это дело все между собой взаимодействует. Если вам когда-нибудь было интересно, почему компьютер именно такой, а программы пишутся именно так, то Петцольд в очень простой манере за 400 страниц вам об этом простенько расскажет.

Если вдруг по каким-то причинам вы эти книги не найдете или вам их будет мало, то вот еще две.

Первое — это «Теоретический минимум по Computer Science». Уровень подачи тут не дотягивает до предыдущих трёх, он немножко мудрёнее и сложнее, но тут реально покрывается весь тот компьютер-сайенс необходимый, который вам нужен, и в книге всего 150-200 страниц.

Единственный минус, который связан у меня с этой книгой — она вся развалилась пока я её читал.

«Computer Science: an Overview». Эта книга реально местами довольно часто очень сложная. То есть, если вы не знаете, что такое транзистор, а там об этом узнаете, то вы вряд ли поймете, что такое транзистор.

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

Алгоритмы и структуры данных

Как вы все знаете, это Корман и Седжик.

Но Корман — это очень много математики прямо с первых страниц, а Седжик — это Java, которая, ну, не особо всем нравится.

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

Операционные системы

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

Тут, наверное, есть какой-то баланс, она не слишком глубокая и не слишком поверхностная.

Также мне нравится вот эта книжка, она супер просроченная, я давным-давно ее купил, но если вы хотите знать, как работает Unix, и вам нужен туториал, как написать свой Unix, то это как раз-таки то, и не важно, что ей 200 с лишним лет.

Компиляторы и дизайн языков

Книгу с драконом сразу отсюда убираем, потому что она, ну, прям слишком сложная.

Берем сюда Николаса Вирза, 150 страниц, и добавляем сюда Нистерна с его Crafting Interpreters. Кстати, Нистерн — это тот самый чел, который делал паттерны для геймдева, которые являются чуть ли не аналогом Банды Четырех.

Software development

Clean Code, Code Complete и так далее — ребят, это классные книги, не поймите меня неправильно, они написаны лучшими из нас, но читать их нужно только тогда, когда вы имеете уже от двух до трех лет опыта в программировании. Они учат вас, как делать правильно, и вы, скорее всего, не поймете, как делать правильно, если вы сначала не поделаете неправильно. Тут нереально учиться на чужих ошибках. Рекомендую читать только тогда, когда у вас будет пару пэт-проектов и два-три года опыта в программировании в целом.

Касаемо ООП, все советуют «Банду Четырёх», которая прилично так всем уже надоела.

А я посоветую вам вот эту книгу, которая, на мой взгляд, будет лучше. Единственный момент, то, что там С++, но его там на самом деле почти нет. Не пугайтесь.

Моя библиотека, GameDev, прочее

Джейсон Грегори — это автор, который написал Uncharted и, соответственно, эту книгу. У него супер-обширные познания в игровых движках как минимум и как максимум в производстве игр. В моменте этот человек решает написать вот эту вот книгу, которая уже третье издание. Отличная подача материала, углубление в самый раз, максимально широченный охват тем. И вот, например, то, что делает тот же самый Ян Черников — это процентов 20-30 вот от этой вот как раз книги. Чаще всего я читаю именно её.

Опять же, Андерсон «Операционки». Тут лучшее объяснение виртуальной памяти, на мой взгляд. Книга по введению в CS и программирование. Просто всем советую. Конечно же, Корман со своей бандой. Они тут явно борщат с математикой, но, может быть, это просто я тупой [здесь не даются ссылки на книги т.к. автор повторяет их из первого раздела, — прим.редактора].

Не особо классная книга по C++, но как референс или подставка для монитора вполне сходит.

Ещё одна классная книга — это Game Coding Complete. Сложные темы рассказывают достаточно простым языком. И именно отсюда я узнал, что такое анимация и как они работают.

Конечно же «Си» Кернигана и Ричи, но я не советую, если у вас с психикой не все в порядке.

Ассембль от Apress, чтобы хоть какое-то понимание было, что это такое, как на него смотреть вообще<...>

Языки программирования

Python

Тут идёт, конечно же, Лутц с его громким именем. Книжка прям для суперновичков, и Лутц, самое главное, не страдает болезнью. Вот это вы пока не понимаете, но через 10 страниц я вам это объясню. Нет, он как в бакалее: всё сразу по полочкам вам раскладывает, и вы перелистываете страницу за страницей, с приятным чувством, что вы все понимаете, вы весь такой вообще умный и сообразительный.

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

Еще одна классная книга и классный автор — это Дэвид Бизли с его «Python Cookbook». Вообще, Дэвид Бизли — это бывший С-шник, который полжизни пишет на C и в моменте решает преподавать Python. И расскажет про всякие супер интересные и занимательные штуки по типу, почему на Python нельзя программировать многопоточные приложения, почему на нем нельзя программировать мобильные приложения. И у него еще есть всякие видео на YouTube, где он показывает всякие хаки с Python. Поэтому Python Cookbook, если уже знаете основу, то там вас научат расширять даже питоновский интерпретатор. 

C

Тут сразу запомните одно. Никогда не читайте книгу Learn C the Hard Way, потому что там автор сразу видно, что не знает, о чем говорит, и упрощает то, что упрощать не надо. У этой книги прям очень много хейта в интернете, как и у книг Шилта, который классно знает Java, но не знает C++ и C, или как минимум не умеет их преподавать.

Волк в овечьей шкуре или Брайан Керниган и Денис Ричи и C, второе издание. Книгу рекомендуют до сих пор изучать по C, но на самом деле там есть куча проблем. Во-первых, это то, что эта книга подразумевает то, что вы уже знаете компьютер-сайенс, как работает вообще все, начиная от железа и вплоть до операционных систем. Во-вторых, то, что она по факту страниц 250, хотел сказать, она по факту 2500, и там нет такого понятия, как best practices, то есть книги 100 лет, и там просто не знали, что такое хорошо, а что такое плохо. Поэтому не рекомендую, если вы не понимаете компьютер-сайенс.

Beginning C. Книга от Apress, которая, как вы видели, у меня уже есть x86 Assembly. Классная книга, классное издательство. Фишка этой книги то, что там рассказывают про C99, про C11, про многопоточность в C.

Эта книга отлично работает как туториал, как референс, как подставка. И там много всяких работающих маленьких программулек на C.

И напоследок, хочу скачать что мне запомнилась, вот эта книга, которая называется Expert C. Она была написана челами, которые классно знают и разбираются в интерпретаторах и работают в САН.

C++

Конкретно от меня, у меня Primer Plus, которая не лучшая из этих книг, но мне хватило ее как референса [автор упоминал её ранее, — прим.редактора].

Мне также очень нравятся книги Скотта Майер Effective C++, которые нравятся вообще всем.

Плюс я почитываю вот эти вот две книги по метапрограммированию, не самые хорошие, но выбора просто нет никакого.

Само собой, многопоточность и C++ Concurrency in Action, потому что также нет никакого выбора. Ну и само собой, Александр Эску, которого почитывать нужно как минимум для того, чтобы видеть, как делать не надо, а это всегда в C++ интересно посмотреть.

Java

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

А вот книга Шилда Java Complete Reference, последний, который я читал, шестой и седьмой, мне всегда нравились, потому что простая подача, и они очень похожи на GLS. Наверное, даже проще. Да и вообще, у Шилда читать, мне кажется, можно всё, что угодно, потому что он как бы папа джавы.

Конечно же, как только вы знаете джаву-основу, это Джошуа Блок с ее Effective Java, это аналог Скотта Майера с Effective C++. На моей первой работе на Java, когда я пришел и сказал своему тимлиду, что я читаю Effective Java, он мне говорит, блин, это классная книга, я там дженерики сейчас изучаю. А я стоял в этот момент и думал, что, блин, я ее тоже уже читаю. Было очень приятное чувство, но меня тогда, типа, я так и остался работать джуном, а он так и остался работать тимлидом. Ничего не поменялось. В этой книге реально много практик использования джава в реальном продакшене, поэтому, если знаете основу, смело ее рекомендую.

Java Concurrency in Practice. То есть Java — это исключение, это многопоточность, это OOП. Такие книги, как Java Concurrency in Practice, показывают вам, как использовать ту же самую многопоточность, ее неотъемлемую часть. А такие книги, как Хедферст или какой-нибудь Шилдт, показывают вам, что такое Java Core. Также на уровне с Шилдтом есть тип, которого зовут Кей Хорсман. У него много всяких книг по типу «Как работать с синхронизацией» или «Ближележащие топики». То есть какой-то Advanced Java. Поэтому советую присмотреться тоже.

C#

Пусть Рихтера читают, пусть больше ничего не читают.

Javascript

Симпсон «Вы не знаете JavaScript». Неоднократно слышал про эти книги от классных JS-ников, потому что там много всяких how-to, то есть как работает это, как работает это, почему не работает это.

Советовать Фленнегана или Дугласа Кроуфорда, который хотел назвать JavaScript C++++ я не буду, потому что, если бы вы хотели читать книги, вы бы, наверное, изучали C++. Все-таки JavaScript — это попробовать, потыкать и поучиться на практике.

Assembly

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

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

Следите за новыми постами
Следите за новыми постами по любимым темам
6К открытий45К показов