Давным-давно, в далекой-далекой галактике, на провинциальной планете жили разумные млекопитающие, у которых совсем недавно началась эпоха информационных технологий.
В том веке многим людям приходилось писать программы на разных языках для разных программных платформ.
И любой потомок обезьяны с этой планеты, написавший хотя бы пару строчек кода, заставившего тупой компьютер совершить несколько разумных (с точки зрения автора) действий, уже считал себя просвещенным мудрецом, постигшим ДАО.
информационных технологий, и его называли не иначе как программистом-джедаем.
Сегодня, дорогие любители истории Вселенной, мы попытаемся разобраться, в чем состоит фундаментальное заблуждение этих потомков обезьян и людей, и в чем разница между программистами и непрограммистами; для простоты будем называть их кодировщиками.
Подавляющее большинство людей считает, что совершенно не важно, каким образом был достигнут результат, если проблема внешне решена.
Приступая к решению какой-либо задачи в разработке ПО (и не только), многие не задумываются о фундаментальных принципах проектирования, а просто копируют рабочие блоки у своих предшественников.
Программисты, вооружившись справочником по синтаксису языка и поисковой системой в Интернете, создают свои «мегашедевры программирования».
Быстро заставив программу с помощью отладчика совершать действия, более или менее похожие на логическое поведение, разработчики подают заказ.
Клиент доволен, деньги у кодера есть — все довольны, на первый взгляд. Дальше происходит, как правило, следующее: проходит совсем немного времени и клиент хочет что-то изменить в своей программе, и, как правило, многое.
Заказчик обращается либо к автору программы, либо к другому программисту и заказывает изменения.
Подрядчик смотрит на код и не понимает, как работает эта мешанина результатов поисковых систем, и начинает мучительно переписывать код, срывая сроки даже на «элементарные изменения».
При втором или чуть более позднем редактировании код приложения становится настолько сложным для понимания, неуправляемым и содержит ошибки, что становится проще переписать его с нуля, запросив у заказчика полный бюджет на новую разработку.
И тут клиент наконец-то чувствует свою эпическую ошибку с выбором исполнителей, так как ему приходится платить за вторую разработку приложения, или нанимать гениев за мега деньги для самых простых изменений в программе, хотя жизнь приложения только что закончилась.
началось.
Вместе с осознанием этой ситуации мы приближаемся к пониманию принципиальных различий между специалистом и неспециалистом в области разработки программного обеспечения.
Программисты, в отличие от программистов, понимают фундаментальные принципы своего ремесла, что позволяет им писать простой и понятный код, позволяющий правильно использовать технологии для решения поставленной задачи.
Этот простой и понятный код приложения позволяет заказчику сэкономить деньги, поскольку такой код легко читать и изменять, как другому программисту, так и любому программисту.
Приложение с удачной архитектурой и качественным кодом может успешно эксплуатироваться и развиваться на протяжении значительного периода времени с минимальными затратами заказчика на изменения и поддержку.
И тогда возмущённые программисты пожаловались: «Мы знаем все эти фундаментальные принципы! Они все бесполезные и глупые! И Вселенная ответила им: «Возможно, это и так, но, возможно, вы их не понимаете, и поэтому не знаете, как их применить».
Возьмем простые примеры кода с использованием мегапопулярного на этой провинциальной планете языка веб-разработки PHP. Сам язык вполне хорош для использования по прямому назначению, хотя мнения по этому вопросу, как правило, расходятся.
Часть 1. Простота кода
Пример 1:
Просто строка кода, написанная программистом, но то, что она делает, совершенно не очевидно и требует как минимум комментариев.if ($u->g) $u->reg($u->email, $u->nm);
Теперь та же строка кода, написанная программистом: $user->email = $email;
$user->name = $name;
if ($user->isGuest) $user->register();
Думаю, все вопросы отпали, и комментарии уже не нужны.
А вот как раз имена переменных и функций даны правильно и однозначно.
Пример 2:
//…
$sql = 'SELECT * FROM usr LIMIT 10';
//…
/** view */
if ($n<10) echo .
;
Вроде код более-менее понятен, хотя настораживают магические константы типа 10, к тому же код встречается в разных файлах и часто повторяется.
Как бы это написал программист? Да что-то подобное: class User
{
Теги: #техники программирования #ООП #паттерны #программирование #ООП
-
Шаблоны Grasp: Создатель
19 Oct, 24 -
Моддинг Xbox 360
19 Oct, 24 -
Оптимизация Обработки Сообщений Rabbitmq
19 Oct, 24