Книги которые должны быть у каждого настоящего программиста

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

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

С. Макконнелл «Совершенный код»

code_complete

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

Библиография книги «Совершенный код» занимает 20 страниц и вмещает свыше 500 источников! Трудно обнаружить хотя бы одного профессионального программиста, который бы не прочёл книгу Стива Макконнелла «Совершенный код». Реально, одна книга(меньше 900 страниц), охватывает почти все сторона разработки программного обеспечения от инструкций по написанию первоклассного кода, инструментов отладки и испытания до политики оптимизации кода, и психологических обстоятельств, которые могут влиять на разработку. Книга «Совершенный код» является одной из тех, которые больше всех приносят пользы и, в итоге, по-праву считается знаменитым изданием по разработке программного обеспечения. Эта книга многократно подтвердила свою значимость, неоднократно занимая первые места в рейтингах книг по программированию. Благодаря обычному стилю толкования, уникальной манере и ощущению остроумия Стива Макконнелла, книга «Совершенный код» читается весьма просто и легко.


Основная часть книги «Совершенный код» посвящена написанию первоклассного исходного кода. Ведя речь о планировании и проектировании программных комплексов, Макконнелл выделяет основное техническое требование к разработке программного обеспечения — управление трудностью. Ясность и простота архитектуры системы и её исходного кода определяют её качество. Макконнелл, как никто иной понимая важность формальностей, подробно разъясняет основные принципы, которым надобно следовать для написания хорошего исходного кода. Нужный уровень абстракции, написание первоклассных способов (методов), разработка качественных интерфейсов классов и пакетов, облегчение управляющих структур, выбор успешных имён переменных, комментирование кода — ничто не уходит от внимания создателя книги. К примеру, правилам применения переменных выделено более чем 100 страниц (целый раздел книги), а вопросу подбора имён для переменных отведена целая глава на 30 страницах - все рекомендации и правила и расписаны с практической стороны дела.

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

Создатель книги «Совершенный код» не обделяет своим вниманием и разные технологии разработки. Детально рассматривается ревизия кода, парное программирование, неофициальные и формальные инспекции, разработка в ходе тестирования. Реорганизация кода (рефакторинг) — это одна-единственная глава книги, которую можно назвать слабой. В ходе рассмотрения способов реорганизации кода (рефакторинг) даётся только лишь длинный перечень его видов из книги «Рефакторинг» (М. Фаулера) и ни одного реального примера кода, а потому раздел скорее носит осведомительный, нежели практический характер.

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

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

М. Фаулер «Рефакторинг»

refactoring

Почти любая книга о реорганизации кода (рефакторинг) ссылается на издание Мартина Фаулера «Рефакторинг». В этом издании Фаулер реально сделал нереальное — донёс до читателей в максимально понятной форме практически всецело подробное описание понятия о реорганизации кода (рефакторинг), его предназначение, методы реализации и характерные черты.

При относительно большой величине (около 400 страниц) книга перечитывается практически за несколько вечеров, от неё нереально оторваться. Умопомрачительный триумф книги заключается в её практической ориентированности. Всем известно, что при подаче материала самой непростой задачей является приведение хорошего показного примера и здесь Фаулеру нет равных. Книга начинается с примера улучшения программы, который читателя с головой затягивает в мир реорганизации кода (рефакторинг). всего-навсего 40 страниц примера предоставляют нам всецело определённое представление о реорганизации кода (рефакторинг), его правилах, целях и главных способах реализации. Мартин определяет реорганизацию кода (рефакторинг) как модификацию во внутренней архитектуре программного обеспечения, целью которого является упрощение осмысления его работы и облегчение изменения исходного кода, не затрагивая при этом наблюдаемого поведения. Но когда надобно выполнять подобную модификацию? Какой исходный код должен претерпевать трансформирование? Создатель книги даёт подробные ответы на данные вопросы. Он вводит правило «трёх ударов»: «после трёх ударов начинайте реорганизацию кода (рефакторинг)». Иными словами, когда вы творите нечто схожее уже в третий раз подряд, тогда это уже сигнал для того, чтобы приступить к реорганизации кода (рефакторинг). Раздел «Код с душком», вероятно автор имел ввиду «говнокод», даёт нам чёткое понимание о том, какой же именно код вымогает улучшений. К симптомам появления такого кода имеют отношение: большой класс, длинный метод, повторение кода, длинный список параметров метода, операторы типа switch, отказ от наследования, временные поля, нецелесообразная схожесть классов и т.п..

Фаулер, как приверженец TDD (Test-driven development), посвятил описанию среды junit и созданию автоматических тестов целую главу книги. Если найдена ошибка, то вначале надобно написать код для автоматической проверки, обнаруживающий её, и только потом делать правку исходного кода. Это разрешит в перспективе не ходить по одним и тем же граблям. Аналогично в самом начале выполнения реорганизации кода (рефакторинг) нужно написать проверки для реорганизуемого кода, дабы гарантировать постоянство его поведения в будущем.

Основная часть книги отведена под способы реорганизации кода (рефакторинг). Она вмещает разделы, которые посвящены перемещению функций между объектами, составлению методов, организации данных, упрощению вызовов методов и условных выражений, решению задач по обобщению и большим структурным реорганизациям кода (рефакторинг). Большинство из способов реорганизации кода (рефакторинг) автоматизированы в знаменитых IDE. К примеру, Visual Studio имеет инструменты для автоматического удаления параметров (RemoveParameter), выделения методов (ExtractMethod), выделения интерфейсов (ExtractInterface) и др.. В качестве больших реорганизаций кода (рефакторинг) уровня системы Фаулер называет: превращение процедурного подхода к планированию в объектно-ориентированный подход, деление иерархии наследования, выполняющей более одной задачи, отделение предметной сферы от уровня представления, а в частности выделение иерархии, которое подразумевает разделение крупного класса на некую иерархию более специальных и намного более малых по размеру подклассов.

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

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

gof

Задайте вопрос бывалому программисту, какую литературу по объектно-ориентированному программированию Вам в обязательном порядке нужно прочесть, и в безусловном большинстве случаев он порекомендует именно эту книгу. Слово бестселлер в отношении данной книги звучит не совсем выразительно, ведь с момента её выхода в свет продано уже более 500.000 копий на английском и 13-и иных языках!

Начинающий программист весьма часто самостоятельно берётся решать уже неоднократно решённую до него задачу планирования и придумывает очередной вариант пятиколёсного велосипеда, и воистину гордится своим открытием. Понимание языка паттернов даёт возможность решать уйму задач планирования оптимальным методом, прилагая минимум стараний. Лишь двадцать паттернов, которые описаны в книге, дают набор инструментов для решения громадного перечня задач планирования программного обеспечения. Материал изложенный в книге довольно непрост и вымогает от читателя специфических знаний в сфере объектно-ориентированного планирования. Для полного освоения паттернов мало просто взять и прочесть книгу, надобно фундаментально над ней т.с. «попотеть» мозгом. Однако, твои старания не пропадут зря. Книга вмещает 350 стр. и состоит из нескольких частей. В первой части книги даётся толкование общего представления о паттернах планирования, на примере создания WYSIWYG редактора документов Lexi описывается их практическое использование. Вторая часть вмещает реестр паттернов с детальным толкованием предназначения, архитектуры, характерных черт реализации, а также примерами использования каждого паттерна.

Команда создателей книги некоторым может быть знакома как «Банда четырех» (Gang of Four), потому-то презентованные в книге паттерны именуют GoF. Создатели книги разбили все презентованные паттерны на 3-и группы: структурные паттерны, порождающие паттерны и паттерны поведения. Порождающие паттерны призваны решать задачи инстанцирования (создания копий) классов. К наиболее знаменитым паттернам в этой группе можно причислить Singleton (одиночка), FactoryMethod (фабричный метод) и AbstractFactory (абстрактная фабрика).

Структурные паттерны призваны решать вопросы компоновки системы на базе объектов и классов - к ним имеют отношение такие главнейшие паттерны, как Bridge (мост), Adapter (адаптер), Composite (компоновщик), Facade (фасад) и Proxy (заместитель). Паттерны поведения связаны с вопросами и алгоритмами разделения между классами обязанностей. Тут надобно отметить Strategy (стратегия), Observer (наблюдатель), TemplateMethod (шаблонный метод), Iterator (итератор) и Command (команда).

Одно-единственное, что может читателя привести в смущение, — это то, что для изображения графиков классов применяется OMT (Object Modeling Technique) взамен привычного UML, а кое-какие примеры написаны на малознакомом на данный момент языке программирования Smalltalk.

Эксперт ООАиП Мартин Фаулер отмечает, что «Паттерны GoF — это наилучшая из книг по объектно-ориентированному планированию. Данная книга необычайно авторитетна в промышленности программного обеспечения — стоит лишь взглянуть на библиотеки .net и java, которые просто кишат паттернами GoF. Нет ни одного эксперта в сфере объектно-ориентированного планирования, который был бы не знаком с GoF паттернами, а если такой и встречается, то скорее всего его не можно называть экспертом.

Р. Мартин «Чистый код»

clean_code

Книга «Чистый код» является одной из особенно успешных книг, которая посвящена написанию первоклассного исходного кода. Размер книги, не считая приложений, составляет 360 стр.. Она настолько доступна и интересна, что ее от корки до корки запросто прочтёшь за два-три вечера. «Дядюшка» Боб в дружественном стиле рассказывает нам о том, каким правилами надо следовать, дабы писать качественный код. Книга содержит большое число примеров из настоящих программ, с которыми создатель книги сталкивался в ходе своей практики, среди которых такие небезызвестные продукты, как JUnit, JDepend, FitNesse, TomCat и Ant.

Книга состоит из 3-х частей. Первая часть посвящена теории написания чистого кода: приёмы, правила и паттерны, которых надобно придерживаться программисту. Вторая часть посвящена практической реализации и детально разъясняет сам процесс чистки исходного кода уже существующих программ. Третья часть подытоживает результаты и вмещает список т.з. «запахов кода», а также способов их устранения.

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

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

Во главу угла при создании функций ставится компактность, правило одного уровня абстракции и одной операции — понятные на первый взор правила, которые так часто игнорируются разработчиками. Будучи ярым приверженцем TDD (test-driven development, разработка через тестирование), Мартин отмечает значимость чистоты не одного исходного кода, но и исходного кода модульных тестов. Он иронически говорит о симптомах которыми характеризуются чистые тесты — тремя: удобочитаемостью, удобочитаемостью и ещё раз удобочитаемостью.

Наверное, один-единственный недочёт книги — это её Java-направленность. Все презентованные в книге примеры написаны на языке программирования Java, а основное количество «запахов кода» и рекомендаций в основном свойственны для java-кода.

Роберт начинает книгу с ответов мастеров программирования на вопрос, что такое «чистый код». Грэди Буч даёт такой ответ: «Чистый код прямолинеен и прост. Чистый код читается подобно хорошо написанной прозе.». Разработчики старающиеся писать чистый исходный код, должны прочесть сию книгу.

Д. Кнут «Искусство программирования»

knuth

Разработчик, который не читал книги «Искусство программирования», подобен священнослужителю, который нет читал библии. Научный труд Дональда Кнута порой называют «Библией программиста». Книга вмещает детальное анализ и описание важнейших алгоритмов, которые применяются в информатике, а также для усвоения и закрепления презентованного материала в частности содержит уйму практических задач. Периодическое издание American Scientist включил научный труд кнута, наряду с работой эйнштейна по теории относительности, в перечень двенадцати наилучших физико-математических научных трудов xx века. Триумф книги определён качеством изложения, а также глубиной анализа фундаментальных вопросов программирования.

Кнут приступил к работе над книгой «искусство программирования» ещё в 1962 году. По идее создателя, научный труд должен состоять из семи томов. Пока, что было издано 3-и первых тома, в частности и первая половина четвёртого. Все тома изданные на сегодняшний день вмещают в себя практически 3000 страниц. Читать книгу вовсе не легко как, однако, и библию, основным образом благодаря тому, что все примеры приведены на низкоуровневом языке программирования Ассемблер, для гипотетически придуманной автором электронной вычислительной машины (ЭВМ, компьютер) MIX. Потому-то программисту вряд ли удастся применить книгу как набор готовых рецептов для решения определённых задач. Данная книга даёт программисту не уже пойманную рыбу, а скорее всего неплохую удочку, при помощи которой он сумеет не без определённых стараний наловить рыбы собственными силами.

Первый том книги посвящён главным механизмам и включает в себя несколько глав. Первая глава подготавливает читателя к работе над книгой. Тут освещаются главные суждения и математические представления, на которых основывается весь дальнейший материал. Читатель знакомится с полиненасыщенной электронной вычислительной машины (ЭВМ, компьютер) MIX, её структурой и языком программирования Ассемблер. Вторая глава посвящается информационным архитектурам и механизмам работы с ними. Тут рассматриваются многосвязные архитектуры, деревья, очереди, линейные списки, в том числе стеки, деки, два раза связанные и циклические списки, и пр..

Второй том состоит из третьей и четвёртой главы. Третья глава посвящается работе с произвольными последовательностями и числами. Четвёртая глава описывает вопросы математики, а точнее разные виды систем счисления, математика рациональных чисел и чисел с плавающей точкой, полиномиальная математика и прочее. В третьем томе (главы 5 и 6) описан механизмам поиска и сортировки соответственно. В четвёртом томе опубликован материал седьмой главы, который разъясняет вопросы комбинаторного поиска.

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

В своей рецензии к работе Кнута, Билл Гейтс говорил «Если вы считаете себя реально профессиональным программистом… прочтите „Искусство программирования“ Кнута… и если вам удастся полностью прочитать данный труд, тогда вам однозначно нужно направить мне своё резюме». Дословная выдержка из высказывания Билла Гейтса лишний раз отмечает, что, невзирая на трудность изложенного материала, истинный специалист безусловно должен освоить научный труд Дональда Эрвина Кнута «Искусство программирования».

Э. Хант, Д. Томас «Программист-прагматик»

pragmatic_programer

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

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

Одним из самых великолепных правил программирования, является правило Don’t Repeat Yourself (DRY), что в переводе означает «не повторяй самого себя». Следуя этому правилу, каждая часть знания должна иметь однозначное и одно-единственное представление. Придерживаясь данного правила можно повысить прочность, простоту и доступность сопровождения программы.

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

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

Итоги

Трудно недооценить значение качественной литературы по программированию. Каждая из упомянутых выше книг даёт возможность сделать гигантский прыжок в росте. «Искусство программирования» закладывает надёжную основу, обучая нас основным приёмам и механизмам программирования. «Совершенный код» даёт возможность выйти на новый уровень качества проектирования программного обеспечения. Книги «Рефакторинг» и «Чистый код» приучают нас к более внимательному отношению к качеству кода, а также помогают поддерживать его в безупречном состоянии. Книга «Программист-прагматик» даёт подсказку, как же при разработке программного обеспечения достичь действительно практического триумфа. «Паттерны проектирования» снабжают тяжёлой артиллерией паттернов, которые помогают решать уйму задач планирования.

Рекомендуемый контент



Добавить комментарий


Защитный код
Обновить

2 megabytes