Что такое кодер и декодер. Кодер как профессия

14.02.2019

Давным давно, в далёкой предалёкой галактике, на одной провинциальной планетке жили разумные млекопитающие, у которых недавно начался век информационных технологий. В тот век многим приходилось писать программы на разных языках для различных программных платформ. И любой потомок обезьяны с этой планеты, написавший хотя бы пару строчек кода, который заставил тупую вычислительную машину сделать несколько разумных (с точки зрения автора) действий, уже считал себя просветлённым мудрецом, постигшим ДАО информационных технологий и назывался не иначе как джедаем программистом.

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

Абсолютное большинство людей считают, что совершенно не важно, как был достигнут результат, если задача, по всей видимости, решена. Начиная решать какую-либо задачу по разработке программного обеспечения (и не только), многие не задумываются о фундаментальных принципах проектирования, а просто копируют работающие блоки у предшественников. Кодеры, вооружившись справочником по синтаксису языка и интернет-поисковиком, создают свои «мегашедевры программирования». Быстренько заставив программу с помощью отладчика выполнять более или менее похожие на логичное поведение действия, разработчики сдают заказ. Клиент доволен, кодер при деньгах - все счастливы, на первый взгляд.

Далее происходит, как правило, следующее: проходит совсем немного времени и клиент хочет что-то изменить в своей программе, и, как правило, многое. Заказчик обращается либо к автору программы, либо к другому кодеру и заказывает изменения. Исполнитель смотрит на код, и не понимает, как это нагромождение из результатов выдачи поисковика работает, и начинает мучительно переписывать код, срывая сроки даже для «элементарных изменений». На второй или чуть более поздней правке код приложения становится столь труден для понимания, не управляем и глючен, что его реально становится проще переписать с нуля, затребовав с заказчика полный бюджет на новую разработку. И вот тут клиент ощущает, наконец, свой эпический промах с выбором исполнителей, так как ему приходится оплачивать уже вторую разработку приложения, либо нанимать гениев за мега деньги для простейших изменений в программе, хотя срок эксплуатации приложения только начался.

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

И тут возмущённые кодеры возроптали: «Мы знаем все эти фундаментальные принципы! Они все бесполезные и глупые!». А вселенная ответила им: «Возможно, это так, но, возможно, вы не понимаете их, а потому не умеете применять».

Возьмём простые примеры кода с использованием мега популярного на этой провинциальной планете языка веб-разработчиков 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 { 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) теперь легко изменить, так как оно используется через именованную константу, аналогичная ситуация и с наименованием таблицы в базе данных.

Пример 3:
if ((isset($user->online) || (time() - $user->lastVisit < User::LOGOUT_TIMEOUT)) && Post::getNumOfPostsForUser($user->id) > Post::ACTIVE_USER_MIN_POSTS) $Raiting::addBonus($user->
Вроде бы переменные с методами и константами названы хорошо, но всё равно как-то чересчур сложно прочесть.

$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);
Ну вот теперь условие стало простым и ясным как день, а всего лишь введены дополнительные логические переменные для упрощения кода.

Пример 4:
Код повторяется в нескольких местах:

$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);
Теперь нам достаточно вызвать нашу функцию помощник, чтобы получить одинаковый результат во всех местах приложения, и, конечно, код стал проще и его количество уменьшилось.

Часть 2: Объекты и классы

Кодеры недоумевают: «Зачем нам ООП, если всё можно написать функциями или даже просто операторами?».
Вселенная в ответ: «Да всё затем же - сделать большой или сложный код более простым, понятным и хорошо структурированным».
Инкапсуляция - это важнейшее свойство в управлении сложностью кода, логично пряча наши данные и алгоритмы внутри закрытых методов классов мы значительно упрощаем всю логику работы с классом, а также упрощаем все будущие операции по изменению поведения класса.
Наследование - отличный способ не писать повторяющегося кода в похожих классах и упростить все классы потомки.
Полиморфизм - мы легко меняем логику поведения класса потомка, изменив лишь один метод.
Пример 5:
Кодер научился извлекать данные из таблиц базы данных и теперь во всех файлах пишет заклинание:

$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;

Пример 6:
Кодер написал несколько классов для поддерживаемых его сайтом платёжных систем, в каждом есть несколько совершенно одинаковых методов и полей.

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

Часть 3: Модульность

Кодеры недоумевают: «Зачем в программе делать кучу файлов, да ещё и в разных папках? Можно сделать один-два файла и там будут все константы, классы и функции нашего проекта, а переменные все будут глобальными.»

Вселенная в ответ: «Да… но тогда ты сам и разбирай свои километровые Gовно файлы».

Пример 7:
Кодер научился писать в MVC фреймворке, но не познакомился с модульной структурой и пишет весь код в модели:

Class Article extends CModel { ... ... public static function getDecoratedHeader($header) { $words = explode(" ", $header); $words = "" . $words . ""; return implode(" ", $words); } ... ... }
Программист знает, что в модели должен быть исключительно код для работы с данными этой модели и такой метод поместит в хелпер StringHelper::getDecoratedHeader(). Соответственно, каждая функция приложения имеет своё определённое назначение, которое определяется модулем в котором находится её реализация (модель, контроллер, компонент, виджет и т.п.) и программисты будут многое понимать о сути методов, написанных другими программистами, просто видя к какому модулю он принадлежит.

Часть 4: Паттерны

Кодер услышал слово паттерн и сразу причислил его к разряду ругательных, хотя вселенная намекала ему на тот факт, что паттерны - это крайне удачные решения, типовых задач разработки ПО и эти знания существенно упростили бы кодеру работу, как и общение с программистами, знающими паттерны.
Пример 8:
Кодер использует в своём приложении внешний компонент Mailer и пишет в модулях системы вызовы его метода send().
Mailer::send($subject, $message);
Но вот беда, в новой версии этого компонента, исправляющей кучу багов и повышающей быстродействие, метод send() убрали и заменили на метод post() с другими обязательными параметрами. Кодеру придётся перелопатить весь код приложения, исправляя все вызовы компонента, а если бы он использовал один из самых простых паттернов - метод доступа:

Class MailerWrap { public function send($params) { return Mailer::send($params); } }
Программисту было бы достаточно изменить только один метод с вызовом в классе-обёртке компонента Mailer чтобы воспользоваться всеми преимуществами новой версии.

Часть 5: Фреймворки

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

Часть 6: Оптимизация

Кодер слышал про оптимизацию, и даже использовал пару советов из поисковика в своих программах, во всяком случае, он так говорит окружающим.
Пример 10:
Кодер написал форум, но вот беда - через пару месяцев активной болтовни, странички сайта стали очень медленно открываться. Он зарылся в код и с большим трудом выяснил, что очень долго выполняется запрос к базе MySQL. Кодер начитался советов из поисковика и решил переписать весь форум с использованием noSQL базы, благо это займёт всего лишь месяц. Программист же в таком случае проанализировал бы план запроса и добавил пару индексов на таблицы за 3 минуты.
Пример 11:
Кодер занялся оптимизацией производительности своего кода, состоящего из 8 функций, по порядку оптимизируя каждую из них. Он потратил неделю на рефакторинг 5 функций, но прирост производительности составил всего лишь 10%. Кодер разочаровался в оптимизации и бросил это дело, смирившись с тормозами приложения. Программист бы проанализировал время выполнения каждой из 8 функций, после чего занялся бы оптимизацией самой долго выполняющейся функции. Другие функции, время выполнения которых значительно (на порядок) меньше основной, не стал оптимизировать совсем.

Часть 7: Безопасность

Кодер никогда особо не задумывался о безопасности кода. Зачем? Никто ведь никогда не будет взламывать его программы…
Пример 12:
у кодера множество запросов в приложении, где он просто подставляет переданные от пользователя данные (GET, POST, COOKIES, JSON, XML) напрямую в запрос:
$sqlQuery = "SELECT `name`, `surname` FROM `User` WHERE `id`=".$_GET["id"]; $command->create($sqlQuery); $result = $command->execute(); print_r($result);
А что будет, если «пользователь» передаст в параметре id следующую строку «0 UNION SELECT `email`, `password` FROM `User` LIMIT 10»? Наверное будет полный ай-ай-ай!
Программисты пишут такие запросы примерно так:
$sqlQuery = "SELECT * FROM `User` WHERE `id`=:id"; $command->create($sqlQuery); $result = $command->execute(array(":id"=>$_GET["id"])); print_r($result);
Да и про подстановку значений в функции типа eval() программисты тоже никогда не забывают, как и про клёвое слово «валидация».

Заключение

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

Да пребудет с тобой это великое знание, юный падаван!

КОДЕР, а, м. Программист, занимающийся написанием программного кода, а также пренебр. о посредственном, бездарном программисте. Типичный совковый кодер. Из речи программистов … Словарь русского арго

- [англ. 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». Так, мы возвращаемся снова к тому, что кодер - это просто исполнитель, а программист - идейный вдохновитель и в некоторых случаях руководитель.