Мало кто осознаёт, но программисты большие трусы. Оказывается что сидя в офисе можно много чего бояться! Некоторые компании даже неосознанно эксплуатируют эти страхи, что-бы культивировать новые методологии в разработке где на совещания, планирование, спецификацию тратиться больше времени чем на саму реализацию и тестирование. Недавно на девклубе была тема про девелоперов, которым за 30, а мне самому стукнуло недавно, поэтому вот чего боятся программисты.
Позора и неэффективности
- недостаточной личной компетентности
- провала на интервью / с коммандой
- лёгкой заменяемости себя, личной незначимости (как замена винтика)
- критики своего кода
- долгих митингов не дающих никаких решений, затягивающих фазу анализа
- испортить супер-клёвый новый код своей неуклюжестью
- написать новый велосипед
- переключиться на другую задачу не закончив прошлую
- распыления по всему проекту в мелких деталях и багфиксах (micromanagement)
Смерти и забвения
- изучить, написать, протестировать код, а потом смотреть как его отклоняют, не мерджат, либо полностью переписывают (быстрая смерть кода)
- потери работы из-за потери зрения, пальцев, паралича (смерть карьеры)
- восприятие программирования изменится и оно уже не будет приносить наслаждения (fun), став вынужденной рутиной (burn out)
- старости, неспособности охватывать все закономерности, тормознутости что-бы писать что-то новое и глупости что-бы эффективно решать проблемы
Некомпетентности организации
- весь проект не имеет смысла, не востребован
- бюрократии, отсутствия ответсвенных людей
- некомпетентного руководителя
- увольняться, не закончив, оставив проект в чужих, менее профессиональных руках
- что важные части проекта будут отданы джуниорам, а простые фиксы — сениорам, проект встанет и прийдётся переписывать чужой код
- несправедливой методики оплаты труда
Ответственности
- допустить серьёзную ошибку приводящую к потере денег
- оценивать задачу по времени, не зная всех деталей
- сжатых сроков, когда всё горит и надо быстро клепать некачественный код ночью в пятницу
- вызывать злость своим плохим кодом у других программистов в будующем
- оставить в коде уязвимости
- рост серьёзности проекта, страх сломать чью-то жизнь из-за обновления кода.. или данные
- отказать/раскритиковать в редактировании своего кода (pull request) и обидеть человека
Неизвестности
- перемен постоянно вносимых клиентом
- изменение/merge понятного моего кода с чьим-то хаосом и паники из-за этого
- менять существующий (legacy) код, потому что он хрупкий
- начинать проект с пустой папки, с нуля без библиотек и фреймворков, останавливаться и прорабатывать каждую мелочь
- закончить проект и получить что-то неизвестное (новый проект с другим клиентом, областью, методикой и тп.)
- непредсказуемости, гейзен-бага который хаотично ломает данные
- отсутсвия решений в гугле и stackoverflow
Ограниченности
- не иметь доступа к серверу, невозможности отслеживания ошибок и их воспроизведения
- потери или повреждении данных в отсутсвии бэкапов
- вынужденности изучать маргинальную, устаревшую библиотеку/технологию
- привязанности к одному и тому же проекту/технологии на долгое время
- невозможности делиться информацией о проекте/технологиях (из-за NDA и тп.)
Сложности
- не понимать область (domain) проекта из-за сложной теории (например релятивистская физика, сопротивление материалов)
- иметь очень большое пространство сущностей в одном проекте (>100), каждый со своей логикой
- высокой взаимозависимостью кода (tight coupling)
- исправляя что-то, упустить и сломать функционал всплывающий в редких случаях
- парсинге сложных данных (как то распознавание образов/текста из tif картинки, вставленной в старый бинарный doc файл, заархивированный в .7z, доступный только по WSDL с определённым SSL сертификатом клиента)
- многопоточности, транзакций, асинхронности
Да, это Fear/Worry Driven Development. Он заражает не только руководителей, но и самих программистов — они начинают так же создавать абстракции на абстракциях, дополнительные параметры, фабрики «на всякий случай».