Программист – тоже человек!

Что бы вы сказали о человеке, который решил показывать полноэкранные фильмы на машине с Intel 80386 (помните, были такие?) или решившем построить вебсайт, обслуживающий миллионы человек, на одной едиственной IBM PC XT circa 1980? Покрутили бы пальцем у виска, верно?

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

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

Чего далеко ходить, у меня был в прошлом эпизод, когда я вынужден был написать приличный кусок кода, который трудно было поддерживать. Задача была такая, сложная. Росла эта сложность из бредовых требований к функциональности, которые по политическим мотивам нужно было реализовать, в результате получился сложный кусок. Мой менеджер несколько раз порывался править его за меня, и это был первый (и пока последний) случай в моей жизни, когда я наблюдал у человека 100% регрессий. То есть, каждый раз, когда Серый Крыс (назовем так сей обобщенный образ в традициях данного блога*) правил реальный или воображаемый баг в моем коде, он вносил туда другой, как правило более худший баг. Ограничив размер потребляемой памяти он внес deadlock. Проверяя качество моего кода, он вообразил, что я не освобождаю переменную, «исправил» это и внес утечку памяти (не спрашивайте меня, как можно внести утечку памяти добавив free() – я тоже был очень впечатлен.) А исправив редкий и трудно воспроизводимый реальный баг в сетевом соединении он одним махом обрушил половину функциональности всего продукта. В общем, писать код так, чтобы абы кто мог его править, конечно, невозможно. Но ведь можно хотя бы думать об этом и не создавать искуственных усложнений на пустом месте, верно?

Другой пример, где трудно сказать, кто прав, кто виноват, но который показывает к чему приводит сложность кода. Еще в России мой друг работал на некую софтверную фирму и написал им изрядный кусок кода, который был весьма и весьма сложен. Надо отдать должное – задачи и правда были сложные, по своей природе. Сложная растеризация векторной графики. Потом мой друг уехал в Штаты. Через пару лет другой мой друг зашел в ту фирму и увидел следующую картинку: двое ребят грусто смотрели на экран и один другому говорит: «Да-а-а, это Вадик писал, теперь в этом никто не разберется. Придется переписывать...» Никто не сомневался, что он – гений. Проблема в том, что когда гений уезжает в Штаты, найти другого гения ему на замену, который к тому же еще бы и смог разобраться, что тут предыдущий гений накропал, очень тяжело.

Так, а с чего я заговорил на данную тему? Ну, да, натолкнулся на это дело. Кстати, натолкнулся на это в открытом коде, не считайте это нападкой на открытый код, просто именно в нем я натолкнулся на это очередной раз, вот и пишу о нем. К тому же, с открытым кодом каждый может его загрузить и убедиться лично. Собрался я поставить CMS на один из сайтов моей жены. Выбор, разумеется, огромный, но последнее время мне очень нравится Drupal. Amazon.com на нем, конечно, не построить, но сотню-другую посетителей в день он выдерживает легко, а для любительского сайта ничего больше и не нужно. Одна беда, хорошей темы под рукой нету, а сайт у нее специализированный, доступными темами не обойдешься. Ну, что, взял я одну из стандартных тем, начал править. Ёма-ё...

Каждая страница требует примерно дюжину stylesheets. FireFox примерно половину их не видит, или по крайней мере не сознается в этом в плагине разработки. Впрочем, в том, как он отображает страницу, тоже не сознается. То есть, написано в стиле:

body.sidebars {… }

Проверяешь текст страницы:

<body class=”sidebars”>…

Файл со стилем в заголовке страницы. Наводишь на body мышку, элемент видит, класс видит, стиль не видит.

Да-да, сейчас и к IE перейду, не волнуйтесь так. IE стиль видит, но применяет его как-то странно. Представьте себе два вложенных элемента, у внешнего элемента фон зеленый, у внутреннего – синий. Как это должно выглядеть. Просто, синий прямоугольник внутри зеленого, верно? Как бы не так. Я так и не понял, что разработчики этого стиля устроили, но внешний элемент мне показали без фона, а внутренний – зеленым.

Я знаю, что сейчас многие начнут подпрыгивать на месте и кричать про плохой IE, который не поддерживает стандарты, но ведь лисенок от таких стилей тоже рехнулся, при чем тут стадарты? Может просто писать попроще и понадежнее надо?

Что мне тут не понравилось?

  1. Дюжина динамически генерируемых файлов со стилями очень плохо загружается в человеческую голову.
  2. Переписывание атрибутов одного и того же элемента или класса в нескольких разных файлах еще хуже отслеживается в голове.
  3. Стандартная тема должна разрабатываться с расчетом на то, что ее будут использовать в качестве основы для новых тем.

А тут скромнейшие изменения воспринимаются по принципу сталинских лагерей: «Шаг вправо, шаг влево – попытка к бегству, прыжок на месте– провокация.»

Никуда не деться, Интенет и браузеры становятся все более и более популярной платформой. Так что приходится для нее писать. Но надо также понимать, что платформа эта – изрядный и вонючий кусок понятно чего. А когда платформа – это самое, сложный код не работает, надо писать просто.

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

---

* Про образ «Серого Крыса» и сказку об Иванушке Дурачке работающем на Серого Крыса (вместо Ивана Царевича и помогающего ему Серого Волка) можно прочитать вот здесь.

Язык

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer