[Architecture] Должны ли архитекторы приложений писать код?


Answers

Ab-так frickin-лютно

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

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

Question

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

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

с другой стороны,

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

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




Архитектура - это высокоуровневая роль, и ее не следует волновать в реализации> подробности

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

* Coding is a detailed oriented, heads-down funtion which is at odds

с управлением рисками, широким взглядом на архитектуру

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

Архитектура - это лидерство. Трудно вести сзади

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




Да, чтобы сохранить их опыт кодирования.




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

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

Как разделяются архитектурные роли, похоже, зависит от размера и характера организации.

Если бы у меня было это по-своему, я бы дал клиенту роль Story Architect, если они пишут хорошие, полезные, подробные истории и прецеденты.




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

Это включает проекты, в которых я был тем архитектором :-)

Теперь это персональный большой красный флаг.

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

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

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

«Архитектура связана с техническим управлением рисками, а не с реализацией» - не так. Речь идет об управлении рисками и их реализации (и о множестве других вещей).

«Архитектура - это лидерство. Трудно вести сзади» - почему кодирование вас позади? Лично я считаю, что лучшее место для вас - это люди, с которыми вы работаете.




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

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

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




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

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

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




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

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

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




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

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

В ответ на комментарий
Я думаю, что в отличие от приложения, решения и архитектора предприятия немного искусственны и во многих случаях не подходят. Роли, такие как архитектор безопасности, архитектор данных и т. Д., Дают гораздо более четкое различие между обязанностями. Вы можете посмотреть здесь для получения более подробной информации http://stevendwright.home.comcast.net/~stevendwright/ArchRoles.htm

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




Несколько раз они должны кодировать. Например, когда команда является только одним человеком.

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




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