совершенный код на английском
Стив Макконнелл
В прошлый раз мы познакомились с выдающимся человеком Пол Грэмом, который написал одни из лучших статей о стартапах, программировании и бизнесе. Сегодня я хочу рассказать вам о такой выдающейся личности, как Стив Макконнелл.
Интересно, что в далеком 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. Так получилось (я уже писал об этом в твиттере), что за свою жизнь я столкнулся с двумя Макконеллами: Стивом и Кэмпбеллом. Не путайте их. Это два совершенно разных профессионала. Один — в экономике, другой — в разработке ПО.
Стив Макконелл вообще крайне интересный человек. Посмотрите, к примеру, какой он сделал у себя домашний кинотеатр. Перечень всех его книг можно найти там же. Вообще рекомендую изучить его личный сайт.
Я уже упоминал потрясающую книгу Вы, конечно, шутите, мистер Фейнман! в одной из прошлых своих статей.
Так вот: оказывается, существует еще и продолжение этой замечательной книги: Какое тебе дело до того, что думают другие! Если у Вас есть свободное время и вы любите читать истории других людей (очень близкие нам, программистам) — однозначно рекомендую!
совершенный код
1 совершенный код
совершенный код
Блочный код (n, k), в котором число исправляемых ошибок одинаково и не зависит от вида кодовой комбинации. Ср. imperfect-.
[Л.М. Невдяев. Телекоммуникационные технологии. Англо-русский толковый словарь-справочник. Под редакцией Ю.М. Горностаева. Москва, 2002]
Тематики
2 совершенный код
3 совершенный код
4 совершенный код
5 совершенный код
6 совершенный код
7 совершенный код
8 совершенный код
См. также в других словарях:
Двоичный код Голея — У этого термина существуют и другие значения, см. Код Голея. Двоичный код Голея один из двух тесно связанных друг с другом исправляющих ошибки линейных кодов: совершенный двоичный код Голея (англ. perfect binary Golay code) … … Википедия
Граница Хэмминга — В теории кодирования граница Хэмминга определяет пределы возможных значений параметров произвольного блокового кода. Также известна как граница сферической упаковки. Коды, достигающие границы Хэмминга, называют совершенными или плотноупакованными … Википедия
Граница сферической упаковки — В теории кодирования граница Хэмминга определяет пределы возможных значений параметров произвольного блокового кода. Также известна как граница сферической упаковки. Коды, достигающие границы Хэмминга, называют совершенными или плотноупакованными … Википедия
Отладка программы — Отладка этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится : узнавать текущие значения переменных; выяснять, по какому пути выполнялась… … Википедия
Макконнелл, Стив — Стивен Макконнелл (Steven C. McConnell; 3 сентября 1962(19620903)) американский программист, автор книг по разработке программного обеспечения. Журнал «Software Development» дважды удостоил его книги премии Jolt Excellence как… … Википедия
Дебаггинг — Отладка этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится : узнавать текущие значения переменных; и выяснять, по какому пути выполнялась программа.… … Википедия
Отладка — Отладка этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится : узнавать текущие значения переменных; и выяснять, по какому пути выполнялась программа.… … Википедия
Отладка программ — Отладка этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится : узнавать текущие значения переменных; и выяснять, по какому пути выполнялась программа.… … Википедия
Итеративная разработка — Итеративная модель разработки … Википедия
Суд над Повелителем времени — Обложка DVD издания «Суда над Повелителем времени» Страна Великобритания ТВ канал BBC One … Википедия
Совершенный код
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
Damian Conway, co-designer of Perl 6
Хороший программный код определяется как минимум тремя признаками: однозначность, эффективность и сопровождаемость.
Однозначность – это в первую очередь стиль кодирования. Однозначность определяется тем, какие имена переменных и функций выбирает программист, как форматирует код, как обрабатывает ошибки и формирует структуру кода.
Эффективный код — это код, состоящий из эффективных алгоритмов. Эффективный не значит хрупкий, сложный или трудно сопровождаемый. Эффективность кода достигается путем использования сильных сторон языка и в то же время избеганием его слабостей.
Сопровождаемость заключается в том, что код пишется в первую очередь для тех, кто будет его сопровождать. Сопровождаемость – легкость использования написанного кода, минимизация возможности появления ошибок при его изменении.
Однозначность кода
Все программисты ленивы, иногда в хорошем смысле, иногда в обыденном. И мало кто уделяет каждой строчке кода достаточно времени, чтобы привести ее в порядок в соответствии с критериями хорошего кода. Особенно в случаях «чем раньше поставлю эту проверку в функции, тем раньше уйду домой». Отсюда и переменные, названные одним символом, и несколько выражений в одной строке, и многие другие ухищрения, на которые только способен применяемый язык программирования.
А между тем, все существующие методики улучшения кода (и эта статья тоже) направлены на облегчение жизни самих же программистов. Например, чтобы ваш код был понятен другим программистам (и вам же самим спустя N месяцев после его написания), необходимо соблюдать стиль кодирования. Из предложенных стилей для используемого языка лучше выбрать тот, в котором рекомендуется форматирование кода в стиле K&R (по инициалам Kernighan и Ritchie, авторов книги о языке Си), потому что оно отличается от остальных лучшей читаемостью и делает код более гибким.
Не стоит скрывать свою некомпетентность отключением предупреждений. Средства языка, позволяющие заглушить сообщения об ошибках или предупреждения – это слабая сторона языка. Подобная практика может скрыть от вас потенциальные ошибки в вашем алгоритме, что сделает ваш код очень хрупким. При рефакторинге такой алгоритм почти наверняка будет сломан.
Для имен функций, переменных и констант выбирайте такие имена, чтобы их предназначение было очевидно без сопровождающего комментария (что вовсе не избавляет от необходимости писать комментарии). Из сокращений и аббревиатур допускается употреблять только общепринятые и общеизвестные: min, max, avg, sum, len, ctrl, src, msg и другие. Если вы не можете подобрать сокращенную форму названию переменной, оставьте как есть.
Используйте именованные константы, избегайте голых цифр и строковых литералов в коде. Даже если для вашего алгоритма понятно предназначение каждого числа, используемого в коде в чистом виде, корректировка алгоритма может сломать ваш код, когда потребуется изменить одно число на другое. При использовании именованных констант достаточно будет изменить число в одном месте, не трогая сам код алгоритма. Я бы не рекомендовал делать исключения даже для общеизвестных значений, таких как 3.14, 2.7, 9.8, 42.
Эффективность кода
Многие, занимающиеся программированием (не обязательно работающие по специальности), на очень долгое время остаются на уровне студентов, которые хвастаются друг перед другом тем, что сократили функцию вычисления факториала до одного выражения. Постоянно использовать побитовый сдвиг вместо операций деления и умножения — тоже не лучшая затея. Это как раз те случаи преждевременной оптимизации, о которой так много пишут и говорят.
Прежде чем оптимизировать какую-либо часть алгоритма, нужно быть уверенным, что именно она нуждается в оптимизации. Можно долго и упорно менять в десятках мест постфиксный инкремент на префиксный и выиграть пару наносекунд процессорного времени, но лучше оптимизировать запросы к базе данных и получить прирост производительности, видимый даже невооруженным взглядом. Именно для того, чтобы найди слабое звено алгоритма, нужно профилировать и измерять время исполнения кода на каждом этапе алгоритма.
Прежде чем изобретать велосипед, нужно убедиться, что этого еще не сделали до вас. И только если велосипедов нет, или они не подходят вам в силу каких-либо причин (кроме причины «это написано не мной»), можно приступать к реализации. Использование сторонних библиотек позволяет сосредоточиться на собственном алгоритме. Чем популярнее библиотека, тем более эффективный код в ней используется и тем меньше вероятность обнаружить в ней ошибки. Если интерфейс библиотеки громоздок или слишком унифицирован, напишите интерфейс-обертку для этой библиотеки, чтобы ваш код был в одном стиле.
Если в алгоритме часто используются результаты долгих вычислений, имеет смысл рассмотреть возможность кэширования – сохранения этих результатов для предотвращения повторных вычислений в случае, если результат этих вычислений не меняется.
Сопровождаемость кода
При внесении изменений в код всегда есть вероятность сломать его, поэтому из всех альтернативных вариантов алгоритма всегда используйте максимально гибкий. Например, вместо нескольких else-if или switch бывает гораздо удобнее использовать поиск по ключу в хэш-таблице. В таких случаях, чтобы добавить еще одно значение в список альтернатив, достаточно добавить еще одно значение в хэш, не касаясь самого алгоритма поиска.
Если вы пишете библиотеку функций, то сначала спроектируйте ее интерфейс и напишите код, который будет использовать функции из вашей пока еще не написанной библиотеки. Удобно пользоваться? Если нет, то это повод пересмотреть интерфейс, а поскольку сам функционал еще не написан, его не придется рефакторить.
Многие в своей практике постоянно имеют дело с доставшимся в наследство кодом. И порой, когда необходимо использовать уже давно написанную кем-то функцию, и если интерфейс этой функции спроектирован неряшливо, в памяти всплывает только ее название, так как набор ее параметров не запоминается. В таких случаях приходится искать место в коде, где эта функция уже используется, и копировать ее вызов оттуда в свой код. Если не уделять проектированию интерфейса достаточное количество времени и сил, то же может произойти с вашими же собственными функциями, когда придет время кому-либо еще сопровождать ваш код.
Вне зависимости от сложности кода, комментарии должны присутствовать обязательно. Как минимум — в заголовке каждой функции/метода: что делает, какие параметры принимает, что возвращает. Без коментариев можно оставлять только самые очевидные части алгоритма, нет смысла комментировать каждое выражение. Самый простой способ определить, требует ли алгоритм подробных коментариев — прикинуть, сколько секунд необходимо, чтобы понять его. Если больше 5 — комментарии необходимы.
Совершенный код. Практическое руководство по разработке программного обеспечения
Эта и ещё 2 книги за 299 ₽
Более 10 лет первое издание этой книги считалось одним из лучших практических руководств по программированию. Сейчас эта книга полностью обновлена с учетом современных тенденций и технологий и дополнена сотнями новых примеров, иллюстрирующих искусство и науку программирования. Опираясь на академические исследования, с одной стороны, и практический опыт коммерческих разработок ПО – с другой, автор синтезировал из самых эффективных методик и наиболее эффективных принципов ясное прагматичное руководство. Каков бы ни был ваш профессиональный уровень, с какими бы средствами разработками вы ни работали, какова бы ни была сложность вашего проекта, в этой книге вы найдете нужную информацию, она заставит вас размышлять и поможет создать совершенный код.
Книга состоит из 35 глав, предметного указателя и библиографии.
Отзывы 6
Одна из лучших книг по программированию, обязательное чтение для всех программистов. Книга не привязана к какому-то конкретному языку или технологии, более того, в ней проводится четкое различие между программированием на каком-то языке и программирование с использованием конкретного языка.
Основная тема – управление сложностью – современные программные проекты становятся все больше и больше, голова человека просто не в состоянии удержать такой объем информации. Поэтому подавляющая часть времени разработчиков уходит на отладку уже существующего кода и попытки изменять его таким образом, чтобы не поломать все остальное. Многие проекты погибают от собственной сложности – изменять их становится настолько сложно, что проще переписать все с нуля.
Макконел на всех уровнях рассматривает методики написания надежного и расширяемого кода, который легко менять добавляя новые возможности и в котором легко исправлять ошибки – наглядно выражая это в принципе «код надо писать так, чтобы его было легко читать и понимать, даже если такой код писать дольше и сложнее». Начиная с проектирования архитектуры автор через классы спускается до отдельных методов, кусков кода вроде циклов и условных операторов, методик отладки и правильной оптимизации производительности. Примеры демонстративно идут вперемешку на C++, Java и Visual Basic
Книга где автор может 50 страниц детально описывать правильные методики комментирования кода и сообщать массу полезной информации.
Совершенный код. Практическое руководство по разработке программного обеспечения
Эта и ещё 2 книги за 299 ₽
Отзывы 6
Одна из лучших книг по программированию, обязательное чтение для всех программистов. Книга не привязана к какому-то конкретному языку или технологии, более того, в ней проводится четкое различие между программированием на каком-то языке и программирование с использованием конкретного языка.
Основная тема – управление сложностью – современные программные проекты становятся все больше и больше, голова человека просто не в состоянии удержать такой объем информации. Поэтому подавляющая часть времени разработчиков уходит на отладку уже существующего кода и попытки изменять его таким образом, чтобы не поломать все остальное. Многие проекты погибают от собственной сложности – изменять их становится настолько сложно, что проще переписать все с нуля.
Макконел на всех уровнях рассматривает методики написания надежного и расширяемого кода, который легко менять добавляя новые возможности и в котором легко исправлять ошибки – наглядно выражая это в принципе «код надо писать так, чтобы его было легко читать и понимать, даже если такой код писать дольше и сложнее». Начиная с проектирования архитектуры автор через классы спускается до отдельных методов, кусков кода вроде циклов и условных операторов, методик отладки и правильной оптимизации производительности. Примеры демонстративно идут вперемешку на C++, Java и Visual Basic
Книга где автор может 50 страниц детально описывать правильные методики комментирования кода и сообщать массу полезной информации.