Давным давно, в далёкой предалёкой галактике, на одной провинциальной планетке жили разумные млекопитающие, у которых недавно начался век информационных технологий. В тот век многим приходилось писать программы на разных языках для различных программных платформ. И любой потомок обезьяны с этой планеты, написавший хотя бы пару строчек кода, который заставил тупую вычислительную машину сделать несколько разумных (с точки зрения автора) действий, уже считал себя просветлённым мудрецом, постигшим ДАО информационных технологий и назывался не иначе как джедаем программистом.
Сегодня, дорогие любители истории вселенной, мы с вами постараемся разобраться, в чём же заключается фундаментальное заблуждение этих потомков обезьян людей, и в чём же различие между программистами и не программистами, для простоты будем называть их кодерами.
Абсолютное большинство людей считают, что совершенно не важно, как был достигнут результат, если задача, по всей видимости, решена. Начиная решать какую-либо задачу по разработке программного обеспечения (и не только), многие не задумываются о фундаментальных принципах проектирования, а просто копируют работающие блоки у предшественников. Кодеры, вооружившись справочником по синтаксису языка и интернет-поисковиком, создают свои «мегашедевры программирования». Быстренько заставив программу с помощью отладчика выполнять более или менее похожие на логичное поведение действия, разработчики сдают заказ. Клиент доволен, кодер при деньгах - все счастливы, на первый взгляд.
Далее происходит, как правило, следующее: проходит совсем немного времени и клиент хочет что-то изменить в своей программе, и, как правило, многое. Заказчик обращается либо к автору программы, либо к другому кодеру и заказывает изменения. Исполнитель смотрит на код, и не понимает, как это нагромождение из результатов выдачи поисковика работает, и начинает мучительно переписывать код, срывая сроки даже для «элементарных изменений». На второй или чуть более поздней правке код приложения становится столь труден для понимания, не управляем и глючен, что его реально становится проще переписать с нуля, затребовав с заказчика полный бюджет на новую разработку. И вот тут клиент ощущает, наконец, свой эпический промах с выбором исполнителей, так как ему приходится оплачивать уже вторую разработку приложения, либо нанимать гениев за мега деньги для простейших изменений в программе, хотя срок эксплуатации приложения только начался.
Вместе с осознанием этой ситуации мы приблизились к пониманию фундаментальных отличий специалиста от не специалиста в области разработки программного обеспечения. Программисты, в отличие от кодеров, понимают фундаментальные принципы своего ремесла, что позволяет им писать простой и понятный код, который уместно использует технологии, применительно к текущей задаче. Этот простой и понятный код приложения позволяет заказчику экономить деньги, так как такой код просто читать и изменять, как другому программисту, так и любому кодеру. Приложение с удачной архитектурой и качественным кодом может успешно эксплуатироваться и эволюционировать на протяжении значительного времени, с минимальными затратами заказчика на изменения и поддержку.
И тут возмущённые кодеры возроптали: «Мы знаем все эти фундаментальные принципы! Они все бесполезные и глупые!». А вселенная ответила им: «Возможно, это так, но, возможно, вы не понимаете их, а потому не умеете применять».
Возьмём простые примеры кода с использованием мега популярного на этой провинциальной планете языка веб-разработчиков PHP. Сам язык довольно хорош для его использования по прямому назначению, хотя мнения по этому вопросу обычно расходятся.
$user->email = $email;
$user->name = $name;
if ($user->isGuest) $user->register();
Думаю все вопросы отпали, и комментарии больше не нужны. А всего лишь правильно и однозначно даны имена переменным и функциям.
Class User
{
const MAX_VIEW_USERS_ON_PAGE = 10;
... ... ...
$sqlQuery = "SELECT * FROM `User` LIMIT ".User::MAX_VIEW_USERS_ON_PAGE;
…
/** view */
if (count($users) < User::MAX_VIEW_USERS_ON_PAGE) echo ...;
Читать код стало намного удобнее, а число выводимых на всех страницах пользователей (10) теперь легко изменить, так как оно используется через именованную константу, аналогичная ситуация и с наименованием таблицы в базе данных.
$userOnline = (isset($user->online) || (time() - $user->lastVisit < User::LOGOUT_TIMEOUT));
$userIsActivePoster = Post::getNumOfPostsForUser($user->id) > Post::ACTIVE_USER_MIN_POSTS;
if ($userOnline && $userIsActivePoster) $Raiting::addBonus($user->id, Rating::BONUS_RATING_POINTS);
Ну вот теперь условие стало простым и ясным как день, а всего лишь введены дополнительные логические переменные для упрощения кода.
$hdr = explode(" ",trim($header));
$hdr = "".$hdr."";
$header = implode(" ",$hdr);
Как сделать ситуацию лучше?
Class StringHelper
{
/**
* Return text header with CSS
* @param string $header
* @return string
*/
static public function getCSSDecoratedHeader($header)
{
$hdr = explode(" ",trim($header));
$hdr = "".$hdr."";
return implode(" ",$hdr);
}
...
$header = StringHelper::getCSSDecoratedHeader($header);
Теперь нам достаточно вызвать нашу функцию помощник, чтобы получить одинаковый результат во всех местах приложения, и, конечно, код стал проще и его количество уменьшилось.
$sqlQuery = "SELECT * FROM User WHERE id=:id";
$connection = $this->getDbConnection();
$command = $connection->createCommand($sqlQuery);
$user = $command->execute(array(":id"=>$id));
echo $user["name"];
Но благодаря ООП и специально подготовленному классу User можно написать значительно короче и понятнее:
$user = User::model()->findByPk($id); echo $user->name;
Программист создал бы базовый класс платёжной системы, который содержал бы общие поля и методы для всех систем, а конкретные классы для каждой из платёжных систем наследовал бы от базового, что сильно уменьшило бы объём кода в этих классах и проекте, в целом.
Вселенная в ответ: «Да… но тогда ты сам и разбирай свои километровые Gовно файлы».
Class Article extends CModel
{
... ...
public static function getDecoratedHeader($header)
{
$words = explode(" ", $header);
$words = "" . $words . "";
return implode(" ", $words);
}
... ...
}
Программист знает, что в модели должен быть исключительно код для работы с данными этой модели и такой метод поместит в хелпер StringHelper::getDecoratedHeader(). Соответственно, каждая функция приложения имеет своё определённое назначение, которое определяется модулем в котором находится её реализация (модель, контроллер, компонент, виджет и т.п.) и программисты будут многое понимать о сути методов, написанных другими программистами, просто видя к какому модулю он принадлежит.
Class MailerWrap
{
public function send($params)
{
return Mailer::send($params);
}
}
Программисту было бы достаточно изменить только один метод с вызовом в классе-обёртке компонента Mailer чтобы воспользоваться всеми преимуществами новой версии.
Да пребудет с тобой это великое знание, юный падаван!
КОДЕР, а, м. Программист, занимающийся написанием программного кода, а также пренебр. о посредственном, бездарном программисте. Типичный совковый кодер. Из речи программистов … Словарь русского арго
- [англ. coder кодификатор Словарь иностранных слов русского языка
Сущ., кол во синонимов: 6 it шник (6) айтишник (10) информатик (6) … Словарь синонимов
кодер - Устройство, осуществляющее кодирование. [Сборник рекомендуемых терминов. Выпуск 94. Теория передачи информации. Академия наук СССР. Комитет технической терминологии. 1979 г.] Тематики теория передачи информации EN coder …
кодер - kodavimo įtaisas statusas T sritis automatika atitikmenys: angl. code device; coder; coding device; encoder vok. Codierer, m; Kodierer, m; Kodierungseinrichtung, f; Kodierungsgerät, n; Verschlüßler, m; Verschlüsseler, m rus. кодер, m; кодирующее… … Automatikos terminų žodynas
кодер - к одер, а … Русский орфографический словарь
кодер - Syn: шифратор … Тезаурус русской деловой лексики
кодер - а, ч., спец. Пристрій, який виконує кодування … Український тлумачний словник
кодер - Устройство, осуществляющее кодирование … Политехнический терминологический толковый словарь
кодер ИКМ - кодер Устройство, предназначенное для осуществления квантования и кодирования отсчетов сигнала электросвязи при ИКМ. Примечание Аналогично кодеру ИКМ получают свои названия и определения другие кодеры, например кодер ДИКМ. [ГОСТ 22670 77]… … Справочник технического переводчика
В русском языке появилось так много слов за последний 20 лет, что знать их всех просто невозможно. С активным развитием интернета начали возникать и новые профессии. Причем над одним и тем же делом могут работать люди разных специальностей. Конечно, обычный человек не обязан разбираться во всем подряд. Особенно в том, что ему неинтересно. Но если вы как-то связаны с программированием, то однозначно захотите знать, что такое кодер.
С одной стороны, вопрос о разнице между специальностями кодер и программист можно считать надуманным. Никакой проблемы на первый взгляд нет. Но если присмотреться ближе к ним, то становится понятно, почему так часто путают эти две профессии.
Во многом неточность формулировок и переводов связана с англоязычными понятиями. С этим сейчас сталкивается весь массив новомодных слов, которые приходят в русский язык. У одного предмета начинает появляться огромное количество имен, и уже становится непонятно, перед нами корпус компьютера, системный блок или шасси.
То же самое происходит и с профессиями. Особенно остро проблема стала со Интересно, что даже сейчас может возникнуть перепалка в споре о кодере и программисте. В чем разница этих специальностей, может решить для себя каждый самостоятельно.
Неточность определений этих слов появилась еще в середине 2000-х годов. Так можно было выделить два противоборствующих лагеря. Они вступали в спор на каждом форуме, доказывая свою правоту. На деле мы получили полемистов, которые полагают, что программисты - это люди, работающие с кодом и архитектурой. Отсюда можно сделать логический вывод, что кодер и программист - это синонимические профессии.
Представители второго лагеря считали несколько иначе. По их мнению, программист - это продвинутый специалист, которого можно назвать архитектором. А вот кодер - это программист начального уровня.
Второе мнение дает право утверждать, что программист считается главенствующей особой, которая разрабатывает и создает алгоритмы, по которым будет работать программа, а кодер просто исполняет все задуманное.
Это два наиболее распространенных мнения, к которому смогли прийти жители интернета. Главная проблема в том, что разделить кодера и программиста крайне тяжело. Зачастую они выполняют и первую, и вторую задачу. Эта ситуация отдаленно напоминает редактора и корректора. Когда очевидно, что первый - это руководитель, который работает над изданием по всем фронтам, а второй - исправляет ошибки в тексте. Но в последнее время редактор часто превращается в корректора по совместительству, особенно если требуется сократить штат и сэкономить.
Та же история происходит и с программистом, который часто не только разрабатывает алгоритмы, но и после реализует их в качестве кодера.
Конечно, глупо было бы полагать, что форумчане и завсегдатаи интернета идеально поделились на два лагеря. Были и те, кто выдвигал свои безумные теории. О них стоит вкратце упомянуть. Итак, в погоне за единым определением появлялись обидные и не очень толкования.
Кодер - это быдлокодер. Вот такое странное мнение удалось найти в сети. Не трудно догадаться, что объяснение этой специальности довольно оскорбительное. Некоторые посчитали, что кодер - это не профессионал своего дела. Он лишь «страдает» над неоптимизированным кодом, который пишет с ошибками. У кодера нет опыта, он - возомнивший себя программистом неуч.
Еще одно мнение уже было описано ранее, но в другой формулировке. Творцом называют программиста, а вот ремесленником - кодера. Возможно толкование и имело бы право на жизнь, но есть одна загвоздка. Редко работу программиста можно назвать творчеством. Творцы - это дизайнеры, художники, музыканты. Программисты пишут коды, стараются угодить заказчику, реализовать его задачи и т. д. Конечно, случается, что программист становится главой одного из отделов, тогда он работает над творческими задачами. Но штатный специалист обычно выполняет монотонную работу.
Если вы убеждены, что программирование - это творчество, пусть будет так. Но тогда отрицать то, что кодер занимается этим же творчеством, бессмысленно. Ведь оба специалиста работают над одним объектом - кодом.
Чтобы не путаться в мнениях и решить, чем кодер отличается от программиста, можно зайти с другой стороны. Как уже упоминалось выше, это два заимствованных слова. Значит, у них есть перевод, которой даст четкие определения.
Оказывается, английский не очень помогает в решении этого вопроса. Будь-то «programmer», «coder» или «developer», в русском все равно оказывается, что это программист. То есть с лингвистической точки зрения это синонимы.
Есть предположение, что изначально слово «кодер» стали использовать, потому что оно короче и его легче и быстрее писать. А мы знаем, что русский язык стремится стать проще. Так понятия «кодер» и «программист» в один момент слились.
Вообще, проблема русского языка состоит как раз в том, что часто в нем появляются слова, которые не имеют практического смысла. То есть, был себе программист, никого не трогал, и вдруг, слово стало трудно писать, и решили использовать его синоним «кодер». Это простая замена слов, которая не принесла в язык нового понятия, а лишь упростила имеющееся.
В доказательство этого мнения можно напомнить и об использовании «программера». Оказывается, что некоторые пользователи для себя решили, что именно так правильно использовать название этой профессии. В итоге мы получаем то, что люди в последнее время используют либо привычные слова, либо новомодные.
Поскольку перевод с английского не дает никаких новых фактов использования этих слов, вернемся к предыдущему мнению. Кодер или программист имеют разные квалификации. Это наиболее распространенное разделение специальностей. Получается, что к кодеру относят программиста самой низкой категории.
На деле доказать это убеждение не получится. Но были сведения о том, что имелся принятый стандарт, который позволял всех программистов поделить на четыре квалификационные группы. В первую попали стажеры, кодировщики, младшие программисты и разработчики. Во второй находились инженеры и программисты. В третью поместили старших разработчиков и программистов, а также инженеров. В последней находился ведущий программист, старший специалист и главный инженер.
Интересно, что для каждой группы были прописаны требования и задачи. Но возникла другая проблема - кодера в списке нет. За то есть кодировщик. Снова столкновение двух синонимических понятий, которые можно было бы разделить на два лагеря.
Вообще, кодировщик и кодер - это не просто синонимы. Это одно и то же понятие, поскольку первое и второе на английском будет «coder». Так, мы возвращаемся снова к тому, что кодер - это просто исполнитель, а программист - идейный вдохновитель и в некоторых случаях руководитель.