Начинающие программисты обычно всегда задают один и тот же вопрос: что можно почитать? с чего начать? Это, пожалуй, самые сложные вопросы. Оглядываясь назад и понимая, сколько всего пришлось изучить лично даже за свой непродолжительный пока опыт - я понимаю, что ответить на такие очевидные и постоянно задаваемые вопросы крайне сложно. Самый сложный и переломный для многих момент - это когда приходит осознание, что ты переступаешь (наконец-то:) порог просто чтения книжек вроде "уверенное знание с++ за 24 часа, лежа на диване". В этот момент перед будущим разработчиком открывается (обычно должен) мир понимания не просто конструкций и синтаксиса используемых технологий, а понимания идеи, философии, которая "стоит за кодом". Это сложный процесс, идущий годами и на протяжении всей жизни. Он бесконечен (могу так сказать - ибо не слышал, чтоб кто-то доказал обратное). Но только при наличии таких знаний, как минимум, можно сказать, что программист "повзрослел". И превратился (или постепенно превращается) из обычного девелопера, который просто пишет код по готовой схеме, в инженера.
Чем раньше наступает такой переломный момент - тем лучше. Однако, стоит заметить - что, лежа на диване, нельзя дождаться прихода такого понимания. Для этого надо получать практический опыт - начиная с самого базового. Может показаться, что "какие-то там философия, методологии, парадигмы и идеи" - это выдумки ученых, которые не знают, чем заняться в свободное время. Как говорится - лучше бы кодили... но это не так. Все последние, скажем, 50 лет - с самого начала практического использования языков, уже имеющих отличия от машинных кодов, - мир разработки программного обеспечения шел по пути повышения уровня абстракции. Те, кто задумывался (или читал) о развитии языков высокого уровня, меня поймут.
Самое сложное - что если для умения кодить можно прочитать туториал по технологии, то для понимания философии не всегда достаточно прочитать книгу. Более того - есть книги, которые можно читать и два, и три раза - и каждый раз будешь видеть что-то новое в ней. Вот о таких книгах и пойдет речь сегодня. Конечно, невозможно их перечислить все, но основные - постараюсь. Скорее всего - их почти бесполезно читать новичкам. Не в обиду - это из собственного опыта и опыта тех, с кем обсуждал такие проблемы.
Для прочтения таких книг нужна уверенная база в разработке. Часто - достаточно и в С++. Вообще, можно знать (понимать, иметь какой-то опыт) "только" архитектуру ЭВМ, ассемблер, С++ и основы ООП - и это с очень большой вероятностью позволит человеку изучить все остальное (в рамках парадигмы ООП, конечно). Между уровнем обычного кодера и тем, что я упомянул, обычно все-таки достаточно большая "пропасть". Особенно, если кодер этот - self-made (самоучка). Что часто можно встретить в наших краях. Много раз убеждался в правдивости этих слов на практике. Опять-таки, не в обиду - все на личном опыте - эти знания в "90% случаев" даже не приходит в голову получать, если учиться самому. Это тема затрагивалась совсем уж недавно - о необходимости университета и учебы. В первую очередь - университета как социальной среды, среды получения знаний и обмена этими самыми знаниями на этапе становления, как минимум. Проблемы этого процесса - не тема данной статьи.
Цель данной статьи - ответить на вопрос: а что делать дальше, когда я уже написал 100000 раз циклы и ветвления разных видов в своем мегабизнес-приложении. Причем, написал и на Delphi (ну и что, что там никогда не было своих классов), и php4-5, и на Си++, и даже WinAPI удалось немного осилить с его функциями "в 10 параметров". А ответ примерно такой: общаться с теми, кто "уже здесь" и читать книги. Причем, или то, или другое по отдельности вряд ли принесет результат. Только все вместе. Иначе это будет "разговор с собой любимым". И тут откроется вся правда. Что, оказывается, Вы-то думали, что знаете С++... а на самом-то деле... ;) Я тоже так думал. Года полтора в свое время. Я читал много книг "по кодированию" (без этого все равно никак) - но даже не подозревал, насколько это малая часть того, что из себя представляет software engineering.
Помимо самого ООП, исключительно полезно читать книги о создании читабельного кода и негласных стандартов, которых стараются придерживаться разработчики всего мира.
Итак, в силу невозможности описать здесь великий вклад и биографии столпов современного инжиниринга - буду кратко, но по делу. Биографии тоже, кстати, иногда полезно читать. Ведь как еще можно узнать, что тот же Род Джонсон, один из самых ярких представителей молодого поколения создателей технологий (с 10-15-летним опытом обычно)... преподавал в Сиднее историю музыки в университете - и даже защитил в этой области докторскую диссертацию. Я буду приводить автора и название. Перечислить все издания не получится, естественно... Буду писать и на русском, и на английском - так как могу не знать попросту, если ли русский вариант. Особенно это касается последних изданий - переводить, да еще качественно, просто не успевают. Как видите, даже переводить - о создании речи практически не идет... Порядок описания книг - не просто "абы список"...
Основы ООП:
Grady Booch (Гради Буч) - Object-Oriented Analysis and Design with Applications Гради Буч - признанный эксперт в области объектно-ориентированной методологии разработки программного обеспечения, книга содержит классическое изложение вопросов анализа и проектирования сложных систем. В Сети есть на русском - "Объектно-ориентированный анализ и проектирование." Также есть русский аналог (по стопам первой книги). В.В. Мухортов, В.Ю. Рылов - Объектно-ориентированное программирование, анализ и дизайн. Бертран Мейер - Основы объектно-ориентированного программирования. Как написал пользователь nejest, он бы добавил еще и эту. Я бы тоже - просто упустил из виду как-то. Добавляю. Т. Бадд. Объектно-ориентированное программирование в действии. по соответствующим ключевым словам в Сети найдется еще с десяток подобных материалов - но почти все они пользуются идеями Гради Буча :)
ООП (и не только) в С++:
Bjarne Stroustrup (Б. Страуструп) - The C++ Programming Language (рус. изд - Язык программирования С++). Что называется - библия от создателей... Robert Lafore - Object-Oriented Programming in C++ (точно есть перевод этой книги на русский). Andrei Alexandrescu - Modern C++ Design (вроде бы - есть перевод на русский). Jeff Alger - C++ for Real Programmers (Джефф Элджер - С++ для настоящих программистов) Scott Meyers - Effective C++ и Effective STL. Четыре последние книги - это вариант окунуться с головой в мир исключительно тонкого понимания С++. Полезно для "вправки мозгов". N. Josuttis: The C++ Standard Library, A Tutorial and Reference Bruce Eckel - Thinking in C++. Серьезный курс от серьезного человека в двух томах. =)ЧистоСИписание:
Steve McConnell - Code Complete: A Practical Handbook of Software Construction (есть перевод на русский: Стив Макконнелл - Совершенный код) - книга, которую стоит читать много раз. Читаешь и понимаешь - как много у этого человека опыта. Не только в программировании - но и в психологии программирования. Уникальная книга. Проектирование, рефакторинг, шаблоны: очень обширная тема, развиваемая уже на серьезном урвне далеко не только в рамках парадигмы ООП. Представляет исключительный интерес, но многое довольно сложно. Не все эффективно применимо - но тоже "вправляет мозги". Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides Design Patterns: Elements of Reusable Object-Oriented Software Есть перевод на русский - известнейшая книга "банды четырех", в которой описываются шаблоны проектирования. Джон Влиссидес еще успел написать маленькое продолжение к данной книге - я даже видел его на русском пару лет назад у нас - и купил как-то. Не такое мощное, как первая книга, но тоже полезно. К сожалению, Джона Влиссидеса с нами больше нет. Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts Refactoring: Improving the Design of Existing Code Есть перевод на русский язык (Мартин Фаулер и другие - Рефакторинг, улучшение существующего года). Просто бриллиант своего времени, а не книга. Как и книги Макконнелла - книги Фаулера очень грамотно структурированы. Да и вообще - читайте блог Фаулера, он обладает очень современными взглядами на многие проблемы. Современный признанный "философ методологий". Joshua Kerievsky - Refactoring to Patterns (вроде как есть перевод). Scott L. Bain - Emergent Design: The Evolutionary Nature of Professional Software DevelopmentJava-технологии
представлены исключительно многообразно и качественно. Приведу наиболее сильные издания. James Gosling, Ken Arnold, David Holmes - The Java Programming Language (из серии - книги от родителей, есть на русском). Joshua Bloch (Джошуа Блох) - Effective Java: Programming Language Guide - не помню, или есть на русском (вроде да) - оличная книга. Doug Lea - Concurrent Programming in Java Rod Johnson - Expert One-On-One J2Ee Design and Development. Один из самых успешных современных молодых авторов. Создатель и идейный вдохновитель всего концептуального многообразия Spring Framework. Собственно, книга была выпушена им еще до того, как все это превратилось в зачатки Spring в 2003 году. Книга издана в 2001. Есть еще как минимум две важные его книги - посвящены enterprise-девелопменту. Deepak Alur, Dan Malks, John Crupi - Core J2EE Patterns: Best Practices and Design Strategies (2nd Edition) Martin Fowler - Patterns of Enterprise Application Architecture (не знаю, или есть на русском, но книга - что надо) Не затрагиваю здесь целый класс хороших книг по сопутствующим java-технологиям. Это и раличные фреймворки - типа Spring, Struts, Hibernate - и прочее-прочее-прочее... всего очень много, но это немного в стороне, на самом деле, от фундамента.Пару книг о C# и платформе .NET.
К сожалению, данная тема автором статьи разобрана не в полном объеме в силу разных причин. Andrew Troelsen: C# and .NET Platform Robert C. Martin - Agile Principles, Patterns, and Practices in C# Jimmy Nilsson - Applying Domain-Driven Design and Patterns: With Examples in C# and .NETЕсть еще на русском переведенные издания Дино Эспозито о платформе .NET 2.0 и технологии ASP.NET. Кому-то нравится, кому-то - нет. Думаю, проблема в не очень качественонм переводе тоже, не только в самой книге. Но однозначно - в его книгах люди узнают .NET с такой стороны, с которой, скорее всего, до этого не знали. Это, так сказать, из опыта того, как у нас изучается дот-нет и как используется...
В данной статье я вообще не затрагивал темы WPF, .NET 3.5, а также aspect-oriented development and refactoring, and patterns и многое-многое другое. Также популярны книги о различных принципах ...-Driven Design. Но все это по своей сути уходит еще дальше от того, что есть вот в этих книгах. Еще одна очень интересная область - это практика програмирования, управления проектами, психология програмирования. Все авторы подобных хороших книг - это вершина мирового программного инжиниринга. Не все это обязательно читать от корки до корки - но определнные книги придется и не раз.... За сим разрешите откланяться - спасибо за внимание!
Новый год совсем уж на носу... Так что самое время было поговорить о высоком. Всем удачи, успехов на этой сложной ниве "заставить себя почитать книгу, когда нет времени и так". И здоровья - без него совсем уж никак. Надеюсь, этот пост получился более добрым, чем пост о проблемах образования. Споров тут должно быть меньше. С Новый годом !
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.