Дизайн приложения на 5 лет

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

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

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

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

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

Я надеюсь, что вы, ребята, поняли мой дрейф. Ребята, вы тоже чувствовали то же самое? Кстати, я занимаюсь программированием программного обеспечения уже около 7 лет. Если вы действительно думаете об этом, вы действительно думаете, что Facebook останется прежним через 5 лет, наверняка дизайн будет меняться каждый год или около того, чтобы оставаться «причудливым», но ядро ​​​​изменится каждый пара лет. Я абсолютно уверен в этом. Я параноик или что? Пожалуйста, скажите мне, что есть другие программисты, которые идут тем же путем, что и я. Кто угодно?


person xeshu    schedule 09.08.2010    source источник
comment
Внутренности вашего приложения будут часто меняться. Будут обнаружены ошибки, которые могут потребовать нетривиальных изменений. Код будет переработан для повышения эффективности. Могут быть добавлены новые функции, может быть добавлен API и т. д. На примере вашего Facebook... Я смотрю на этот сайт, когда я впервые зарегистрировался в 2006 году, и я смотрю на него сейчас, и он радикально отличается. Они добавили функции вызовов (чат, лайки/дизлайки, фан-страницы, поиск друзей, торговая площадка и т. д. и т. д.), API для разработчиков, и я уверен, что внутри многое изменилось в соответствии с новыми функциями.   -  person ravibhagw    schedule 09.08.2010
comment
это точно моя точка зрения! большинство приложений, если не все, радикально меняются со временем. Это в основном связано с меняющимися требованиями клиентов в сочетании с быстрыми технологическими изменениями. Теперь вопрос не в том, будет работать приложение или нет, а скорее в том, «подойдет ли оно под текущую технологическую модель».   -  person xeshu    schedule 10.08.2010


Ответы (9)


«Самое большое препятствие на пути к отличному плану — это мечта об идеальном плане».

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

Однако представление о том, что вся система будет каждые 3-5 лет заменяться какой-то более новой технологией, также является заблуждением. На каждого клиента, который хочет новейшую, новейшую, самую привлекательную систему, приходится 5 клиентов, которые боятся расстаться (или не могут позволить себе заменить) свою устаревшую систему COM/VB/MS-Access или любую другую систему, представляющую собой болото спагетти-логики. построены бессистемно без учета удобства обслуживания, гибкости или расширяемости. Вы не хотите быть тем, кто строит эту систему; если да, то вы оказываете своему клиенту/работодателю медвежью услугу.

person mikemanne    schedule 09.08.2010
comment
Я согласен с вами всем сердцем на 100%. Однако мой опыт работы с устаревшими системами, на которых работает клиент, не обращая внимания на ремонтопригодность и т. д., заключается в том, что в конце концов им нужна новая система. Хотя это и правда, одна из основных причин заключается в том, что поддерживать код было в значительной степени кошмаром, но это НЕ ТОЛЬКО причина: с тех пор, как прошло так много времени, технологии изменились и бла-бла, в то время как они могут быть не в состоянии позволить себе последнюю версию. сексуальное приложение, они будут готовы согласиться на продукт среднего класса. - person xeshu; 10.08.2010
comment
Дело в том, что я проектирую и разрабатываю приложения максимально гибкими, расширяемыми и удобными в сопровождении, насколько это возможно и если позволяет время. Тем не менее, я знаю, что тот же старый системный клиент, для которого я сейчас разрабатываю новую систему, независимо от того, является ли это беспорядочным кодом или самым гибким приложением из когда-либо созданных, потребует изменений. Почему? Потому что он теперь часть 21-го века. Как я уже говорил в других своих комментариях, устаревшие системы того времени просуществовали десятилетия, потому что мир был медленным. Теперь новый фреймворк выкатывается каждые 6 месяцев. Каждые 2 года выходит новая ОС. - person xeshu; 10.08.2010
comment
Я бы хотел, чтобы у клиентов было отношение, если это не сломано, зачем это чинить! Но, к сожалению, клиенты 21 века не такие. Те, у кого есть $$$, захотят измениться СЕЙЧАС. Те, у кого умеренные $$, могут немного подождать. Тем, кто разорен, все равно, является ли приложение гибким или полно бессистемного наполовину состряпанного кода. Дело в том, что установка на то, что приложения будут работать вечно, должна измениться. Лучше всего от двух до четырех лет. - person xeshu; 10.08.2010

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

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

person D'Arcy Rittich    schedule 09.08.2010
comment
+1 за более внимательное отношение к базе данных. Внесение изменений в дизайн БД — отстой, даже с такими инструментами, как миграция. - person jvenema; 09.08.2010
comment
о, да, конечно, это действительно помогает разработчикам, если дизайн (косметическая и бизнес-логика) является гибким, чтобы справляться с изменениями, но на самом деле это не так уж много. У этого есть предел, и по моему опыту (хотя всего 7 с лишним лет) приложения переделываются или обновляются (почти полностью переделываются) каждые 3-4 года. Я не думаю, что ЛЮБОЕ приложение использует более 60% исходного кода с самого начала. - person xeshu; 09.08.2010
comment
В яблочко. Я ненавижу изменения БД, но опять же, я могу сделать ее только немного гибкой, всегда будут какие-то грязные неприятные изменения, которые произойдут в будущем, и в этом случае вы должны решить, должен ли я сделать этот хак и нарушить все правила или начать сделать больше. Ответ основан на самом требовании в основном - person xeshu; 09.08.2010
comment
@xeshu: я работал над многими приложениями, которые использовали 100% исходного кода + 200-300% ДОПОЛНЕНИЙ (но не изменений) через 8 с лишним лет. Кроме того, вы можете использовать дизайн, в котором существует уровень абстракции между фактической базой данных и логикой приложения. В этом случае очень большие изменения могут быть внесены в макет данных без необходимости каких-либо последующих изменений в бизнес-логике/ядре приложения. - person acanaday; 10.08.2010

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

person acanaday    schedule 09.08.2010
comment
Очень верно! Его вниз навыки архитектора. Однако то, что вы описываете, представляет собой очень чистую среду, в которой клиент немного более образован, чем средний клиент. Поскольку теперь они верят в приложение и знают, что оно работает, зачем тогда менять ядро. Я бы хотел, чтобы таких клиентов было больше, но, к сожалению, с моим опытом общения с разными клиентами это не так. - person xeshu; 10.08.2010
comment
Ну нет. Это были две очень разные среды, одна из которых была инженерно-производственной средой, которая была настолько далека от чистоты, насколько это вообще возможно. Я предполагаю, что это зависит от обстоятельств, но обычно я не думаю, что клиент должен ЗНАТЬ, когда вы меняете ядро. То, что они делают, указывает на сломанный дизайн, ИМХО. Они должны просто предоставлять требования и получать взамен новые функциональные возможности. Другой продукт использовался клиентами, которые постоянно развивались и были чрезвычайно требовательны! Хорошо разработанная система значительно упрощает работу с трудными клиентами! - person acanaday; 10.08.2010
comment
Худший клиент — это клиент, который не знает, чего хочет. Софтверные компании, используя свой опыт, стараются дать клиенту, исходя из его первоначальных требований (как вы правильно выразились) и предоставить конечный продукт (с обратной связью клиента и всякой всячиной). Что бы вы сделали в ситуации, в которой клиент после 2-х лет развертывания говорит, что ему не нравится то, как сделано то-то и то-то, (о чем он хоть и не в курсе, но все же является ядром)? Можно ли сказать, что это плохой дизайн программы? или злой клиент? - person xeshu; 11.08.2010
comment
Я голосую за последнее, потому что каким бы хорошим ни был ваш анализ, если клиент не знает, какого черта он хочет, и ему нужна система, которая делает ВСЕ по нажатию кнопки (ленивый клиент), как бы вы отреагировали? к этому другому, чем полное разочарование? Я думаю, что этот клиент был бы ЧИСТЫМ злом. - person xeshu; 11.08.2010
comment
Большая часть технологической индустрии вращается вокруг упрощения работы для ленивых клиентов (т. е. делать что-то одним нажатием кнопки). Если они не запрашивают новое приложение, и вы не можете приспособить дополнительную бизнес-логику, я называю это плохим дизайном. Если они просят переписать ядро, я называю это $$. Если вы вынуждены переписывать ядро ​​вашей системы в условиях необоснованных ограничений по времени, и вы не зарабатываете на этом много денег, я называю это плохой деловой практикой. В любом случае клиент не злой. Вы продали себя в неразумную ситуацию. - person acanaday; 11.08.2010
comment
Это немного и то, и другое. Клиенты не хотят вкладывать $$$, они всегда будут выбирать более простой вариант: сначала подправить код, а не новую сборку, потому что это стоит меньше, но при большей стоимости бессвязного кода (чего они НЕ осознают, пока мы получить от них телефонный звонок). Я бы не согласился с вашей точкой зрения о плохом дизайне для размещения дополнительной бизнес-логики просто потому, что, если бизнес-модели клиента радикально изменятся, как вы можете приспособить это к программному обеспечению? - person xeshu; 12.08.2010
comment
В программном обеспечении объект проекта «А» можно сделать достаточно гибким только для того, чтобы сделать его «А.1»-«А.9», НО ЭТО ВСЕ ЕЩЕ БУДЕТ «А» в основе. Вы не можете превратить «А» в «Б». Но это радикальное основное требование клиента требует превращения «А» в «Б». Как ваше программное обеспечение может приспособиться к этому??? - person xeshu; 12.08.2010
comment
Таким образом, переписывание ядра является единственным вариантом, и я согласен с вами, что ядро ​​должно быть достаточно гибким, чтобы справляться с безумными радикальными изменениями, но иногда клиенты выходят за рамки того момента, когда вы буквально просто хотите вызреть их сердца. Я имею в виду, на самом деле, я уверен, что у некоторых из вас, программистов, было такое же чувство, по крайней мере, в тот или иной момент. - person xeshu; 12.08.2010

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

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

person Kevin    schedule 09.08.2010
comment
Ваш аргумент является действительным и здравым, и я уважаю это. Это зависит от типа проекта, который вы разрабатываете, и от того, кто является клиентом. Конечно, я бы подумал о развертывании проекта на 2-4 года, но это мой максимальный предел. Думаю, клиенты, на которых я работал, полностью потеряли в них веру. - person xeshu; 10.08.2010

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

Некоторые испытанные принципы, которые остаются сильными и по сей день, — это, например, нормализация базы данных, модульность кода и т. д. и т. д.

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

person Tom Gullen    schedule 09.08.2010
comment
Проще говоря, нормализация БД, модуляризация кода, стандарты для бедняков. Как только приложение становится немного сложным, БАМ! первое, что выкидываешь в окно, это стандарты, потому что они стоят стеной перед тобой и конечным продуктом. - person xeshu; 10.08.2010
comment
Теперь вы можете опровергнуть это, сказав, что, нарушив стандарты, я фактически вовлек себя в кошмар обслуживания кода. Истинный! Очень верно. Но если бы я приложил огромные усилия, чтобы попытаться добиться соответствия стандартам, я бы прибегнул к действительному сокращению некоторых основных требований клиента и значительно увеличил время доставки продукта. Но к какой пользе? Через два года мой клиент захочет каких-то хромых радикальных изменений, которые потребуют если не полного обновления, то более чем 50% изменения приложения. - person xeshu; 10.08.2010
comment
Я бы не сказал, что это стандарты для бедняков, но это проверенные и испытанные фундаментальные принципы дизайна, которые выдержали испытание временем. Хорошо спроектированная система должна быть масштабируемой. Иногда вам приходится идти на компромисс, есть много задокументированных примеров того, когда денормализация является вашим лучшим вариантом, но я по-прежнему твердо верю, что если вы правильно спроектируете систему, она будет намного более перспективной, чем любое другое решение. - person Tom Gullen; 10.08.2010
comment
Я слышу вас полностью! Я развернул множество проектов, основанных на стандартных подходах, и они очень хорошо сочетаются друг с другом. До сих пор бегает довольно хорошо. Но я называю таких клиентов образованными клиентами. Стандарты ничего не значат для ленивого клиента, который не знает, чего он хочет, кроме как сделать все одним нажатием кнопки. Хотел бы я сказать «нет», и я знаю, что в программной инженерии у программиста есть право сказать «нет», однако некоторые люди не согласны, утверждая, что клиент все еще платит за это. - person xeshu; 11.08.2010
comment
Поэтому, когда вы не можете сказать «нет» на этот безумный запрос клиента, вы точно знаете, что с годами он рухнет и сгорит, не могли бы вы пойти дальше и закодировать его и вовлечь себя в кошмар обслуживания или вмешаться? вниз (потенциально потеряв клиента)? - person xeshu; 11.08.2010
comment
Клиент платит вам, и он платит за ваши знания и опыт. Если они скажут вам, что я хочу, чтобы это приложение было завершено к концу дня, вы, вероятно, должны сообщить им, что да, они могут получить его к концу дня, но оно не будет написано самым эффективным способом. так что это может привести к осложнениям в будущем. Если вы сообщите им о плюсах и минусах каждого варианта, и они все равно захотят выбрать тот, который вы считаете худшим, это нормально. Когда через 2 месяца они вернутся злыми, просто вспомните свой предыдущий разговор с ними! - person Tom Gullen; 11.08.2010

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

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

person NakedBrunch    schedule 09.08.2010

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

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

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

person MatthewMartin    schedule 09.08.2010
comment
Финансовые приложения, согласен, живут дольше всего среди пула приложений. Но все же я сильно сомневаюсь, что они прослужат больше 6-8 лет. Данные сохраняются, без сомнения. Но появляются другие приложения или радикальные обновления оригинального приложения, которое, по сути, представляет собой переработку. Итак, я хочу сказать, что это не останется прежним, изменения неизбежны. И причина, по которой приложения просуществовали так долго для некоторых из вас, заключается в том, что с начала 90-х до начала 2000-х платформы, фреймворки, технологии кодирования не менялись так часто, как сейчас. - person xeshu; 10.08.2010
comment
Сейчас в быстро меняющемся мире, с нынешним средним набором клиентов 21-го века, я очень сомневаюсь, что приложения прослужат даже 5 лет. - person xeshu; 10.08.2010
comment
Я работал над кодом, в котором использовалась структура данных где-то между 50-ми и 80-ми годами — макет записи был оптимизирован для бумажных карточек. Я знаю людей, которые примерно в 2005 году использовали код финансового анализа, написанный в начале 1980-х. В академических кругах до сих пор используется код на Фортране, потому что нет никого, кто был бы достаточно умен, чтобы переписать его. Даже если приложение переписывается, часто устаревший код встраивается в новый только с изменением синтаксиса. В любом случае, крупные организации могут меняться очень быстро, независимо от темпов инноваций в остальном мире. Зависит от того, где вы находитесь. - person MatthewMartin; 10.08.2010

Я помню цитату Джеймса Ковача, кажется, в одном из подкастов .Net Rocks, где он описал нашу индустрию так:

тот, где единственная константа - это изменение

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

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

person theburningmonk    schedule 09.08.2010

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

person Nobody    schedule 09.08.2010
comment
Точно мои ощущения. Идеального дизайна в идеальном приложении не бывает. И стандарты дизайна и кода заходят так далеко: в основном они вращаются вокруг клиента. Если он собирается стать кошмаром, в мире нет системы, которая бы работала на него. Если он просто хочет быстрого решения, нет смысла проектировать для него ракетный корабль, потому что он этого не оценит и потребует радикальных изменений. Я завидую тем очень немногим счастливчикам, которые встречают почти идеальных клиентов. :) - person xeshu; 10.08.2010