Was macht einen guten Software-Architekten aus? Was sind die charakteristischen Merkmale eines Architekten und die Unterschiede zwischen einem Architekten und einem technischen Manager?

Ein Softwarearchitekt in Microsoft und ähnlichen Unternehmen ist jemand, der sich durch ein umfassendes Denken auszeichnet. Sie verstehen, was zur Lösung eines Problems in einer Vielzahl von Dimensionen erforderlich ist. Sie definieren die erforderlichen Subsysteme, wie sie zusammenpassen sollen und wie das System zuverlässig und leistungsfähig wird. Architekten sind in der Regel Fachleute, die mehrere verschiedene Produkte im Raum entworfen und implementiert haben.

Ein guter Software-Architekt ist:

  • Ein Domain-Experte . Sie wissen genug über die Softwaredomäne (z. B. Datenbankdienste), um zu wissen, welche Komponenten für die Ausführung des Auftrags erforderlich sind. Sie verstehen die Kompromisse zwischen Zuverlässigkeit, Flexibilität, Leistung und einfacher Implementierung. Sie sind mit dem Spektrum der geeigneten Design-Auswahl vertraut und können die Auswahl des für die Systemanforderungen am besten geeigneten Sets leiten.
  • Ein Mentor und Konsensbildner . Oft ist der Zweck eines Systems ebenso wie seine Anforderungen unscharf. Vorschläge für Verhaltensweisen und Komponenten sind nicht vollständig durchdacht. Ein Softwarearchitekt kann diese Probleme beheben und den anderen Ingenieuren beibringen, wie sie in Zukunft vermieden werden können. Sie können Systemeigenschaften und -verhalten auf zugängliche Weise verstehen und erklären. Ein guter Architekt sorgt für Konsens darüber, wie das System und die verschiedenen Teile entworfen und konstruiert werden sollten.
  • Ein effektiver technischer Leiter . Ein Architekt zeichnet sich durch Kommunikation aus und schneidet Botschaften an das Publikum ab, von CEOs bis hin zu Ingenieuren an vorderster Front. Sie können die Systemziele und die Systemarchitektur rechtfertigen und ausgezeichnete mündliche Beschreibungen und schriftliche Dokumentationen erstellen. Sie vereinen die Teams bei ihren Projekten und tragen dazu bei, eine gemeinsame Vision und Konzentration zu entwickeln und die Menschen dazu zu bringen, zusammenzuarbeiten, um etwas Integriertes und Zusammenhaltendes zu schaffen, anstatt ein zusammengewürfeltes Durcheinander.
  • Technisch glaubwürdig . Die Aussagen und Beurteilungen eines Architekten sind in der gesamten Organisation glaubwürdig. Typischerweise hat sich ein Architekt bereits als Ingenieur bewährt und ist als Hersteller von Massivsystemen bekannt. Mangels ausreichender Informationen, um die Vorschläge des Architekten zu rechtfertigen, neigen die Menschen dazu, sich für richtig zu halten.
  • Optimistisch . Ein guter Architekt ist positiv und eine Quelle des Optimismus für das gesamte Unternehmen. Sie sagen nicht, dass der Himmel fällt. Wenn ein System kaputt ist, erklären sie, wie es behoben werden kann. Wenn ein System für ein Problem nicht geeignet ist, schlagen sie ein System vor, das besser geeignet ist. Vor allem erklären sie, wie man Ziele effizient erreicht, und geben den Menschen den Glauben, dass alles in Ordnung ist, egal wie dunkel es aussieht. Eine Konsequenz daraus ist, dass ein Architekt in der Lage sein muss, zu erkennen, wann ein Projekt wirklich unrentabel ist, und Alternativen zu finden.

Zumindest in den Unternehmen, in denen ich gearbeitet habe (Microsoft, Amazon, Google, Oracle), scheint Software Architect eine zunehmend untergeordnete Rolle zu spielen. Stattdessen werden die Aufgaben, die ein Architekt früher gehabt hätte, auf viele leitende Entwickler aufgeteilt.

Wenn Sie sowieso darauf hinarbeiten möchten, Architekt zu sein, finden Sie hier den Weg. Seien Sie zuerst ein exzellenter Ingenieur, dann ein Domain-Experte, und denken Sie daran, Ihre kommunikativen und politischen Fähigkeiten zu verbessern. Dies wird über viele Jahre die Erfahrung und Glaubwürdigkeit aufbauen, ein Architekt zu sein.

Zunächst ist es wichtig, die Softwarearchitektur von einfachen Best Practices zu unterscheiden. Ein guter Softwareentwickler kann hervorragend programmieren, ist exzellent und detailliert in seinem Ansatz und hat einen großen Einblick in das Problem, kann aber dennoch kein guter Architekt sein.

Ein guter Architekt sollte mindestens die folgenden Fähigkeiten haben:

Ein Architekt ist hervorragend darin, Probleme zu lösen . Problemzerlegung ist die Fähigkeit, ein Problem auf praktisch jeder Ebene zu erkennen und in die zur Implementierung erforderlichen Schritte und Teile zu zerlegen. Ein guter Softwarearchitekt kann eine Aussage wie “Unsere Flugsicherungssysteme sind unzureichend und wir brauchen ein besseres Design” treffen und kennt die Fragen, die zu stellen sind, um das Problem in erreichbare Komponenten zu zerlegen und diese Komponentenziele in erreichbare Teilprojekte zu zerlegen , und zerlegen Sie diese Unterprojekte in erreichbare Programmieraufgaben. Ein guter Architekt kann diese Dinge auf jeder Ebene und in jeder Größenordnung tun, von der Vorstellung eines Milliarden-Zeilen-Softwareprojekts bis hin zum Verständnis der bestmöglichen Implementierung eines Algorithmus zur Bewältigung unzuverlässiger Verknüpfungen. Der Maßstab spielt keine Rolle, da der Prozess immer der gleiche ist.

Ein Architekt versteht Schnittstellen . Schnittstellen, ob in Form von Protokollen, Funktionsbibliotheken, Klassenschnittstellen oder Schemata, sind das wichtigste Werkzeug, um die Komplexität von Projekten zu verwalten, wenn es unabhängige Auftragnehmer und Implementierer gibt. Wenn ein Architekt den Prozess der Definition klarer, eindeutiger Schnittstellen kennt, die logisch vollständig sind, kann er vielen Menschen die Möglichkeit geben, Teile von Systemen zu erstellen, die sich problemlos verbinden lassen, um ein größeres Ziel zu erreichen.

Ein Architekt versteht, dass Komplexität der Feind ist , und beherrscht die Programmierwerkzeuge und -paradigmen, die erforderlich sind, um die Komplexität aller Komponenten zu verringern, die Komplexität der Schnittstellen zu verringern und eine minimale oder keine Redundanz der Funktionsimplementierung sicherzustellen. Sie können Algorithmen und Implementierungen, die zu spezifisch oder zu allgemein sind, schnell erkennen und die Entwickler anleiten, Komponenten zu erstellen, die genau die richtige Funktion erfüllen. Die Werkzeuge zur Verwaltung der Komplexität sind häufig das Ausblenden von Daten, die objektorientierte Programmierung, selbstvalidierende Systeme und umfassende Testpläne für Standardschnittstellen. Ein guter Architekt ist jedoch nicht dogmatisch in Bezug auf Tools und Technologien, da er über ein umfassendes akademisches Verständnis der Grundlagen und Gründe verfügt, warum das Verbergen von Daten funktioniert, und warum bestimmte Sprachen gute Entwurfsprinzipien unterstützen und andere nicht.

Ein Architekt ist ein guter Kommunikator, ein guter und produktiver Schriftsteller und Dokumentator und spricht die Programmiersprache sowie die gemeinsame Sprache derjenigen, die am Systemdesign beteiligt sind. Neben einer guten Kommunikation kann ein guter Architekt konkrete Gründe für Programmierpraktiken anstelle von Meinungen angeben und bietet seinem Team Einblicke statt Argumente. Sie befürworten und befragen nachdrücklich die Meinung des Benutzers zur Eignung für die eigene oder die an dem Projekt beteiligten Programmierer.

Ein guter Architekt ist ein guter Anführer und verdient den Respekt aller technischen Mitarbeiter, mit denen er zusammenarbeitet . In der Regel bedeutet dies, dass sie ein hohes Maß an Kompetenz besitzen, in mehreren Sprachen gearbeitet haben und zuvor Architekt waren oder ihre Fähigkeit unter Beweis gestellt haben, Systemdesigns zu erstellen, die angesichts von Veränderungen flexibel geblieben sind.

Viele Definitionen enthalten eine Reihe von Schlagworten, die Methoden wie datengesteuertes Design, agile Programmierung, bestimmte Sprachen, Plattformen und Toolkits hervorheben. Dies sind aktuelle Bezeichnungen für verschiedene Techniken, deren Basis gut verstanden und nicht akzeptiert werden muss, weil sie aktuell sind in Mode. In vielerlei Hinsicht sind die wichtigsten Fähigkeiten eines Architekten Erfahrung, Intelligenz, die Bereitschaft, hart zu arbeiten und eine praktische Rolle zu übernehmen, eine gute Intuition und die Fähigkeit, Probleme mithilfe von Logik zu lösen, damit die Schlagworte der Branche kommen und gehen. Ihre Entwürfe bleiben nützlich und relevant.

Meine obige Definition beinhaltet absichtlich keine Projektmanagement-, Terminplanungs- und Managementfähigkeiten. Die Aufgabe des Architekten ist es, gute Systeme zu erstellen, nicht Teamprobleme oder Budgets zu lösen. In der Tat ist es am besten, wenn diejenigen mit Budgets und Teamproblemen einfach Stakeholder sind, die dabei helfen, eine der Einschränkungen zu definieren, mit denen sich der Architekt befassen muss, als wäre dies Teil seines Entwurfsproblems.

Ich denke, Garys Antwort hat es fast vollständig geschafft, und ich habe sogar dafür gestimmt. Das einzige, was ich seiner Definition hinzufügen möchte, ist, dass ein guter Architekt auch eine pragmatische Person ist.

Nach all den umfangreichen und ausgezeichneten Arbeiten, die Gary so gut beschrieben hat, wird ein guter Architekt die Einschränkungen und Einschränkungen des Umfelds, in dem er sich befindet (Politik, Termine, Budget usw.), verstehen und seine Lösung so anpassen, dass sie diesen Einschränkungen realistisch entspricht. Dies bedeutet nicht unbedingt, zu zerstören, aber manchmal müssen sehr schwierige Entscheidungen getroffen werden, und ein guter Architekt muss in der Lage sein, mit diesen umzugehen und dennoch eine praktikable Lösung zu finden.

Einige gute Antworten oben. Ich würde hinzufügen: “Beziehungsaufbau” zu der Liste der erwähnten Fähigkeiten.

Ein Architekt muss in der Lage sein, Kooperationspartner aus den unterschiedlichsten Disziplinen in ein Unternehmen zu holen. (z. B. IT-Infrastruktur, Support, Qualitätssicherung, KMU usw.), um die Architektenziele zu erreichen. Die Fähigkeit, Beziehungen aufzubauen, macht diese Zusammenarbeit möglich.

Ich würde sagen, dass diese Rollen nicht genau definiert sind und ich glaube nicht, dass ich sie genau definiert sehen möchte.

Ein Architekt ist für mich jemand, der viel Arbeit als Softwareentwickler geleistet hat, idealerweise in vielen Plattformen, Sprachen und Werkzeugen. Jemand, der nicht nur gute Software lieferte, sondern auch viele Male versagte.

Nachdem er alles getan hat, kann er genug erzogen werden, um ein Entscheidungsträger zu sein. Bedeutung, welche Plattform zu verwenden ist, wie man sie integriert, wie man sie weiterentwickelt usw.

Ein Architekt ist daher nicht jemand mit viel theoretischem Wissen, der denkt, er könne ein ganzes System nur mit “Industriestandard” -Abstraktionen entwerfen. Dies ist für mich die Definition einer Verbindlichkeit, und ich mag keine Verbindlichkeiten für meine Projekte.

Wirklich tolle Antworten darüber, was ein guter Software-Architekt ist.

Ich würde der Liste ein Gespür für die aktuelle Geschäftslage in Bezug auf den Markt und den erforderlichen Umfang hinzufügen. Dies, um zu wissen, welche Lösung gewählt werden muss und welche Kompromisse beim Design eingegangen werden können, um unnötige Architekturverluste zu vermeiden.

In Bezug auf den Unterschied zwischen Software Architect und Engineering Manager.

Aufgabe des Softwarearchitekten ist es, sicherzustellen, dass die Softwareskala mit dem Wachstum des Unternehmens mitwächst. Die Aufgabe des Engineering Managers besteht darin, sicherzustellen, dass die Größe der Engineering-Organisation innerhalb des Unternehmens mit dem Wachstum mitwächst.

Alle Antworten sind sehr relevant. Gary hat def. nagelte die Antwort auf den Punkt und sehr detailliert. Die zwei Dinge, die ich zusätzlich zu seiner Antwort hinzufügen möchte, sind:

  1. Der Beitrag des Architekten zum Budget ist sehr wertvoll, sei es in technischer oder personeller Hinsicht.
  2. Die Software-Architektin muss lesen, lernen und sich ständig weiterentwickeln, um die neuesten und (perspektivisch) besten Technologien zu erlernen und zu beherrschen.

Eine kurze Zusammenfassung wäre jemand, der gleichzeitig über sehr breite und sehr tiefe technische Fähigkeiten verfügt. Die Breite ist erforderlich, um sich ein System in seinem gesamten Umfang vorstellen zu können. Die Tiefe ist ein Muss, da manchmal kleine Details in großen Systemen sehr weitreichende Konsequenzen haben können.

Eine weitere nützliche Eigenschaft ist die Fähigkeit, sich in die Lage der Kunden zu versetzen. Dazu gehören nicht so offensichtliche Stakeholder wie die Entwickler selbst oder Grafikdesigner. Der Architekt ist da, um sicherzustellen, dass das System einfach und wirtschaftlich aufgebaut werden kann und nicht nur einige Laufzeitanforderungen erfüllt.

Ein Architekt ist ein talentierter Ingenieur, der auch weiß, wie man ein Projekt von Anfang bis Ende durchführt und wie sich dieser Prozess auf das Design auswirkt. Es reicht nicht aus, durchdachte Entwürfe zu formulieren und zu kommunizieren. Genauso wichtig ist es, zu wissen, wie von aktuellen Systemen inkrementell, in Echtzeit und mit realen Einschränkungen auf diese Entwürfe zugegriffen werden kann.

Die Fähigkeit, Ihren Stakeholdern wirklich zuzuhören und die Bedürfnisse zu verstehen, die sie möglicherweise nicht zum Ausdruck bringen, und dabei das große Ganze im Auge zu behalten und gleichzeitig auf Details zu achten. Vollständigkeit, Kongruenz und Leidenschaft für Einfachheit und Eleganz.

In einer Zeile die Möglichkeit, die komplette Lösung zu betrachten.

Hauptlieferumfang – Architekturmodelle, Architekturprinzipien, Design, Paketauswahl, allgemeine funktionale Anforderungen.

More Interesting

Welche Beziehung besteht zwischen der Fähigkeit zur Kurvenfahrt und der Reifenbreite auf einem Motorrad?

Welche Software eignet sich am besten für den Maschinenbau?

Ist der größte Teil der Elektrotechnik im Gegensatz zum Maschinenbau und Tiefbau nicht 3-D?

Welches ist die beste Wahl für ein Masterstudium zwischen Petroleum Engineering oder Renewable Energy Engineering?

Was ist besser, SRM oder VIT für Chemieingenieurwesen?

Hat die Elektronik und Nachrichtentechnik einen guten Anwendungsbereich?

Was sind einige moderne Anwendungen von Gold?

Wie lässt sich der wissenschaftliche Kenntnisstand der Welt am besten numerisch abschätzen? Wir wissen sicher, dass es zunimmt, aber wie viel mehr ist es jetzt als zum Beispiel 1970?

Was ist besser für den Maschinenbau: BITS Hyderabad, IIT Indore oder IIT Jodhpur?

Wäre es die Mühe wert, ein Jahr damit zu verschwenden, die Informatik an einer angesehenen Ingenieurschule zu verlassen und am IIT Kanpur die Zulassung zum Bachelor of Science in Wirtschaftswissenschaften zu erhalten?

Welche Art von Projekten wird für ECE-Studenten nützlich sein, die einen Master-Abschluss in den USA anstreben?

Ich möchte meine UPSC-Vorbereitung von vorne beginnen. Ich studiere Chemieingenieurwesen am IIT Bombay im dritten Jahr. Wie soll ich anfangen und vor allem welche Bücher soll ich lesen?

Kann ich mein College nach dem ersten Ingenieurjahr wechseln?

Kann ein Nicht-IIT-Ingenieurstudent mit Abschluss in Informatik ein Praktikum bei Google absolvieren?

Abgeschlossenes Studium der BTech Maschinenbau und Tätigkeit als Senior Software Engineer. Wie ist das möglich?