Невыносимая сложность программирования

в 14:22, , рубрики: Блог компании Aori, макконнелл, основы, Программирование, размышления вслух, Совершенный код, метки: , ,

A n00b y0u areКогда-то книга “Совершенный код” Стива МакКоннела произвела на меня большое впечатление. Я лично думаю, что эту книгу обязательно должен прочесть каждый, кто зарабатывает на жизнь написанием кода. Особенно настоятельно я рекомендую эту книгу новичкам.

Настоящие размышления о программирования посвящаются главе 33 “Личность” и тем, кто решил связать свою жизнь с разработкой программного обеспечения.

Давным давно, в далёкой галактике

Когда-то мы с друзьями делали сайты. Нас было трое: дизайнер, менеджер и я. Я был парень неглупый, и способный программист, поэтому не ограничивал себя и был одновременно верстальщиком, клиент-сайд и сервер-сайд программистом, системным администратором и тестировщиком в одном лице.

Каждый наш продукт проходил приблизительно один и тот же жизненный цикл:

  1. Обсуждение. Всё понятно, там 5 типов страниц, включая фидбек, бэкенд у нас готовый на symfony, сроки ясны, пилим.
  2. Начальный этап разработки. Сайт простой, поэтому не парюсь и делаю всё одновременно. Верстаю главную, программирую прикольную выезжалку на jquery, внедряю систему контроля версий, пилю параллельно проект для развлечения, докручиваю админку. Ах, да, нужно добить страницу фидбека с прошлого проекта. Пилю фидбек.
  3. Собственно, разработка. Пришли обновлённые требования и надо что-то подкрутить, но это не беда. Перевёрстываю главную, заодно рефакторю вёрстку, заодно пилю проект для развлечения, заодно вношу мелкие правки от дизайнера. Программирую и тестирую админку, фикшу баги, верстаю, прогаю и снова фикшу баги. Некоторые страницы сознательно оставляю на потом.
  4. Этап “готово на 90%”. Зачастую, самый долгий. В его начале выясняется, что 90% готовности не достаточно даже для предварительной демонстрации. Период ночного багфикса, переносов сроков, борьбы с эффектом треугольного одеяла.
  5. Сдача проекта. На финальной демонстрации я понимаю, что забыл фидбек.

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

Прошло несколько лет

С тех пор я сделал какое-то количество намного более сложных проектов, чем эти сайты, сделал их чётко и в срок. Я увеличил свои знания и умения где-то на порядок. Я многого добился и горжусь этим. Даже свои косяки я вспоминаю с удовольствием, потому что на них я тоже многому научился.

Теперь я совершенно точно знаю: программирование действительно слишком сложно для меня.

Мой мозг отказывается одновременно осознавать и помнить все зависимости и потоки данных в моих проектах. Моё сознание не способно переключаться между разработкой, тестированием и ответами на вопросы без потери производительности. Я не могу сосредоточится на задаче, когда в файловой структуре проекта бардак. Я, в конце концов, не могу работать без графика и без атмосферы сосредоточенности и тишины. Чтобы никто не ржал над ухом.

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

Немножко матчасти

Физический предел человеческого мозга, по разным оценкам, 5-7 объектов в поле внимания одновременно, у кого-то больше, у кого-то меньше. Это довольно немного, чтобы охватить сложную систему. Учитывая, что простые программные продукты по сложности сопоставимы со проектом здания. А программные продукты уровня операционной системы по сложности не сравнимы ни с каким другим творением человека. С такой сложностью нельзя работать голыми руками, нужны средства защиты.

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

Как нам думать

Многие рекомендации в программировании имеют в основе обыкновенный здравый смысл. Учитесь, индустрия обновляется на 50% каждые 3 года. Используйте конвенции, не тратьте время на раздумья о том, как оформить код. Будьте скромны, ваши возможности ограничены. Конечно, найдите и используйте в работе самые лучшие средства разработки: редактор, систему контроля версий, трекер задач.

На мой взгляд, очень правильные и достаточно полные рассуждения о том, каким должен быть (и каким не должен) программист, содержатся в книге Стива МакКоннелла “Совершенный код”. Вот несколько цитат оттуда.

Самые лучшие программисты — те, кто понимают, насколько ограничены их возможности. Они скромны. Худшие программисты отказываются признать, что их способности не соответствуют задаче. Характер не позволяет им стать отличными программистами. Чем усерднее вы работаете над компенсацией ограниченных возможностей своего разума, тем лучше будете программировать. Быстрота вашего развития напрямую зависит от вашей скромности.

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

Быть программистом начального или среднего уровня — не грех. Быть компетентным программистом, а не лидером, также не грех. Но если вы знаете, что нужно делать для собственного развития, и ничего не предпринимаете, иначе как грехом это назвать нельзя.

Какими мы будем

Программирование — сложнейший род человеческой деятельности. Быть программистом — почётно и круто. Поэтому не теряйте время попусту, не боритесь с ветряными мельницами, лучше читайте хорошие книги, узнавайте и применяйте новые техники, учитесь и растите. May the source be with you.

Дополнительная литература

Стив МакКоннелл — Совершенный код
В. Турчин — Феномен науки
Объем внимания — Википедия

Автор: lukyanov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js