Уволен, потому что ваши навыки намного выше, чем у ваших коллег

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

Я только что узнал от внутреннего коллеги (технического эксперта), что меня, скорее всего, уволят, потому что между мной и другими разработчиками слишком большой разрыв с точки зрения знаний/практики программирования.

Он рассказал мне, что менеджер команды часто спрашивал его:

«Легко ли читаем и понятен код Мика?»

Он ответил:

«Да, но нужно иметь хороший уровень, чтобы понять это, потому что компоненты разумно разделены».

Ответ менеджера команды:

"Но так ли он хорош, как он притворяется?"

Он ответил:

«С уважением, да, я читал его код, чтобы изучать TypeScript/Node.js дома».

Ответ менеджера команды:

«Но это настоящая проблема, если команда не понимает его код… даже если у команды меньше знаний. Мы не можем полагаться на него в долгосрочной перспективе».

Я расстроен.

Я сомневался в этой причине, но нашел эту статью .

Это третий раз, когда я сталкиваюсь с этой ситуацией; когда ты пишешь действительно хороший код, а тебя увольняют без всякой причины.

Это не шутка, я не вынесу, чтобы это случилось в четвертый раз, и это оказывает на меня психологическое воздействие.

Как я могу избежать этого в будущем?

Быть высокомерным не в моем характере. Мне нравится делиться своими знаниями.

Обновлять

Многие ответы касаются того, что я должен стараться работать на команду, а не только на себя.

Отмечу лишь, что от меня не ожидали работы с командой.

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

Меня наняли, ПОТОМУ ЧТО у команды совсем нет навыков в требующих областях.

Команда просто смотрела код (из любопытства) однажды в течение не более 5 минут, и напрямую общалась с моим менеджером.

5 минут, правда, около 10 000 строк кода после 4 месяцев работы.

Да, компании были похожи в том смысле, что от меня ждали снижения уровня навыков под мою команду, а я категорически не хочу. Мне нравится ИТ-сфера, потому что это сложная задача для мозга. Мне нужны вызовы.

Трех раз достаточно, чтобы убедиться, что я чувствую себя намного лучше с увлеченными людьми, которые бросают мне вызов, чем со стандартными сотрудниками, которые не ожидают самосовершенствования. Я просто замечаю, что их способ действий не успешен, так почему же я передумал, чтобы соответствовать их, кстати, быть неудачным. Те типичные крупные компании, у которых ИТ не является основной причиной существования, не для меня.

Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .
После того, как комментарии были перемещены в чат, было опубликовано еще 33 комментария . Они не могут быть автоматически добавлены в чат, и обширное обсуждение в этих комментариях явно неуместно здесь, поэтому их больше нет. Если вы хотите обсудить этот пост, используйте чат. Комментарии предназначены для запроса разъяснений или предложений по улучшению сообщения, а не для... чата.
Что касается обновления, вы сказали, что это случалось несколько раз. Но вы также сказали, что вас наняли, потому что у команды не было навыков в этой области. Было ли это в другие разы? Или только самые свежие?
Вы можете разместить 20-30 строк, например? А что за язык программирования?
Привет, @RobertHarvey, в отличие от Stack Overflow, на Workplace SE комментарии могут легко привести к расширенному обсуждению и обмену мнениями, чего мы хотим избежать на сайте вопросов и ответов. Чтобы подавить расширенное обсуждение, мы обычно переводим их в чат и призываем людей публиковать что-либо ценное в качестве ответа. Когда материал публикуется как ответ, за него можно проголосовать, найти его в поисковых системах и ранжировать в соответствии с голосованием. Пожалуйста, смотрите пост Роберта Картайно, Чем "комментарии" не являются... , для более подробной информации. Надеюсь это поможет.
Может быть полезно указать страну, в которой вы работаете . Вы заметили, что работаете во французской компании, но находитесь ли вы во Франции или работаете за границей?
Есть ли причина, по которой вы не работаете в среде, которая продвигает передовые технологии? Академия, например, могла бы использовать кого-то, кто пробует новые передовые технологии и методы, но в бизнес-среде это часто вредно, поэтому вас увольняют.
@ Mik378, если есть информация, которую вы хотите, чтобы люди знали, отредактируйте ее в своем вопросе. Не пишите это в комментариях.
Вам нужно найти этого парня: worker.stackexchange.com/questions/22559/…
В ответах на ваш вопрос делается так много предположений, что это несколько смешно. У Cort есть хороший ответ, который объясняет ситуацию с точки зрения менеджера. Но я подозреваю, что вам нужно найти другой вид бизнеса для работы. Я работал в организациях в качестве штатного «корпоративного» разработчика, а также в компаниях, производящих продукты, где надлежащее «инжиниринг» было реальной вещью. Похоже, между типами разработчиков, которые работают в этих компаниях, существует огромный разрыв в навыках, и я подозреваю, что вы добились бы большего успеха во втором.
Любое обновление от вас?

Ответы (23)

Это не шутка, я не вынесу, чтобы это случилось в четвертый раз, это действует на меня психологически.

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

По некоторым данным, я был в подобных ситуациях «слишком хорош в кодировании для своей работы», хотя никогда не до такой степени, как вы описываете. Я мог бы вылечить рак с помощью шаблонного метапрограммирования на C++, но многие из тех, с кем я работаю, едва разбираются в основах объектно-ориентированного проектирования. Я написал код, который злоупотреблял SFINAE и противоречил точной формулировке спецификаций C++, когда во многих проектах, над которыми я работал, все еще использовались устаревшие версии gcc с ошибками. Мой подход состоял в том, чтобы просто показать им, насколько удивительны эти инструменты, и все проблемы, которые они могут решить. Мне нравилось объяснять людям небольшие советы по программированию, и им это в основном нравилось.

Это звучит знакомо?

«Да, но нужно иметь хороший уровень, чтобы понять [код Мика], потому что компоненты разумно разделены».

Рассмотрите это утверждение с точки зрения риска. Ваш босс должен продолжать работу, несмотря ни на что. Если вы уйдете в поисках отличной работы, ваш босс все равно должен следить за тем, чтобы код сохранялся. Ваш коллега только что сказал, что если им придется заменить вас, им нужно найти очень опытного программиста, потому что любой, кто не так хорош, не сможет его поддерживать. Это риск. Что, если они не могут найти достаточно хорошего разработчика или не могут позволить себе платить ему достаточно?

Возможно, вы написали то, что назвали бы «хорошим кодом», но определение «хорошего кода» очень сильно зависит от контекста. То, что является «хорошим кодом» в Google с их передовым мышлением, может быть очень плохим кодом для человека, работающего в FAA, который в основном заботится о надежности, а не о том, чтобы идти в ногу с передовыми технологиями. Определение «хорошего кода», данное вашим начальником, включает в себя способность поддерживать его в самых разных ситуациях, в том числе и без вас. Если вашим коллегам неудобно поддерживать ваш код, то вы внезапно становитесь обузой для компании, потому что вы производите продукт, который они не могут поддерживать, если вы решите перейти в другое место.

С этой точки зрения можно возразить, что вы вынуждаете их принять ваше определение «хорошего кода». Инстинктивно это может показаться хорошим делом, но оно чревато трудностями, такими как образ мышления, основанный на риске, о котором вы, возможно, не думали.

У нас есть выражение «ставить телегу впереди лошади». Одно из многих значений, связанных с ним, заключается в том, чтобы ставить содержание, которое вас больше всего волнует (возможность использовать ваши продвинутые методы), над силами, которые должны тянуть его вперед (понимание этих методов вашим коллегой). Вы написали код в этом продвинутом стиле, а затем призвали других разработчиков «подтянуться» к этому стилю. Это может быть эффективным, но если что-то случится с вами до того, как они «наверстают упущенное», компания внезапно окажется в опасности, потому что никто не сможет поддерживать код.

Как я могу избежать этого в будущем?

Исправить это может быть ужасно сложно, потому что это предполагает подход к проблеме не так, как вам обычно удобно. Вместо того, чтобы сначала писать код в этом продвинутом стиле, а затем учить своих коллег мыслить таким образом, вы должны перевернуть его. Научите своих коллег любить этот стиль программирования, а затем начните писать код в этом стиле. Это может показаться отсталым, но гораздо более стабильным. С точки зрения босса, команда учится писать код лучше, а то и вовсе не рискует. Как только код станет лучше, стиль, в котором вы хотите развиваться, внезапно станет менее рискованным.

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

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

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

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

Мне очень нравится читать ваш ответ. С одной стороны, я потратил время, чтобы прочитать код от действительно опытных людей по всему миру. Мое желание состоит в том, чтобы постоянно стараться «быть похожим» на них, улучшать себя каждый день, быстро приобретать понятия, практикуя это. Трудно остановить эту постоянную гонку в поисках «идеального способа кодирования» (при сохранении прагматизма), регрессируя, чтобы приспособиться к равнодушным (совсем) коллегам. У меня есть крайние амбиции.
@ Mik378 Я никогда в жизни не видел, чтобы кто-то больше нуждался в проверке кода. Послушайте, проверка кода — это не только одобрение (на самом деле это не должно быть одобрение). Это возможность увидеть, как люди читают ваш код и обсуждают его. Это часть становления социализированным программистом. Если вы хотите продвинуться очень далеко в программировании, не просто программируйте в одиночку. Садитесь с этими парнями и программируйте вместе. Это называется сопряжение. Возможно, вы тоже чему-то научитесь у них.
Кто сказал, что я никогда не занимался парным программированием интенсивно? не я
@ Mik378 Похоже, вы не пробовали парное программирование на рабочем месте, которое вызвало бы у вас проблемы. Если да, то почему кто-то найдет ваш код трудным для понимания?
В вашем предложении не хватает слова нет?
Итак, ваш контакт сказал, что вам приходилось работать в одиночку, но вы активно занимались парным программированием?
@ Mik378 Никогда не было такого опыта, но я согласен с этим ответом, потому что: вы не можете контролировать точку зрения менеджера. Вы можете владеть только своей половиной уравнения. (Это по-прежнему применимо, даже если руководство ошибается.) Демонстрация того, что вы командный игрок, — это явная победа для руководства (в целом). Это может означать, что подача заявки на работу в проектах с индивидуальным разработчиком (с учетом вашего сочетания географии, набора навыков, уровня навыков и т. д.) просто слишком рискованна для вас в краткосрочной и среднесрочной перспективе.
Кто-нибудь разобрался с гипотезой о том, что мои коллеги просто не умеют читать код? Что мои коллеги обманывают менеджера по поводу своих фиктивных навыков? Поверьте мне, если бы я написал самый читаемый код в мире, моя собственная мать все равно не смогла бы его прочитать, потому что она так и не научилась читать код. Этим коллегам не хватает огромных знаний в программировании. Например, HashMap на Java, они строго не знали, для чего это нужно... (у них 6 лет "стажа"). Я не хочу спорить об этой реальности.
@Mik378: Это вполне возможно. Есть команды «опытных» разработчиков, которые имеют очень узкие навыки и не хотят заставлять себя, и это трудные места для тех, кто хочет большего. Возможно, вы испытываете некоторые из них. Но вы все равно можете научиться работать с такими разработчиками и даже что-то получить от этого. Если это разочаровывает, найдите один или два полезных указателя из этих ответов, чтобы вы могли продолжать работу, пока не будете готовы перейти к чему-то более сложному в чисто техническом смысле.
Я бы добавил, что есть также магазины, которые хотят кодовых обезьян как можно дешевле. Я был одним из первых и последних, нанятых по рыночным ставкам. Почти все остальные были приняты на работу в качестве стажеров, а затем после окончания колледжа наняты на полный рабочий день. Если это цель магазина, чтобы иметь самых дешевых разработчиков, вы не можете ожидать, что они поймут сложный код. Я просто пытаюсь научить их лучшим практикам ремонтопригодности и надеюсь, что у них есть желание учиться.
@ Mik378 - Ваша гипотеза о том, что ваши коллеги не умеют читать код, была бы более обоснованной, если бы это не произошло «в четвертый раз». Честно говоря (и я говорю это как действующий менеджер команды разработчиков), ваши комментарии и ответы кричат ​​о том, что «Я бог среди разработчиков. Я пишу потрясающий передовой код. Никто другой этого не понимает, потому что они глупы и/ или лень». Это то, что мне приходит в голову за 10 минут чтения вашего вопроса и ваших ответов на последующие ответы/комментарии.
@ Mik378, если у вас сложный код и вы единственный квалифицированный программист в компании, я бы настоятельно рекомендовал найти работу там, где есть другие программисты, которые умнее/опытнее вас. Тогда вы сможете учиться у них (вы говорите, что любите совершенствоваться), и они смогут понять ваш сложный код.
@JohnP Я узнал имя Мика по более ранним сообщениям, которые он сделал на бирже стека рабочего места. Ваша гипотеза может быть верна, как видно из таких выдержек, как «Как мне убедить начальников (не программистов), что для создания действительно хорошего программного обеспечения требуются все методологии, которые я пытался навязать, и хорошие разработчики (я не осмеливаюсь раскрыть их перед им мои мысли о плохих навыках других разработчиков)?»
@JohnP Вы правы. Предупреждающие знаки довольно сильно видны. Однако, не видя его кода и не встречая его коллег, я склоняюсь к решениям, которые работают во всех случаях. Если он действительно так хорош, как утверждает, то такой подход поможет ему вести компанию вперед. Если ваши инстинкты верны, то такой подход поможет ему следовать. И то, и другое достигается путем слушания и попытки понять желания своих коллег по работе. Таким образом, мы можем найти хороший путь вперед, независимо от чьего-либо восприятия его навыков (включая его собственное, ваше и мое).
«[I] Если им придется заменить вас, им нужно найти очень опытного кодера, потому что любой, кто не так хорош, не сможет его поддерживать». Это не так работает. Код, написанный опытным программистом, легче поддерживать как опытным, так и неквалифицированным программистам. Код, написанный неквалифицированным программистом, труднее поддерживать как опытным, так и неквалифицированным кодерам.
@ Mik378 Mik378 У вас действительно хороший ответ, поэтому я не хочу создавать новый. Я просто собираюсь добавить к этому. Я работал в одной из крупнейших социальных сетей в Чехии, и у нас также был один разработчик, который был на более высоком уровне, чем остальные. Он написал большую часть бэкенда, используя собственные технологии (mono, c), не консультируясь с руководством. А когда он ушел (без какой-либо логической причины), все пошло к черту, так как мы не могли понять, как устроена платформа. Теперь я думаю, что вы делаете то же самое. Вы ВСЕГДА должны работать как минимум с 1 разработчиком, который может взять на себя работу.
Я думаю, что усвоил этот урок :) Спасибо за ваше замечание @Marakoss
@TheMerryMisanthrope: есть «опытный» кодер и «умный» кодер. Я помню, как смотрел на какой-то код на C++, написанный «умным» кодером, и просто сказал: «Что за хрень это», показал его другому высококвалифицированному кодеру, который посмотрел на него и сказал именно то, что я только что сказал. Обладая высокой квалификацией, каждый из нас мог бы легко решить одну и ту же задачу, не делая ничего «умного», что затрудняло бы ее понимание.
@gnasher729 Точно. Умный редко бывает по-настоящему умелым.

Ну, я ненавижу лопать ваш пузырь, но если это произошло в третий раз, это почти исключает «это не вы, это они». В вашем названии говорится, что вас уволили за то, что вы были «незаменимым», но кроме того, что это оксюморон, это также не то, что произошло. Вас уволили за то, что вы написали код, который ваши коллеги не могли понять, что является критической проблемой для программиста.

Хороший код — это читаемый код , то есть код, понятный даже новичкам . Ситуации, когда вам нужен сложный и тщательно написанный код, который должен быть написан и поддерживаться настоящими экспертами, очень редки в наши дни, и вы, очевидно, работали не в таких компаниях. То, что вы описываете, больше похоже на «причудливый» код, который, как правило, чрезмерно сложен, полон эзотерических приемов программирования и требует времени, чтобы понять и отладить. Это обычная ошибка для людей, получивших классическое образование, и их, как правило, ждет грубое пробуждение, как только они попадают в продуктивную среду.

Хороший код — это читаемый код, но не тогда, когда пробел слишком велик. Например, они не знали, в чем разница между наследованием и композицией. Вы не можете бороться с этим глубоким недостатком знаний в течение нескольких недель/месяцев. Они используются только если/иначе, везде в коде с большим количеством СУХИХ нарушений.
@ Mik378 Верно, но я основывал свой ответ на том факте, что у вас это уже случалось дважды, и это делает маловероятным, что с вашим стилем кодирования вообще нет никаких проблем, даже если это последнее увольнение было в основном из-за некомпетентные коллеги. Это также единственный аспект вашего вопроса, на который действительно можно ответить, поскольку мы не можем определить, подаете ли вы заявку не в ту компанию или нет.
@ Mik378, все ответы, за которые проголосовали, относятся к одной и той же теме. Это похоже на мой ответ, может быть, даже лучше, как сказано более эффективно. Вы должны спросить себя, что вы делаете неправильно. Большинство комментариев указывают на одно и то же, особенно те, за которые проголосовали.
@Mik378: Вы думали об обучении своих коллег? Если вы будете наставлять их (например, через обзоры кода), то они не только смогут освоиться, но и ваш код больше не будет казаться им чуждым.
Да, я провел много времени, объясняя концепции, практикуя с ними код Ката и т. д., помогая им в их собственном коде, подробно описывая каждый из моих шагов для достижения решения.
@ Mik378: Компилятор - это не ваша аудитория, а ваши товарищи по команде. Если вы не можете приспособить текст к своей аудитории, значит, вы не умеете общаться. То, что это случалось более одного раза, кажется, указывает на то, что вы не способны писать своей аудитории.
«Уволен за то, что незаменим» — это, конечно, не оксюморон. В классической книге Вайнберга «Психология компьютерного программирования» (опубликованной в 1972 году!) уже содержался отличный совет по управлению: «Если кто-то в вашей команде незаменим, вашей первоочередной задачей должно быть избавление от него как можно быстрее». Конечно, перераспределение их в другом месте компании иногда является хорошим способом сделать это, если только вы не создаете ту же проблему для другого руководителя группы.
@alephzero Я бы сказал, что это, безусловно, внутреннее противоречие и что цитата должна заканчиваться словами «получить их больше или обучить людей, чтобы это больше не имело места». Это не так содержательно, но и не так бессмысленно, как тот совет. При столкновении с коэффициентом шины, равным 1, уменьшение его до 0 не является правильным ответом.
«Хороший код… легко понятен даже новичкам» — это просто неправда. На самом деле это до смешного неправильно и значительно обесценивает этот ответ. Хорошо написанная статья по квантовой статистической механике покажется тарабарщиной новичку, не имеющему никакого опыта в этой области. То же верно и для кода, описывающего сложную систему. Я не уверен, какой цели служит притворство, что это неправда (к сожалению, в последнее время это кажется распространенным заблуждением).
Вдобавок ко всему, как человек, занимающийся ИТ уже около 25 лет, средний уровень командных навыков снизился. В некоторых компаниях на сложном уровне — старшие разработчики, которых 15 лет назад уволили бы как стажеров. Эта проблема вполне может быть культурной.
@KonradRudolph Вы прочитали остальную часть ответа? Я имею в виду эти типы сред во втором абзаце. Нравится вам это или нет, в наши дни такой вид программирования встречается очень редко, и из описания OP ясно, что это не та работа, которую он должен выполнять. И хотя здесь не место для технических дискуссий, я бы также сказал, что вполне возможно создать модель сложной системы, которую легко понять и прочитать.
Не лучше ли сказать что-то вроде: «Хороший код... написан так, чтобы его могли понять ваши коллеги (в компании, в той сфере, в которой вы работаете)». Это должно быть верно, независимо от того, являются коллеги экспертами или нет, поскольку вы поддерживаете этот код как команда.
@ Mik378 Наследование и композиция - две довольно похожие концепции, действительно ли разработчику необходимо знать разницу, чтобы удовлетворить потребности бизнеса? Если нанять разработчика, который это знает, стоит на 10% больше, получит ли бизнес отдачу от этих инвестиций по сравнению с написанием программного обеспечения, которое неправильно использует языковые функции, но соответствует бизнес-целям?
@thelem Правда? Я бы сказал, что незнание этих основных понятий вызовет больше проблем в долгосрочной перспективе. Мы говорим не о какой-то эзотерической функции языка, а об основных понятиях, которые должны быть частью знаний любого разработчика (по крайней мере, разработчиков, ориентированных на языки OO).
Хороший код читается тем, кто понимает основные принципы. Похоже, он пытается написать правильный объектно-ориентированный код для динозавров, которые знают только процедурный код. Если это не что-то столь фундаментальное, он, вероятно, становится слишком милым.
@Mik378, «Вы не можете бороться с этим глубоким отсутствием знаний» - да, вы не можете. Найдите лучшую работу или создайте собственную компанию.
Истина лежит где-то посередине «крайних» интерпретаций комментариев Лилиенталя и Конрада. Я работал со многими людьми, которые считали себя хорошими разработчиками, умеющими писать сложные программы. Ведь проблема комплексная. Меня никогда не впечатляли эти люди. Самые впечатляющие разработчики — это те, кто делает сложное простым. Я подозреваю, что ОП попадает в первую группу, а не во вторую. ИМО, слепое следование текущим передовым практикам «принципов программного обеспечения» почти всегда приводит к созданию сложного кода. Возможно, это проблема ОП.
«Наследование и композиция — два довольно похожих понятия, так ли необходимо разработчику знать разницу, чтобы удовлетворить потребности бизнеса? Если нанять разработчика, который это знает, стоит на 10% дороже… — Thelem». такое базовое знание, что программист, который не знает разницы, будет иметь ужасную производительность. Наем этого программиста легко обойдется более чем на 10% дороже, поскольку он понятия не имеет, что делает.
@KonradRudolph Два слова для вас «Лекции Фейнмана».
@ Арон Вы действительно только что объединили вводную экспозицию с исследовательской работой.
@KonradRudolph: Хороший код максимально прост для понимания. Приведу пример: я прочитал описание линейного программирования в учебнике по линейной алгебре и ничего не понял. Я читал книгу Данцига с самого начала, и он сумел описать все совершенно очевидным образом. Джордж Данциг = герой. Неизвестный автор учебника = ноль. Взять сложную проблему и организовать ее так, чтобы получить простое и очевидное решение, — вот что отличает хорошего программиста.
Проблемы с программным обеспечением, которые сложны по своей сути, чрезвычайно редки. Проблемы с программным обеспечением, которые являются простыми, но массовыми, не редкость. Вы решаете их, написав простой код .
@industry7 также может быть случай, когда программист знает, как применять концепцию, но не знаком с конкретной терминологией.

Всегда есть причины.

Предыдущий работодатель сделал это с моим коллегой. Его уровень мастерства был намного выше нашего мастерства. Итак, его отпустили.

Почему это имеет смысл?

  1. Он был единственным, кто мог поддерживать свой код
  2. Он не был соавтором
  3. Он не следовал стандартам магазина
  4. Хотя он доставлял больше, чем нужно, это было нехорошо.
  5. Требовались простые решения, а не сложные.

Об этом так часто говорят, что это почти клише, но вы должны «хорошо вписываться» в команду.

Кодирование — это только часть уравнения. Вы должны быть представительным, коммуникабельным, скромным до некоторой степени, высокомерным, когда это необходимо, придерживаться стандартов магазина, ладить со своими коллегами, быть доступным и быстро помогать, когда это необходимо.

Все эти мягкие навыки важны, и их отсутствие вызовет у вас проблемы.

Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .

Хороший код легко понять даже плохим инженерам. Один совет, который я часто получал, звучит так: «Программируйте так, как если бы человек, который будет поддерживать ваш код, был посредственным программистом и опасным психопатом, который знает, где вы живете».

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

Конечно, полностью тупой код — это тоже плохо. Существует прекрасный баланс между тупостью и гениальностью: эффективность и все еще читабельность. Это больше искусство, чем наука. Вот почему умные концепции, такие как множественное наследование , обычно не рекомендуются . Даже если они качаются.

Вы должны учитывать контекст. Если вы работаете в небольшой фирме, которая нанимает только лучших, вы, вероятно, можете позволить себе некоторые экзотические, блестящие вещи. Если вы работаете во французском банке, который полагается только на консультантов, э-э-э, случайного качества (иногда им везет, иногда нет), и где у каждого консультанта есть домен в миллионы LOC, которые нужно поддерживать, то во что бы то ни стало упростите его. для посредственности, чтобы понять это с первого взгляда. Без указателей, без множественного наследования, без хитрых трюков и т.д...

Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .
«Хороший код легко понять даже плохим инженерам». Я не думаю, что рабочее место — отличное место для разговоров о программной инженерии. Я постоянно вижу такие наивные комментарии, и это еще не все. Это расплывчатое обобщение, которое отлично звучит в звуковом байте для выступления на TED или что-то в этом роде, но не выдерживает никакой критики в реальной жизни.
@Cypher: контекст - «большая французская компания». Таких я немного знаю. Большая часть работы в таких компаниях выполняется консультантами, э-э-э-э, случайного качества. Вот почему удобочитаемость так важна. Что бы вы ни делали в таком контексте, это должно быть понятно следующему невежественному парню, который займет ваше место не более чем через 3 года. Другие контексты могут иметь другие правила. Я говорю о контексте ОП. (и да, ИТ в крупных французских компаниях в среднем очень плохи - их практика никогда не нанимать и всегда использовать консультантов катастрофична - но это реальность).

Маловероятно, что вас уволят, потому что вы слишком хороши. Думаю, это просто оправдание.

Гораздо более вероятно, что это проблема поведения, или босс просто не любит вас по причинам, которые он не может вам назвать, не создавая повода для судебного иска. Также возможно, что вы самый дорогой, и они верят в FTE (т.е. все работники одинаковы).

Если вы действительно так хороши, вы можете сделать себя незаменимым в хорошем смысле:

  • Наставник младших программистов. Расскажите о преимуществах и недостатках различных подходов и позвольте им делать свои ошибки вместо того, чтобы указывать им, какой подход выбрать.
  • Пишите хороший код, который легко поддерживать другим людям.
  • Пропагандируйте передовой опыт таким образом, чтобы повысить производительность, а не передовой опыт карго-культа , который хорошо звучит на бумаге, но убивает производительность.
Вы читали статью, на которую я ссылаюсь в своем ОП? Похоже, это своего рода .."привычка" у некоторых менеджеров...
Как я уже сказал выше, я запланировал 8 встреч по 2 часа каждая, чтобы научить их хорошей практике кода. Нет эффекта.
@Mik378 Наставничество и преподавание в рамках двухчасовых лекций — это очень разные вещи. Что касается статьи, то это на самом деле пример карго-культа - есть очень веские причины уволить того, кто делает себя незаменимым, но это сильно отличается от увольнения того, кто просто находится на более высоком уровне квалификации.
Что такое "ФТЭ"? «Постоянный сотрудник» в этом предложении не имеет смысла.
@EsotericScreenName Расшифровывается как Full Time Employee, но этот термин используется для описания рабочей нагрузки (или иногда оплаты). Если он используется, он предполагает, что все работники одинаковы. В разработке программного обеспечения это предположение обычно является чушью.
@Peter Я считаю, что в контексте, в котором вы его используете, это « эквивалент полной занятости », то есть, если у вас есть кто-то, кто работает только по понедельникам и вторникам, и кто-то еще, кто работает только со среды по пятницу, вместе они составляют 1 FTE. Плохая организация, которая ожидает от двух таких разработчиков такой же производительности, как от одного разработчика, работающего полный рабочий день, однако, на что вы обращаете внимание.

Увольнение незаменимых людей на самом деле является разумной управленческой стратегией. Когда ваша компания полагается на одного человека, продолжающего выполнять свою работу, и никто другой в компании не обладает его знаниями и/или способностями, это создает огромную ответственность: что, если этот человек попадет под автобус и умрет (отсюда и термин «автобус»). фактор») или просто решает покинуть компанию ради нового вызова? Теперь ваша компания попала в ужасную ситуацию, потому что никто не может сразу заменить незаменимого сотрудника, а вы не контролировали сроки!

Чтобы предотвратить эту ситуацию, у компании есть два варианта. Либо они могут попытаться распространить знания и/или повысить способности сотрудников незаменимого человека, либо они могут снять пластырь за один раз, уволив незаменимого человека в выбранное ими время и оправиться от потери. указанного работника, когда они готовы к этому процессу.

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

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

Значимый ответ
+1 Хординговые знания, умышленно выступающие выше своих коллег, только доставляют неприятности. «Не будь незаменимым, если тебя нельзя заменить, тебя нельзя продвинуть»
Нет, увольнять кого-то за то, что он незаменим, — не лучшая стратегия. Действительно? Вы бы избавились от сотрудника, потому что он/или она слишком хорошо выполнили свою работу? Продвижение или перемещение их к другим задачам, тем самым давая другим возможность заполнить пробел и уменьшить зависимость от человека (о чем говорится в статье), является хорошей стратегией. Наоборот, удержание кого-то, кого следует уволить, потому что он или она кажется незаменимым, является настоящей проблемой.
Это также было упомянуто в комментарии, и я должен подвергнуть сомнению здравомыслие людей, которые думают, что это разумное управление. Что, черт возьми, могло заставить вас думать, что это отличный план, чтобы «убрать все с дороги» и уволить людей, которые по определению имеют решающее значение для целей компании? Люди, которые почти наверняка будут отличными и не менее ценными сотрудниками. Если оставить в стороне абсолютно бессмысленную идею о том, что «контроль времени» — это в некотором роде хорошая вещь, не говоря уже о том, чтобы идти на компромисс, какое сообщение вы бы отправили остальным своим сотрудникам?
Да, вы должны работать над предотвращением низкого коэффициента шины. Да, вы должны обеспечить, чтобы люди, которые стали незаменимыми, делились своими знаниями и навыками. То, что вы предлагаете, сродни отрезанию руки, потому что царапина на руке может занести инфекцию.
Если есть «незаменимый кодер», уволить менеджера. Никто не увольняет высококлассных работников за то, что они достаточно хороши, чтобы стать незаменимыми.
@SteveJ Ради ответа я, очевидно, использовал несколько сокращений. В реальном мире, если кто-то стал незаменимым, то менеджмент потерпел неудачу задолго до этого. Хитрость заключается в том, что большинство людей становятся незаменимыми, накапливая знания и создавая барьеры, мешающие их коллегам понять их работу. Это явно нежелательное поведение, и его следует активно пресекать. Что касается сообщения, которое это посылает вашим сотрудникам, оно показывает, что они не могут просто запутаться в безопасности работы.

Если единственное, что общего между этими тремя ситуациями, — это вы, то вам нужно учитывать, что то, что вы делаете, является проблемой.

Вы разговаривали со своими бывшими коллегами и просили их критиковать вас? Не ваш кодекс, а ваше поведение в офисе. То, как вы общаетесь со своими коллегами, как вы общаетесь со своим начальником, как вы ведете документацию, как вы ведете себя на собраниях и т. д.

Вы поставили себя на место своего начальника? Действительно думали о том, что они должны делать, каковы их обязанности, что заставляет их чувствовать себя хорошо, когда они выключают свет в офисе и идут домой? Есть много-много примеров, когда кто-то пишет потрясающий код с точки зрения других разработчиков программного обеспечения , но компания терпит неудачу.

Действительно, я привык часто предлагать стратегии, вежливо критиковать существующие плохие стратегии. Может быть, они интерпретируют это как «высокомерный» или «дающий уроки». Но критика — часть моей работы как инженера.
Иерархия не всегда хочет слышать эту критику. Вы говорите: «Мы должны делать X вместо Y»; босс слышит: «Вы глупы, потому что решили сделать Y в прошлом. Если бы я был здесь в то время, мы бы выбрали X». Как бы вежливо это ни было сказано.
Критика убивает отношения. Период.
Отсутствие конструктивной критики убивает компании.

Я посмотрел ваш профиль, там написано "ваш код должен быть чище, чем вы сами". Кроме того, из ваших комментариев о том, что вы «потратили много времени на объяснение концепций» и «критика является частью моей работы как инженера»… Я думаю, вы любите давать советы, и ваши советы просто не ценятся вашими. товарищи по команде.

Это может быть связано с тем, что вы говорите, или с тем, как вы это говорите, а возможно, и с тем, и с другим.

Написание продуктивного и поддерживаемого кода не приведет к увольнению. Вас уволят, если вы не ладите с командой. Это ваша проблема, а не (как вы себе это представляете) ваш код слишком хорош. Ваш код может быть действительно хорошим, но НАМНОГО более вероятно, что это проблема конфликта личностей.

Мой вам совет: не будьте хвостом, который пытается вилять собакой. Не опускайте голову, перестаньте рассказывать людям, как кодировать , следуйте указаниям, хорошо работайте с другими, пишите код, который можно поддерживать. И тогда вас не уволят.

Также с интересом отмечаю красноречивый комментарий вашего менеджера:

"Но так ли он хорош, как он притворяется?"

Это говорит вам о том, что ваш менеджер не доверяет вам , ваш менеджер считает вас неискренним и думает, что вы высокомерны и/или больше цените свои способности, чем вы есть на самом деле. Отношения зависят от доверия, чтобы выжить. Обратите внимание, что ваша проблема не является технической проблемой. Ваша проблема очень мало связана с качеством вашего кода. У вас проблемы с тем, как вы относитесь к своим коллегам и вашему руководителю.

Людей не часто увольняют за то, что они незаменимы ( почему людей увольняют ); Это нелепое утверждение. В статье, на которую вы ссылаетесь, четко указано, что «увольнение» не обязательно означает отпустить их, а скорее сделать их незаменимыми (путем их перемещения, принуждения их к тому, чтобы они не участвовали в конкретном проекте и т. д.).

Хотя сверхквалифицированные специалисты иногда не примут вас на работу, они также редко приведут к увольнению. Хороших сотрудников очень трудно найти; Ни одна разумная компания не собирается избавляться от них, потому что они слишком хороши (если только вы не работаете на идиота — тогда они делают вам одолжение).

Людей ДЕЙСТВИТЕЛЬНО увольняют, потому что они ДУМАЮТ, что они незаменимы и лучше своих сверстников, и поэтому отказываются вносить изменения, которые необходимо внести в человека в зеркале, чтобы он хорошо функционировал в команде. ( уволен за плохое отношение )

Если вы строите мост с кучей аборигенов и вытаскиваете ноут, пока остальные вяжут веревку - вы может быть умнее или образованнее, но вы стали во вред команде и проблема в ВАС.

Если вы действительно так велики, как вы себя представляете, вы были бы достаточно умны, чтобы скорректировать свои собственные действия, чтобы сделать КОМАНДУ максимально продуктивной, а не догматически продвигать свою собственную повестку дня (что вы, вероятно, и делаете). Если бы вы это делали, у вас, вероятно, была бы работа в течение очень долгого времени.

Как человек, регулярно участвующий в процессе найма, я предпочту хорошего и представительного человека тому, кто великолепен и может стать раком в любой день.

Каждая программа — это общение с двумя аудиториями: компилятором или интерпретатором, который заставит ее выполняться, и некоторыми людьми, которые прочитали и поняли ее. Вы можете очень хорошо общаться с компилятором, но при этом писать плохой код, потому что его не могут сразу понять другие вовлеченные люди.

Как правило, команда программистов имеет набор языков, фреймворков, методов и т. д., которые известны всем в команде. Новые сотрудники, которым не хватает некоторых из этих элементов, быстро их усваивают, потому что любой в команде может их объяснить.

Использование чего-то вне этого набора влечет за собой затраты для работодателя. Например, предположим, что вы единственный программист в группе, знакомый с фреймворком X, а все остальные знакомы с более старым фреймворком Y, который используется для некоторого существующего кода и почти так же хорош, как X.

Использование фреймворка X было бы ошибкой, если только он не настолько лучше, чем Y, что руководство согласилось с тем, что технических преимуществ от его использования достаточно, чтобы оправдать усилия по обучению, чтобы все познакомились с X.

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

Я не думаю, что вы заходите достаточно далеко — я предлагаю людям думать о программе как о диалоге между группой программистов, который оказывается исполняемым на машине. Способность машины выполнять его вторична по отношению к способности поддерживать код — или можно даже сказать, что код с ошибками, который можно поддерживать, можно исправить, тогда как «идеальный» код, который не может быть понят/поддержан командой, в конечном итоге должен быть заменен. Обратите внимание, что разные ситуации имеют разные требования — первоначальная архитектура Twitter была тупиковой, но она обеспечила им долю рынка и время для полного переписывания, успех!
Для меня это уникальный ракурс, который я ценю. Я получил отзывы о том, что «не медленно ли отражение» или «оптимальнее использовать нативные структуры». На что моим идеальным ответом было бы «давайте напишем это на сборке», потому что, если их критика действительно касается эффективности и производительности, тогда мы должны просто перестать измерять «размеры обуви» и написать это как можно ближе к металлу.
В наши дни для большинства разработок, за исключением больших данных, оптимизация производительности переоценивается. Ремонтопригодность и удобочитаемость гораздо важнее.

Решил обновить свой комментарий до ответа:

Очень хорошо документируйте свой код.

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

Помните, что хороший код должен быть самодокументируемым :)
BDD/модульные тесты с осмысленными именами — лучшая документация.
@ Mik378 Это предполагает, что ваши коллеги действительно собираются уйти, прочитать модульные тесты и понять их - насколько я понимаю, это не так. Хороший код самодокументируется , но это предполагает определенное знакомство с используемыми соглашениями. Вы всегда должны спрашивать себя: «Поймут ли мои коллеги этот код?». Если нет, прокомментируйте это, пока они не сделают. И отрезать вас, "ну, они бы, если бы они..." не отрезают. Вы документируете это для своих нынешних коллег — в том виде, в каком они существуют в настоящее время, — а не для каких-то гипотетических коллег с идеальным поведением и знаниями.
@ Mik378: не думай, что этого достаточно. Конечно, вы должны стремиться к тому, чтобы код не нуждался в комментариях. И в любом случае прокомментируйте. И для кода, который не нуждается в документации. И документировать в любом случае. Это уровень удобочитаемости, необходимый в таком магазине.
Самодокументирование имеет свои пределы. Очень важно задокументировать правила для интерфейсов между модулями. Однажды мне пришлось проработать около 7 уровней иерархии вызовов, чтобы выяснить, разрешен ли нулевой аргумент или нет.
@ Mik378: Как человек с большим опытом работы в среде, где предыдущий инженер настаивал на том, что тесты BDD были документацией, так что это все, что у нас было, я могу сказать вам, что это просто не так. Это просто принятие желаемого за действительное, что тесты так же полезны, как и документация. Проблема заключается в организации и фокусе — тесты не описывают интерфейс в доступной для обучения форме и не объясняют , почему все работает определенным образом.
Лучший ответ. Обширные комментарии решат большую часть проблемы. Пишите комментарии в виде рассказа. Представьте, что вы сидите рядом с новым сотрудником и рассказываете ему о вашем коде. Или представьте, что вы читаете свой собственный код с большим похмельем и небольшим количеством сна. Дайте общий обзор сверху, резюмируя данную проблему и вашу стратегию. Используйте разговорный тон по мере того, как вы постепенно освещаете каждую мысль и каждый шаг. Используйте «мы» и «наш»: «Мы сортируем вомбатов по их биологическим категориям, как это определено доктором Адель Мерсье». & «Мы выбрали ArrayList вместо LinkedList, поскольку наша коллекция заморожена, а не изменена».
@Peter Мне еще предстоит увидеть практический пример самодокументирующегося кода.
@RichardU Но я уверен, что вы видели практические примеры, когда документация была менее полезной, чем отсутствие документации. ;)
@Питер Туше. Хорошим примером является мой недавний кошмар наяву. Четыре программиста-любителя, каждый из которых, как я полагаю, заглянул в книгу по программированию или, по крайней мере, прочитал обложку, создали это чудовище, которое было проклятием моего существования в течение последних нескольких месяцев.

Большинство ответов рассматривали ваш пост с точки зрения того, был ли ваш код читабельным или нет, или настолько хорош, как вы говорите. Но такая ситуация может и происходит во всех сферах жизни. Я устроился на Лас-Вегас-Стрип продавцом и торговцем номерами 21. Моя техника и скорость были так далеко впереди остального их персонала, что люди, которым было поручено наблюдать за мной, не могли поспевать за мной. Другими словами, они не могли следовать моим решениям. Поскольку большие суммы денег переводились в течение нескольких минут, они часто чувствовали себя сбитыми с толку и сообщали обо мне своему начальнику, утверждая, что я совершил ошибку. Я всегда оправдывал свои действия перед этим человеком, но недоверие ко мне углублялось.

Мое эго и я подозреваю, что ваше эго не заметили предупреждающих знаков, и я действительно упивался своим превосходством, так сказать, изливая его. Меня уволили, и я потерял очень хорошую оплачиваемую должность.

Урок прост, вы должны спуститься на уровень других. Если они раздают только 15 раздач в час, а вы раздаете 100, вы не вызываете похвалы. Вы вызываете ревность и даже ненависть. Если ваша гордость не может этого сделать, вы должны найти какой-то другой способ зарабатывать на жизнь, потому что все места по сути одинаковы. Люди есть люди, их не изменить. В конце концов я занялся другими направлениями работы, где я тоже был посредственным и поэтому ничем не выделялся. Надеюсь, вы сможете решить это в свою пользу.

Отличный совет. Я сам научился этому на собственном горьком опыте. Одно маленькое предостережение. Вам не всегда нужно приукрашивать вещи, но вы должны быть в хорошей форме.
Хорошая посадка-мне нравится. Мне нужно было следовать правилам. Я чувствовал, что правила были введены для того, чтобы они могли нанимать посредственных людей для наблюдения за другими посредственными людьми. Как будто клавиатура qwerty изначально была реализована, чтобы люди не печатали слишком быстро для машины.
Ваш опыт очень интересен. Вы не упомянули, как вы выступили с точки зрения версии для дома. Вы зарабатывали больше или меньше среднего? Казино — это бизнес, и на любое решение очень сильно повлияли бы показатели дохода.
@bobbym, но правила были установлены для медикора, чтобы смотреть медикор. Нанимать лучших дорого, а лучше, чем лучше, супермудрее.
@joojaa, правда. Но когда в такое место по ошибке попадает человек лучше среднего, они должны воспитывать его, а не увольнять. @ CyberFonic, не было сокращения дома. Я работал за минимальную заработную плату агентом казино. Дилеры в 21 должны вести игру, используя фиксированный набор правил.
@bobbym возможно, но, говоря прагматически, этот навык не обязательно лучше с точки зрения бизнеса. Мы часто путаем техническое изящество с лучшим, но преобразование этого изящества в ощутимую выгоду для бизнеса не обязательно велико. Так что с точки зрения бизнеса вы не обязательно лучше.
@bobbym минимальная зарплата или хорошо оплачиваемая работа? Я чувствую, что они редко равны. В любом случае, да, это правила блэкджека, но точка зрения Cyberfonic остается в силе. Если в среднем за час из-за вашей скорости вы теряете больше денег, чем их «посредственные сотрудники» (или получаете меньше. Казино, как правило, не теряют деньги часто, хотя для руководства отсутствие доходов потенциально рассматривается как потерянные деньги), тогда все ваша превосходная техника ничего не значит. Если бы ваша превосходная техника позволила вам заработать БОЛЬШЕ денег с хорошей маржой, я бы удивился, если бы вас уволили.
@Patrice: я тоже был удивлен. Конечно, больше работы приносит им больше прибыли, это гарантирует математическое ожидание. Если бы руководство могло что-то понять из этого, то они не были бы посредственными. Да, минимальная заработная плата есть и была низкой, но чаевые, которые мы давали, — нет.

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

Если все это правда, то иначе и быть не могло.

На мой взгляд, проблема структурная, а не личная, и поэтому вина лежит на ситуации и процессе, а не на человеке:

  • Организация наняла одного человека с совершенно другим набором навыков, чем у всех остальных, и на продвинутом уровне этих навыков для выполнения критически важной функции. Это гарантирует, что, если вы будете хорошо работать , вы будете единственным, кто понимает код, критически важный для миссии организации. (Совершенно неразумно ожидать, что ресурс старшего уровня создаст код, который сразу станет понятным для людей, не знающих используемый язык.)
  • Организация не подвергала вас регулярному процессу проверки кода. Если бы они это сделали, ваш код был бы отклонен до тех пор, пока вы не привели бы его в соответствие с их стандартами удобочитаемости. Поскольку вы являетесь единственным участником кода со своим собственным стилем и использованием другого технического стека, практически гарантировано, что со временем код будет становиться все менее и менее понятным для других. Единственный способ предотвратить это — постоянно просить других о проверке кода вне процесса, возможно, вызывая обвинения в пустой трате чужого времени. Таким образом, отсутствие процесса проверки кода обрекает вас на провал.

У меня есть подобный опыт в моем прошлом. Однажды меня наняли, чтобы заполнить пробел в навыках. Ни у кого в компании не было навыков, которые им внезапно понадобились. Я сделал свою работу хорошо, и через несколько месяцев начался конфликт. Я был единственным, кто мог работать с некоторыми компонентами приложения. Я стал узким местом, поскольку накопилась работа, которую мог сделать только я. Однажды я был отстранен, так как компания решила заменить все, что я создал, совершенно новым кодом, сделав по-своему. В то время моя гордость была задета, но, оглядываясь назад, я понимаю, что это было правильное решение для компании. Через некоторое время мне пора было двигаться дальше, что я и сделал.

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

Убедитесь, что на вашей следующей работе другие члены вашей команды применяют в основном те же навыки, что и вы, и особенно, что у них есть процесс проверки кода. Когда они просят вас изменить код определенным образом, сделайте это. Не считайте код доставленным до тех пор, пока он не пройдет проверку кода и ваши коллеги не скажут руководству (если спросят), что код хорош. Тогда нет проблем. Совершенно нормально задавать подобные вопросы на техническом собеседовании; Я делал так много раз. Надеюсь, этот другой разработчик, который изучал ваш код, даст вам хорошую ссылку.

В качестве примечания: если вы хотя бы частично несете ответственность за то, что вы работаете в одиночку, без участия других членов команды, то вы также заслуживаете частичной ответственности за результат. (Вы настаивали на использовании TypeScript / Node, когда другие хотели использовать что-то другое? Использовали ли вы новейшую, самую крутую библиотеку или технику, хотя что-то более простое подошло бы? Я тоже был виновен в этом один или два раза. ) Если это так, обязательно извлеките урок из этого результата. Но если нет, переносите этот опыт на следующую позицию с высоко поднятой головой.

Какой ответ! Это полностью совпадает с реальностью, отлично!

Возможно, вы просто не так хороши, как думаете, но ради вежливости я буду считать, что вы знаете, как написать правильный объем сложного кода, чтобы уменьшить сложность и временные требования ко всей кодовой базе на порядок величины. Тот факт, что это вообще возможно, многих идиотов удивляет. Они находят это недоверчивым предложением, и единственный способ убедить их — это показать им.

Но для этого нужны ловкость, мужество и самообладание. Вы должны сосредоточиться на трех вещах раньше всех остальных: доказать, что вы не представляете угрозы, заставить идиотов выглядеть умными и никогда не позволять ни одному идиоту понять, что вы знаете, что он идиот. Если вы не можете заставить себя сделать эти три вещи, вы потерпите неудачу, и это будет ваша вина. Прагматизм обязателен, и здесь нет места гордыне.

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

Это правильно? Разве я не должен получить полную оценку своей работы? Должен ли я действительно танцевать вокруг чувств каждого? Не имеющий отношения. Это реальность. Если я не приспосабливаюсь к этому, то я идиот.

Код, который могут понять и поддерживать пять человек, лучше кода, который может поддерживать только один. (При условии, что он соответствует требованиям.)
Даниил, похоже, у тебя два аккаунта. Вы можете использовать ссылку «связаться с нами» в нижней части страницы, чтобы попросить их объединиться, чтобы вся активность была в одной учетной записи.

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

Если вы хотя бы примерно так хороши, как говорите, значит, вы не соответствуете своей работе. Похоже, вы должны изо всех сил стараться работать в месте, где вы можете учиться у своих коллег, а ваши коллеги могут понять ваш код.

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

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

Проблемы, с которыми сталкивается команда с очень разным уровнем навыков, почти полностью межличностные и эмоциональные, а не технические.

Чтобы решить вопрос конкретно,

Как я могу избежать этого в будущем?

  • Найдите местное отделение Toastmasters, активно участвуйте и зарабатывайте достижения. Мы надеемся, что то, что кажется таким очевидным, как обратная связь, станет одним из ваших самых ценных навыков.

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

  • Команда – это не один человек. Ваша команда будет расти и улучшаться вместе. Вы должны помочь. Это не команда, если каждый участник представляет собой ячейку, идущую в разных направлениях (например, вы выше, а самый новый участник застаивается). Двухчасовые встречи — хорошее начало. Я бы добавил к этому N-дневную ротацию пар. Это 1:1 раз, когда вы дарите своим товарищам по команде , И они дарят вам. В вашем случае склоняйтесь к роли штурмана, а за рулем пусть ваш напарник. Старайтесь не писать код, как бы странно это ни звучало.

  • Станьте волонтером на местном Meetup и Hack-athons. Это может заставить вас переработать свой код, потому что цель состоит в том, чтобы сотрудничать, а не строить отказоустойчивую энергосистему, верно?

  • В каждом из этих упражнений попробуйте эту концепцию: лидерство через служение. Как вы можете выполнить задачу или выполнить что-то, чтобы помочь удовлетворить потребности другого члена команды?

  • Как уже упоминалось, вносите свой вклад в проекты с открытым исходным кодом, чтобы получить больше информации о вашем коде. Они могут подтвердить, что вы гениальны, но также они могут подкрепить предложения, которые вы слышите от своего нынешнего начальника. В лучшем случае какой-нибудь обзор натолкнет вас на новую идею.

  • Найдите инженера, который лучше вас. Это не значит улучшать себя, чтобы быть самым умным парнем в комнате. Есть цитата (мои поиски в гугле разделены между Ольгиви/Фордом/Соркиным), перефразируя ее так: «Вы не сможете узнать больше, если окружите себя плохими талантами».

Я обновил свой ОП.
Как вы думаете, можно ли добиться того же, отправив исправления в какой-нибудь более крупный проект FLOSS?
Тамады больше подходят толпе, чем кто-либо другой. Для людей, которые не стремятся к этому, это не может быть лучшей идеей. Я также не обнаружил, что обратная связь всегда была честной, например, на мой вкус, они справляются с этим слишком дипломатично и в лайковых перчатках.
@Nemo Хотел бы я вспомнить, да! Участие в открытых проектах, которые привлекут больше внимания к обзору, отличная идея, которая поможет мне улучшить мой код.
@RuiFRibeiro Это правда. Также важно научиться фильтровать отзывы. Это не маленький момент. Есть книга «Спасибо за отзыв» Stone & Heen, над которой я работал, чтобы работать над этим. Я рекомендую практиковаться, будь то в безопасной среде, такой как ТМ, или другим способом, пожалуйста, займитесь своей практикой.

TL;DR: Найдите более подходящее рабочее место и честно говорите о навыках, которые вам еще предстоит освоить.

Вы кажетесь мне похожим на стиль разработчика «мастерства программного обеспечения» - заинтересованный в передовом опыте и всегда находящий и следующий хорошим способам делать что-то в коде. Возможно, вы были бы счастливее в среде, где другие разработчики больше заинтересованы в подобных вещах — и таких рабочих мест предостаточно.

Тем не менее, некоторые вещи, которые вы сказали, создают впечатление, что вы иногда думаете, что есть единственный «лучший способ» делать что-то в коде, которому всегда следует следовать. Возможно, я ошибаюсь в этом, но если я прав, то, возможно, вам есть чему поучиться, когда дело доходит до изучения плюсов и минусов альтернативных вариантов и поиска пути, представляющего наилучший баланс для бизнеса. На самом деле, я скажу, что вам обязательно нужно там совершенствоваться — потому что мы все это делаем!

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

Вы говорите, что это «большая» компания. Я не знаю, как во Франции, но часто крупные компании не ценят внутренних навыков разработчиков, особенно если они не ориентированы на технологии. Я связываю это в основном с тем, что менеджеры в таких компаниях часто не имеют технического образования или отошли от разработки, потому что они никогда не были в этом хороши.

Существует также исторический аспект поставщиков, продающих инструменты, которые должны устранить потребность в талантливых разработчиках. Даже если ваша команда не использует ни одну из этих ужасных вещей, есть шанс, что руководству компании внушили антиинтеллектуальное представление о командах разработчиков. На самом деле у меня был менеджер, который сказал мне в лицо, что я был достаточно умен, чтобы создать данное решение, но тогда никто другой не смог бы его поддерживать, поэтому нам нужно было что-то купить (полное программное обеспечение). Поэтому я верю, что это может произойти. .

Возможно, вам придется искать другую компанию. Тот, который ценит высококвалифицированных разработчиков. Однако вам, возможно, придется смириться с тем, что вы не лучший разработчик. Если бы вы были начинающим шеф-поваром, вы, вероятно, были бы недовольны работой в McDonald's. Им не нужны повара. Им нужны люди, которые будут следовать рецепту. Вы можете быть шеф-поваром, а эта компания (и другие подобные ей) — McDonald's. Вопрос, который вы должны задать себе, заключается в том, почему вы еще не сделали этого.

Хорошая аналогия с шеф-поваром/МакДом - да, или "слишком много поваров портят бульон"
Ваша гипотеза о французских grands comptes (крупная рыба, особенно банки) абсолютно верна. Я делал там «умный» код только тогда, когда у меня не было выбора. В большинстве случаев делать то, что делали другие, просто чище, было достаточно, чтобы выполнить работу и быть читабельным. И я не ожидал, что мои очень немногочисленные умные программы будут поддерживаться кем-то еще.

Иногда, разговаривая с другими, вы должны «приглушить» его, чтобы не обидеть людей. Особенно, если вы намного выше других, с которыми вы работаете, они, вероятно, обижаются, когда вы говорите о советах и ​​фактах, которые они, вероятно, должны были знать, но не знали.

Я бы посоветовал комментировать вашу работу очень хорошо, чтобы люди, проверяющие ее, могли ее понять. Возможно, вам даже потребуется «обосновать», почему вы выбираете этот метод кодирования вместо другого внутри ваших комментариев. Вы можете быть лучшим программистом, но если вы работаете в команде, вы должны работать в команде.

Если работа в команде означает работу с одной рукой за спиной (под этим я подразумеваю следование их предпочтениям в кодировании), тогда делайте это. По крайней мере, тогда они смогут это прочитать, понять, да и самой команде лучше (даже если это означает, что вы кричите внутри).

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

Как я могу избежать этого в будущем?

Не работайте ни с кем, если вы не уверены, что их стандарты кодирования соответствуют вашим. Это означает отказ от любой работы, если не применимо ни одно из следующих условий:

  • Они задают вам вопросы по программированию во время собеседования
  • У них есть упражнения по программированию
  • Они просят образец кода и не возражают.
  • Вы можете увидеть часть кода, который они создали

Как мне избежать этого в настоящем?

Это было покрыто другими ответами.

Если вы настолько лучше, поднимитесь на их уровень и постепенно учите их быть лучшими программистами. В первый раз, когда мне пришлось управлять стажером, я почти уничтожил весь написанный им код. Я был буквально в ярости, когда увидел, что было совершено (к счастью, у меня не было свидетелей :P) .

Вам нужно поощрять равноправное программирование, проверку кода. Сядьте с другим программистом и попробуйте вместе написать код в течение 2 или 3 часов. Отбросьте концепции, которые может быть слишком сложно объяснить (например, новые расширенные функции Java 8), и объясните те, которые проще (наследование).

Да дело в том, что я предложил все это. Ответ был: «У нас нет времени учиться».
тогда их культура и ваша не совпадают. В других местах сказать: «У меня нет времени учиться» — хороший способ быть уволенным.
Согласен :) Я уеду в следующую пятницу.

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

Обычно я бы не стал давать этот совет, но эта проблема, кажется, преследует вас, куда бы вы ни пошли, так что перестаньте бороться с ней, пока не найдете работу, где это не проблема. Вы можете подумать об участии в проекте, где есть небольшое количество других разработчиков, которым вы могли бы помочь, чтобы не было похоже, что только вы программируете так «ненормально».

Жаль, что другие не ценят вашу работу и не хотят учиться на ней, если это так. Хватит биться головой о стену. Кто знает, может возникнуть какой-то проект/задача, где вы единственная надежда заставить ее работать. Никто не будет заботиться о том, насколько сложен ваш код в долгосрочной перспективе, если вы просто заставите его работать, когда никто другой не сможет.

Нас было 3 разработчика в команде.
Каждый день я объясняю им некоторые советы по программированию, и им это очень нравится. Дело в том, что, когда они были счастливы слушать меня, в их сознании засел некий комплекс неполноценности. Это было началом реакции моего менеджера.
@Mik378 Каждый день слишком, слишком часто. Выберите простое изменение, которое принесет большую отдачу. Продемонстрируйте разницу между кодом, написанным обычным способом команды, и вашим предложением. Пусть это впитается на некоторое время, прежде чем пробовать что-то еще.
"и им это в значительной степени понравилось" - вы в этом уверены? может быть, они просто вежливы. Как человек, которого заставляют чувствовать себя неполноценным, «в значительной степени наслаждается этим». Ваше утверждение не соответствует.
@ Mik378 Mik378, если вы ничего не поняли из этого вопроса, вам следует поверить комментарию Брэда Томаса - вероятно, это ключ к вашей ситуации.

Мы не можем зависеть от него в долгосрочной перспективе

Это главная проблема. Они не хотят зависеть от вас, но вас наняли, потому что они на самом деле зависят от вас.

Вы можете либо успокоить управление с помощью:

  • Вы в любом случае не думаете идти куда-то еще, чтобы они могли рассчитывать на вас в долгосрочной перспективе.

Я думаю, что у меня есть проблемы, которые заставляют использовать мои навыки, поэтому я думаю, что наконец-то нашел рабочее место, которым я могу наслаждаться в течение длительного времени.

  • Вы готовы обучать других членов команды, чтобы приносить дополнительную пользу команде.

Я заметил, что чужой код на самом деле не соответствует передовым методам разработки программного обеспечения, это не проблема, я могу вообще прекратить использовать эти методы, однако было бы полезно, если бы все начали использовать эти методы постепенно, чтобы улучшить производительность команды. Я могу помочь с этим.

  • Вам было предложено реализовать функции XY, поскольку функции, выпущенные вовремя, требовали вашего мастерства, все можно было бы сделать по-разному, но за гораздо больше времени и с риском дополнительных ошибок.

Могу ли я получить дополнительное время, чтобы закончить следующие функции? Я действительно усердно работал, чтобы сделать все правильно, я добился этого, но я боюсь, что не все могут это понять. Вместо этого я хочу потратить некоторое время на то, чтобы сделать вещи понятными для других.

Будьте честны, если какое-то утверждение не относится (я не сейчас над тем, чем вы работали), не врите, никогда.

Если они собираются вас уволить, то они на самом деле не зависят от вас по-настоящему. В любом случае, как минимум 2 человека в команде понимают вашу работу: вы и ваш коллега. И есть вероятность, что больше людей смогут понять это в будущем. По сути, вы не являетесь узким местом в своей команде, однако они опасаются, что вы можете стать им позже. В любом случае, они должны потратить некоторое время на обучение.

Прочтите «Вагон», «Блэкберд» и «Сааб» . Это должно резонировать с вами.

У меня были похожие проблемы в прошлом; Я узнал кое-что о том, как копать, но мы оба использовали швабру и ведро, чтобы попытаться убрать выход из пожарного шланга.

Я не предлагаю здесь, чтобы вы заслужили диагноз психического здоровья DSM-V, но я предлагаю вам, возможно, посоветовать найти хорошего консультанта и поработать над безопасным поведением и социальными навыками. Вы также можете прочитать Теория разума пришельцев .