Нинужные знания и умения

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

Если вы живёте не в мире бесплатных фей и платонических бабочек, вы получаете деньги за то, что делаете что-то, что приносит деньги работодателю. Такой вот понятный и простой бартер, к которому зачастую сводятся причины многих решений, если покопаться. Соответственно, работодатель через прищур смотрит на вас рационально: будет ли Вася приносить прибыль? как долго? а сколько?
При этом как-то… ну, слишком наивно считать, что Вася — это только оклад. Совсем уж наивно считать, что Вася — это 180 рабочих часов в месяц (2160 час в год при 22-дневном рабочем месяце).
Во-первых, ежегодно Вася болеет. По моим наблюдениям дней десять в год минимум (-80 часов). Я вот сам сейчас уже третью неделю с трудом выкарабкиваюсь из волны ОРВИ с осложнениями.
Во-вторых, ежегодно Вася берёт отпуск. Недели две хотя бы (-80 часов), хоть знал бойцов, исправно выбирающих за год весь лимит.
В-третьих, Вася человек, а у людей ежегодно случаются всякие штуки вроде «срочно отвезти дедушку в больницу» или «канализацию прорвало, закрываю дыру телом». Пусть три раза в год, -24 часа.
В-четвёртых, если Вася живёт в России, по производственному календарю у него не 2160 рабочих часов в 2017 году, например, но 2024.
Что получилось? 1840 номинальных рабочих часов. Это минус почти два рабочих месяца из первоначального наивного числа. А теперь все посмотрим в зеркало и честно скажем отражению: очень, очень, очень редко обычный линейный разработчик без усиленной мотивации честно вот прям 8 часов работает. Попыриться в окно, пообедать, покурить, потрындеть про новые носки Путина и ярость Навального, посмотреть презентацию нового iPhone, почитать Твиттер и т.д. Реально человек работает 4..5 часа. Пишет код, усилено думает над задачами, вообще трудится на благо работодателя. Аксиома такая. Выведена поколениями всяких лидов, наблюдающих за контингентом и собою. Вы (разработчик) не работаете треть рабочего времени. Как минимум. Чтобы было менее больно, от 1840 срезаем 500, получаем 1340 часов. Или (чуть округлю) 110 часов в месяц. Вот столько работают люди на окладе в офисе.

Мораль: час работы разработчика стоит дорого. Дороже, чем вы думаете. При наивных расчётах час Петрова стоит 1К рублей, если оклад в 180К рублей. В реальности час стоит 1К рублей уже при окладе в 110К. На самом деле он стоит ещё больше, если включаем аренду рабочего места, оплату обязаловки (от электричества до интернета (стоимость бизнес-пакетов вас приятно удивит)) и прочее. Скажем, Васям почему-то не нравится думать о том, что каждый эпизод «Васин косяк привлёк двух других разработчиков на два часа» является эпизодом «на два часа стоимость часа Васи увеличилась на сумму стоимости часов этих двух разработчиков» (теперь занятнее думать о том, сколько же на самом деле стоят junior’ы, которых курируют тимлиды хотя бы на 25% рабочего времени, да?).
Главное, что надо понять, усвоить и зазубрить: разработчики обходятся работодателям дорого. Очень дорого, если сравнивать с трудовым ресурсом других отраслей. Всякий раз, когда разработчик ленится хотя бы посмотреть в документацию (божечки, как же бесят такие случаи) и в итоге дико тупит, вспоминаю, что оклад middle в Москве примерно равен двум окладам врача Скорой помощи в Москве. И учились эти врачи гораааздо дольше и суровее. И ответственности у них больше. А уж пользу обществу не измерить. Только вот те двое на дежурствах в пыль исходят, жизни спасая. А этот сидит в креслице в тепле и с потолка считывает результат функций.

Итак, работодатель и прищур. Задача: нанять человека, который будет продуктивно и эффективно (очевидно, если вы два часа пишете строчку подключения к базе, вы работаете, да, но фигово) работать максимально возможное количество часов, с максимальной скоростью двигаясь к моменту релиза продукта, который пойдёт на рынок и начнёт приносить прибыль. Вроде бы всё хорошо… пока не начинаем думать о том, что жизнь сложнее. Следующий продукт тоже надо делать. И ещё один. А ещё избавляться от «автобуса» (потому в идеале по 2+ ротирующихся разработчика на сервис). И даже при удаче нанять будущего тимлида. В общем, губа не дура, особенно если учесть всё бОльшее проседание рынка senior’ов (бягуть на Запад и Восток).
Иными словами, хочется бойца, который хорошо решит не только текущую задачу, но и следующие. Хорошо — это когда маленький скрипт не требует $1K инстанс ежемесячно в облаке и когда ночью спать можно, а не на мониторинг коситься с опаской. Следующие — это любые. Любые. ЛЮБЫЕ. ЛЮБЫЕ. Понимаете?
Мир не стоит на месте. Бизнес идёт за миром и прогрессом. Вчера вы писали GOTO на BASIC, сегодня кошмарите нейронные сети, завтра будете разучивать «папа» с белковыми компьютерами. Ещё сегодня основным продуктом у вашей фирмы был Paint, а завтра для порабощения мира надо выпускать Photoshop. Разведёте руками? Вы не знаете, где хотя бы прочитать, как блюр делается? Вообще читать не умеете, Paint писали интуитивно? Ну ок, вас уволят, наймут умеющего. Устроит? Не думаю. Вы должны мочь идти вровень с цивилизацией. И работодатель хочет, чтобы вы могли. Выгоднее нанять на большой оклад настоящего специалиста, чем дюжину сантехников на мизерные оклады. На сантехников заработает потом вот этот крутой.
При этом работодатель всё-таки не всегда дурак. Потому проверяется не гениальная универсальность (никто не может знать всё). До меня не сразу дошло, но чем дальше, тем больше нравится такая трактовка: проверяется то, можете ли вы решать задачи, которые вам не надо решать прямо сейчас. Хихи. Звучит идиотски, ок. Однако. Нужно понять, насколько вы можете выйти за рамки своей раковины. Насколько способны учиться. Раскрыты ли ваши чакры (фигакры) новому, будущему. Есть ли у вас база для того, чтобы быстро (!) нарастить свежее мясо. Наконец, как вы вообще относитесь к профессии.

И вот тут грустное. Телепатов нет. Провидцев нет. Единственный хоть сколь надёжный способ оперативно понять, может ли человек выйти в будущем за рамки — узнать, вышел ли он за рамки уже сейчас. Рамки разработчики ставят себе убогие (пардон) — что сейчас не надо, то и не буду знать. Так на собеседовании и говорят прямым текстом. Был senior (!) джавист (!), который не ответил ни на один вопрос про работу GC. Ему не надо было никогда. Видимо, когда надо будет разбираться, почему сервер падает по OOM (а у таких бойцов он с гарантией однажды ляпнется), работодатель в идеальном мире смиренно дожидается, пока Вася пройдёт обычный цикл нехочузнаек: 1) почитаем StackOverflow — не, чёт не помогло, 2) погуглим уже полноценные статьи — не, чёт не помогло, 3) лаааадно, мы этого не любим, но пошли читать документацию… ойкакмного! мамочки! насяльника, мне нужна неделя, тут осинь сложный проблема!
Помните про реальную цену часа разработчика? Работодатель тоже помнит. Ни фига не интересно в будущем оплачивать вам сотню рабочих часов только потому, что вы принципиально или по лени природной не подбираете «лишние знания». Нет их лишних. Это у вас в прошлом, быть может, не было задач, которые решаются такими знаниями. Может быть, не было именно потому, что ваш тимлид знал, что нет смысла давать вам такие задачи, вон Вася более прокачан, лучше ему дать. Или просто так получилось. Или вы работали там, где такие задачи и такие проблемы возникают раз в десятилетие (а в соседнем отделе раз в неделю, сюрприз). Да тысяча причин. Солдаты учатся стрелять не потому, что каждый день убивают по врагу, но потому, что однажды война. И будет поздно учиться («чё, утром войну объявили? о, ну это… я на стрельбище пойду, хоть посмотрю, как у автомата приклад выглядит, настало время» — как-то так представляю).
И вот как… сидите вы и говорите, что не знаете элементарного. Вам оно казалось лишним. А работодатель сидит напротив и смотрит. А в голове у него тоска. Он уже понимает, что ни фига с вами не сделать Photoshop из Paint. Что после того, как вы сделаете буквально ту задачу, на которую сейчас срочно нанимают, будет головная боль на тему «куда девать такого кадра, он же только X знает и Y». Что ни фига байки «да ща за минуту нагуглю и освою» не работают. Тимлид тем временем тоже печалится. Он-то азартно задал вопрос «что такое хеширование, приведи примеры», а вы не ответили. Не надо было знать. Раз так, то вы не знаете, как работают hash-коллекции. А потому не решите в разумные сроки задачу «написать более специализированный и оптимальный dict, ибо у нас вооон там затык обнаружился». А если вдруг вас наймут и таки дадут эту задачу, то надо будет за вами каждую строчку по пять раз вычитывать. На всякий случай. Что не так уж интересно. А ещё надо будет вам однажды объяснить, что такое фингерпринты. И на всякий случай проконтролировать в будущем, что вы в PostgreSQL осилите выбрать нужный тип индекса. Сплошное веселье.
Итог: вас не наняли. Злые дядьки спрашивали странное. Пойду в бложик бяку про собеседования напишу. Кому ваще это хеширование надо?! Ни разу не требовалось! Мудаки, кароч.

Как-то так. Эссе получилось сырое и мятое, не везде заполнил переходные выводы и примеры. Потому давайте кратко основные тезисы ещё раз:

  1. Час работы разработчика стоит очень дорого.
  2. Работодатель [вынужденно] оплачивает ваши косяки, баги, бездельничанье, обучение, ликбез.
  3. Работодателю интереснее оплачивать не вышеперечисленное, но результативную и эффективную работу.
  4. Работодатель хочет нанимать разработчиков, которым может дать задачи не только настоящего, но и будущего.
  5. Работодатель уже сейчас хочет некоторую гарантию того, что вы умеете и любите учиться, знать, осваивать «ненужное», что вы видите перспективу.
  6. При прочих (каких?) равных к будущим проблемам больше готов тот разработчик, что знает и умеет больше уже сейчас.
  7. Рынок готов платить за таких разработчиков — достаточно посмотреть актуальные вакансии.

Безусловно, рынок платит и за тех, кто знает меньше. Платит, впрочем, тоже меньше. Часто очень меньше. Подумайте, возможно, всё не просто так.


PS. От поднятой проблемы легко увернуться, обвинив работодателя в нежелании оплачивать пере- и доквалификацию разработчика. Мол, нанимали как питониста, а сейчас вам джавист понадобился, так мне месяц по ночам не спать? Ясен пень, такие случаи оплачиваются. Если нет, бегите, вас обманывают. Эссе же о вечном споре: какие фундаментальные знания нинужны. Какие структуры данных не надо помнить. Какие алгоритмы выбросить из головы. Какие архитектуры, определения, математики, логики, факты считаются лишними в голове Васи, а какие в голове Пети. Имеет ли моральное право (а если не моральное, то нафига) Аристарх Ибульевич пытать на собеседовании бедного Олежку (который в Super Duper Software Ltd ажно целый Chief Senior Developer) на тему массивов (таких квадратненьких скобочек)? И как, наконец, вся эта бойня выглядит с точки зрения презренного золота? Потому не уворачивайтесь. Подумайте.