Является ли создание нового программного обеспечения основной частью большинства задач программирования? [закрыто]

63

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

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

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

Я ошибаюсь? Я точно описываю большинство задач программирования или большинство программистов считают, что они часто создают новые вещи?

Jer
источник
11
@JamieTaylor В переводе на ваши метафорические термины вопрос таков: типично ли всегда исправлять чужую модель Lego и редко создавать новую?
Калеб
22
@ Джо, ха! Значит, вы парень, производящий все эти! * # @ * &!% Устаревшие системы, которые мы должны поддерживать вечно ?! ;-P
Петер Тёрёк
14
@ Джо, да, конечно, большое спасибо. Возможно, если бы вы могли написать чуть больше юнит-тестов, я был бы полностью доволен :-)
Péter Török
8
@ Джо, это напоминает старую поговорку, которую я не нашел особенно подходящей - то есть до сих пор: «всегда кодируй, как если бы следующий парень, взявший твой код, был опасным психопатом, который знал, где ты живешь»; -)
Петер Тёрёк
11
@JonMcdonald Это не должно быть удручающим - никакая работа - это не все, а поддержка существующей кодовой базы, возможно, самый быстрый способ получить опыт и улучшить свои навыки инженера. Потратив время на обслуживание, вы поймете и избежите всех типичных ошибок, которые в первую очередь приводят к неуправляемому коду, а также оцените вещи, которые в противном случае вас не интересуют, такие как статический анализ кода и автоматическое создание модульных тестов.
Бен Коттрелл

Ответы:

66

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

Скотт К Уилсон
источник
13
Это, вероятно, верно, но обслуживание все еще действительно важно, и иногда может быть интеллектуально сложным :)
joshin4colours
3
Нет ничего плохого в обслуживании. Но люди находят это менее гламурным, поэтому описания работы, как правило, преуменьшают его.
Скотт С. Уилсон
Под техническим обслуживанием вы подразумеваете, что программное обеспечение будет работать в соответствии с постоянно меняющимися спецификациями. Техническое обслуживание как концепция применимо только к оборудованию и другим вещам, которые могут случайно сломаться из-за физических факторов. Программное обеспечение не поддерживается, оно переработано и переработано.
Рудольф Олах
3
@omouse - иногда да, но иногда это просто исправление явных ошибок в реализации, чтобы соответствовать первоначальной спецификации. Но вы правы - различные виды деятельности подпадают под рубрику «техническое обслуживание».
Скотт С. Уилсон
@omouse, редизайн и рефакторинг также имеют значения и не охватывают вещи, которые мы обычно называем «обслуживанием». Если какое-то программное обеспечение использует устаревшую функцию или внешний API-интерфейс изменяется, то вы не будете ни переделывать, ни проводить рефакторинг.
cbrandolino
59

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

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

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

Michael Borgwardt
источник
15
+1 за то, что «никто, кто постоянно работал над небольшими проектами с нуля, не может претендовать на компетентность»
mattnz
1
Что такое «маленький проект с нуля»?
Печенье из рисовой муки
@RiceFlourCookies: « Гринфилд» - это термин, обозначающий совершенно новую работу. В этом случае проект начался с нуля.
Стивен Эверс
@RiceFlourCookies, и хотя маленький размер является относительным, проекты, которые могут быть выполнены одним человеком, можно разумно считать небольшими.
Скотт С. Уилсон
23

Устаревшие системы являются успешными. Они пережили первоначальный процесс разработки, когда 50% проектов терпят неудачу (даже после того, как успех был переопределен!). Они пережили меняющуюся деловую среду. Они, вероятно, пережили около десяти предложений молодых наивных программистов переписать все это на Java или что-то еще модное в то время. Им повезло, что любой отдел, компания или агентство, которое обслуживало программное обеспечение, пережили различные сокращения бюджета, реорганизации, слияния и т. Д.

Вероятно, менее 5% написанного программного обеспечения будет работать десять лет спустя.

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

Джеймс Андерсон
источник
8
... или они выжили, потому что был кто-то с достаточным влиянием на принятие решений и скрытым интересом к тому, чтобы сохранить наследие мамонта в течение 10 или более лет, например, обеспечить себе работу, пенсию или просто быть слишком некомпетентным, а его навыки слишком устаревшими найти новую работу
Марек
@marek это действительно может быть и то и другое.
Николас
8
Тот факт, что что-то выживает, не означает, что это оптимально или даже хорошо. Это только означает, что это «достаточно хорошо», что никто еще не избавил его от страданий. Основной избирательной силой в природе является конкуренция; когда есть небольшая конкуренция, вы можете получить некоторые довольно крутые организмы. Конкуренция работает и в программном обеспечении, но внутренние системы обычно не имеют большой конкуренции. В результате внутренние системы часто завинчиваются до макс.
Калеб
@Caleb - Как правило, системы, в которых разработчики выслушивали пользователей и блокировали требования, сохраняются. Неважно, как плохо написано! Системы, в которых разработчики пытаются соответствовать последнему шаблону проектирования, внедряют новейшие причуды и зацикливаются на своих отступах, не попадают в первый выпуск. Рабочий код всегда превосходит красивый код, соответствующий модному слову.
Джеймс Андерсон
14

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

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

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

Калеб
источник
7
«чужие неудачные попытки» - унаследованные системы - это дарвиновские истории успеха, неудачные проекты не поддерживаются!
Джеймс Андерсон
2
@JamesAnderson Поймите, но технический успех - не единственная избирательная сила в экологии программного обеспечения. Кто не видел наполовину законченную собаку проекта, который важен для менеджеров, но считается слишком далеко, чтобы начать все сначала?
Калеб
6

Это зависит от того, какую работу вы ищете.

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

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

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

Недостатком является то, что вы являетесь частью стоимости, а не частью продукта. Таким образом, у меня были консервированные проекты, потому что «мы не занимаемся программным обеспечением» / «программное обеспечение не является основным бизнесом» = удивительно, как компании думают, что они могут продать станок стоимостью 100 тыс. Долл. Без программного обеспечения для его эксплуатации!

Martin Beckett
источник
Меня также поражает то, что компании считают, что им не нужно индивидуальное решение их нестандартной проблемы, и что миллион строк по 278 столбцов в каждой можно легко и быстро манипулировать в Excel, а не в БД.
Спенсер Рэтбун
@SpencerRathbun Что меня больше всего удивляет, так это то, что, когда вы даете им оценку для создания пользовательского программного обеспечения, они сразу начинают задавать вам вопросы и спрашивать: «Разве их бесплатное программное обеспечение с открытым исходным кодом не может предоставить нам пользовательскую функцию X бесплатно?»
maple_shaft
7
@maple_shaft что еще более интересно то , когда они говорят , что «мы можем купить X за $ 10K и это решение общего назначения будет полностью соответствовать нашей пользовательской проблемы с не установить! КСТАТИ вы будете нести ответственность за получение его и работает , и все проблемы / ошибки в купленном нами программном обеспечении - ваша вина ".
Спенсер Рэтбун
3
@SpencerRathbun Вы выиграли, это худшая ситуация для вас.
maple_shaft
5

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

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

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

Я проработал в ИТ почти 22 года, а последние 15 лет - разработчиком программного обеспечения, и за все это время я создал всего около 5 новых продуктов, причем большую часть времени я либо обслуживал эти продукты в течение длительного времени, либо обслуживал кого-то другого. продукт. Каждый из них дал мне проблемы и проблемы, которые нужно решить, и каждый рассматривался не просто как большой проект, частью которого я являюсь, но также как ОГРОМНАЯ серия микропроектов, которые я должен завершить.

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

S.Robins
источник
4

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

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

В бета-версии Workplace есть вопрос о том, как работает система персональных проектов Google на 20% .

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

Имея 20% проектов, я полагаю, что разработчик Google не будет против того, чтобы улучшать проекты Google, так как он или она все еще может получить удовольствие от того, чтобы быть там в начале чего-то нового.

Джим в Техасе
источник
2

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

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

Рудольф Олах
источник
2

Я бы сказал, что это зависит от компании, в которой вы работаете.

Моей первой работой была фирма, занимающаяся бухгалтерским программным обеспечением, основным продуктом которой была ERP-система, конкурирующая примерно на том же уровне, что и Great Plains или Peachtree (как вы переходили на нее из QuickBooks, или в сторону, когда вы устали от запутанной схемы GP или чего-то еще). вы думали, что с PT что-то не так, затем вы вообще перешли из этого уровня в пакет типа SAP). Это было техническое обслуживание на 99,99%, определяемое как исправление ошибок и добавление «мелких вещей», без существенного изменения работы программного обеспечения или его возможностей. Я покинул компанию, когда генеральный директор хотел переписать систему на первой странице, что было бы здорово, если бы он не настаивал на нескольких конструктивных особенностях, которые являются явными анти-шаблонами, таких как внутренняя платформа (допускающая высокую степень настройки). программы, в основном давая клиенту тупой VS Designer,

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

Моя текущая работа вернулась к внутренней разработке для охранной компании, которая использует видеомониторинг и звуковую обратную связь, чтобы обеспечить проверку сигнала тревоги и другие услуги «виртуальной охраны». Эта область быстро растет и все еще развивается; новое оборудование все время выходит на рынок, регистрируются новые клиенты, которые хотят, чтобы мы делали что-то новое, а существующие продукты больше не соответствуют требованиям UL и правительственных нормативов. 99% этой работы - «интеграция»; написание нового программного обеспечения, которого никогда не было раньше, чтобы заставить один новый, но уже существующий элемент оборудования или программное обеспечение работать с другим, возможно, более старым, ранее существовавшим элементом оборудования или программного обеспечения, чтобы мы могли делать что-то новое с обоими.

оборота KeithS
источник
1

Я бы сказал, что это очень сильно зависит от характера вашей роли.

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

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

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

Видор
источник
1
  1. Зависит от того, насколько опасна ваша должность: ;-)

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

    Если вы работаете в старой компании, которая имеет стабильную позицию на рынке, более вероятно, что вы будете писать код в режиме обслуживания ;-).

  2. Создание нового программного обеспечения всегда очень заманчиво . Правда это трудно сделать правильно . Выполнение поддерживаемого кода не является тривиальной задачей.

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

Не многие люди делают это правильно, поэтому мы должны поддерживать их код и полировать его до надлежащего состояния. ;-)

Хорошей новостью является то, что если вы достаточно долго в компании, вы можете повлиять на то, как пишется новый код :-)

digital_inifinity
источник
1

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

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

Брайан Оукли
источник
1

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

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

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

dodgy_coder
источник
0

Я бы сказал, что это зависит от многих факторов. Где вы работаете, какие продукты вы делаете, как организована ваша команда и т. Д.

Я бы сказал, что за четыре года работы в моей компании 70-80% моего времени уходит на создание чего-то нового. Вероятно, 50-60% этого расходуется на большие проекты, представляющие собой совершенно новый код, а остальное время тратится на усовершенствования текущей функциональности.

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

кулачок
источник
0

Я почти три года работал единственным разработчиком в компании, которая использовала QuickBooks и Excel, и ничего больше, когда я начинал. Теперь у нас есть приложение Windows Forms , установка SharePoint , SQL Server + Reports, надстройка Excel и надстройка Outlook.

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

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

Aaron Anodide
источник
Режим обслуживания произошел очень давно ... Вам сейчас нужны инструменты, чтобы помочь вам.
я рад, что у меня нет чувств, потому что они могут пострадать, имея единственный ответ в этой теме, чтобы иметь отрицательные моменты :(
Аарон Анодид
Ну, вы не отвечаете на заданный вопрос.
0

В некоторых крупных организациях, таких как Компания, в которой я работаю, существует политика вывода из эксплуатации программного обеспечения через несколько лет, возможно, из-за того, что язык разработки, на котором оно было написано, больше не используется (Delphi кто-нибудь?) Или платформа заменяется (Windows XP) или нормативные требования требуют этого. Например, двухуровневые программы, напрямую взаимодействующие с базой данных, в настоящее время выводятся из эксплуатации в пользу трехуровневых, которые используют Kerberized-соединения для большей безопасности.

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

Ожидайте 5-7-летний цикл замены для этого типа вещей. Например, к 2020 году я ожидаю, что программное обеспечение WPF (клиент) / Java (сервер), которое я сейчас пишу, будет устаревшей технологией и будет заменено чем-то более новым.

Дэвид Болтон
источник