Не нанимайте оригиналов

Ну… Хорошо, не так категорично, но всё равно не нанимайте.
Промышленная (aka массовая) разработка пронизана тонной контрактов. Разработчик открывает файл AppleObject и ожидает увидеть там AppleObject. Если ожидание оправдывается, контракт соблюдён. Если внутри драйвер к марсоходу, контракт сломан. Это может быть сколь угодно великолепный драйвер. Гениальный. Волшебный. Но не на своём месте.
И так со всем. Следование style guide. Выбор инструментов. Декомпозиция на модули. Именование сущностей. Поведение кода. Оптимальность в нужных точках. Выбор алгоритмов. Количество и качество велосипедов. Да буквально всё.
Иными словами, если вы заходите в типовую 5-этажку 60-х годов, открываете типовую дверь в типовую двушку, а внутри обнаруживается семиярусная (по 40см на ярус) квартира с вертикальными лабиринтами, семинаристками в скафандрах и преферансом, кого-то пора переводить на другую работу.

Так вот, бойцы, у которых свой уникальный взгляд на разработку, являются одной из худших категорий вредителя. За всю жизнь я не встречал ни одного такого уникального, у которого уникальность из пользы и на пользу. Обычно иначе.
В-нулевых, уникальность от глупости. Ну тут без вариантов. И так ясно.
Во-первых, уникальность от невежества. Чувак профессионально рос в джунглях, там же и кодил в отрыве от достижений галактики. Вышел к людям, ну и понеслось. Джунгли как буквально, так и метафорически. Всегда были и будут разработчики, варившиеся в собственной голове, пока по этой голове не постучат нежно, от чего случаются озарения. Если разработчик признает, что знаний маловато, есть шанс. Если нет, переходим ко второму пункту.
Во-вторых, уникальность от ЧСВ. Я настолько крутой, что. Не читаю книги — в них одна глупость. Не смотрю и не слушаю лекции — что эти бородатые хмыри могут МНЕ сказать полезного? Не разбираю сторонний код больших библиотек — их писали дауны. Вообще идите все в жопу, я лучше всех знаю и умею. В итоге чувак всё в том же отрыве от галактики. Если причиной ЧСВ токмо личность субъекта, всё ясно и печально. Если причиной является большой опыт, всплывает третий пункт.
В-третьих, уникальность от большого одностороннего опыта. Чем больше лет занят чем-то, тем толще соблазн подвинуть собою пуп Земли во всём. Заросшие мхом академики считают, что уж точно любой сервис за неделю напишут, наверняка это не сложнее, чем лекции студентам читать. По ноздри залитые мазутом тимлиды считают, что уж точно интуитивно считают скопом Big-O сервиса на сто лет вперёд за пять минут. Потому учиться не надо. Первым работать руками, вторым головой. Год за годом. В итоге привычная химера. Вроде чувак действительно опытный, не отнять. Но в двух измерениях. А когда дело доходит до третьего, начинается Содом, после которого с реакции читающих исходник можно слезами писать картину “команда жён Лота осмысляет дальнейшую жизнь и мечтает ЭТО переписать”.
В-четвёртых, уникальность творческой личности. Человеку надо было в художники, а он в разработку пошёл. У него хоть под каждой узнаваемой строкой будет подпись “я так вижу, мне так кажется, я так считаю, короче”. И не дурак вроде. И с ЧСВ на уровне популяционной нормы. И читает немало. Но сколько же от таких людей проблем, диву даёшься. Их код зачастую хорош и красив. Иногда он даже идеален. Для другой альтернативной галактики. В которой типовые 5-этажки выглядят шарами, например. А ты лоб сломаешься биться о творца, объясняя, что на этой планете люди живут не в шарах (справедливости ради, бывает и иначе). Пожалуй, это единственная разновидность, которую имеет смысл беречь и приспосабливать к уместному делу. Давайте им атомарные одноразовые задачи, жёстко ограничив песочницу требованиями. 5-этажки не давайте.

И всё. Вы на каждом шагу будете натыкаться на самобытность. Это замечательно, если требуется отойти от типовых решений. Но я не просто так упомянул в начале эссе, что речь про массовую разработку, про именно типовые решения. Их за 50 лет истории накоплено столько, что бОльшая часть работы разработчика заключается не в том, чтобы изобрести очередной винтик, но порыться в складской документации (да хоть в памяти) и найти уже готовый. Да, возможно, его надо будет подточить. Но он будет.
Уникум не знает. Не умеет. Не хочет. Он состоит из одних “не”.
Львиная доля массовой разработки заключается в том, чтобы быстро выдать готовый продукт с ожидаемым поведением как снаружи, так и внутри. Чтобы любой средний разработчик с рынка труда мог уже через неделю после на(й|ё)ма исправить в коде ошибку или добавить новую фичу. Как группы спецназа тренируются штурмовать типовые помещения, так группы разработчиков натаскиваются штурмовать типовые задачи.
И как же утомили те, кто за дверью дворовой туалетной будочки прячет комнату смеха.

Python 2, 3, 2017

Противостояние Python 3 и Python 2 крепко вошло в историю индустрии. Первый релиз третьей ветки вышел в 2008 году. Кособокий, медленный, очень стрёмный, но вышел. К концу 2016 года мир Python всё ещё остаётся миром версии 2.7. При том, что 3.5 уже очень даже ничего. Почему?
Потому, что разработчик человек. А человек — он существо ленивое и не любящее смотреть далеко. Чем меньше движений, тем лучше.
Программистов опытом 10+ лет надо ежегодно проверять на толщину слоя мха и синдром вахтёра. Эти ребята слишком много раз переписывали, мигрировали, граблировали, не спали сутками и т.п. Потому всякая новая несовместимая версия чего-нибудь их подбешивает. Им лень и всегда некогда переписывать миллион строк работающего кода. Им страшно трогать сервисы за некоторые места (у которых список авторов напоминает начало Евангелия от Матфея — страница породивших). Они знают, что любая новая версия всего включает в себя новые баги.
Потому НЕТ. Мы не будем. Нам и так хорошо.

Ладно. Пусть с тем, что Python 2.7 является ржавой баржей, которая хоть и ржавая, но построена на века (ок, приукрасил), языка с интерпретатором хватает на 99% того, что делается и будет делаться. Фигня в том, что на носу 2017 год. Мы живём в эпоху скоростей.
Обратите внимание на то, с какой частотой сейчас выходят major’ы даже не фреймворков, но языков. C++ получил первый стандарт в 1998 году (через 8 лет после “стандарта” по мануалу), а потом C++11, C++14 и C++17. Java после выхода SE 6 в 2006 году потупила пять лет, потом ускорилась — 2011 (SE 7) и 2014 (SE 8). В 2017 обещают SE 9. Swift впереди планеты всей — ломят с частотой релиза в год, при этом вовсю ломают совместимость. Go и Rust хоть уже в production’е, но до сих пор в реальном статусе развивающейся разработки.
Операционные системы туда же. Чётные Ubuntu раз в два года. Mac OS чуть ли не раз в год. Windows раз в два-три года. Android раз в год.
Чувствуете плотность?

У разработчика уже нет пяти лет на размышления. Даже трёх лет нет. Если перестаёшь обновляться, превращаешься в Рипа ван Винкля, но тот ляпнулся на 20 лет, а разработчику и пары хватит. Если не пишешь автономную систему в вакууме, через два года меняется вся экосистема. Библиотеки, фреймворки, API, железо, операционные системы, базы. В какой-то обязательно наступающий (если ваша штуковина не в космосе) момент оказывается, что надо переписывать половину сервиса. И в стопицотый раз подчеркну — этот момент будет наступать теперь всё раньше.
На рынке больше игроков. В мире больше разработчиков. Конкуренция жёстче. Всё это меняет правила игры. В те котлы, в которых уже варятся фронтендеры, постепенно закидывают бекендеров. И всё кажется, что можно потянуть, можно обновиться однажды, не сейчас. Есть более приоритетные задачи. А котёл всё теплее. Просто не до каждой головы с нужной скоростью доходят ощущения от тлеющей жопы.

Конечно, всегда будет огороженный полуостров с ребятами, у которых собственный космос. Все эти стойки со старыми (но стабильными!) OS, на которых старые (но стабильные!) интерпретаторы / компиляторы для старых (но стабильных!) сервисов. Фигня в том, что забор у такого полуострова будет расти с большей скоростью. И разработчики вместо разработки будут заняты невероятно интересными занятиями: костылизация, манкипатчинг, [безуспешная] делегасизация, попытки прикрутить хоть какие винтики новых стеков к старому (но стабильному!) сараю. Удачи на рынке труда таким заповедникам.
Короче, если ты плюнешь в прогресс, он утрётся, но если прогресс плюнет в тебя, ты утонешь.

Рынок дополненной реальности

Он огромен и очень полезен. Будет. Сейчас его нет, пусть все топовые IT-столпы активно вкладываются в VR/AR, желая оседлать волну (как пример, немножко про Apple: 10 Things We Know About Apple’s Secret Virtual Reality Plans).
Всё потому, что это будет фантастика и отрыв башки во всех областях жизни. При этом все цели понятны, все ждут и все готовы платить.
Но я чёт сомневаюсь, что до пенсии увижу AR в массовом production.

Во-первых, нужны огромные массивы данных. Чудес не бывает. Это в фильмах герой смотрит на здание и перед ним 3D-модель многоэтажки с коммуникациями. В реальности кто-то должен это здание пройти с линейкой, построить чертежи, сконвертировать в нужный формат, ну и как-то донести до железки у вас на носу. Рядом тоже здание. И слева. И справа. И в городе. И в стране. А ещё деревья хорошо бы. И модели машин. И расписание автобусов. И калорийность яблока показать. Короче, пока мир накопит эту базу, пройдут десятилетия. Накопить тоже мало, надо ещё поддерживать в актуальном состоянии.
Во-вторых, нужен специфический комплект железа. От прозрачных экранов (привет Google Glass) до очень мощных чипов. И чтобы стоило так, что упавшие с носа на асфальт очки не считаются трагедией. И чтобы без зарядки тянуло неделю, а не пару часов. Видите пункт выше? Все эти данные надо в режиме realtime показывать. Вот с какой скоростью глаза и шея крутятся, с такой и показывать. Ну и да, оно должно держаться при уличной (дождь, снег, пыль, ветер, птица в глаз) эксплуатации.
В-третьих, нужны другие сети. Видите всё тот же пункт первый? Чтобы ваши толстые очки показали толстый кусок здания, этот кусок здания должен в доли секунды проброситься от серверов к очкам. Речь не о мегабайтах данных (о, эти милые апдейты по Wi-Fi), но в лучшем случае гигабайтах. Чтобы это работало, надо разворачивать новую и плотную инфраструктуру, способную при скоплении людей на площади выдержать то, что не всякий ДЦ потянет.
В-четвёртых, до фига юридических казусов, которые наверняка вызовут волны запретов и разрешений. Самое банальное — требование снять очки при входе в музей. А если мы в 2050 году и ваши очки одновременно являются вашим глазным протезом? Менее банальное — вы умерли из-за ошибки в изображении. Повторюсь, это огромные массивы данных. Их никто не будет тщательно до запятой сверять с реальностью, это не инструкция по укладке парашюта. И это не те данные, на осмысление и сверку которых у вас будет время — вот в чём тонкость. AR нарисовала закрытый люк, а под ногами оказался открытый. Бдыщ.
В-пятых, выдержат ли глаза и мозг? Как ни крути, но человеческой оптике подсунут почти под нос изображение, в которое смотреть часами (да тот же фильм полтора часа, не говоря уж про игры). Через сколько лет окажется, что некоторая доля населения таким макаром просадит себе зрение до плинтуса? Сколько мигреней получит на обработку счастливая фармацевтика? Как начнёт косодолбить всякие интересные органы и области синтеза биохимии организма, у которого с максимальной реалистичностью перед глазами стрельба, трупы, самолёты в штопоре, секс с медведями и пьянки с глубоководными рыбами? Мозг у нас туповат и ему не скажешь “братан, это понарошку, не парься”. У человечества уже есть опыт сначала выхода потенциально занятной штуки, а потом панического отзыва.

Т.ч. рынок рынком, но пока кажется, что ближайшее будущее VR — это несколько устройств (или десятки, но на паре-тройке схем) и [по пальцам пересчитать] сотни заточенных под них программ вроде Star Chart.
Любопытные игрушки, но нулевое применение в быту, не более.

Как создать legacy-сервис

До фига советов о том, как писать правильно, как не довести до беды. Хочу быть Остером. Вот вредные советы. Итак, вы пишете сервис и при этом хотите уже через год увидеть его в статусе legacy.

Во-первых, со старта создайте уникальную архитектуру с уникальными костылями, которые влезают ровно-ровно в текущую инфраструктуру, но не позволят вам плавно переехать в другую. Вообще больше уникальности и оригинальных идей. Если машина, то с пятым колесом на выносной штанге. Если вагон, то под колею в 2 метра 34 сантиметра. Короче, раскройте свой потенциал вовсю. Творите! Разработка — это искусство, а не инженерная дисциплина!
Во-вторых, используйте библиотеки старых версий. Отставание должно быть не меньше двух лет. После выкатки в production вы не будете обновлять их ещё год, чем достигнете отставания в три года, а это обычно значимый major с тотальной обратной несовместимостью. Задача миграции из серии маленьких обновлений превратится в толстого проблемного монстра, который будет откладываться, откладываться, что замечательно способствует цели.
В-третьих, забудьте о нагрузке. Вот буквально. Если складская программа, то для десяти яблок и маленького киоска. Если служба знакомств, то для одного подъезда. Если игровой сервер, то на 1 RPS. Вся архитектура должна быть создана только так. И код написан только так. Все эти милые запросы с n-дцатью JOIN’ами, непожатая статика на гигабайт, отсутствие кеширования, невозможность масштабировать и т.п. Через год вы должны мочь с затаённой гордостью говорить “слушайте, ну это же legacy… не может он в 10 RPS…”
В-четвёртых, создавайте прототип. С первого наброска на салфетке до последней строки это должен быть прототип. Модно. Современно. Успешно. Все так делают. Потом он год проболтается в production’е (нам же нужно собрать отзывы), потом у вас немножко отберут ресурсы разработки (оставив калеку на половину ставки), вот тут и попляшем, ибо прототипы характерны переписыванием полностью, что задача не в минуту, а чем дальше задвигается эта задача, тем ближе legacy.
В-пятых, больше разнообразия, больше экспериментов. Один из методов legacy-зации — затруднить и запрокрастинировать. Экзотические языки, экзотические фреймворки, пихнуть в ядро библиотеку вашего соседа по парте 3-го курса политехнического колледжа. Делайте всё, чтобы через год программист Вася, на которого свалится тикет “чёт функция не работает”, застрелился. Потом второй Вася. Потом третий. Четвёртого уже не дадут и мы получим всё тот же болтающийся в невесомости legacy.

Вот. Этих пяти пунктов достаточно. Дерзайте. У всех всё получится.