Как мотивировать программистов в рамках «эффективных» технологий — на войне как на войне

Разработчикам не нравятся технологии в компании и хочется что-то сделать на новом, крутом, современно языке и… И? ИИИ? Копнем историю. Полезно вспомнить, как все начиналось. Математика оказалась нужна людям далеко не из любопытства: государственная экспансия, строительство, военные технологии, бизнес — они одними из первых испытали глубокую жажду в быстрых и правильных вычислениях. Квадратные и кубические уравнения научились правильно решать лишь тогда, когда они оказались нужны… купцам и артиллеристам. Синусы и косинусы тоже придумали не из-за большого ума — с их помощью стало возможным строить… нормальные дома, которые не падают :-)

А логарифмы… там вообще интереснейшая история. Они оказались купцам (а за ним морякам и пиратам) и военным настолько нужны, что некоторые математики средневековья жизнь потратили лишь на составление их таблиц! Посмотрим в глаза героям — Джон Непер:

Как мотивировать программистов в рамках «эффективных» технологий — на войне как на войне - 1

Видно и неоспоримо, что по сути только государство и бизнес — всегда двигали науку вперед!

Объемы расчетов возрастали, и на смену ручным арифмометрам пришли паровые, ламповые, транзисторные, а затем и «арифмометры» на больших интегральных микросхемах.
Как мотивировать программистов в рамках «эффективных» технологий — на войне как на войне - 2

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

Да и сам интернет обязан своим появлением министерству обороны США, а всеми любимый протокол TCP/IP — придуман как средство общения во время ядерной бомбардировки.

И вряд ли что-то изменилось сейчас. Тот же Google, по сути «раскрученная баннерокрутилка с обратным индексом — поисковиком» нанял свет математики на работу и ученые днем и ночью обслуживают интересы рекламодателей. Вместо бомбы делается Deep Learning и word2vec, а вместо врага — конкуренты.

Хорошо и отчетливо видно, что и создаваемые IT-технологии, по своей сути, рождены — для победы и в бою. Рождены под свист пуль, обдуваемые свежим ветром в поле, с привкусом крови на губах и рядом стонущим товарищем. Они служат вспомогательными надстройками к «паровым арифмометрам» и предназначены прежде всего убивать быстро и много решать задачи эффективно, просто и быстро :-)
Как мотивировать программистов в рамках «эффективных» технологий — на войне как на войне - 4

Ну и интересно наверно будет еще вспомнить, что Наполеон, великий человек и полководец, обожал математику.

Пацифизм

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

Матчасть

Обращаться с оружием и «паровыми арифмометрами» не просто — они управляются языками программирования, которых все больше и больше. И если сначала языки создавались для быстрой и эффективной стрельбы работы: assembler, C, C++, то со временем пацифизм и паникерство стали все больше и глубже проникать в сознание бойцов и появились инструменты надругательства над «быстрыми вычислителями»: Basic, Perl, Bash,…

Но если серьезно, то динамические слаботипизированные интерпретируемые языки, конечно, появились из за потребностей бизнеса быстро получить работающую реализацию идеи и бахнуть ей в конкурента. Разумно же — если задача решается скриптом на Bash за день, зачем на выходе получить тоже самое на C через месяц. А вдруг, скажет разработчик, нужно будет использовать решение в хайлоаде через 5 лет — но все понимают, что бой может закончиться для роты через час, а для этого разработчики и то быстрее и не нужно строить дом посреди минного поля в перерыве между артобстрелами :-)

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

  • C — хорошо подходит для пулеметов, стреляет быстро, точно, длинными очередями. Один недостаток — делать оружие довольно долго.
  • С++ — по сути как C, но если бойцов много и все начнут делать оружие одновременно — неплохо ввести модульность и объектно-ориентированное программирование
  • bash, awk, unix tools, go — это вспомогательное снаряжение. Если можно кинуть кастрюлю с кашей и уничтожить единицу боевой силы врага — зачем делать для этого станковый пулемет. Ну вы понимаете.
  • php, python, ruby, closure, perl, javascript — очень эффективное оружие, которое создается за минуты-часы, иногда дни. Пользуется популярностью все больше и больше. Один недостаток — не может долго стрелять длинными очередями по 2000 выстрелов в минуту в 8 стволов одновременно в течении недели без перегрева. Но согласитесь — это и нужно далеко не всегда.
  • java, C#, Rust — стратегическое ракетное оружие, точное и мощное. Создается не очень быстро, стреляет не очень часто — зато точно и не ошибается.

Говорят, что во свободное время бойцы занимаются творчеством, ищут в мире гармонию, пишут стихи и даже иногда языки программирования. Так родились экземпляры типа Haskel, Scala, F# — как же прекрасно в затишье между боями выстрелить вверх разноцветным салютом в виде сердечек и радуги. А еще — можно вычислить факториал функциональным способом и без рекурсии — девчонкам это очень нравится! Если серьезно — то много идей из стихов все таки были воплощены в боевых экземплярах — например самое популярное оружие по борьбе с большими данными Apache Spark написано на Scala.

Писать стихи нередко опасно. Вспомним, за что турнули великих создателей реляционной теории из IBM.

Эффективность

Надеюсь уже всем понятно, что если можно поразить врага за соседним кустом ботинком (bash) прямо сейчас, то не нужно строить для этого танк 2 недели. Но из истории полезно вспомнить, к чему приводило усложнение. В Первую мировую одно время активно строили бесполезные огромные танки (говорят с бильярдом внутри), которые не успевали доехать до окопов соперника и ломались по пути:
Как мотивировать программистов в рамках «эффективных» технологий — на войне как на войне - 5

Курская дуга, когда юркие Т-34 заезжали во флаг тяжелым, но мощным Тиграм и пробивали их в уязвимые места:
Как мотивировать программистов в рамках «эффективных» технологий — на войне как на войне - 6

И история с закатом линкоров после Второй мировой — которым пришел пипец от самолетов с авианосцев, помним?
Как мотивировать программистов в рамках «эффективных» технологий — на войне как на войне - 7

История учит нас тому, что нередко простые технологические решения побеждают сложные и громоздкие. Но не всегда — в этом случае 100% покрытие проекта модульными тестами помогло бы конечно:
Как мотивировать программистов в рамках «эффективных» технологий — на войне как на войне - 8

Поведение на линии фронта

Вот мы, разогревшись образами и метафорами, подошли к сути поста. Что делать, если разработчикам не интересно использовать имеющиеся технологии — писать код на PHP, javascript, HTML — и тянет к Haskel, Rust, Scala, Go? ;-) Почему это происходит?

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

  • Я не люблю, фу противный, стрелять из пистолета, а по идеологическим соображениям стреляю только из ручного гранатомета
  • Если кидать гранату, то можно руку растянуть. Можно я буду смотреть в бинокль?
  • А давайте построим танк высотой в 5 этажей и напугаем жителей соседнего села?

Понятно, что правильный бизнесовый ответ тут — выбрать самое эффективное оружие и воспользоваться им. А это — не до конца осознанная проблема! Знать несколько технологий и языков программирования хорошо — может далеко не каждый, никто это не афиширует, нужно учиться, прилагать усилия, нередко в свободное время. И часто именно поэтому начинаются технологические баталии и религиозные войны. Пулеметчики спорят с поварами — чем лучше кинуть в танк: кастрюлей или станком от пулемета, смеша курящего в сторонке гранатометчика.
Опытный же боец сразу выберет верное оружие и применит его для решения задачи в срок, с гарантированным поражением цели и проект успеет к релизу как огурчик.

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

Совесть

Что лучше ответить катапультировавшемуся летчику на вопрос: «Где я?». «Вы в квадрате А12 в расположении части Б3 роты В12, добро пожаловать, не хотите чаю?» или «Вы на поверхности планеты Земля» :-) В бою решения принимаются быстро и они должны быть максимально эффективными. К сожалению, встречаются засланные врагом шпионы, которые вместо простого ответа на вопрос отвечают вопросом на вопрос на древне-клингонском диалекте: «в свете аддитивных функторов и монад лучше использовать моноид». Расстрелять бы на месте, да бойца жалко, его дома дети ждут.

Внутреннее обучение

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

В результате получаем второй компонент «крутости» — владение разными техниками, адекватными решаемым задачам. Даже в несложной области веб-разработки, на самом деле, для получения черного пояса крутости, необходимо хорошо понимать:
Динамические языки: php, ruby, python, javascript
Верстку: html, css
Как это живет на сервере: apache, mysql, nginx
Операционная система: unix, tcp/ip, mail

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

Итоги

Крутость разработчика — это не высокоумность и оригинальность. Крутость — это адекватность и умение убить быстро и много одним выстрелом решить задачу быстро и просто. Крутость — это помогать решить задачу и четкое простое изложение своих мыслей, чтобы было понятно окружающим (а не наслаждаться недоумением, выпученными глазами и мыслями — какой же умный боец, наверно стихи тоже пишет). Развиваться лучше в направлении вокруг и рядом решаемых задач — это и профессиональный рост, и хороший опыт, и знания, которые можно применить и в своей и в других компаниях, особенно ориентированных на результат. Всем удачи, успехов и с наступающим Новым Годом!

Автор:

Источник

Оставить комментарий