Разработчик vs программист

Как ни крути, а приходится как-то делить специальных людей на классы. Если с ролями всё понятно (фронтендер, девопс, админ, бекендер, нок и т.д.) и с приблизительным уровнем тоже (junior, middle, senior, Bozhenka)… есть ещё одно измерение, без введения которого можно не заметить разницу между очень разными специалистами.

Разработчик — тот класс, который почти целиком захватил IT/CS сектор. Считаю их пользователями. Водители. Одни менее опытные, другие более опытные. Совсем продвинутые могут перегнать тачку из Владивостока в Сомали по дну океанов. Знают правила. Разбираются в марках масла. Девопсы-водители даже умеют менять пробитые камеры и продуть свечу, чем восхищают водителей другого пола.
Но основная особенность именно в использовании. Разработчик существует на всём готовом. Готового всё больше. Настали благословенные времена, в которые 99% задач решаются методом «найди нужный кусок кода, почитай мануал (если не остался в душе junior’ом), прикрути клеем с изолентой в свой сервис, иди домой пить пиво». Соответственно, в эту сторону разработчики и развиваются. Водитель какой-нибудь Subaru наизусть знает заправки с хорошим бензином, магазины нужных запчастей, вступает в клубы любителей Subaru, с удовольствием листает мануалы тюнинга. Становится уважаемым субароводом.
Такая практика порождает определённую рабочую психологию (или же разработчиками становятся благодаря ей, не понял пока). Человек не хочет и [уже] не может находить ответы на вопросы категории «как и почему это работает». Как покупатель в магазине, которого не интересует происхождение гречки, латинское название (Fagopyrum esculentum), химический состав, особенности переваривания, агротехника, логистика и прочее. Разработчик хочет купить, сварить, скушать и жить дальше.
Подчеркну важное. Вышеописанное не означает, что разработчик глуп и / или бесполезен. Означает, что он мыслит и действует вполне определённым, пусть и ограниченным качественно образом. Качественно, не количественно. На то, чтобы освоить современный ассортимент «магазинов софтовой гречи», можно жизнь положить, всё равно не хватит.
В крайнем проявлении разработчик относится к специальности без особых эмоций. Работа как работа. Восемь часов отработаю и точка. Мог клерком работать, бумаги перекладывая и печати ставя, а работаю разработчиком. Строчки кода перекладываю и enter нажимаю. Жду вечера, чтобы убежать и заняться чем-нибудь интересным. Таких тоже много.
Разработчики обычно привязаны к одному стеку. Один язык. Один привычный фреймворк. Одна любимая база. Хороший разработчик знает их хорошо. Средненький просто знает.

Программистами считаю другую категорию. Пожалуй, наиболее близки к ним пресловутые хакеры 70-х, для которых естественным было знать всё максимально глубоко и широко в области «как это работает». Продолжая автомобильную аналогию… можно сказать, программист — это механик с образованием физика. Может не знать, как конкретно в данном двигателе прибиты клапаны, но объяснит, зачем они там, что с ними будет и на что их можно заменить без таких же на полке соседнего магазина.
Очень важная (и чуть ли не классообразующая) черта в безумном желании познавать. Знание получается из множества источников, к работе с которыми программист привыкает. Чтение исходного кода. Чтение статей (докторские научные работы тоже причисляем к статьям). Многократные тестовые обстрелы интересного софта. Видео. Разговоры с другими программистами. Мониторинг новостей. Столь любимые мною книги, наконец. Всё это превращается в инструмент построения цельной системы знания, из которой программист может доставать либо явно имеющийся, либо выводимый ответ на любой вопрос.
При всей моей симпатии именно к этому классу… сложные ребята. Их работа подпитана эмоциями, любовью к специальности, к знаниям, к процессу. Им важен интерес. Соответственно, можно здорово промахнуться, поставив на задачу того, кто на бумаге спроектирует великолепный проект, но никогда не доведёт его до релиза (скучно, ведь интереснее было придумать). Также промахиваешься, не контролируя любителей перепробовать буквально всё в поисках оптимальности (и снова не будет релиза годами, ведь сервис может работать на секунду быстрее!). И ещё десятки способов промахнуться, не угадав момент, в который программист считает задачу выполненной, посчитав решением любопытную ему часть.
В крайнем проявлении программисты бесполезны. Если крайнее проявление разработчика можно хотя бы гвозди посадить забивать и гвозди будут забиты, то в случае с программистом даже к молотку не подойдёт. Сначала прочитает про гвозди. Узнает про молотки. Получит седьмое высшее гвоздезабивательное. Напишет пяток научных работ. Разработает теорию влияния фаз Меркурия (ещё и обоснует наличие фаз) на гвоздевую ржавчину. И вообще хорошо проведёт время, но ни один гвоздь забит не будет.
Программисты обычно тяготеют к универсальности. Два-три языка, несколько фреймворков, несколько баз данных. Практика, впрочем, нередко сводится к одному привычному (любимому, интересному) стеку.

Между этими двумя классами и вокруг них есть другие. Переходные или «братские». Но именно «разработчиков» и «программистов» хватает для того, чтобы уместно нанимать и уместно ставить людей на уместные задачи. Разработчики плохо проявляют себя в R&D, также ниочинь, если требуется построить что-то отличное от массового производства. Программисты не успевают себя проявить там, где специализированный разработчик (jQuery-программист) за сутки поднимет дом. Типовой, да, но за сутки и вполне пригодный.

Среди прочего хочется устойчиво донести две важных, мне кажется, мысли.
Во-первых, это не деление на глупых или умных. Было бы слишком примитивно, да и неверно по сути. Пишущие код являются людьми, зачастую очень разными, а люди сложны. Разработчик вполне может однажды стать программистом. Программист может стать разработчиком. С годами у многих меняются внутренние движители. То, что горячо любил вчера, завтра покажется пресным (и программист уходит водить Боинги). То, что ещё вчера пресное, сегодня вдруг раскрывается сотней граней и разработчик усаживается на попу перед изящной архитектурой микропроцессора с мыслью «это лучше клуба по пятницам». Одним не хватает всего одного внешнего импульса (пинка по жопе), чтобы жизнь изменилась. Другие просто пока ещё не нашли себя. Всякое бывает.
Во-вторых, должны быть все. Мир, состоящий из одних лишь разработчиков, не будет двигаться вперёд. Горизонтальное развитие. Вместо того, чтобы создать альтернативные источники энергии, накопаем миллион дырок с нефтью и газом. Мир, состоящий из одних лишь программистов, будет метаться от одной гениальной идеи к другой, в итоге утонет в хаосе. Глуп тот руководитель, что нанимает и применяет только один класс.
Деление достаточно условно и (с точки зрения нанимающего руководителя) больше о том, куда можно применить руки и голову человека. Желательно, прямо сейчас, а не после года обучения и мотивации. Наконец, оно должно помочь понять, что вообще ожидать от сотрудника. Надо ли ругать его за невозможность применить тривиальный алгоритм или за срыв сроков. Надо ли поощрять за банальные с его позиции действия.

Как на практике выяснить, кто есть кто? Допустим, собеседование. Достаточно задавать базовые вопросы, ответы на которые лежат вне плоскости обычной деятельности. Джавистов спросить про GC. Питонистов про GIL. В целом задавать вопросы из области «как работают [словарь, список, память, исключения, циклы]». Обычно для написания сервисов эти знания не нужны. Соответственно, разработчик пожмёт плечами. Раз не нужны, он и не узнавал. Программист будет час рассказывать, вдаваясь в детали из других языков.
Такие вот пирожки с котятами.
Update: во, решил погуглить и обнаружил, что народ давным-давно озадачивается тем же, наиболее близок с первой страницы результатов автор 2010 года.

Разработчик vs программист: 2 комментария

    • Кодер — это человек, которому невозможно дать задачу, не расписав решение по пунктам. Разработчику задачу без такого решения давать можно.

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