Начинающие свой путь в сфере IT могут быть шокированы открывающимися перед ними горизонтами возможностей и объемами информации. Множество направлений, бесконечное число книг и онлайн-курсов. С чего начать? На что обратить внимание и к чему обратиться в первую очередь, а что изучать далее? Вопросов много и вот эта непонятность может стать причиной ступора. Или завести в ложном направлении, что в итоге может послужить причиной того, что человек просто бросит, так толком и не начав изучение. Решив, что это слишком сложно и лучше заняться чем-то другим. Кстати, если человек все же бросит, вероятно, это действительно не его. Программирование, как яркий представитель мира IT, на мой взгляд, с одной стороны доступно каждому, а с другой требует если и не особого склада ума, то как минимум особого отношения к тому, что изучаешь и делаешь. И вот без этого реально тут будет сложно. Но такое отношение можно выработать, оно не дается с рождения.
В данной статье у меня нет цели кого-то чему-то учить. Мне интересно вспомнить свой путь и рассказать о тех книгах, которые помогли в самом начале. Или на которые я обратил внимание в дальнейшем и затем советовал многим из тех, кто спрашивал, а что бы им такого почитать в качестве основы.
Книг будет не так уж много. Но каждая из них по своему значима как для меня, так и потенциально для тех, кто захочет погрузиться в пучины мира программирования и IT.
TL;DR: Список книг из статьи
Петцольд Ч. "Код. Тайный язык информатики" - как всё устроено на уровне битов и логических схем;
Деревенец О. "Песни о Паскале" - хорошая "грунтовка" для понимания основ программирования. Но очень на любителя, Паскаль, все дела;
Столяров А. "Программирование. Введение в профессию" - глубокий системный учебник по программированию в целом;
Брукшир Г. "Компьютерные науки. Базовый курс" - академический, но доступный, обзор компьютерных наук.
Код. Тайный язык информатики

А началось все с книги Чарльза Петцольда под названием "Код. Тайный язык информатики". И она не о программировании. Я бы сказал, что она об основах информатики. Или, как это называется на западе, компьютерных наук. Мне этот термин нравится намного больше и кажется более внятным. Тем более, что у обывателей информатика часто ассоциируется со школьным курсом, где изучают не пойми что, вроде работы с Вордом или рисованием в Паинте (далеко не всегда, но бывает).
В книге Петцольда в доступной и понятной форме рассказывается о том, что такое информация, как исторически люди учились с ней обращаться, кодировать, чтобы использовать и передавать ее. От самых азов, до принципов построения современных компьютерных систем. Точнее основ, на которых они построены. Шикарная книга, к тому же не требующая каких-то особых знания перед тем, как приступить к чтению. Очень хороша для начинающих. И да, я далеко не все понимал при первом прочтении. Даже не смог дочитать до конца. Тем не менее, какое-то понимание основ дала именно она. Парадокс, но факт.
На мой взгляд, с данной кн��гой не помешает ознакомиться каждому, кто желает вступить на путь IT-специалиста. Азы, интересно и понятно.
Песни о Паскале

Следующей книгой, которая уже позволила мне погрузиться в мир программирования, были "Песни о Паскале" Олега Деревенца. Да-да, сейчас я буду стараться уворачиваться от летящих в меня помидоров, но начинал я с Паскаля и никогда об этом не жалел. И даже советовал другим, хотя тут есть нюансы. Но о них как-нибудь в другой раз.
Мне нравится метафора, которую приводит автор книги у себя на сайте:
... приходилось ли вам красить кирпичную или бетонную стену? Да? Тогда вы уже уловили мой намёк: первое, что приходит в голову неопытному маляру, — нанести толстый слой желаемой краски прямо на стену. Уродливый результат этой затеи лучше никому не видеть, и благо, что этот позор сам по себе скоро осыпется. Правильная окраска включает в себя предварительное шпатлевание стены и нанесение грунтовки. И хотя этот подготовительный слой не блещет красотой, но зато краска любого цвета ляжет на него гладко и прочно. Не экономьте на грунтовке!
Поэтому, почему бы и нет? Тем не менее, желающие сегодня могут начинать с чего-то другого. Самые отчаянные с C/C++, а более нетерпеливые с Python, по которому есть множество хороших книг и отличные бесплатные курсы (например, набившие уже всем оскомину "Поколение Python", при этом реально задавшие определенный уровень качества). Или вообще с чего-то более нового и модного. Было бы желание.
Именно "Песни" научили меня основам. Что такое переменная, условные операторы, циклы, функции и процедуры и многое, многое другое. Я учил не Паскаль, я изучал программирование, используя Паскаль как инструмент. Впервые я писал программы, компилировал, разбирался с отладкой. Я оценил работу с командной строкой, так как программы имели консольный интерфейс. Потом не раз говорил спасибо за это, за понимание ценности консоли.
Эта книга отличный пример того, как автор писал для детей. Или как для детей. Все ясно и понятно, разжевано, постепенно, в меру теории и достаточно практики. Такие книги редкость. Была в то время еще одна по Джаве, "Программирование на Java для детей, ро��ителей, бабушек и дедушек" Якова Файна. Ее я тоже пробовал, в целом неплохо, но не понравился сам язык. Так бывает.
Книга для тех, кто готов даже сегодня начать изучать программирование с Паскаля. Прочие могут смело не обращать на нее внимания. В конце концов, я ее читал больше 10 лет назад. Сейчас вряд ли взял за основу.
Программирование. Введение в профессию

Чуть позже, в поисках других хороших книг по изучению программирования (не какого-то языка программирования, а именно программирования в целом, это разные вещи), я наткнулся на сайт Андрея Столярова, который писал на основе краудфандинга, то есть собирая добровольные пожертвования, книгу "Программирование. Введение в профессию". Кажется, я узнал об этом, когда первый том, на тот момент еще планируемого четырехтомника, уже был готов.
Столяров человек очень своеобразный. Относиться к нему можно по разному. За много лет до того я уже встречал подобного человека, но немного в иной сфере. Тоже очень своеобразного и противоречивого, но при этом написавшего великолепную книгу. Так и Столяров. Не важно, как вы к нему относитесь, но отрицать, что он сумел написать отличную книгу, аналогов которой на русском языке просто нет (если я ошибаюсь, всегда рад узнать о других подобных книгах). Да, она может быть не идеальна. Его подход, выбор и последовательность языков для обучения можно оспаривать и обсуждать. Но это все-таки действительно полноценный учебник по программированию. Не по какому-то языку программирования, чем грешит подавляющее большинство книг и учебников, а именно по программированию в целом. Это важно.
Книги спорные, но я все еще готов их советовать вступающим на путь программирования. Да, будет сложно. Зато комплексный подход, внимание к деталям и скрупулёзность автора перевешивают возможные минусы. Альтернативу найти как минимум сложно.
Скажу честно, я дважды брался за первый том, но полностью его так и не смог осилить. В первый раз запнулся на математике, в которой никогда не был силен, а во второй раз просто в какой-то момент остановился и переключился на что-то другое. Но тешу себя надеждой хотя бы с третьей попытки одолеть. Так как считаю книгу сложной, но очень полезной. Тем более у меня есть опыт одоления с третьей попытки еще одной книги.
Компьютерные науки. Базовый курс

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

Можно взглянуть на краткое содержание, чтобы увидеть полноту освещаемых авторами тем и объемы материала.
Наряду с книгой Петцольда можно рекомендовать начинающим, с целью познать основы мира компьютерных наук, чтобы затем думать, куда двигаться дальше.
Подытожим
"Песни о Паскале" и книги Столярова бесплатно доступны на сайтах авторов:
Остальные книги, которые я упоминал в статье, при желании тоже несложно найти на просторах интернета.
Безусловно, это далеко не все и не единственные книги по основам. Есть серии "Теоретический минимум по ..." и "Грокаем ...", хорошие книги по алгоритмам, по сетям (например, Олифер Виктор и Наталья "Компьютерные сети"), есть серия "Классика computer science" (Таненбаум, Руссинович и прочие). Мне приходилось большинство из них листать и даже фрагментарно читать. Но так сложилось, что в основу моих начинаний легли именно те книги, о которых я рассказал. Мой путь не уникальный, ни в коем случае не единственно верный, но, может быть, кому-то его описание поможет сделать первые шаги.
На Хабре есть множество людей, которые тоже прошли большой путь становления программиста или специалиста в ином направлении сферы IT. Поделитесь, какие книги помогли вам в начале пути, с чего приходилось начинать, что можете посоветовать начинающим. Потому что вопрос с чего начать, что почитать, звучит очень часто. А отвечать сложно, выбор не так уж и велик, как кажется на первый взгляд. Особенно для человека, у которого уже есть большой опыт и сильно мешает "проклятие знания".
