Разработка программного обеспечения не для меня? [закрыто]

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

Я начинал в отделе программного обеспечения инжиниринговой компании, где программное обеспечение либо является крошечной частью производимого продукта, либо просто поддерживает процесс его производства. Первым проектом, над которым я работал, была большая программа для одного человека, которая превратилась в огромный программный беспорядок. Мой начальник в то время и бывший «один человек» не были заинтересованы в том, чтобы что-то менять, и мой начальник не позволял мне делать что-то по-другому. Это очень расстраивало.
Как новичок, я пытался принять тот факт, что так обстоят дела, и какое-то время жил с этим. Позже я связался с боссом моего босса (назовем его Том) по поводу ситуации, в которой я оказался, и сказал ему, что она не соответствует ожиданиям относительно того, как я хочу писать программы.

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

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

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

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

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

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

Ответы (3)

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

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

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

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

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

Так что нет, вы не в той профессии, просто в неправильной компании.

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

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

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

Есть хорошие книги о работе с унаследованным программным обеспечением (например, вечнозеленая работа Working Effectively With Legacy Code ); дело в том, что вам не нужно ПРОСИТЬ, чтобы написать хорошее программное обеспечение , как вам не нужно просить протестировать код, который вы пишете. Рефакторинг и улучшение качества существующего кода почти всегда являются частью процесса обслуживания, поскольку написание тестов также является частью предоставления новой функции. Связанные и интересные: Как разработчик; Отсутствие времени на тестирование, крайние сроки и отсутствие слушаний со стороны менеджера .


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

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


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

  • Проект начался как прототип (если не просто доказательство концепции), а затем со временем развивался. Это может быть из-за плохого выбора SE или из-за выбора бизнеса (нет времени переписывать что-то более или менее работающее ).
  • Проект начался как простой инструмент и превратился в нечто слишком большое, чтобы соответствовать исходной архитектуре/дизайну. Обычно это происходит небольшими шагами, когда код постепенно выходит из-под контроля.
  • Исходный код изначально был написан или поддерживается кем-то с менее чем оптимальным набором навыков.
  • Исходный код был хорошо написан, но он устарел, технологии и лучшие практики достаточно развились, чтобы сделать его «устаревшим», но все еще функциональным.
  • Независимо от качества исходного кода, оказываемое бизнес-давление (например, в среде Startup) приводило к увеличению технического долга.

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

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

Что делать? Начните с общения: сначала объясните ситуацию , но не разглагольствуйте о качестве кода, иначе вас не услышат:

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

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

Что вы можете сделать, так это понять, что это ВАШ ОБЯЗАН писать хороший код со всеми ограничениями, установленными вашим руководством (время, бюджет, ресурсы). Это означает, что вы ДОЛЖНЫ:

  • Пишите тесты каждый раз, когда вы что-то меняете.
  • Применяйте базовые методы локального рефакторинга каждый раз, когда добавляете функцию или исправляете ошибку.
  • Когда требуются большие изменения, вы можете распространить рефакторинг на другие модули/пакеты, оставив их настолько маленькими, насколько это необходимо для выполнения непосредственной задачи.
  • Запланируйте, если возможно, какое-то время внутримодульного рефакторинга, когда — после завершения локального рефакторинга — вы увидите возможность очистить один шаг выше.
  • Примените все вышеперечисленное к дополнительным элементам (например, к документации).
  • Повторить.

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

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

Иногда они [руководство/босс] виноваты, но часто это проблема коммуникации , вы можете прочитать Представление и искажение фактов: инженеры Тафте и Мортон Тиокол ​​на Челленджере и оригинальный текст Тафте в Визуальных пояснениях: изображения и количества, доказательства и повествование .

Спасибо за ответ, я знаю, что технический отдел является неотъемлемой частью. И я не чувствую, что бегу от плохого кода, если что — я бегу от ответственных людей, которые не могут позволить инвестировать время в качество кода. Меня расстраивает не код. Это несуществующая воля исправить это.
Я понимаю, но ВЫ (и я, и, наверное, почти все программисты) можете понять, зачем вкладывать деньги в качество кода. Пока программное обеспечение работает , менеджеров (и клиентов) это не волнует (знаете ли вы, например, о процедурах проектирования и соответствующих правилах, принятых производителем автомобиля, которым вы управляете?). для постепенного улучшения качества кода в рамках ваших повседневных обязанностей. В некоторых редких случаях код представляет собой такой беспорядок, что вам может потребоваться переписать его (и это должно быть одобрено руководством), но обычно это невидимый процесс.
Я думаю (но это только мое предположение), что это то, что Том (начальник первого босса) пытался сказать вам: делайте то, что, по вашему мнению, вам нужно сделать, чтобы выполнить свою работу (потому что, ну, он не знает, и это не нужно). Вторая часть его предложения была неудачной, но вы должны читать ее (ИМХО) так: «Если ваш непосредственный начальник жалуется - потому что простая задача заняла больше времени, чем ожидалось из-за рефакторинга, - тогда пришлите его мне, я даже не пытаюсь объяснить ему, что так и должно быть».
При этом я не говорю, что было бы не здорово, если бы генеральный директор пришел к нам и сказал: «Я видел ваш код, и он выглядит великолепно, спасибо, и это бонус, который вы заслуживаете», но правда в том, что это знает только ваш непосредственный технический руководитель. о качестве вашего кода, и о нем всегда судят (БЕЗ ИСКЛЮЧЕНИЙ) вместе с его ценностью для бизнеса.
Я должен не согласиться - я не говорю о «Менеджере». Том и мой босс оба являются парнями-разработчиками программного обеспечения - они должны абсолютно точно знать цену качеству. Но они не хотят ничего менять или используют что-то вроде «да, мы, вероятно, перезапустим полное программное обеспечение через несколько лет». не заставить команду, которую я не веду, двигаться навстречу - потому что не хочу.
Если обязанности вашего босса не являются ТОЛЬКО техническими (в этом случае я согласен, у вас не тот начальник), тогда ему приходится иметь дело как с бизнес-требованиями, так и с техническими аспектами. Это компромисс (и некоторые люди легко забывают о техническом аспекте, даже если у них есть техническое образование). Опять же, дело в том, что вам нужно не ПРОСИТЬ, а делать это, потому что это фундаментальная часть вашей работы. Если вы работаете в команде, где каждый должен уделять больше внимания качеству, используйте доказательства, цифры и решения. Само по себе качество — это не показатель, а инструмент для достижения чего-то еще.
Личный опыт: иногда мне очень нужно было (и хотелось) что-то переписать с нуля (наихудший случай с точки зрения бизнеса). Первое, что меня спрашивали каждый раз, это «почему», а затем сразу же «каковы последствия, если мы этого не сделаем» . Если вы подготовили убедительные аргументы, у вас больше шансов сделать это, если ваши аргументы слабы (или бизнес-причины сильнее) ... тогда вам нужно идти шаг за шагом. Обратите внимание, что может даже случиться так, что они действительно не заботятся о качестве (позор им!), тогда бизнес-цели - единственный инструмент, который у вас есть.
Это просто проблема общения . Даже если для вас это кристально ясно, вам все равно нужно убедить их в том, что необходимые инвестиции того стоят. Со временем вы завоюете доверие, и вам станет легче, но основная проблема остается. Вы когда-нибудь читали, что Тафти писал о катастрофе космического корабля "Челленджер"?
Это хорошо обобщает мой собственный опыт. Я хотел бы подчеркнуть, что вместо «Большой перезаписи» вы могли бы предложить пошаговые улучшения. Меньше риска, легче планировать в несколько шагов, получаешь хоть какие-то улучшения и чувствуешь себя лучше. Кроме того, первое большое переписывание обычно так или иначе терпит неудачу. Я видел это несколько раз.
@StefanKamphausen Я согласен, я упомянул об этом в ответе. Шаг за шагом обычно легче обосновать (даже если это требует больше времени) и гораздо менее рискованно.
Также стоит отметить, что «идеальной компании с идеальной кодовой базой» не существует. Каждое дизайнерское решение в программном обеспечении сопряжено с компромиссами. Тратить свое время на рефакторинг означает, что вы не тратите свое время на добавление какой-то другой ценности. Один шаблон проектирования делает некоторые усовершенствования проще, а другие сложнее. Ваша работа как инженера-программиста состоит не в том, чтобы писать «идеальный» код (вы не можете), а в том, чтобы распознавать компромиссы и делать наилучшие предположения о правильном балансе.
Если вы хотите «исправить» код, вам нужно решить реальную проблему. Есть ли в нем ошибки, которые лишают вас дохода или ограничивают работу вашей службы поддержки? Будут ли будущие усовершенствования или поддержка более дорогими? Вызывает ли это проблемы с производительностью, которые отнимают у вашего бизнеса время? Это проблемы, которые необходимо исправить. Качество кода на самом деле не является проблемой, если только оно не вызывает проблем. Ваш руководитель хочет, чтобы вы решали проблемы.

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

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

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

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