Поиск по сайту:

Эстетика программирования в теории и на практике

Эстетика программирования в теории и на практике

02.07.2013

Просмотров: 4144


Не так давно, в феврале этого года, у меня в блоге промелькнула запись «Сошедшие с Олимпа», где речь шла о так называемых «псевдогуру» — обладателях всевозможных начальственных интернет-статусов и заоблачных интернет-репутаций, специалистах всего на свете.

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

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

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

Переходим к конкретному примеру.

Несколько дней назад автору позарез понадобилось решить конкретную задачу, каковую он постарался изложить максимально подробно на форуме разработчиков портала WOWEB.

miclosh: В одном из творений используется библиотека PHPExcel для парсинга, вы не поверите, Excel-файлов. Если схематично, то эта библиотека, точнее, её функция getCellIterator выдаёт скрипту массив распарсенных данных. Однако во время парсинга где-то глубоко в недрах библиотеки происходит следующее: пустые ячейки не возвращаются как элемент массива, а уничтожаются физически, что приводит к сдвигу ячеек, неверному отображению данных в строках, и в итоге к нарушению целостности данных от строки к строке. Вопрос, соответственно, предельно прост: если кто-то сталкивался с подобной проблемой, просьба подсказать, в какой части кода PHPExcel происходит уничтожение пустых ячеек, с тем чтобы можно было аннулировать данную операцию или подменить её более адекватным вариантом действий. Заранее спасибо.

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

hertfelt: setIterateOnlyExistingCells(false);

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

miclosh: Излагаю несложное решение. Версия — PHPExcel 1.7.8, 2012-10-12 (кстати, мне следовало сразу это указать). Библиотека CellIterator.php. Изменил true на false, но, к сожалению, не помогло. Зато немного выше в той же библиотеке стояло: public function valid(){...if ($this->_onlyExistingCells). Не мудрствуя лукаво, строкой выше вставил: $this->_onlyExistingCells=false; и получил нужный результат: все пустые ячейки на сей раз остались на своём месте. Спасибо за помощь, hertfelt!

Казалось бы, задача решена, решение сформировано, вопрос можно закрывать.

Но — не тут-то было! Ведь теоретики-то своего слова ещё не сказали!

И в теме появляется новое, поистине восхитительное сообщение, но на сей раз от супермодератора форума, Majesty.

По-моему, вы сделали херню. Нужно было вызвать метод setIterateOnlyExistingCells() с параметром false и не пришлось бы вмешиваться в код библиотеки. Ломать зависимости — последнее дело.

В характерном для теоретиков стиле сообщение начинается с прямого, неприкрытого хамства. Далее Majesty настаивает на использовании метода, выше уже предложенного hertfelt, правда, уже не ограничиваясь, как hertfelt, двумя словами, и не обратив ни малейшего внимания на указанную автором неработоспособность способа. Свою настойчивость Majesty аргументирует словами «и не пришлось бы вмешиваться в код библиотеки», при этом до него явно не доходит комизм ситуации, в которой он сам же предлагает аналогичное вмешательство в код. И финальный аккорд: «Ломать зависимости — последнее дело». Для неспециалистов уточню, что заключительные слова Majesty неплохо соотносятся с классическими канонами универсального программирования, с решением же конкретной задачи соотносятся чуть менее нежели вообще никак.

В заключение добавлю, что у автора имеется руководство (естественно, в силу специфики бизнеса также состоящее исключительно из практиков), которое плевать хотело на эстетику и красоту кода (подобные вопросы оставляя на усмотрение автора) и которое оценивает работу автора (в том числе материально) исключительно по работоспособности создаваемых автором приложений. В связи с этим автору вспоминается случай, когда он собирался оптимизировать один из запросов к базе данных MySQL, и на вопрос руководства «Что даст оптимизация запроса?» объяснил: «Вывод данных за ноль целых пять десятых секунды вместо пяти — шести секунд», в ответ на что услышал следующее: «Пять — шесть секунд в настоящее время нас вполне устраивает, сейчас нет времени на оптимизацию, имеются другие, более срочные задачи». В свете сказанного, об отношении своего руководства к теоретикам автор предоставляет судить вам.


Автор сайта


Комментарии

добавить комментарий

комментариев не найдено — ваш может стать первым!


© Taxpert. Интернет-мастерская М. Ю. Уткина.