Накануне начала нового учебного года T&P попросили трех преподавателей Moscow Coding School, чьи курсы откроют этот сезон в субботу, рассказать о лучших, по их мнению, книгах и учебниках для желающих научиться программировать.

Сергей Сурганов, Tricky Eyes, Innova Systems

Курс «Основы JavaScript»

Каждую из этих книг я читал не по одному разу и всячески их советую каждому, кто только начинает заниматься программированием — вне зависимости от выбранного языка. И если кому-то это важно, они все переведены на русский язык (кроме самой первой). Да, учиться программированию по толстым умным книжкам нелегко — многие предпочтут очередной модный веб-сервис про кодинг, но оно того стоит, поверьте.

The Little Schemer

Книга, которая научит мыслить рекурсивно. Построена она необычно: каждая страница поделена пополам и представляет собой диалог двух персонажей, учителя и ученика, все повествование идет в форме «вопрос — ответ». Этот простой прием позволяет вдохнуть интерактивность в бумагу — потому что здесь ты сначала пытаешься ответить на вопрос самостоятельно, закрыв вторую половину страницы рукой, а затем сравниваешь ответы. Начинаясь с невинных вещей (рекурсия и примитивные алгоритмы), книга в какой-то момент выруливает в эзотерические области вроде лямбда-выражений, аппликативного комбинатора неподвижной точки и написания своего интерпретатора. Добавьте сюда прекрасные иллюстрации и фирменный юмор — и вы получите, что называется, instant classic.

JavaScript: The Good Parts

Одна из самых популярных и противоречивых книг по JavaScript: автор продвигает минималистичный подход в использовании возможностей языка. Дело в том, что JavaScript не идеален, в нем есть множество ненужных, глупых и просто вредных вещей. И вместо того чтобы исправлять ошибки и придумывать новый язык программирования своей мечты, мы просто должны отказаться от всего лишнего в существующем языке — в пользу ясности и выразительности кода. «The Good Parts» еще выгодно отличается и тем, что она раза в два-три тоньше типичной книжки по программированию. Стоит также знать, что автор книги, Дуглас Крокфорд, подарил миру валидатор кода JSLint и придумал крайне популярный формат передачи данных JSON (а также позволил мне узнать о The Little Schemer, за что ему отдельное спасибо).

Structure and Interpretation of Computer Programs

Когда-то по этому учебнику в MIT преподавали введение в специальность. Но даже спустя 30 лет после первого издания SICP остается библией computer science, совершенно не успев устареть. Все примеры в книге приведены на допотопном языке Scheme, но это совершенно неважно, потому что учат здесь не конкретному языку, а особому типу мышления. Книга научит программированию в самых разных парадигмах, алгоритмическому подходу, металингвистической абстракции и в итоге созданию собственного компилятора. Сотни упражнений, огромный объем, математика на каждом шагу — этот путь пройдет не каждый, но если пройдет, то это пригодится на всю жизнь. Красиво сверстанная онлайн-версия.

The C Programming Language

Образец того, как надо писать учебники по языкам программирования. Эту книжку еще любовно называют K&R, по именам авторов — Керригана и Ричи. Первый автор известен своим вкладом в разработку UNIX, а второй непосредственно и придумал сам язык C. Только подумайте, кто лучше всех может научить языку, как не его автор?

Ясность изложения, хорошие примеры, краткий объем, интересные упражнения… но зачем в 2014 году читать книжку про язык 40-летней давности? На самом C сегодня мало кто пишет, но он лежит в сердце C++ (весь поиск «Яндекса» написан на нем) и Objective-C (на нем написаны все приложения для мака, айфона и айпэда). Забавный факт: именно в этой книге был введен в широкое обращение пример с «Hello, world!», который теперь встречается в каждом туториале по программированию.

Learn You a Haskell for Great Good! (бесплатная онлайн-версия на английском)

Книга посвящена Haskell — языку программирования будущего, который совсем не похож на другие языки. С одной стороны, это очень умный, элегантный и компактный язык. С другой — он очень сложный и требует знания высшей математики и основ функционального программирования. Сложно представить себе увлекательную книжку по такой теме, но Мирану Липоваче удалось невероятное: простыми словами объяснить очень сложные вещи. В книжке на пальцах объясняются аппликативные функторы, моноиды, ленивые вычисления, монадические трансформеры, классы типов и другие удивительные вещи. Смешно, но даже «Hello, world!» тут появляется только на 152-й странице. Как и в The Little Schemer, здесь присутствуют неподражаемые авторские иллюстрации и диковатый юмор. (Не верите? Выпейте ведро жидкой лавы! Ха-ха, это шутка.)

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

Getting Real

Наименее известная в России, но бестселлер на Западе, книга родоначальников Ruby on Rails и основателей Basecamp, крутейших ребят — 37signals. Книга о том, как не загонять себя в сумасбродные фантазии о своем некогда, в будущем, крутом продукте, а делать проще, быть в реальности. Много полезных фишек о том как варить проект, делать запуск, работать с пользователями и быть в потоке (go with the flow). Платная версия на русском в лучшем любительском переводе.

Rework

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

«Agile Web Development with Rails 4»

Свое первое веб-приложение на Ruby on Rails я делал по этой замечательной книге. Книга дает представление о гибком подходе к разработке. Естественно продвигаясь по ней, вы изучаете язык Ruby и фреймворк Ruby on Rails. Сам фреймворк, к слову, создан людьми с хорошим пониманием бизнеса, что делает его отличным инструментом для создания своего онлайн-бизнеса, сервиса, сайта.

Борис Горячев, Look At Media

Курс «Основы Ruby»

Reading list для тех, кто хочет научиться Ruby. Эти книги не просто повлияли на мое мировоззрение как хакера, но и стали моими спутниками. Я обращаюсь к ним в минуты душевных терзаний, любовных мук и творческих кризисов.

Why's (Poignant) Guide to Ruby

Эту книгу написал легендарный Why the Lucky Stiff (также известный в Ruby-сообществе под ником _why, или Why). В юмористичной манере с картинками и историями автор знакомит читателя с Ruby. Must read, если нравятся комиксы и юмор. Если же в силу каких-то причин юмор и картинки вам не по душе, то вот альтернатива.

Programming Ruby 1.9 & 2.0: The Pragmatic Programmers' Guide

Серьезная книга. Доступна и понятна тем, кто имеет даже самый малый опыт в программировании. Это самый полный справочник по Ruby. Книга регулярно переиздается, чтобы быть up-to-date.

Ruby Science

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

Practical Object-Oriented Design in Ruby: An Agile Primer

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

Rails AntiPatterns: Best Practice Ruby on Rails Refactoring

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