Страхи программистов

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

Позора и неэффективности

  1. недостаточной личной компетентности
  2. провала на интервью / с коммандой
  3. лёгкой заменяемости себя, личной незначимости (как замена винтика)
  4. критики своего кода
  5. долгих митингов не дающих никаких решений, затягивающих фазу анализа
  6. испортить супер-клёвый новый код своей неуклюжестью
  7. написать новый велосипед
  8. переключиться на другую задачу не закончив прошлую
  9. распыления по всему проекту в мелких деталях и багфиксах (micromanagement)

Смерти и забвения

  1. изучить, написать, протестировать код, а потом смотреть как его отклоняют, не мерджат, либо полностью переписывают (быстрая смерть кода)
  2. потери работы из-за потери зрения, пальцев, паралича (смерть карьеры)
  3. восприятие программирования изменится и оно уже не будет приносить наслаждения (fun), став вынужденной рутиной (burn out)
  4. старости, неспособности охватывать все закономерности, тормознутости что-бы писать что-то новое и глупости что-бы эффективно решать проблемы

Некомпетентности организации

  1. весь проект не имеет смысла, не востребован
  2. бюрократии, отсутствия ответсвенных людей
  3. некомпетентного руководителя
  4. увольняться, не закончив, оставив проект в чужих, менее профессиональных руках
  5. что важные части проекта будут отданы джуниорам, а простые фиксы — сениорам, проект встанет и прийдётся переписывать чужой код
  6. несправедливой методики оплаты труда

Ответственности

  1. допустить серьёзную ошибку приводящую к потере денег
  2. оценивать задачу по времени, не зная всех деталей
  3. сжатых сроков, когда всё горит и надо быстро клепать некачественный код ночью в пятницу
  4. вызывать злость своим плохим кодом у других программистов в будующем
  5. оставить в коде уязвимости
  6. рост серьёзности проекта, страх сломать чью-то жизнь из-за обновления кода.. или данные
  7. отказать/раскритиковать в редактировании своего кода (pull request) и обидеть человека

Неизвестности

  1. перемен постоянно вносимых клиентом
  2. изменение/merge понятного моего кода с чьим-то хаосом и паники из-за этого
  3. менять существующий (legacy) код, потому что он хрупкий
  4. начинать проект с пустой папки, с нуля без библиотек и фреймворков, останавливаться и прорабатывать каждую мелочь
  5. закончить проект и получить что-то неизвестное (новый проект с другим клиентом, областью, методикой и тп.)
  6. непредсказуемости, гейзен-бага который хаотично ломает данные
  7. отсутсвия решений в гугле и stackoverflow

Ограниченности

  1. не иметь доступа к серверу, невозможности отслеживания ошибок и их воспроизведения
  2. потери или повреждении данных в отсутсвии бэкапов
  3. вынужденности изучать маргинальную, устаревшую библиотеку/технологию
  4. привязанности к одному и тому же проекту/технологии на долгое время
  5. невозможности делиться информацией о проекте/технологиях (из-за NDA и тп.)

Сложности

  1. не понимать область (domain) проекта из-за сложной теории (например релятивистская физика, сопротивление материалов)
  2. иметь очень большое пространство сущностей в одном проекте (>100), каждый со своей логикой
  3. высокой взаимозависимостью кода (tight coupling)
  4. исправляя что-то, упустить и сломать функционал всплывающий в редких случаях
  5. парсинге сложных данных (как то распознавание образов/текста из tif картинки, вставленной в старый бинарный doc файл, заархивированный в .7z, доступный только по WSDL с определённым SSL сертификатом клиента)
  6. многопоточности, транзакций, асинхронности

Да, это Fear/Worry Driven Development. Он заражает не только руководителей, но и самих программистов — они начинают так же создавать абстракции на абстракциях, дополнительные параметры, фабрики «на всякий случай».