Название книги: Совершенный код. Книга совершенный код


Стив Макконнелл / Хабр

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

Интересно, что в далеком 1998 году читатели журнала «Software Development» признали Стива одним из трех наиболее влиятельных людей в отрасли разработки ПО наряду с Биллом Гейтсом и Линусом Торвальдсом.

Если говорить коротко, то Steven C. McConnell — программист и автор книг по разработке ПО.

Он написал книги «Rapid Development» (1996), «Software Project Survival Guide» (1998), «Professional Software Development» (2004). Журнал «Software Development», кстати, дважды удостоил его книги премии Jolt Excellence как лучшие книги года о разработке ПО.

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

Совершенный код

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

Вот описание данной книги, взятое с интернет-магазина OZON:

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

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

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

Профессиональная разработка программного обеспечения

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

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

Для удобства также привожу описание книги:

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

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

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

10 смертных грехов в оценке трудоёмкости разработки ПО

На ХабраХабре относительно недавно появилась отличная статья, о которой я просто не могу не упомянуть. А именно короткий и ясный пересказ (и перевод) часового вебинара от Стива Макконелла, который проходил в июне 2009 года.

Настоятельно рекомендую к ознакомлению. Очень верно подметил один из комментаторов этой статьи:

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

P.S. Так получилось (я уже писал об этом в твиттере), что за свою жизнь я столкнулся с двумя Макконеллами: Стивом и Кэмпбеллом. Не путайте их. Это два совершенно разных профессионала. Один — в экономике, другой — в разработке ПО.

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

BTW!

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

Так вот: оказывается, существует еще и продолжение этой замечательной книги: Какое тебе дело до того, что думают другие! Если у Вас есть свободное время и вы любите читать истории других людей (очень близкие нам, программистам) — однозначно рекомендую!

P.S. Пользуясь случаем: Огромное количество интересных ссылок, статей, рекомендаций и информации о различных веб-проектах я размещаю в своем твиттере, который стараюсь вести интересно. [идея этой статьи, кстати, родилась в твиттере] А отдельные статьи про IT-тематику я пишу в своем некоммерческом блоге. Присоединяйтесь!

С уважением, Адепт Логики.

habr.com

Совершенный код - Стив Макконнелл

Загрузка. Пожалуйста, подождите...

  • Просмотров: 4244

    Игрушка олигарха (СИ)

    Альмира Рай

    Он давний друг семьи. Мужчина, чей взгляд я не могу выдержать и десяти секунд. Я кожей ощущаю…

  • Просмотров: 4223

    Всё, что было, было не зря (СИ)

    Александра Дема

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

  • Просмотров: 3481

    Строптивица для лэрда (СИ)

    Франциска Вудворт

    До чего же я люблю сказки… Злодей наказан, главные герои влюблены и женятся. Эх! В реальности же…

  • Просмотров: 3162

    Соблазн двойной, без сахара (СИ)

    Тальяна Орлова

    Брутальная романтика, или два зайца под один выстрел. Да, черт возьми, мне нужна эта работа! Один…

  • Просмотров: 3001

    Домовая в опале, или Рецепт счастливого брака (СИ)

    Анна Ковальди

    Он может выбрать любую. Магиня-огневка, сильнейшая ведьма, да хоть демоница со стажем! Но…

  • Просмотров: 2538

    Тьма твоих глаз (СИ)

    Альмира Рай

    Где-то далеко-далеко, скорее всего, даже не в этой Вселенной, грустил… король драконов. А где-то…

  • Просмотров: 2509

    Он рядом (СИ)

    Фора Клевер

    Утро добрым не бывает… В моем случае оно стало просто ужасным! А всему виной он — лучший друг…

  • Просмотров: 2488

    Вдруг, как в сказке (СИ)

    Александра Дема

    Очнуться однажды глубоко и прочно беременной в незнакомом месте – это ли не счастье? Особенно, если…

  • Просмотров: 2306

    Невеста из мести (СИ)

    Елена Счастная

    В королевстве Азурхил великое событие: рано овдовевший правитель ищет себе новую жену. Со всех…

  • Просмотров: 2252

    Графиня поневоле (СИ)

    Янина Веселова

    Все мы ищем любовь, а если она ждет нас в другом мире? Но ведь игра стоит свеч, не так ли?…

  • Просмотров: 2102

    Твои грязные правила (СИ)

    Виолетта Роман

    Я не хотела, но он заставил... Искусный манипулятор, ему плевать на жизни других. Я думала, что…

  • Просмотров: 2001

    Между двух огней или попаданка планеты Пандора (СИ)

    Anastasia Orazdyrdieva

    Я обычная девушка учусь на втором курсе юрфака . Живу вполне обычно, но однажды все пошло не так…

  • Просмотров: 1935

    Хищник цвета ночи (СИ)

    Татьяна Серганова

    Мой начальник красив, умен, обворожителен. А еще Ник Н’Ери хищник, привыкший получать то, что…

  • Просмотров: 1776

    Невеста из проклятого рода 2

    Кристи Кострова

    Проклятие снято, и моя магия свободна. Однако появилась новая проблема: стихии выдали меня замуж,…

  • Просмотров: 1544

    Помощница лорда-архивариуса (СИ)

    Варвара Корсарова

    Своим могуществом Аквилийская империя обязана теургам, которые сумели заключить пакт с существами…

  • Просмотров: 1523

    Черная кошка для генерала (СИ)

    Валентина Елисеева

    Что делать, если вас оболгали, крупно скомпрометировали, а теперь принудительно волокут к алтарю…

  • Просмотров: 1466

    Уютная, родная, сводная (СИ)

    Наталия Романова

    Всё смешалось в голове, перепуталось, прошлое и настоящее, о будущем Марк не думал. Воспоминания о…

  • Просмотров: 1281

    Пламенное сердце (ЛП)

    Джоанна Блэйк

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

  • Просмотров: 1259

    Мой снежный князь (СИ)

    Франциска Вудворт

    Вы никогда не задумывались, насколько наша жизнь полна неожиданностей? Вроде бы все идет своим…

  • Просмотров: 1257

    Книга правил (ЛП)

    Блэквуд Дженифер

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

  • Просмотров: 1185

    Оборотень по объявлению. Альфа ищет пару (СИ)

    Наталья Буланова

    Станислав Суворов, альфа стаи волков, уверен – он легко найдет девушку, которая, как показали…

  • Просмотров: 1123

    Василиса Прекрасная (СИ)

    Светлана Суббота

    Говорят, что Время отлично лечит. В принципе да, но прайс у него - поражающий, такой что волосы…

  • Просмотров: 1092

    Орхидея для демона (СИ)

    Наталья Буланова

    Что может быть проще для двух ведьм, чем приготовить зелье? Да раз плюнуть! А вот доставить его до…

  • Просмотров: 1068

    Брачная охота на главу тайной канцелярии (СИ)

    Ксюра Невестина

    Ошибка ангела смерти? Переезд в магмир? По моим правилам! Хочу быть аристократкой, сверхсильным…

  • Просмотров: 1047

    Академия Межрасовых отношений. Дри Ада (СИ)

    Светлана Рыськова

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

  • Просмотров: 1027

    Брачная охота на ректора магической академии (СИ)

    Ксюра Невестина

    Продали замуж за чудовище? Предала подруга? Улечу в академию магии! Хочу быть другой девушкой,…

  • Просмотров: 790

    Прелюдия (ЛП)

    Оден Дар

    Я думала, что у меня есть все. Пока не вернулся он – Джулиан Кейн, друг моего детства. В последнюю…

  • Просмотров: 703

    Три страшных дня из жизни ректора (СИ)

    Наталья Косухина

    Вы умница, красавица, ком… э-э-э… студентка магической академии! Вы жаждете учиться и… Не жаждете?…

  • itexts.net

    Стив Макконнелл. Совершенный код — цитаты

    Стив Макконнелл - Совершенный код

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

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

    Помните! Тестирование может указать только на наличие, но не отсутствие ошибок.

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

    Новые инструменты полезны, но они не заменяют ясность мышления.

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

    Абстракция - один из главных способов борьбы со сложностью реального мира.

    "Когда вместе собираются критики, они говорят о Теме, Композиции и Идее. Когда вместе собираются художники, они говорят о том, где купить дешёвый скипидар".Пабло Пикассо.

    Если требования [к проекту] нестабильны, рассматривайте работу над ними как отдельный проект.

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

    Один из пионеров информатики Эдсгер Дейкстра обращал внимание на то, что компьютерные технологии - единственная отрасль, заставляющая человеческий разум охватывать диапазон, простирающийся от отдельных битов до нескольких сотен мегабайт информации, что соответствует отношению 1 к 109, или разнице в девять порядков (Dijkstra, 1989). Такое гигантское отношение просто ошеломляет. Дейкстра выразил это так: «По сравнению с числом семантических уровней средняя математическая теория кажется почти плоской. Создавая потребность в глубоких концептуальных иерархиях, компьютерные технологии бросают нам абсолютно новый интеллектуальный вызов, не имеющий прецедентов в истории». Разумеется, за прошедшее с 1989 г. время сложность ПО только выросла, и сегодня отношение Дейкстры вполне может характеризоваться 15 порядками.

    "Планируйте выбросить первый экземпляр программы: вам в любом случае придется это сделать " Фред Вруне

    "Если вы планируете выбросить первый экземпляр программы, то выбросите и второй" Крейг 3еруни

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

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

    Неудачное определение проблемы грозит пустой тратой времени на решение не той проблемы. Разумеется, нужную проблему вы при этом тоже не решите.

    Думая о новой функции, клиенты приходят в возбуждение. Кровь у них разжижается, переполняет продолговатый мозг, и они впадают в эйфорию, забывая обо всех собраниях, посвященных обсуждению требований, о церемонии подписания и всех документах. Угомонить таких одурманенных новыми функциями людей проще всего, заявив: «Ого, это действительно прекрасная идея! Но ее нет в документе требований, поэтому я должен пересмотреть график работы и смету, чтобы вы могли решить, хотите ли вы реализовать это прямо сейчас или позднее». Слова «график» и «смета» отрезвляют куда лучше, чем кофе и холодный душ, и многие требования быстро превращаются в пожелания.

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

    Стив Макконнелл

    makedev.org

    Субьективная выжимка из «Совершенный код:2 издание» Стива Макконнелла

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

    «Код пишут не для компьютера, а для человека» — тоже интересная мысль. Многие думают, что программировать, это значит давать команды компьютеру что-либо делать. По сути, это, конечно, так и есть. НО! Не стоит забывать, что текст программы должен быть понятен тому, кто его будет смотреть, править, изменять. Если рассуждать о том, что программировать — это командовать компьютером, тогда зачем нам высокоуровневые языки? Зачем нам различные фреймворки и тд? Давайте писать на ассемблере или вообще в двоичном виде, все равно же мы для компьютера пишем, а ему двоичное роднее. Тут не стоит вопрос об удобности или ускорения программирования, здесь стоит вопрос о формировании такой культуры программирования, в которой человеку в первую очередь должно быть понятно что и как делается в программе. Компьютер он и так поймет, но вот поймет ли человек, зависит от того, насколько мы будем придерживаться раскрываемого принципа.

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

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

    «Комментируйте свой код». Думаю, это очень даже логично. Несмотря на всякие там «Хороший код не нуждается в комментировании, он самопонятен», или «Не нужно заполонять экран лишними символами», или «Хочешь объяснить код – пиши документацию отдельно» и все такое. Это все понятно. Но мне кажется, что хороший комментарий имеет право на жизнь. В книге, кстати, приводятся различные смысловые и визуальные реализации комментариев. Об этом как-то не задумываешься, но, прочитав, начинаешь это замечать и использовать.

    «Начиная писать программу, составь для себя конвенцию стиля-форматирования». Думаю, эта мысль более актуальна для новичков-программистов. Несмотря на дискуссии о «правильности» того или иного форматирования (4 пробела или 2, открывающая скобка в конце строки или с начала следующей и тд.), важно избрать для себя какой-то один стиль и максимально, но без фанатизма придерживаться его. Даже если тот программист, который пишет в другом стиле, будет просматривать Ваш код, ему будет легко его читать, даже несмотря на различность стиля. Сначала Вы составите для себя правило форматирования, потом оно станет просто привычкой.

    «Сначала подумай, потом пиши или семь раз отмерь, потом режь». Неплохо, прежде чем начинать писать интерфейс контроллера, подумать о программе глобально. Что она будет делать, что куда будет передаваться, что где будет храниться и кому что будет видно. Буквально недавно я начал писать для себя технические задания сам, для, так сказать, организации труда. До этого было как-то лень или я думал, что все и так понятно. Но, как оказалось, озвучивание того, что я собираюсь делать очень даже полезная вещь (Кто бы мог подумать?). Как в кувшин, сначала закидываем большие камни, потом поменьше, потом еще меньше, потом песочек и вуаля, кувшин – полон и все влезло как надо.

    «Этапы формирования программы: планирование->разработка->тестирование->отладка». Думаю, логично, во время тестирования своего творения заниматься именно тестированием, а не продумывать как бы еще и чего бы добавить. Часто бывает, что во время разработки становится понятно, что что-то идет не так. Ну, неудобно как-то все. И вместо того, чтобы реализовывать приходиться опять планировать. Чтобы как можно реже это воспроизводить, предлагается доводить каждый этап до конца и в своем порядке.

    «KISS, DRY, YAGNI, DIE». Всем известные принципы, которые, почему-то известны не всем. Все это американские аббревиатуры. По-русски звучат как: делай проще, не повторяйся, тебе это не понадобится и дублирование — зло.

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

    «Сначала неприятное». Думаю, что у всех разработчиков есть какие-то вещи, которые ну не очень хочется делать. Кто-то не любит базы данных, кто-то не любит возиться с AJAX или еще что-нибудь. Переносить на неопределенное время то, что неприятно неправильно. Когда, например, так делаю я, то процесс разработки несколько увеличивается. Я чувствую, что вот-вот, еще немного, и надо будет заниматься этим самым, «неприятным». И вдруг обнаруживается, что вот в этом месте можно покрасивее функцию сделать. Здесь отступов меньше, чем надо и в таком духе. Это лично у меня так.

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

    «Разделения труда, разделение программ, разделяй и властвуй». Сегодня, слава богам, существуют различные методики разделения команд и труда для аккуратной, быстрой и адекватной работы(методики управления проектами). Различные SCRUM, AGILE, внутренние программы. Сегодня, слава богам, существуют различные методики разделения кода(системы контроля версий). Различные GIT, SVN, Mercurial. Так давайте все это использовать (когда удобно, конечно)!

    «Говорящие фамилии». Чуть не забыл про названия. Это вытекает логичным образом из формирования своего, всем понятного стиля. Сюда относится: называние классов с большой буквы все слова, называние функций с маленькой буквы и остальные слова с большой, называние констант ВСЕ_БОЛЬШИЕ_БУКВЫ и так далее. Такие мелочи очень помогают и ускоряют понимание.

    Думаю, можно закончить мою двухколесную выдержку. Общее ощущение от книги положительное. Хотя иногда возникало ощущение, что эта книга написана ни для кого. Т.е. вроде для профессионального (опытного) программиста это все и так должно быть понятно, а для начинающего много того, что, по сути, не совсем понятно. Даже самое первое «с языком, а не на языке» для начинающего, знающего только один язык, может быть не совсем ясно. Ну а для гуру многостраничные рассказы про комментарии и названия вообще могут вызвать недоумение. Если преодолеть некоторый дискомфорт, связанный с этими моментами (если он, конечно, возникнет), то читать можно. Как Чехова, не хуже.

    ОЗОН прислал мне еще книги: «Мифический человеко-месяц», «Приемы объектно-ориентированного программирования: паттерны проектирования» и «Анализ алгоритмов». Если кому интересно что-то, могу прочитать и тезисно изложить. Или выделить какие-то особенно интересные для вас моменты. Также принимаю конструктивную критику и пожелания прекратить марать бумагу. Всем удачи!

    habr.com