Прекращайте оправдываться
Привет, человек, %хабраюзер%, %юзернейм%, программист.
Вот именно так я себя и чувствую.
Этот пост полон ненависти. Их тут просто зашкаливает. Но да вот, наболело. Но, при всём при этом, я скажу в своё оправдание хехе, что я не назвал ни одного реального имени в этой статье. Хотя, некоторые тусуются здесь, на Хабре.
Я хотел бы с тобой поговорить. Можно, пожалуйста, попросить чтобы ты перестал оправдываться и перестал принимать оправдания. Особенно важно второе. Потому что ты даже не представляешь, как сильно это бьёт по тебе.
Разрешите объясниться.
Возьмём Нерадивого Василия Васильевича 199* года рождения. Василий — программист, которого я хочу нанять. Ну, как сказать, Василий прикидывается этим программистом. Он прилежно решает задачи на leetcode и всё такое. Он умеет сортировать деревья сбалансировано и несбалансированно. Он научился до такой степени, что может отсортировать строку алгоритмом O (n^-1). Почитать резюме — так Василий золотце, ясный пень, которого мне надо нанять прямо сию секунду. Его резюме составлено в лучших традициях CEO маркетинга и попало ко мне на стол прямо с пылу, с жару, от самого ИИ, который выбирает самые-самые резюмы.
Ага. Так я прям и поверил.
Фиг бы с ним, что единственное, что Василий сделал в своей недолгой жизни в моей компании был новый проект на NestJS.
Тут, давайте я вам поведаю, что такое NestJS. Это проект, написанный для «облегчения написания микросервисов». И, вот чудо, в этом Nest нет никакой документации, она продаётся за деньги.
Мы отправили наше приложение в докер. И я решил, что это неприлично, что проект на NestJS падает насмерть, когда происходит отсоединение Redis или базы данных. Я решил, что будет лучше, чтобы этот проект продолжал работать и просто переподключался к нужным сервисам. Я попросил Василия добавить эту, достаточно простую, функциональность в проект. И что бы вы думали? Василий не смог этого сделать.
Он мне долго и нудно объяснял, что он не знает, как правильно реализовать это на Nest. И всё бы ничего. Если честно, я бы простил ему вообще всё что угодно. Василий — относительно молодой специалист, которого по щедрости души, наняла моя международная компания. Я уж решил, что Василий сможет, и подумал, что ему стоит помочь.
Я помогал. Честное слово. Я ему говорил, что его вонючие микросервисы нафиг никому не сдались. Я не раз показывал Василию оригинальное ТЗ, в котором значилась одна вещь: REST API сервер, с пятью endpoints. Всё. Я не просил NestJS, на самом деле я не просил даже Javascript. Я хотел, чтобы всё было сделано на Golang. Но я знал, что Василий не силён, и решил, что мне стоило ему помочь.
Но Василий не смог. И опять же, я бы с удовольствием поднял бы Василия с колен, и помог бы ему отряхнуться. Но Василий совершил одну роковую ошибку. Он сказал, что в его проблемах виноваты Kamil Mysliwiec, сотрудник, который сделал NestJS.
Василий обвинил компанию в плохой документации. И с Василием расстались. Несмотря на то, что времена нынче смутные, несмотря на то, что я знал, что не раз давал ему шанс, я расстался с ним. Ибо задолбало.
Пожалуйста, Василий, пойми. Ты можешь обвинить в своих проблемах кого угодно. Хоть Кузькину мать, хоть инопланетян и динозавров. Но это будет ровно тот момент, когда у тебя всё начнёт сыпаться из рук.
Ты — программист. Значит что ты должен уметь заставлять компьютеры делать то, что от них требуется заказчику.
И всё тут. Если тебе это удаётся сделать — ты получаешь бабло. Если тебе это не удаётся сделать, ты сидишь на планёрках, пытаешься выдумать, что бы соврать менеджерам, твои коленки трясутся постоянно, потому что ты не знаешь, когда тебя выпрут из твоей компании.
Хватит врать и оправдывать себя. Ты можешь оправдать себя перед менеджером, ты можешь влепить фейковые часы в инвойс, ты можешь сделать всё что угодно, но ТЫ, сам по себе, будешь знать, что ТЫ облажался.
Когда ты говоришь, «это плохой язык программирования» или «мне не нравится эта база данных» ты просто выносишь себе приговор. Ты, программист, знаешь. Ты можешь.
Если ты подходишь ко мне и говоришь мне «Я не смог запустить эту штуку на этой неделе, но я пойду биться об стенку, чтобы выяснить как она работает, а на следующей неделе, гарантирую, она запустится», я тебе поверю. Ты можешь сколько угодно раз не смочь. Главное, чтобы ты мог встать, развернуться и сказать «ну что же, придётся мне посидеть и что-то с этим сделать.»
Хабравчане, подумайте, пожалуйста, над тем, кто такой профессиональный программист. Вот, определения из Оксфордского словаря.
Programmer: a person who writes computer programs.
Professional: …; competent, skilful, or assured.
Программист: Человек, который пишет компьютерные программы.
Профессиональный: …; компетентный, искусный, уверенный.
Оцените эти три прилагательных, которые описывают профессионального программиста.
Знаете, что они значат?
Они значат, что ты не можешь просто посидеть 10 минут перед Йотубиком и понять, как работает очередной яваскриптовый движок. Они означают, что ты в состоянии найти настоящий источник проблемы. Они означают что когда всё горит огнём, у тебя кишка не тонка сказать «Всё в порядке, я щас разберусь». Это значит, что ты возьмёшь этот жирный талмуд-мануал и прочитаешь его.
И не надо мне тут рассказывать про этого собачёнка. Я знаю разницу между тем, кто притворяется, и тем, кому я могу доверить критическую инфраструктуру.
Ответственность в наши дни превратилась в ужасное слово. Почему-то под ответственностью понимают «кто будет козлом отпущения». А знаете, что такое ответственность? На самом деле, ответственность — это когда пахнет деньгами. Ответственность, это когда ты реально знаешь, что запущенно на этих пяти серваках, ты понимаешь КАК это работает, и ты знаешь, что Василий Геннадьевич, директор компании, очень радуется, когда серваки работают без сбоя.
Когда ты идёшь по коридору, а мимо проходит Гендир с Замом, и оба они тебе подмигивают, и говорят: «Вот он! Идёт! Спасибо за отличную работу!» вот тогда ты понимаешь, что на самом деле значит ответственность.
Пойми, что ответственность — это твоя способность знать и отвечать за что-то. И если она у тебя есть, то ты будешь жить жизнь без выгораний и постоянной дрожи в коленках. Ты не будешь приходить на работу с этим сосущим чувством под ложечкой, думая о том, как бы ничего не упало.
Да, кстати, ещё одна вещь. Ты обязан знать, что, блин, происходит в твоих программах! Хватит рассказов о том что «наш кэш улажен SuperDuperCacheFramework». Если этот кеш падает каждые два часа, это значит, что нифига не улажено, и нифига ты не знаешь.
Как-то раз, давным-давно, я проходил собеседование в Universal Music Group. Мне задали вопрос «Что вы будете делать, если ваш сервер начал безбожно тормозить». Их до глубины души поразил мой ответ. Я ответил на это вопросом «А этот сервер раньше работал?». Мне сказали «Да.»
Тогда я ответил — я буду сидеть и выяснять, почему это произошло. Если сервер раньше работал, а сейчас не работает, значит что-то изменилось. Надо найти настоящую причину. Возможно, вы обнаружите, что у вас удесятерилось количество клиентов. Ну хорошо. Тогда можете поднимать дополнительный сервер, и ставить кеш. Но, если клиентов столько-же, а всё тормозит — берегитесь! Я буду сидеть и тупить в логах, пока не найду настоящую причину этой проблемы. Как я буду знать, что я нашёл настоящую причину? Всё сразу-же заработает.
Ребята из UMG были в шоке. Мне предложили позицию прямо там же, на месте. А их главный инженер ещё пять минут рассказывал мне, насколько восхитителен этот ответ. После чего он мне сказал, что другие претенденты предлагали переписать программу на другом языке, или запустить всё на кубере и автоскейлить инфраструктуру и тому подобный бред.
Этот ответ подразумевает Профессионального Программиста. Этот ответ подразумевает, что человек, который управляет инфраструктурой, несёт за неё реальную ответственность. Он не козёл отпущения, нет. Он — самый обученный, начитанный и осведомлённый инженер в округе. Он знает, что означает быстрое мигание шестого светодиода на восьмой панели. Он может уладить любую проблему. И ему постоянно завидуют. Потому что Гендир в нём души не чает, и он получает неприличную зарплату.
Поэтому, прошу, %хабраюзеры%, поймите, не бывает такой штуки, как «это плохо работает». Бывает только «я в этом не до конца разобрался». Примеров — масса. Любой язык тьюринг-полный язык программирования является языком программирования. Хорошие API можно написать и на Visual Basic в Ворде. (Я и такое видел). Это не значит, что так нужно делать. Это значит, что если ты — профессиональный программист, то у тебя и на чайнике дум запустится, и на яваскрипте всё будет работать. А если ты плохой программист, то у тебя в кармане всегда найдётся пара отговорок о том, что в голанге нет дженериков или прочей билеберды. Хватит притворяться. Я в тебя верю.