Эти книги должен прочитать каждый, кто считает себя программистом! «Рефакторинг. Улучшение существующего кода», Мартин Фаулер и другие. М. Абрамян «1000 задач по программированию»

У меня есть книга, которую я уже пытаюсь раза с третьего осилить, но всё никак не дойду до последней страницы. Называется она "Человеческий фактор. Успешные проекты и компании ", в простонародье "Peopleware " и является хрестоматией по разработке программного обеспечения наряду с классическим трудом под названием "Мифический человеко-месяц " от Фредерика Брукса. Так вот, там есть интересное выражение, которое гласит следующее:

"Статистика по чтению литературы обескураживает особенно сильно: средний разработчик программного обеспечения, к примеру, не имеет ни единой книги по предмету собственной работы и не может похвастать тем, что читал такую книгу"

Мой опыт работы с программистами лишь доказывает слова ДеМарко и Листера. Современная разработка ПО сводится к постоянному "гуглению" и чтению ответов на StackOverflow. В этом нет ничего плохого, все мы ежедневно сталкиваемся с проблемами решения которых не знаем, и порой "прогуглить" ответ получается куда быстрее нежели самостоятельно разбираться почему наш код не работает. Но серьёзная проблема кроется в ситуациях, когда у человека отсутствуют фундаментальные знания о предмете своей работы.

Софтостроение специфическая отрасль, где специалисту необходимо обладать рядом навыков и знаний. Возьмём самый простой пример: веб-разработка . Современному веб-разработчику нужно иметь представление о множестве тем: веб-программирование, веб-дизайн, основы безопасности веб-приложений, навыки системного администрирования (чаще всего unix-подобных систем), навыки работы с СУБД, паттерны проектирования веб-приложений, хотя бы поверхностно понимать методологии разработки ПО, их плюсы и минусы, не говоря уже о множестве инструментов, используемых ежедневно (VCS, IDE, ОС, пакетные менеджеры и так далее). Веб-разработчик, не знающий основ безопасности веб-приложений, может ненамеренно оставить серьёзную брешь в системе, которая в будущем обернётся серьёзными финансовыми потерями, а может и вовсе иметь катастрофические последствия. Порой "гугля" очередное решение проблемы, мы не задумываясь копируем код или используем сомнительную библиотеку, даже не заглянув внутрь. Главное работает:) А ведь за всем этим могут скрываться серьёзные проблемы...

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

Список книг:

  • Программист-прагматик. Путь от подмастерья к мастеру
  • Чистый код
  • Джоэл о программировании (Joel on Software)
  • Джоэл. И снова о программировании (More Joel on Software)
  • Программист-фанатик (Passionate Programmer)
  • Человеческий фактор. Успешные проекты и команды (Peopleware)
  • Язык программирования C
  • Код. Тайный язык информатики

Просто список ничего не значит. Хорошо бы узнать причину почему вам стоит тратить своё время на чтение и анализ приведённой выше литературы.

Программист-прагматик

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

Чистый код

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

Джоэл о программировании

Если вы ни разу не слышали о Джоэле Спольски, то стоит задуматься, а тем ли делом вы занимаетесь:) Мистер Спольски автор популярного блога "Joel on Software" , а также... один из создателей StackOverflow:) Книга является сборником эссе, опубликованных на личном блоге автора. В ней собраны самые популярные темы о программировании. Вот лишь малая часть из них:

  • Какой язык программирования стоит изучать первым
  • Что необходимо знать про UTF-8
  • Зачем программисту понимать алгоритмы и структуры данных
  • Как проводить собеседование с кандидатами на работу

Продолжением "Джоэл о программировании" является "Джоэл. И снова о программировании". Однозначный must read!

P.S. Перевод его блога (к сожалению, не все статьи) на русский язык можно посмотреть .

Программист-фанатик

Эта книга была переведена на русский язык совсем недавно, но существует по технологичным меркам давно (~2009 год). Написана программистом для программистов и затрагивает щепетильные для разработчиков темы:

  • Кто такой настоящий программист
  • Что необходимо знать программисту, чтобы всегда быть "на плаву"
  • Почему не стоит бояться конкуренции со стороны программистов-индусов:)
  • Как "не перегореть" на работе

Я читал её в оригинале на английском языке, а когда узнал о выходе русского издания, то с удовольствием приобрёл. Перевод хороший.

Человеческий фактор

Эту книгу я рекомендовал на в прошлом году. Она из тех книг, которые перечитывая - узнаёшь новое. С опытом начинаешь по-другому смотреть на, может быть, привычные для себя вещи. "Человеческий фактор" основан на эмпирических исследованиях, проводимых авторами. Цель заключалась в том, чтобы понять почему одни проекты (как и люди) успешны, а другие нет, само собой в нашем с вами общем деле. Читать в первую очередь рекомендую руководителям и менеджерам в сфере IT, разработчикам она тоже будет очень полезна.

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

Свой путь в мир программирования я, можно сказать, начинал с этого легендарного языка. Си является родителем для многих современных высокоуровневых языков, например того же . На нём написано множество софта, начиная от встроенного (привет прошивкам микроконтроллеров) заканчивая сложными вычислительными системами, работающими на Земле и в Космосе (ядро Linux, современный Интернет, ПО в медицине и военной промышленности и многое-многое другое). В рейтинге самых популярных языков он до сих пор занимает лидирующие позиции. Книга "Язык программирования C" является бессмертной классикой, а среди её авторов есть создатель Unix (Dennis Ritchie). Прелесть Си в том, что программист полностью контролирует ход выполнения программы: ручной доступ к памяти и работа с указателями, строгая типизация, контроль за размером входных данных и многое другое. За счёт низкого уровня при работе с "железом" компьютера, а следовательно отсутствия дополнительных абстракций (в простонародье "свистелок и перделок"), код выполняется очень быстро. Но за скорость нужно платить. В неумелых руках системы, написанные на Си, подвержены известным уязвимостям: переполнение стэка, переполнение кучи, ошибки форматирования строки и многие другие. Изучив Си, вы начнёте лучше понимать как работает компьютер, а следовательно станете лучшим программистом.

Код. Тайный язык информатики

Почему люди используют десятичную систему исчисления? Как работают триггеры и почему транзистор совершил революцию? В конце концов, как работает современный компьютер? Ответы на все эти вопросы вы найдёте в книге Чарльза Петцгольда "Код. Тайный язык информатики" . Текст книги написан в увлекательной манере, с юмором и точно не заставит своего читателя скучать. Но материал по мере чтения становится всё сложнее и сложнее:)

Это не весь список книг, которые нужно прочитать. В первую очередь я постарался собрать книги именно для начинающих программистов, чтобы им легче было ориентироваться в столь хаотичной профессии, где постоянное обучение - залог будущего успеха, а застой - прямая дорогая к посредственности. Будьте жадными до знаний, читайте книги!

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

Особенностью данного издания является также уникальный и основанный на научном подходе способ подачи материала: благодаря нестандартной форме обучения и подачи информации книги «Head First» являются одними из лучших книг для начинающих в принципе и бла-бла-бла…Меньше воды, ближе к сути: в этой подборке мы собрали 10 лучших книг «Изучаем программирование» на разные темы - и, чтобы сэкономить ваше время, в описание каждой из них вынесли лишь самое важное.

В современном мире наивысшую ценность имеет информация, но не менее важно уметь этой информацией управлять - данная книга посвящена языку запросов SQL, который является самым популярным инструментом для управления информацией в мире.

Прочитав эту книгу, вы освоите весь глубокий синтаксис SQL - от простых SELECT и INSERT вы перейдете к сложнейшим запросам к базе данных.

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

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

C# спроектирован и разработан специально для применения с.NET Framework - он идеально подходит для создания мощных Windows-приложений.

Прочитав эту книгу, вы освоите не только C# и.NET, но и XAML, Visual Studio и даже программирование под Windows Phone.

Благодаря практическим примерам эта книга научит вас основам server-side программирования, начиная с базового синтаксиса и заканчивая более сложными темами, как, например, проверка форм на валидность, сессии, cookies, запросы к БД, работа с файлами и контентом, а также многое другое.

Прочитав эту книгу, кроме всего вышеперечисленного, вы также научитесь делать свои приложения безопасными, объектно-ориентированными и тестируемыми - всё как в 2016.

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

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

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

Прочитав эту книгу, вы не только изучите объектно-ориентированное программирование, синтаксис и возможности Java, но также научитесь создавать интерфейсы и автоматические тесты к своим программам (и кофеваркам).

Python является мультипарадигменным кроссплатформенным языком программирования, который в последнее время стал особенно популярен на Западе и в таких крупных компаниях, как Google, Apple и Microsoft. Благодаря своему минималистичному синтаксису и мощному ядру он является одним из наиболее производительных и хорошо читаемых ЯП в мире.

Прочитав эту книгу, вы быстро и в увлекательной форме изучите основы языка, затем перейдете к обработке исключений, веб-разработке, работе с SQL, обработке данных и Google App Engine. Также вы узнаете, как писать приложения под Android и многое другое о силе, которую дарует вам Python.

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

Прочитав эту книгу, вы узнаете, как взаимодействовать с базой данных и интегрировать приложение с Ajax и XML, научитесь строить динамические графики данных и многое другое. Также в курс войдет изучение языка Ruby, на котором основан Rails. И все это - в контексте создания реальных веб-сайтов, а не написания скучных «HelloWorld».

Вы готовы сделать шаг вперед в своей практике веб-программирования и перейти от верстки в HTML и CSS к созданию полноценных динамических страниц? Тогда пришло время познакомиться с самым «горячим» языком программирования - JavaScript!

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

Несмотря на название, «Head First Software Development» будет очень полезна не только новичкам, но и опытным, состоявшимся программистам. И эта книга идеально подходит, чтобы закрыть звездную десятку.

Прочитав эту книгу, вы получите исчерпывающую информацию по каждому шагу жизненного цикла разработки ПО: составлению требований, проектированию, кодингу, тестированию, внедрению и сопровождению - а также поймете, как и почему устроены различные процессы разработки. Вы узнаете, как делать «это» правильно и как «это» делают другие.

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

Удачи в карьере, будущий программист!

… часто спрашивают на форумах по веб-разработке.

Распространённое заблуждение

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

Спойлер: там, в конце, есть ссылка на примеры кода «Привет, мир!» на 500+ языках программирования и генераторы текста песенки «99 bottles of beer» на 600+ языках программирования и 34 варианта решения одной задачи «поиск 25ти самых частых слов» на Python разного уровня сложности. Ищи внимательно.

Прежде чем открыть «Чистый код»

Возможно, что тебе тоже посоветовали «Чистый код» и «Банду четырёх». И теперь ты в раздумьях: читать или не читать? Или ты уже прочитал пару глав и в тебе зародилось сомнение: а не зря ли ты взялся за эту тему? Это же просто китайская грамота какая-то, а не книга. Как можно читать такой труд и не понимать ни строчки? Может что-то не так в тебе … ? Стоп!

Четыре года назад я начал программы поддержки начинающих и стажировку по веб-технологиям. В большинстве случаев ко мне обращались те, кто вообще ничего не знает ни о программировании, ни о веб-технологиях. Слово «сервер» для них означает большой компьютер. «Клиент» — это покупатель в магазине или посетитель банка. «Hello, World» в программном коде никогда не видели.
Конечно же, мы совместно подбирали литературу. И прежде чем попытаться предложить профессиональные супер книги, я всегда мысленно вставал на сторону новичка: насколько ужасно будет попытаться прочитать страницу и АБСОЛЮТНО НИЧЕГО НЕ ПОНЯТЬ? Не вызовет ли это страх от непонимания или отвращение из-за сложности? Да, вызовет.

Простое объяснение:

  • прежде чем писать, надо читать
  • прежде чем читать «Чистый код», надо научиться писать грязный неуклюжий код
  • прежде чем правильно проектировать большие программные системы, надо неправильно спроектировать свою маленькую программу

Нужно научиться читать программы

Вот таким образом нужно изучать все фрагменты кода, которые ты встретишь в книге или статье.

Если нет понимания, нужно либо прочитать об этом, либо спросить кого-либо. И даже когда расписал всё и вроде как понял — нужно убедиться, что ты понял правильно. Для этого нужно выполнить фрагмент кода. Или, опять же, дать кому-нибудь твоё описание, чтобы проверить понимание написанного.

Научись мысленно выполнять код. Фрагмент из книг серии «Head First» без разрешения автора, извиняюсь.

В университете почти год тратится на то, чтобы научиться понимать фрагменты кода длиной от двух до двадцати строк. Две строки кода, Карл! В C++/Javascript/C# и многих других языках — одна точка с запятой в другом месте и смысл меняется. В Python — пропустил один пробел и алгоритм работает по-другому. Повторно инициализировал переменную и её значение внезапно исчезло. Не дописал один знак равенства в условии и его значение поменяется на противоположное.

В голове у меня живёт браузер и веб-сервер. Часть кода JS/CSS/HTML я вполне могу интерпретировать и отобразить мысленно, как браузер. Где-то рядом с ним — консоль PHP, Python, Bash, Power Shell — пока я скольжу глазами по коду, он уже выполняется строка за строкой.
Пример 1. На собеседовании мне дали лист кода на PHP. Пока ведущий собеседования искал вопрос, соответствующий этому листу, я уже карандашом исправил все ошибки и пометил значками (!) места, в которых мог быть SQL Injection. Он только вздохнул.
Пример 2. Есть немало людей, которые проходили за несколько минут и без ошибок.
Просто мы это уже видели, пробовали повторить и знаем, как оно работает. Когда-то я мог закопаться в том листе, а в анкете не поставить ни одного ответа.

Далее предстоит научиться писать грязный неуклюжий код

Что писать? Повторять примеры из книг, статей, видео-курсов.

Нужно выработать в себе 2 чувства: скептическое отношение к мнению автора и острое желание повторить. Не доверять автору, мысленно спорить, смотреть на его примеры с ехидной такой ухмылочкой: «Да ну? Врёшь ведь!». И проверять на практике все предлагаемые куски кода. Шаг в сторону поощряется. За прыжки дают медаль «За отвагу». Ты представь, что автор тебе пудрит мозг, а ты должен вывести его на чистую воду. Ну просто детектив, а не программирование!

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

Ещё больше ошибок в пиратских электронных версиях книг, отсканированных и распознанных с помощью программ OCR. Количество ошибок там невероятно большое.

И, наконец, надо писать свои программы. Ну и пусть такие же точно программы уже написали 100 000 других программистов. Ну и пусть в твоей программе неуклюжая логика. Ну и пусть по 1500 строк в одном файле или по одной строке в 1500 файлах. Ну и пусть там всё написано строго поперёк каких-то там «Правил хорошего кода», принципов S.O.L.I.D., D.R.Y и K.I.S.S, о которых твердят книги и вторят на habrahabr и в других интернетах. Пусть там будет большое количеством жёстко прописанной логики. Путь там не будет комментариев. Пусть всё это работает без файлов конфигурации. Пусть любая тупая мартышка может взломать твою систему.

У каждого был и будет свой «велосипед», «говнокод» и «костыли». Даже профи такое пишут, причём прямо сейчас, потому что им некогда писать правильно, потому что надо программу на один раз или потому что им просто лень.

Когда я познакомился с веб, JavaScript был прост и неуклюж. Никто не заморачивался областью видимости, замыканиями, объектами, классами. Тогда актуальным было обсуждать, стоит ли делать навигацию с помощью выпадающего списка (хотя актуально и сейчас):

Не более сложной была анимация смены изображения:


Green Black

И именно эта примитивность очень легко запоминалась, потому что легко понять и запомнить функцию из 4-5 строк.

На чём ещё тренироваться?

var http = require("http"); http.createServer(function (request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.end("Hello, World!\n"); }).listen(8080); console.log("Server started");

Для его запуска тоже нужен дистрибутив NodeJS. Затем можно выполнить файл с указанным скриптом и открыть в браузере страницу http://127.0.0.1:8080/

Начинать с букваря

Новичку супер книги не нужны . Нужны мини-книжки, серии «%что-то% для чайников», «%язык% за 21 день». Учитель начальных классов подтвердит: процесс обучения начинается с алфавита и счётных палочек. И под каждого школьника свой алфавит не изобретают, не практично это — все учатся по одинаковым букварям, только издательство разное и год выпуска, а принцип одинаковый.

Математику начинают не с дифференциальных уравнений, а с арифметики на счётных палочках. Потом сложение/вычитание, умножение/деление, скорость, время, расстояние, дроби и так далее. К дифурам дело подойдёт постепенно.

Спроси у преподавателя английского языка, будут ли его курсанты на первом уроке писать статью на первую полосу New York Times на чистейшем английском? Он скажет: нет, мы будем учить алфавит, учить слова и формы глаголов, переводить тексты туда-сюда, писать сочинения, делать устные доклады, общаться в группе между собой, слушать голос с аудио-диска, смотреть видео-ролики, выполнять контрольные письменные и устные работы. До статей в газету дело дойдёт не скоро.

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

В целом, конечно, умные книги принесут пользу, но начинать надо не с них.

Самая простая, самая типичная задача для новичков, чтобы «потрогать» язык — вывести «Hello, World!». Вот примеры кода «Hello, World!» на 500+ языках программирования (зеркало на случай, если этот сервер упал: http://www.roesler-ac.de/wolfram/hello.htm).
Или вот ещё песенка 99 бутылок пива на 600+ языках программирования .
Или вот один (условно) язык программирования и 34 варианта одной и той же задачи «поиск самых популярных слов в тексте «.

Без метафор

Если откинуть все метафоры про буквари, то начитать надо с обзорных статей и видео-уроков, чтобы для себя понять — нравится или нет. Это касается как языков программирования, так и технологий в целом.

Есть так называемые тесты для профессиональной ориентации, они позволяют определить личные предпочтения и на основе этого сделать прогноз о будущей профессии. Потрать время, оцени заранее — будет ли интересно. Когда-то очень давно аналогичный тест показал мне, что специальности, связанные с логикой и знаковыми системами будет мне наиболее подходящими, а именно юриспруденция, экономика и информационные технологии. В итоге сейчас я веб-архитектор с опытом разработки в областях, связанных с экономикой и правом (биллинговая система для управляющих компаний, расчёты по IP-телефонии, электронным деньгам, учёту и прогнозу экономии энергоресурсов). Меня прогнозы не обманули. Вот несколько сайтов с анкетами: один , два, три .

Далее — простая книга «для чайников», чтобы узнать термины, синтаксис, основы и, опять же, понять — нравится или нет. Не стесняйтесь названий «для чайников» или «для нубов». Нуб — это заимствованное слово «newby» (англ. новичок). «Чайник» — в англ. «dummy» — это лишь сленговое словечко, установившийся разговорный термин, означающий «дилетант» или «не специалист».

Затем много практики. Много, много, много практики. Она измеряется сотнями или даже тысячами часов, хотя, конечно, что-то будет работать и с первого дня. Это месяцы и годы, и бояться их не стоит. Если понравится, то это будут месяцы и годы занятий интересным делом, которое приносит удовольствие и, что уж говорить, довольно высокий доход .

Если ты думаешь, что я несу околесицу, ведь на каком-нибудь Codecademy с первых минут новички уже пишут программы, то я скажу, что тестовое окружение в таких системах — это идеальная среда исполнения, изолированная от реальности, оставляющая за рамками курса 90% внешних факторов, например, различие версий интерпретаторов и компиляторов. Там решение даже подсказывается и вместо того, чтобы посмотреть справочник по языку, можно просто нажать кнопку помощи и скопировать оттуда полностью рабочий код. А также отмечу, что в большинстве областей прикладного программирования (то есть те, где программирование реально решает какие-то практические проблемы) знание синтаксиса языка — это только базовый навык и ещё много всякого, весьма интересного лежит глубже, чем умение записывать мысли в форме команд. Аналогично, в некоторых областях математики умение решать дифференциальные уравнения является знанием уровня алфавита, то есть ничего. Аналогично, умение свободно говорить и писать на иностранном языке — это всёго лишь владение языком как инструментом, что никак не связанно с тем, что и как именно человек будет писать, пользуясь этим языком.

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

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

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

Направление: Программирование как профессия

Книга: Э. Хант, Д. Томас. «Программист-прагматик. Путь от подмастерья к мастеру»

Эта книга не о технологиях и языках программирования. Она о принципах и подходах – о том, чем программирование является по своей сути. Именно поэтому я поставил ее первой в списке. Многое покажется очевидным, с чем-то вы будете спорить, в чем-то сомневаться и долго искать ответы на собственном опыте. Но однозначно именно эти и подобные принципы и подходы определяют вас как разработчика.

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

Направление: Архитектура

Книга: Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес. «Приемы объектно-ориентированного проектирования. Паттерны проектирования»

Удивительно полезная книга знаменитой «банды четырех» (Gang of Four). Отличный пример структурированного и продуманного изложения. По сути, книга заложила терминологию, которой пользуются практически все программисты, обсуждая то или иное архитектурное решение.

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

Направление: Языки программирования

Книга: Б. Керниган, Д. Ритчи. «Язык программирования C»

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

Направление: Технологии

Книга: Дж. Рихтер. «CLR via C#»

Практически идеальный учебник по.NET.

Джеффри Рихтер подробно рассказывает о языке C#, а также об устройстве и фундаментальных принципах функционирования.NET-платформы. Традиционный вопрос на наших собеседованиях: «Вы читали Рихтера? Сколько раз?». Вопрос звучит неизменно многие годы, лишь книги меняются. Раньше была «Windows via C/C++», теперь – эта. У Джеффри настоящий талант открывать двери для новичков, создавать правильный и достаточно глубокий фундамент для дальнейшего развития. Эта книга не единственная, но, если вы начинаете знакомство с технологией.NET, начните с нее. Вы не пожалеете!

Направление: Области разработки и другие направления

Книга: Э. Таненбаум, М. ван Стеен. «Распределенные системы. Принципы и парадигмы»

Возможно, это не самая яркая работа Таненбаума (вспомнить хотя бы его «Операционные системы. Разработка и реализация» или спор с Линусом Торвальдсом), но достойная книга для прочтения.

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

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

Приятного чтения!

Сегодня многих интересует, можно ли научиться программировать с нуля.

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

В принципе, это недалеко от правды, но для таких результатов нужен опыт и репутация. А начинать нужно с самого простого. Мы рассмотрим, какие шаги необходимо выполнить человеку, который вообще ничего не знает о написании программ, чтобы в будущем ездить на Бали и покупать недвижимость.

Cодержание:

Шаг первый. Подготовка

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

Они представляют данное ремесло как что-то романтическое, динамичное – прямо какой-то постоянный экшн.

В фильмах этот процесс показывается совсем не таким, какой он есть на самом деле.

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

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

Так что если вы просто пропитались духом всевозможных кинолент и хотите самостоятельно начать «кодить», программирование – это явно не для вас .

Вот вам правда о рассматриваемом ремесле – программирование это:

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

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

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

Шаг второй. Выбор первого языка

Существует огромное количество языков программирования. По некоторым подсчетам их число уже достигло нескольких тысяч.

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

Но интересно, что в хороших учебных заведениях, а также на курсах студенты изучают языки в таком порядке:

1 Pascal .

2 C++ .

3 PHP и все, что связано с веб-программированием, а также SQL (это система, предназначенная для работы с базами данных путем запросов).

  1. Веб (разработка сайтов, онлайн систем и все, что с этим связано) – html (хотя его нельзя назвать полноценным языком программирования), PHP, Perl, Python, Ruby, Java, Groovy, а также технология ASP.NET.
  2. Пользовательское ПО (всевозможные программы вроде справочников, браузеров, мессенджеров и тому подобное) – Delphi, C, C++, C#.
  3. Пользовательское ПО для мобильных устройств – Java, Objective-C.
  4. Машинные разработки (работы с микропроцессорами и другими устройствами, проектирование робототехники) – Assembler, модификации С.

Кто-то также может внести в этот список так называемое программирование 1С. Не верьте профанам и ничего не знающим людям! Это совсем не программирование.

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

Выбирайте то, что вам больше всего понравится.

Совет: Сделайте свой выбор сразу! Вы должны точно знать, в каком направлении будете развиваться и что изучать в дальнейшем.

Большинство специалистов также советуют начать свое обучение с Pascal. Такой вариант позволит

Вам написать самые простые программки и иметь общее представление о рассматриваемом ремесле в целом.

Можно сказать, что Паскаль – это некий мост. Человек, который просто хорошо знает математику, может перейти через него в мир программирования.

Внимание! В какую бы компанию вы не устроились после обучения, вас будут переучивать под себя. Поэтому вы должны просто понимать сам принцип написания программ. А для этого нет ничего лучше, чем Pascal.

Шаг третий. Изучение компиляторов

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

Собственно, все свои программы вы будете писать, и выполнять именно в компиляторах.

Если вы решили последовать нашему совету и начать с Паскаля, то вам следует скачать Free Pascal. Этот компилятор абсолютно бесплатный и распространяется на официальном сайте .

Как видим, выглядит он достаточно «старомодно», но программирование начинается именно с этого. Кстати, компилятор C++ выглядит практически так же.

Называется он Turbo C++ (скачать его можно ).

Что касается Паскаля, то существует также GNU Pascal, Turbo/Borland Pascal, TMT Pascal и Virtual Pascal. А для С++ можно использовать Borland C++, Visual C++, Dev C++, GCC и Eclipse.

Но это, как мы говорили выше, только начало. Останавливаться на этом нельзя. Когда вы сделали выбор относительно своего направления, можно переходить к более сложным компиляторам.

Вот список наиболее популярных на сегодняшний день компиляторов в зависимости от направлений деятельности:

    Что касается Delphi , то компилятор там так и называется. Существует также Embarcadero Delphi и некоторые другие модификации. Делфи 7 можно скачать на многих сайтах, к примеру, . Если вы выбрали C, C++ или C#, то вам нужна Microsoft Visual Studio. Загрузить ее можно прямо на официальном сайте производителя.

    Если говорить об Assembler и других языках, которые практикуются в робототехнике , то здесь сразу необходимо скачать MASM , если вы работаете на Windows. А вообще, в зависимости от выбранной вами сферы деятельности и компании, на которую вы устроитесь работать, компиляторы могут быть самыми разными. Некоторые фирмы пишут собственные решения для обработки кода. Поэтому, если вы выбрали робототехнику, лучше изучить соответствующие книги и делать все, как там говорится. Об этом мы еще поговорим.

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

Вот наиболее популярные из них:

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

Виртуальные машины будут работать под управлением . На них вы можете хоть удалить системную папку, установить абсолютно любую программу и так далее.

А теперь приступим к написанию вашего первого шифра (кода). Сделать это можно даже без книг и длинных инструкций.

Шаг четвертый. Первый код

Для первого кода мы будем использовать первый язык и первый компилятор, который мы советовали выбирать выше. Это Паскаль и Free Pascal.

Одна из самых простых программ пишется следующим образом:

1 Скачайте Free Pascal по ссылке выше и запустите его на своем компьютере.

2 Введите следующее: «program [название];» . То есть если вы хотите, чтобы программа называлась «hello», необходимо ввести «program hello;».

3 Введите инструкцию «begin» . Это означает, что код, который в дальнейшем нужно будет выполнить, начался.

4 Используем одну из самых распространенных в Паскале конструкций «writeln(‘[какой-то текст]’);» . Она просто выводит на экран текст. Который содержится в скобках и кавычках. Мы введем сочетание «Hello, world!» . Обычно свой путь в большой мир разработок ПО начинают именно с этого. Таким образом, следующая строчка будет выглядеть как «writeln(‘Hello, world!’);» .

5 Чтобы закончить исполняемый шифр, введите «end.» (обязательно с точкой в конце).

6 Теперь нажмите кнопку «F9» , чтобы запустить то, что написали. Вы увидите, как на экране появились слова «Hello, world!» . Это и требовалось!

Чтобы начать свое знакомство с другими языками, в книгах обычно также приводятся инструкции по написанию «Hello, world!» , то есть инструкции, которая просто выводит такой простой текст на экран.

Итак, вы осилили свой первый шифр! Начало положено. Теперь переходите к интенсивному обучению.

Шаг пятый. Пройдите онлайн тренинг

Преимущество онлайн уроков в том, что вы все видите наглядно, причем от начала до конца.

Поэтому новичкам лучше все-таки начинать свой путь именно с онлайн тренингов. Вот лучшие курсы на русском языке:

  • Курс «Основы программирования» от Образовательного IT-портала GeekBrains . Здесь все рассказывается с самого начала, с самых азов. Вы сможете изучить историю, развитие данной отрасли, а затем постепенно стать ее частью. Тот же цикл тренингов можно скачать с торрента (вот ссылка).
  • Уроки от Школы программистов . Этот курс подойдет тем, кто ничего не смыслит даже в математике, не знает природу чисел, как представляется информация в компьютере и другие подобные моменты. То есть если вы считаете себя полным профаном, смотрите эти видеоуроки.
  • «Фундамент программирования» от EG Lab . Здесь расскажут о данном ремесле в целом, о разработке сложных задач и типах данных (всего три урока). Просмотр данных уроков будет отличным подспорьем, чтобы начать изучать какой-то конкретный язык в дальнейшем.

После просмотра этих курсов, необходимо переходить на уроки, посвященные какому-то конкретному языку или отрасли, выбранной вами.

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

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

Зато есть курсы для конкретных языков. К примеру, есть Learn Java Simply , C++ Programming Tutorial for Beginners , How to program in C# - BASICS и многое другое.

Выбирайте тренинг в зависимости от направления своей деятельности.

Если вы просмотрели хотя бы несколько уроков, можно приступать к чему-то более значимому, изучению книг.