Tue 28 Dec 2010
Защита от дурака в программировании
Posted by Alex Lebedev under инструменты, менеджмент, программирование
[5] Comments
Наткулся сегодня на пост c размышлениями о пользе статической типизации для ограничения ущерба, который может быть нанесен проекту неквалфицированным и/или не заботящимся о качестве программистом. Читать здесь: Антиметапрограммирование
Хочу изложить свою точку зрения на проблему. Пытаться техническими средствами бороться с некомпетентностью — заранее проигранная игра. Если какой-то разработчик приносит в проекте вреда больше, чем пользы, то существует два конструктивных решения:
- обучить его
- избавиться от него
Если оба варианта недоступны, мы попадаем в крайне неприятную ситуацию. Я считаю, что выйти из нее можно только политическими средствами, но пусть о них напишет кто-нибудь разбирающийся в офисной политике лучше меня. Я же продолжу о технических решениях.
Вредные решения
Языки со статической типизацией, проверяемыми исключениями и прочей защитой от дурака — вся команда пишет медленее, чтобы худшие разработчики наносили меньше вреда. Общий баланс будет почти всегда отрицательным, потому что от приведения языка к наименьшему общему знаменателю лучшие разработчики страдают больше всех, а выгода невелика и мало зависит от навыка.
Запрет сложных решений (например, метапрограммирования) стандартом кода в рамках конкретной команды. Опять-таки, мы отнимаем мощный инструмент у лучших разработчиков чтобы снизить шансы худших отпилить себе ногу по неосторожности. Ущерб будет больше положительного эффекта
Полезные решения
Автоматическая проверка кода (с помощью *lint и других инструментов такого рода) — небольшие дополнительные затраты времени на каждый коммит, позволяющие снизить количество ошибок определенных типов. Здесь мы имеем дело с небольшим выигрышем, обеспеченным еще более незначительными затратами, общий эффект положительный.
Рецензирование кода — тратим дополнительное время при разработке, получаем отлов некоторых ошибок, улучшение стиля кодирования в команде и ускоренную передачу опыта. Общий баланс положительный, кроме разработчиков, чьи художества быстрее переделать полностью, чем доводить через многочисленные ревью.
В следующий раз я постараюсь проиллюстрировать свои предварительные выводы цифрами и напишу о неоднозначности пользы от юнит-тестов.



