Ни для кого не секрет, что в современном мире люди все меньше читают книги и больше потребляют информацию и знания из других источников. Это справедливо и для людей нашей професии — программистов, тестировщиков, менеджеров и т.д. Технологии так быстро меняются, приходят и уходят новые языки и фреймворки, практики и подходы. И появляется резонный вопрос: “Зачем тратить свое время и деньги на покупку и чтение книг, информация в которых устареет через какое-то время?”

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

Для меня одной из таких важных тем стала Computer Science. Я давно перестал покупать бумажные версии книги по языкам программирования, библиотекам или фреймворкам, но вот уже несколько лет таскаю с собой представленный ниже список.

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

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

Этот топик самый важный по моему мнению для любого хорошего инженера. С большей долей вероятности вам врядли придется реализовывать классические алгоритмы и структуры данных с нуля на своей работе. Любой язык программирования включает в себя стандартную библиотеку, которая решает данную проблему за вас. Но понимание оценки сложности алгоритма, выбор правильной структуры данных для написания более эффективного и надежного кода или проектирования сложных систем может оказаться довольно значимым фактором. И, конечно, если вы жаждите работать в Yandex / Google / Facebook / Microsoft и других известных своим уровнем сложности интервью компаниях, то от решения задач из области computer science на доске вам просто не уйти.

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

Grokking Algorithms

by Aditya Y Bhargava

Отличная книга с множеством иллюстраций, примеров и пояснений на языке Python. Она хорошо подойдет для “мягкого” старта и даст возможность втянуться в изучение, применение и анализ алгоритмов без появления мыслей “Более тясячи страниц…пфф…да это же энциклопедия целая. Пойду лучше сериальчик посмотрю”.

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

P.S. Книгу недавно издали на русском языке и называется она “Грокаем алгоритмы”.

The Algorithm Design Manual

by Steven S Skiena

“Руководство по дизайну алгоритмов”, с моей точки зрения, основная книга, которой стоит пользоваться при подготовке к собеседованиям. Она научит вас практическому подходу к решению проблем, не будет грузить математической базой и даст четкое описание того или иного алгоритма подкрепляя все это историями из опыта автора.

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

Introduction to Algorithms

by CLRS

Если же времени у вас предостаточно, и вам некуда спешить, “Введение в алгоритмы” может стать настольной книгой, в которую вы будете заглядывать время от времени, например, решая задачи на HackerRank или TopCoder. Часть алгоритмов из книги вы врядли встретите на интервью, но вы же теперь “в теме”. Всегда приятно узнать больше еще об одном типе деревьев и прочей фигне, не правда ли?

Математика

Разбираясь с основами computer science вам так или иначе придется сталкиваться с математичекими терминами и формулами. Особенно топик будет актуальным если вы хотите начать заниматься Machine Learning, Data Science и другими горячими в настоящее время областями.

Черт, каким же я был раздолбаем в универе, когда спустя рукава посещал лекции дискретной математики, математического анализа, теории вероятностей и других полезных дисциплин…

«Математику уже затем учить надо, что она ум в порядок приводит» (С) М.В. Ломоносов

P.S. Возможно в конце года я напишу отдельный пост про книги по математике. Связано это с желанием больше погрузиться в Data Science или даже попробовать пройти отбор в ШАД Яндекса с моим скудным математическим бэкграундом.

Matematics for Computer Science

by Eric Lehman, F. Thomson Leighton, Albert R. Meyer

Мне нравится данная книга своим подходом к изложению материала. Она не пытается быть учебником по всем мыслимым и немыслимым разделам математики. В ней приводятся не только теоретические знания, но и примеры их применения на практике. Освещены основы дискретной математики, множеств, теории графов, конгруэнции, вероятности, рекурсии и многих других разделов. Так же на основе “Matematics for Computer Science” в MIT преподают целый курс.

Топ-1 в моем списке. Особенно перед подготовкой к интервью.

Бесплатная PDF версия!

Concrete Mathematics: A Foundation for Computer Science

by Ronald Graham, Donald Knuth, and Oren Patashnik

Классический труд, который стоит прочесть в дополнение к книге приведенной выше или же просто для закрепления знаний. Возможно последовательность изложения разделов и само повествование в Конкретной Математике кому-то придется по душе больше.

Прочее

Code: The Hidden Language (DV-Undefined)

by Charles Petzold

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


В статье приведены ссылки на немецкий Amazon, т.к. в большинстве случаев вы не найдете хорошего перевода на русский язык, а покупка в русскоязычном интернет-магазине будет стоить дороже, чем покупка и доставка из Германии или США через какую-нибудь Бандерольку.