Не всё в программировании так радужно, как написано в «Радостях ремесла». Трудности неизбежны. Имеет смысл знать, что это за трудности, тогда их легче переносить.
Во-первых, всё нужно делать безупречно. Если один символ или одна пауза в заклинании не соответствует строго заданной форме, компьютерная магия не работает. Люди не привыкли делать вещи безупречно, да и мало какие области человеческой деятельности требуют этого. Поэтому привынуть к безупречности – это самая сложная задача в ходе обучения программированию.
Далее, цели ставят другие люди, ресурсы предоставляют другие люди, и информацию тоже приносят другие люди. Мало кому удается контролировать обстоятельства своей работы или даже ее цель. Полномочия человека обычно не соответствуют его ответственности. Так происходит во всех областях, где хоть что-то изменяется, то есть не только в программировании. Фактические (в отличие от формальных) полномочия приобретаются за счет достижения целей.
Зависимость от других особенно болезненна для системного программиста. Он зависит от программ других людей. Эти программы часто плохо спроектированы, плохо реализованы, не полны (нет исходного кода или тестов) и плохо задокументированы. Поэтому ему приходится тратить часы на изучение и исправление вещей, которые в идеальном мире были бы полными, доступными и удобными.
Следующая проблема в том, что дизайнить роскошные концепции - это весело, а искать и исправлять мелкие баги – это просто работа. Любая творческая деятельность сопровождается скучными часами кропотливого труда, и программирование не исключение.
Хорошо, если поиск и исправление багов имеет линейную сходимость по времени. Но обычно закон квадратичный или даже хуже. Начавшись, тестирование может продолжаться без видимого конца, находить и исправлять новые баги всё сложнее и сложнее, чем первые.
Последняя проблема, а иногда и последняя капля, заключается в том, что продукт, над которым ты трудился так долго, кажется устаревшим к моменту завершения, а то и раньше. Коллеги и конкуренты активно ищут новые и лучшие идеи. Замена твоему детищу уже не только задумана, но и распланирована.
Эта проблема всегда кажется хуже, чем есть на самом деле. Нового и лучшего продукта обычно ещё нет, когда заканчиваешь свой; о нем только говорят. Он тоже потребует месяцев разработки. Настоящий тигр – жалкое подобие бумажного, если не пересекаться с ним в реальности. У реальности есть достоинства.
Конечно, технологическая база, на которой строится продукт, всегда развивается. Как только дизайн утверждается и замораживается, он становится устаревшим с точки зрения концепций. Но реализация реальных продуктов требует введения этапов и декомпозиции на основе стабильного дизайна. Поэтому устаревание реализации должно измеряться относительно других существующих реализаций, а не относительно нереализованных идей. Наша задача и миссия заключаются в том, чтобы найти реальные решения реальных проблем в реальных сроках с доступными ресурсами.
Таково программирование - и топкое болото, в котором утонуло множество усилий, и творческая деятельность со своими радостями и трудностями. Для многих радости значительно перевешивают трудности.
![](https://neexee.com/ru/posts/woes-of-the-craft/preview_hu86b999e4d611c94fe05d208c85c2dd07_1308873_1920x1080_fit_q75_box.jpg)
Это современный перевод главы «The Woes of the Craft» из книги «The Mythical Man-Month» Фредерика Брукса. Главу редко цитируют, если сравнивать с другими частями книги, но идеи этой главы поэтичны и точны. Здесь про любых айтишников, не только программистов.
- Радости ремесла
- Печали ремесла
- Идеальная работа и благодарность