Это не шутка, я не мог вынести, чтобы это случилось в четвертый раз, это влияет на меня мысленно.
Эта линия важна, потому что она показывает, что вы чувствуете, что пришло время измениться. Она показывает, что вы осознаете это как шаблон, и хотели бы, чтобы шаблон остановился. Это желание, вероятно, самая важная часть решения. Устранение подобных ситуаций часто включает в себя изменение способа мышления. Кто-то не может сделать это за вас, поэтому ваше желание изменить будет единственной вещью, которая заставит это изменение произойти.
Для некоторой подоплеки, я уже был в похожих ситуациях “слишком хорош в кодировке для моей работы” раньше, хотя никогда в той степени, которую вы описываете. Я мог бы вылечить рак с помощью шаблонного метапрограммирования на С++, но многие из тех, с кем я работаю, едва знакомы с основами Объектно-ориентированного дизайна. Я написал код, который злоупотреблял SFINAE и столкнулся с точной формулировкой спецификаций C++, когда многие проекты, над которыми я работал, все еще использовали старые и багги-версии gcc. Мой подход заключался в том, чтобы просто показать им, насколько удивительны эти инструменты, и все проблемы, которые они могли решить. Мне нравилось объяснять людям маленькие советы по программированию, и им это очень нравилось.
Звучит знакомо?
“Да, но надо иметь хороший уровень, чтобы понять [код Мика], потому что компоненты разумно развязаны”.
Рассмотрим это утверждение с точки зрения риска. Ваш босс должен продолжать в том же духе, несмотря ни на что. Если вы уходите в погоню за отличной работой, ваш босс все равно должен быть уверен, что код будет поддерживаться. То, что ваш коллега только что сказал, что если они должны заменить вас, они необходимо, чтобы найти очень опытного программиста, потому что любой, кто не является настолько хорошим, не сможет его поддерживать. Это риск. Что, если они не могут найти достаточно хорошего разработчика, или не могут позволить себе заплатить им достаточно?
Возможно, вы произвели то, что вы бы назвали “хороший код”, но определение “хороший код” очень сильно зависит от контекста. Что такое “хороший код” в Google, с их передовым мышлением, может быть очень плохим кодом для человека, работающего в FAA, который в основном заботится о надежности, а не о том, чтобы идти в ногу с передовым мышлением. Определение вашего босса “хороший код” включает в себя возможность поддерживать его во всех ситуациях, в том числе и без вас. Если ваши коллеги не комфортно поддерживать свой код, то вы вдруг соответствие компании, потому что вы производите продукт, который они не могут поддерживать, если вы решили пойти в другое место.
С этой точки зрения, можно утверждать, что вы заставляете их принять ваше определение “хорошего кода”. Инстинктивно это может показаться хорошей вещью, но это чревато сложностями, такими как этот способ мышления, основанный на риске, о котором вы, возможно, не думали.
У нас есть фраза “поставить тележку перед лошадью”. Один из многих смыслов, связанных с этой фразой, заключается в том, чтобы ставить содержание, о котором вы заботитесь больше всего (умение использовать свои продвинутые техники), над силами, которые должны его тянуть вперед (понимание этих техник вашим сослуживцем). Вы написали код в этом продвинутом стиле, а затем призвали других разработчиков “догнать” этот стиль. Это может быть эффективно, но если с вами что-нибудь случится до того, как они “догонят”, компания внезапно окажется в опасности, потому что никто не сможет поддерживать код.
Как мне избежать этого в будущем?
Исправить это может быть ужасно трудно, потому что это включает в себя подход к проблеме не таким образом, как вам обычно удобно. Вместо того, чтобы сначала писать код в таком продвинутом стиле, а затем учить своих коллег так думать, нужно перевернуть все вверх дном. Научите своих коллег любить этот стиль кодирования, а затем начните писать код в этом стиле. Он может показаться отсталым, но гораздо более стабильным. С точки зрения босса, риск от того, что команда научится писать код лучше, невелик. Как только они кодируют лучше, стиль, в котором вы хотите развиваться, вдруг становится менее рискованным.
В то же время, вам придется писать код, который, по вашим меркам, “менее хорош”, но это нормально. Ваш код здесь не единственный продукт. Ваш другой продукт помогает научить других разработчиков, и ценность этого может легко превысить ценность написания “идеального кода”.
Конечно, может быть трудно сказать, когда безопасно писать код в том стиле, в котором вы хотите его написать. Если бы это было легко сказать, вы бы наверняка уже догадались! Одна из мощных техник, которую вы можете использовать, - это дать другим попробовать продвинутые стили кодирования, вместо того, чтобы самим попробовать. Одно дело научить кого-то различать наследование и композицию. Совершенно другое дело - научить его настолько хорошо, что он будет выступать за изменение вашей существующей кодовой базы, чтобы быть более понятным, когда он будет ее использовать. Последний случай действительно дает вам понять, что они не только получают концепцию, но по-настоящему принять это.
Один из идеалов для преподавания таких концепций - это ничему не учить. Позвольте ученикам что-то открыть, а затем укажите им направление, в котором открытие может идти. Может быть, один из них обнаружит что-то аккуратное в наследовании, и вы сможете направить их в сторону шаблона дизайна Посетителя, основываясь на том, что они обнаружили. Не просто дайте им Visitor, но дайте им ощущение направления, чтобы они могли выйти и найти Visitor сами.
Это гораздо более сложный подход, и вы, безусловно, захотите найти счастливую середину между этим и вашим текущим подходом, но это может быть очень полезно. Что более важно для вашего ответа, он может обеспечить ценность для компании без риска. Если вы обеспечиваете ценность компании, и не подвергая компанию риску, вы практически never получите увольнение. И в тех немногих случаях, когда вы все еще можете получить увольнение, руководство предоставит причину для этого (например, спад в экономике, или смещение в сторону компании). Если вы сделаете это очень хорошо, вы обнаружите, что управление вместо этого начнет формировать ваш путь, как вы формируете ваши коллеги, и вы найдете любопытную тенденцию для вас, чтобы узнать просто правильный навык просто, когда они нуждаются в этом больше всего.