место в рейтинге
  • 235418
  • 2163
  • 79
Нравится блог?
Подписывайтесь!

7 смертных грехов в разработке ПО

Друзья, представляю вам перевод статьи «The 7 deadly sins of software development» автора Neil McAllister, опубликованной на infoworld.com.

Сразу хочу оговориться, что слово «feature», достаточно часто встречающееся в этой статье, я перевел как «фича», т.к. это довольно распространенный вариант перевода, как по мне.

Итак, поехали.

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

1. Страсть (избыток проектирования)

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

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

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

2. Чревоугодие (неспособность к рефакторингу)

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

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

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

3. Жадность (соревнование между командами разработки)

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

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

4. Лень (отсутствие проверки входных данных)

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

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

5. Гнев (отсутствие практики комментировать код)

Какой поступок с вашей стороны может быть более враждебным по отношению к вашим коллегам, чем отсутствие комментариев в коде? Да, я знаю, знаю: хорошо написанный код лучше всякой документации. А знаете что? Те 2 метода, которые вы написали в 2 часа ночи в прошлый вторник, представляют собой не слишком хорошо написанный код. (А если вы являетесь хакером, который пишет на Perl, вы должны мне 9 раз спеть «Аве Мария»).

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

Но помните что, бессмысленные комментарии, равно как и излишнее словоизлияние, могут быть даже хуже полного отсутствия комментариев. Комментарии вроде «это не работает» или «ни в коем случае это не трогать!» не слишком полезны для других. Также бесполезны и излишние комментарии, объясняющие простые операции вроде инициализации переменных. Код лучше всего документирует то, что он делает; комментарии нужны для того, чтобы понять, зачем это нужно.

6. Зависть (не использование систем управления версиями)

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

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

7. Гордость (отсутствие юнит-тестирования)

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

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

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

P.S. От себя хочется добавить, что многие идеи перекликаются с целыми главами в книге Стива Макконнелла «Совершенный код». Если вы ее еще не читали, настоятельно рекомендую исправить это упущение :)

P.P.S. Ну просто не мог не поделится с вами Ювиженцы)

Дулат Ходжаберген Stark
Мои интересы скажут, обо мне больше, чем я сам когда -либо смогу.
28 февраля 2011, 19:53
728

Loading...

Комментарии

весьма наглый копипаст с Хабра
источник указать не судьба? ))
Stark
0
0
ну я ждал вас))) просто я был уверен что такие люди есть)))
некомментирование и лень - мои страшные враги

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

«До какой же еще степени унижения должен дойти народ?!»

«До какой же еще степени унижения должен дойти народ?!»

Министерство труда и соцзащиты провело через парламент очередной крайне неоднозначный закон, который может вызвать всплеск недовольства в стране.
openqazaqstan
15 нояб. 2017 / 11:17
  • 28712
  • 21
Самый большой провайдер в стране: методы работы с клиентами от «Казахтелеком»

Самый большой провайдер в стране: методы работы с клиентами от «Казахтелеком»

История о том, как Народный провайдер наваривается на своих клиентах, намерено не отключая услуги, и беря лишние деньги за ненужные и не оказываемые услуги.
ligaspravedlivosti
17 нояб. 2017 / 19:12
  • 30129
  • 193
Бесспорные доказательства – путь к упрощенному судопроизводству

Бесспорные доказательства – путь к упрощенному судопроизводству

В Казахстане введен институт упрощенного (письменного) судопроизводства, который позволяет повысить доступность правосудия и сократить сроки рассмотрения дел.
mark_iceberg
20 нояб. 2017 / 15:49
  • 14982
  • 2
«Почему я не хочу встречаться с мужчинами-казахами»

«Почему я не хочу встречаться с мужчинами-казахами»

Заранее отпишусь, данный пост не является попыткой оскорбить собственную нацию) Как говорится о вкусах не спорят, каждому свое.
Bonittta
16 нояб. 2017 / 14:28
  • 16013
  • 372
Новшества на орбите уголовного правосудия

Новшества на орбите уголовного правосудия

Недавно я приняла участие в международной конференции по модернизации уголовного процесса, прошедшей в Бурабае. В чем значимость данных реформ для обычного казахстанца?
mirabeisenova
20 нояб. 2017 / 16:22
  • 11797
  • 1
Почему катастрофический отток интеллектуальной элиты не тревожит Астану?

Почему катастрофический отток интеллектуальной элиты не тревожит Астану?

Как сообщает телеканал КТК, только за последние девять месяцев Казахстан покинули 28200 человек, из них почти пять тысяч инженеров, около 2700 экономистов и 1700 учителей.
openqazaqstan
17 нояб. 2017 / 11:00
  • 11566
  • 58
Задержан казахстанец, продававший детей в сексуальное рабство в ОАЭ и Бахрейн

Задержан казахстанец, продававший детей в сексуальное рабство в ОАЭ и Бахрейн

Подтверждаются худшие предположения, циркулирующие в соцсетях. Периодические исчезновения детей в разных регионах Казахстана объясняются не только семейными проблемами и «синими китами».
openqazaqstan
16 нояб. 2017 / 15:46
  • 8073
  • 57
О «топ-30», «топ-50» и прочих понтах можно пока забыть

О «топ-30», «топ-50» и прочих понтах можно пока забыть

В объективности выводов швейцарского банка Credit Suisse усомниться трудно – его экономические рейтинги относятся к самым авторитетным и их явно трудно упрекнуть в предвзятости
openqazaqstan
18 нояб. 2017 / 17:21
  • 7397
  • 87
Система госинститутов Казахстана напоминает очень дорогое казино

Система госинститутов Казахстана напоминает очень дорогое казино

Сегодня в прессу просочились детали скандальной сделки ЕНПФ с «мусорными» облигациями ТОО «Бузгул Аурум», о которой уже подробно рассказывалось в начале года.
openqazaqstan
15 нояб. 2017 / 16:13
  • 3469
  • 21