Empirische Belege für die Wahl des Programmierparadigmas zur Lösung eines Problems


11

Das C2-Wiki enthält eine Diskussion über empirische Evidenz für objektorientierte Programmierung , die im Grunde zu dem Schluss kommt, dass es keine gibt, die über die Autorität hinausgeht. Dies wurde zuletzt im Jahr 2008 bearbeitet. Die Diskussion hier scheint dies zu bestätigen: Fragen, ob OO veraltet ist , ob funktionale Programmierung eine schlechte Wahl ist und die Vor- und Nachteile von AOP alle mit Meinungen der Mitwirkenden beantwortet werden, ohne auf Beweise angewiesen zu sein.

Natürlich sind Meinungen von etablierten und renommierten Praktikern willkommen und wertvolle Dinge, aber sie sind plausibler, wenn sie mit experimentellen Daten übereinstimmen. Gibt es diese Beweise? Ich weiß, dass evidenzbasiertes Software-Engineering eine Sache ist, aber kann ich es in diesem Zusammenhang üben? Wenn ich ein bestimmtes Problem habe P, das ich durch das Schreiben von Software lösen möchte, gibt es dann eine Reihe von Kenntnissen, Studien und Forschungsergebnissen, anhand derer ich sehen kann, wie das Ergebnis der Lösung von Problemen Pvon der Wahl des Programmierparadigmas abhängt?

Ich weiß, welches Paradigma als "die richtige Antwort" herauskommt, kann davon abhängen, auf welche Metriken eine bestimmte Studie achtet, unter welchen Bedingungen die Studie konstant bleibt oder variiert, und zweifellos auch von anderen Faktoren. Mein Wunsch, diese Informationen zu finden und kritisch zu bewerten, bleibt davon unberührt.

Es wird deutlich, dass einige Leute denken, ich suche nach einer "Kurbel" -Lösung - einer Wurstmaschine, in die ich Informationen über mein Problem einfüge und aus der ein Wort wie "funktional" oder "strukturiert" hervorgeht. Das ist nicht meine Absicht. Was ich suche, ist die Untersuchung, wie - mit vielen Vorbehalten und Annahmen, auf die ich hier nicht eingehen werde, aber eine gute Literatur zu diesem Thema - bestimmte Eigenschaften von Software je nach Problem und Wahl des Paradigmas variieren.

Mit anderen Worten: Einige Leute sagen, "OO bietet bessere Flexibilität" oder "Funktionsprogramme haben weniger Fehler" - (ein Teil von) was ich verlange, ist der Beweis dafür. Der Rest bittet um Beweise dagegen oder um die Annahmen, unter denen diese Aussagen wahr sind, oder um Beweise dafür, dass diese Überlegungen nicht wichtig sind. Es gibt viele Meinungen darüber, warum ein Paradigma besser ist als ein anderes. Gibt es irgendetwas objektives dahinter?


1
Web-Suche für evidenzbasierte Software-Engineering zeigt viele Links
Mücke

Bei @gnat EBSE geht es darum, die Literatur systematisch zusammenzufassen und allgemeine Schlussfolgerungen zu ziehen, wie wir die Praxis verbessern können. Meine Frage ist, ob diese Literatur existiert; ob es genug für systematische Überprüfungen oder Metaanalysen gibt, um produktiv zu sein.

Antworten:


12

Für die vorherige Aufnahme siehe Revision 1 dieser Antwort . Die Kommentare und Änderungen an der Frage verdeutlichen jedoch weiter, wonach die Frage sucht, und ermöglichen es mir, klarer zu sein.

Ja, evidenzbasiertes Software-Engineering (EBSE) ist eine Sache. Es scheint einige Anstrengungen in Richtung EBSE-Datenbanken zu geben, wie diese an der Durham University und SEED, die von einem Professor an der Cal Poly ins Leben gerufen wurden . All diese Bemühungen sowie diejenigen, die in einer Reihe von Artikeln besprochen wurden, die über den IEEE Xplore-Server oder die ACM Digital Library verfügbar sind(Abonnement oder Kauf für viele Artikel in beiden erforderlich), basieren auf evidenzbasierter Medizin. Sie bieten Literaturübersichten zu veröffentlichten empirischen Daten (Beobachtung und Experiment). Tatsächlich liefert das Einfügen von "Literaturübersicht" in eine Suchzeichenfolge bei jeder Publikationssuche Informationen zu den meisten Themen - über 14000 Treffer im ACM und über 1000 in der IEEE-Datenbank (wenn nur Computerthemen beschränkt sind).

Wenn ich mir die allgemeinen Arten von Themen anschaue, die in diesen EBSE-Datenbanken und Literaturrecherchen behandelt werden, sehe ich einen roten Faden - sie sind in der Regel technologieunabhängig. Der Schwerpunkt scheint eher auf dem Prozess und der Methodik als auf den spezifischen Tools zu liegen, die für die Durchführung des Software-Engineerings verwendet werden.

Dieses Konzept existiert also in der Softwareentwicklung. Die Wissenschaft ist sich des evidenzbasierten Konzepts bewusst und kann es erfolgreich auf das Software-Engineering anwenden.

Insbesondere scheint die Frage, ob EBSE-Techniken auf die Auswahl eines Paradigmas angewendet werden sollen, schwierig zu sein, da es sich um eine Vielzahl von Variablen handelt, die Annahmen erzwingen und die Fähigkeit zur Wiederholung des Experiments oder der Beobachtung verringern. Er sagte , das Recht in der Frage - „ das Paradigma kommt als‚die richtige Antwort‘kann davon abhängen , welche Messwerten eine bestimmte Studie achtet auf, unter welchen Bedingungen der Studie hält konstant oder variiert, und zweifellos von anderen Faktoren zu“ . Obwohl dies nicht bedeutet, zu untersuchen, welches Paradigma in einer bestimmten Situation "am besten" ist, macht es jede Art von Literaturrecherche dieser Dokumente unglaublich schwierig, Informationen zu vervollständigen und dennoch zu extrahieren.

Es gibt definitiv keine "Turn the Crank" -Lösung für die Auswahl eines Paradigmas.

In Anbetracht eines Programmierparadigmas finden Sie in den verschiedenen akademischen und industriellen Datenbanken Studien darüber, wie dieses Paradigma verschiedene Aspekte der Softwareentwicklung - Qualität, Mängel, Effizienz usw. - unter verschiedenen spezifischen Bedingungen beeinflusst, angefangen vom Wissen und der Erfahrung des Team zur Problemdomäne. Jedes strenge Papier sollte die Bedingungen, unter denen die Daten gesammelt wurden, und die Annahmen klar identifizieren. Das Problem besteht darin, zu versuchen, die Faktoren zu isolieren, die es unter jeder dieser Bedingungen gut machen.

Akademisch gibt es einige Aussagen, die leicht zu recherchieren sind. Die Aussage, dass das Funktionsparadigma gut für Anwendungen geeignet ist, die Parallelität erfordern, stammt beispielsweise aus dem Church-Rosser-Theorem . Aus diesem Grund ist es wahrscheinlich, dass ein in einer funktionalen Sprache geschriebenes Softwaresystem weniger Parallelitätsfehler aufweist als dasselbe in einer prozeduralen oder objektorientierten Sprache geschriebene System.

Aus praktischer Sicht kann ein Softwareteam jedoch nicht immer "das beste" Werkzeug oder die beste Technik für den Job verwenden, nur weil die Forschung dies anzeigt. Obwohl wir uns bemühen, Softwaresysteme von höchster Qualität zu produzieren, arbeiten wir innerhalb von Einschränkungen. Oft sehe ich diese Einschränkungen minimiert (oder sogar aus der Gleichung entfernt), wenn ich die Wirksamkeit einer Methodik diskutiere.

Als Praktiker versuche ich bei der Auswahl der zu verwendenden Technologien, die bestmöglichen Werkzeuge zu identifizieren. Aber dann beschränke ich mich auf das, was das Team, das ich habe, kennt und versteht. Zurück zu meinem vorherigen Beispiel: Wenn ich ein Team habe, das sich mit dem Erstellen gleichzeitiger Anwendungen in C ++ auskennt und keine Erfahrung mit Haskell hat, ist es nicht sinnvoll, das System in Haskell zu erstellen, da ich dies wahrscheinlich nicht tun kann Zeitplan- und Budgetbeschränkungen, und meine Qualität wird wahrscheinlich aufgrund mangelnder Erfahrung in der Toolchain leiden.

Zusammenfassend lässt sich sagen, dass evidenzbasiertes Software-Engineering im Allgemeinen eine gute Sache ist und dass Literaturrecherchen existieren und leicht verfügbar sind. Es gibt jedoch Aspekte des Software-Engineerings, bei denen die Anwendung evidenzbasierter Ansätze wenig Wert bietet. Die Auswahl eines Programmierparadigmas für einen großen Entwicklungsaufwand ist eine davon.

Wenn Sie herausfinden möchten, wie die Objektorientierung Wiederverwendbarkeit oder Mängel in der Funktionsprogrammierung behebt, finden Sie leicht Veröffentlichungen zu diesen Themen. Ich habe jedoch keine Veröffentlichung gefunden (und ich würde auch kein gewisses Vertrauen in sie setzen), die in der Lage ist, die Paradigmenauswahl in einem breiten Spektrum realer Softwareentwicklungsprojekte effektiv anzugehen.


Der Abschnitt über die Vollständigkeit von Turing ignoriert Kompromisse, die ich offen und verglichen sehen möchte. Lassen Sie mich ein konkretes Beispiel geben. Viele Leute sagen mir, dass funktionale Programmierung großartig ist, um Parallelitätsfehler zu vermeiden. Jetzt stellen wir fest, dass das Schema wie Pascal Turing-vollständig ist. Es sollte also möglich sein, prozeduralsicheren Code prozedural zu schreiben. Einverstanden. Aber ist es großartig ? Gibt es Vorteile bei der Auswahl einer Methode? Können solche Vorteile gemessen werden?

1
@GrahamLee Um Ihre Hypothese zu bestätigen oder abzulehnen, sind objektive Beweise erforderlich, die es nicht gibt. Es gibt subjektive Gründe, ein neues Paradigma und ein neues Modell für die Darstellung genau derselben Rechenfähigkeiten zu schaffen - und dies ist nicht auf Programmiersprachen beschränkt, sondern auch auf die zugrunde liegende mathematische Darstellung dieser Sprachen . Zu diesen objektiven Gründen gehört die Ausrichtung auf eine bestimmte demografische Gruppe (Computermathematiker versus Business Analyst - ihre Denkweise erfordert ein anderes Paradigma).
Thomas Owens

2
@Thomas: Ihre Implikation, dass Programmierpraktiken für die Wissenschaft einzigartig undurchsichtig sind, ist eigenartig. Es wird viel geforscht. Ein oft zitiertes Beispiel ist die Forschungsgruppe von Lutz Prechelt . Ich kenne die Gegend nicht gut genug, um zu wissen, ob sich jemand mit Grahams spezifischen Fragen befasst hat, aber es gibt keinen Grund zu der Annahme, dass sie nicht mit den von Prechelt und anderen verwendeten Methoden in Verbindung gebracht werden können.
Cris

1
@ Chris Ich glaube nicht, dass sie für die Wissenschaft undurchsichtig sind. Ich glaube jedoch, dass es einige Dinge gibt, die, wenn Sie, wie Graham in der Frage sagt, der Forschung "viele Vorbehalte und Annahmen" hinzufügen, für Praktiker nicht mehr nützlich sind. An diesem Punkt ist es aus praktischer Sicht einfach effektiver, Ihre Entscheidungen auf Geschichte und Erfahrung zu stützen. Gute, harte und gültige Daten zu haben, ist eine sehr gute Sache. Aber irgendwann ist es zu schwer zu bekommen oder es ist nur in einer ganz bestimmten Situation gültig, in der es für die Industrie nicht nützlich ist.
Thomas Owens

1
@ Thomas Ich bezweifle das. Die medizinische Allgemeinmedizin ist mindestens so situativ und kontextsensitiv wie das Software-Engineering, und es gibt immer mehr Hinweise darauf, dass evidenzbasierte Allgemeinmediziner messbare Verbesserungen bewirken. Es geht hauptsächlich um Quantität und Qualität der Forschung.
Cris

7

Ich habe The Art of Unix Programming von Eric S. Raymond gelesen . Es enthält einige sehr interessante historische Einblicke in Dinge, die wir heute für selbstverständlich halten. Er zitiert einige gute Studien aus IEEE-Software , die empirische Belege wie die Defektdichte verwenden. Das könnte eine gute Quelle sein, wenn Sie nach Studien im akademischen Stil suchen.

Selbst Techniken wie das Modularisieren mit Funktionen waren nicht immer üblich. Eines meiner Lieblingszitate aus dem Buch:

Dennis Ritchie förderte die Modularität, indem er allen und jedem sagte, dass Funktionsaufrufe in C wirklich sehr, sehr billig seien. Alle fingen an, kleine Funktionen zu schreiben und zu modularisieren. Jahre später stellten wir fest, dass Funktionsaufrufe auf dem PDP-11 immer noch teuer waren und VAX-Code häufig 50% seiner Zeit in der CALLS-Anweisung verbrachte. Dennis hatte uns angelogen! Aber es war zu spät; wir waren alle süchtig ...

- Steve Johnson

Es gibt jedoch zwei Probleme, zu empirisch zu werden. Das erste ist, dass die Codequalität eine sehr subjektive Sache ist. Code kann schrecklich und trotzdem korrekt sein. Die Wahrnehmung eines Programmierparadigmas durch die Menschen ist eine sehr gültige Metrik, da Code so geschrieben ist, dass die Menschen genauso viel lesen können wie für Computer, wenn nicht sogar mehr.

Das zweite Problem ist, dass 50% der Entwickler unterdurchschnittliche Programmiertalente haben. Es spielt keine Rolle, ob Ihr Top-Entwickler mit funktionaler Programmierung produktiver ist, wenn das "Gesindel" Schwierigkeiten hat, funktionierende Software damit zu schreiben , geschweige denn schöne, gut strukturierte Software. Ebenso wird Ihr Top-Entwickler mit TMTOWTDI- Programmiersprachen weiterhin sauberen, modularen Code schreiben, aber weniger talentierte Codierer schreiben aufgrund des Mangels an auferlegter Struktur Zeilenrauschen .

Aus diesem Grund denke ich, dass OOP trotz seiner Mängel an Popularität gewonnen hat. Es ist nicht so restriktiv, dass es die talentiertesten humpelt, aber seine Struktur bietet eine präzise Möglichkeit, zu kommunizieren und den am wenigsten talentierten Menschen gute Designprinzipien aufzuzwingen.

In unserer Arbeit tendieren wir dazu, eine Lösung allein aufgrund ihrer technischen Vorzüge zu stark zu bewerten. Ein erfolgreiches Unterfangen muss auch die menschliche Seite der Gleichung berücksichtigen.


"Codequalität ist eine sehr subjektive Sache", stimmte man zu - man muss vorsichtig sein, was man misst, und die Wahrnehmung ist ein wichtiger Faktor. Aber wie viele andere Dinge ist auch die Wahrnehmung formbar: Betrachten Sie den Aufstieg und Fall und die Zunahme der funktionalen Programmierung, um festzustellen, dass das, was die Menschen über ihre Arbeitsweise denken, nicht direkt mit ihrer Arbeitsweise zusammenhängt. Ich habe auch kürzlich TAOUP neu gelesen. Ein Teil meiner Motivation für diese Frage besteht darin, in der frühen Literatur Lösungen für Probleme zu finden, die in der Softwareentwicklung aktuell sind.

+1, "Das zweite Problem ist, dass 50% der Entwickler unterdurchschnittliche Programmiertalente haben." Dieser Satz ist eine Erleichterung für mich. Es ist besser als viele Pillen, die ich ausprobiert habe :)
NoChance

3

Es gibt Programmierwettbewerbe, die ein Computer-Bewertungssystem verwenden und es Ihnen ermöglichen, in verschiedenen Sprachen zu schreiben und alle Arten von Ergebnissen und Dingen zu veröffentlichen. Ich wette, sie haben gute Daten für Sie. Hier ist eine Liste von 8: http://www.makeuseof.com/tag/8-onlineprogramming-contests-challenge-win/

Ich stelle mir vor, Sie können aussagekräftige Vergleiche von Lösungen für sehr einfache und eindeutige Probleme wie Quadratsummen oder Fibonacci-Reihen anstellen oder mit dem Bresenham-Linienalgorithmus eine gerade Linie zeichnen. Die meisten realen Programmieraufgaben haben keine so klaren Zielpfosten und jede Sprache hat ihre Schwachstellen. Ein Großteil des Nutzens einer Sprache ist subjektiv. Möglicherweise finden Sie aussagekräftigere Daten, wenn Sie die Zufriedenheit von Programmierern und Kunden untersuchen, als indem Sie Codezeilen oder die Anzahl der Fehler zählen.

Ich erinnere mich, als ich einen halben Tag damit verbracht habe, eines meiner ersten Awk-Programme zu schreiben, dachte ich, ich hätte eine ganze Woche gebraucht, um das "Gleiche" in Java zu tun. Aber das liegt daran, dass sich meine Java-Lösung darauf konzentriert hätte, robust zu sein, da die Awk-Lösung schnell und schmutzig war und einige manuelle Anpassungen an Eingabe und Ausgabe erforderte und wirklich weggeworfen wurde, als ich fertig war. Awk und Java sind beide großartig, nur nicht für die gleichen Dinge.

Ich denke, was ich damit sagen will, ist, dass es für reale Anwendungen äußerst schwierig ist, Sprachen oder Werkzeuge auf sinnvolle Weise zu vergleichen - das Problem der alten Äpfel und Orangen. Viel Glück! Ich würde gerne sehen, was Sie herausfinden.


2

Ich habe über 30 Jahre lang verschiedene Möglichkeiten zur Entwicklung von Software untersucht. Es gibt einen Mangel an guten veröffentlichten Beweisen für die Wahl eines Paradigmas.

Ich habe eine große durchsuchbare ASCII-Bibliographie zusammengestellt. Dies umfasst viele IEEE- und ACM-Artikel und -Artikel. Ich beschrifte die Gegenstände mit der Art der bereitgestellten Beweise. Hier sind die häufigsten Tags:

...
133 =EXPERIMENT
177 =HISTORY
233 =IDEA
267 =SURVEY
338 =ESSAY
395 =THEORY
454 =ADVERT
491 =EXPERIENCE
500 =DEMO

Suchen Sie nun nach PARADIGM und zählen Sie die Tags

  1 =ESSAY
  1 =EXPERIENCE
  1 =HISTORY
  1 =IDEA
  1 =POLEMIC
  1 =SURVEY
  1 =TALK

Wenn Sie tiefer graben möchten, http://cse.csusb.edu/dick/lab.html und ich hoffe, es hilft ...


1

Es scheint, dass es in vielen Fällen keinen Forschungsbestand gibt, der groß genug oder von ausreichender Qualität ist, um allgemeine Schlussfolgerungen darüber zu ziehen, ob eine Praxis in der Softwareentwicklung besser ist als eine andere. Ich habe speziell nach Forschungen gesucht, um in verschiedenen Paradigmen zu arbeiten, aber die mangelnde Verfügbarkeit ist nicht auf diesen Bereich beschränkt, daher werde ich meine Antwort im weiteren Sinne formulieren.

In einem Artikel aus dem Jahr 2004, Evidence-Based Software Engineering von Kitchenham et al. , Werden die Vorteile eines evidenzbasierten Ansatzes und die Probleme bei der Implementierung in das Software-Engineering auf den Punkt gebracht. Ich werde hier nicht auf die Vorteile eingehen (aus der Frage geht hervor, dass ich auf diese Weise arbeiten möchte), aber die Probleme sind als Antwort auf die von mir gestellte Frage relevant.

  • Erstens, wenn Sie kein Mitglied der ACM sind, können Sie den obigen Link wahrscheinlich überhaupt nicht lesen, der das erste Problem abdeckt: Nicht alle vorhandenen Forschungsergebnisse stehen den Praktikern tatsächlich zur Verfügung.
  • Viele Softwareentwicklungspraktiken werden im Rahmen von kommerziell vertraulichen Prozessen im Verborgenen durchgeführt, sodass kein Einblick darüber besteht, was für diese Personen funktioniert hat oder nicht.
  • Software-Engineering ist eine qualifizierte Praxis, daher ist es schwierig (nicht unmöglich, nur schwierig), eine Studie mit angemessener Blindheit zu arrangieren.
  • Die verschiedenen Teile des Software-Lebenszyklus beeinflussen die Ergebnisse der anderen in einem Ausmaß, das in keinem Experiment schwer zu kontrollieren ist.
  • Wie aus den Diskussionen hier hervorgeht, sehen viele Praktiker "die Literatur" (oder die akademische Seite des Software-Engineerings im Allgemeinen) nicht als relevant für ihre Arbeit an.

Die Antwort, nach der ich suche, ist "Nein". Die Beweise, nach denen ich suche, existieren wahrscheinlich nicht. Ich sollte mein Paradigma basierend auf den bestehenden populären Kriterien wählen, was ich weiß, was cool ist und Expertenmeinung.


2
In der Zusammenfassung des zitierten Papiers heißt es: "Der Fähigkeitsfaktor bedeutet, dass Software-Engineering-Experimente anfällig für Subjekt- und Experimentator-Voreingenommenheit sind . Der Lebenszyklus-Faktor bedeutet, dass es schwierig ist zu bestimmen, wie sich Technologien nach dem Einsatz verhalten . Schlussfolgerungen: Software-Engineering würde davon profitieren." Übernahme des Evidenzansatzes, sofern er sich mit den spezifischen Problemen befasst, die sich aus der Natur des Software-Engineerings ergeben . " Dazu möchte ich hinzufügen: Viel Glück damit! ;)
Steven A. Lowe

Steven: Ein Teil der Motivation hinter EBSE besteht darin, von "Ich kann die folgenden Probleme erraten, daher lehne ich jede Chance ab, dass Ihre Lösung funktioniert" zur Analyse der Ergebnisse nach ihren eigenen Vorzügen überzugehen. Ein Papier hat viel mehr zu bieten als nur eine Zusammenfassung.

2
Ich schätze Ihre Begeisterung. Medizin und Softwareentwicklung sind radikal unterschiedliche Disziplinen. Die Analogie ist zwar interessant, aber kaum bahnbrechend. Das vollständige Dokument finden Sie hier. Labada.inf.utfsm.cl/~gvaldes/ESE/docs/… Abschnitt 5 spiegelt die in der Zusammenfassung erwähnte Impedanzfehlanpassung wider. Eine direktere Zuordnung der medizinischen Techniken wäre das Debuggen bestehender Systeme, nicht das Erstellen neuer Systeme. ;) Wenn Sie bessere Produkte bauen möchten, bilden Sie bessere Teams. Die Leute sind viel wichtiger als die Werkzeuge (vgl. Peopleware)
Steven A. Lowe

1
Nachtrag: Die EBSE-Website enthält einige nützliche Informationen. dur.ac.uk/ebse/evidence.php wäre besonders nützlich für Neueinsteiger im SE-Bereich. Nehmen Sie die Umfragen jedoch mit einem Salzblock vor, da (1) die verfügbaren Beweise vorliegen ist spärlich und (2) die durchschnittlichen Ergebnisse sind möglicherweise nicht relevant für die Leistung Ihres Teams aus bestimmten Personen mit hochspezialisierten Fähigkeiten und Fähigkeiten.
Steven A. Lowe

0

Ich glaube nicht, dass diese Art von Studie existiert. Man würde glauben, dass nicht das Programmierparadigma so wichtig ist wie der tatsächlich verwendete Algorithmus. Zum Beispiel würde bei einem nicht trivialen System, das sich auf Algorithmen mit kleinem Raum stützt, ein System, das sich auf Algorithmen mit kleiner Zeit stützt, unterschiedliche Metriken erzeugen. Derjenige, der die bessere Zeit hat, wird höchstwahrscheinlich als gültiger angesehen, es sei denn, Platz ist ein Problem, dann ist das Gegenteil der Fall. Ich finde es ähnlich wie das Pflastern einer Straße. Während der Algorithmus oder das Rezept für die Herstellung der Materialien während aller Prozesse konstant ist, ist es möglich, dass ein Unternehmen zwei Fahrspuren gleichzeitig (eine auf jeder Straßenseite) für besser hält als zwei Fahrspuren gleichzeitig auf derselben Straßenseite . Am Ende des Tages spielt es keine Rolle, da der Prozess der Herstellung des schwarzen Oberteils immer noch der gleiche ist. Der einzige Unterschied ist der Ansatz. Zurück zur Programmierung: Wenn Sie ein Team von C-Entwicklern haben, schreiben Sie den Code prozedural. Wenn Sie ein Team von Java-Entwicklern haben, schreiben Sie ihn in OO. Lassen Sie sich nicht so sehr auf das Paradigma ein, sondern auf die Implementierung des Algorithmus. Denn am Ende des Tages können Sie Java wie C schreiben und versuchen, C wie Java zu schreiben.

AKTUALISIEREN

Um auf den Kommentar zu antworten, hat Graham mich verlassen:
Ich nehme an, mit Architektur meinen Sie das Programmierparadigma. Wenn Sie Clojure verwenden möchten, sollten Sie möglicherweise ein Team von Clojure-Programmierern einstellen. Basierend auf einer Schnellsuche ist Clojure jedoch eine Java-basierte Sprache, die zufällig funktioniert. Angesichts dieser Informationen würde ich die Java-Programmierer nehmen (da sie technisch nur Java schreiben können und es Ihnen die gleichen Ergebnisse liefert) oder nach funktionalen Programmierern wie Haskell-Entwicklern suchen. Bei der Auswahl der besten Produkte hängt dies vollständig von Ihrem Team ab. Ich würde niemals ein Team von Experten für relationale Datenbanken eine Cloud-Lösung für mich organisieren lassen, noch würde ich ein Team von funktionalen Programmierern eine objektorientierte Lösung für mich entwickeln lassen. Sie müssen die Stärken des Teams nutzen, Sie haben nicht die verherrlichte Vision, die Sie in Ihrem Kopf haben, für das, was ein Team "sollte".


Wie wähle ich aus, ob ich ein Team von Java-Programmierern oder ein Team von C-Programmierern einstellen möchte? Soll ich sie in Clojure umschulten? Welche Architektur ist nach Auswahl meines Algorithmus die "beste" Methode, um ihn in eine Softwarelösung für bestimmte Werte von "best" zu kapseln?

@ AbrahamLee siehe mein Update
Woot4Moo

Ich denke, wir diskutieren das gleiche Problem, aber auf verschiedenen Abstraktionsebenen. "Die Stärken des Teams nutzen, das Sie haben" hätte bedeutet, niemals einen Computer zu bauen, denn Bletchley Park hatte niemanden , der stark darin war, Computer zu bauen. Manchmal muss man sagen "wir könnten eine bessere Lösung schaffen, wenn wir dieses Ding verwenden"; Was ich will, sind die Informationen über diese Fälle.

0

Unterschiedliche Paradigmen führen zu unterschiedlichen Lösungen. Welche Passform am besten ist, hängt weitgehend ab von:

  • die Lösung
  • das Entwicklungsteam
  • die Betriebsumgebung

Ich kenne keine solche endgültige Studie, und selbst wenn es eine gäbe, würde ich ihr nicht vertrauen.

Das ist die Aufgabe des Architekten.

Die Weisheit des Architekten durch die möglicherweise irrelevanten Schlussfolgerungen einer Studie zu ersetzen, ist ein Rezept für eine Katastrophe.

Hinweis: In einem Kommentar wird erwähnt, dass Sie sich für "den Algorithmus" entscheiden und dann die Sprache auswählen. Algorithmen sind der zentrale Strukturmechanismus für prozedurale Sprachen. Objektorientierte Sprachen konzentrieren sich auf Klassen und Muster der Zusammenarbeit / Kommunikation. Wenn Sie (als Architekt) davon überzeugt sind, dass eine algorithmisch ausgerichtete Lösung „am besten“ ist, bleiben Sie bei prozeduralen oder funktionalen Sprachen.

Nachtrag: Studien nicht zu vertrauen ist kein Aberglaube, es ist gesunder Menschenverstand. Wissenschaftliche Experimente müssen objektiv und wiederholbar sein. Softwareprojekte sind sehr subjektiv, aber noch schlimmer, sie sind unwiederholbare Experimente . Sie können ein Projekt X einfach nicht mit Team Y implementieren, die Ergebnisse messen und dann die Zeit zurücksetzen, Erinnerungen löschen und dasselbe Projekt mit demselben Team erneut ausführen. Informationen, die durch Studien entdeckt oder impliziert wurden, können für den Architekten nützlich sein, sie können jedoch niemals endgültig sein.


1
Liegt es also außerhalb des Zuständigkeitsbereichs eines Architekten, nach früheren Arbeiten zu suchen, auf denen er seine Meinung aufbauen kann? Wahrscheinlich nicht - daher die Frage, ob und wo solche Ergebnisse zu finden sind.

2
Wenn es eine endgültige Studie mit einer vernünftigen experimentellen Methode gäbe, könnten die Ergebnisse der Studie interessant sein; So wie es aussieht, scheinen diese Antworten zu besagen, dass jede Studie wertlos ist, unabhängig von der Methode, die für meinen Geschmack etwas zu unwissenschaftlich ist
jk.

3
@Steven: Das Wort dafür, den Ergebnissen einer wirklich endgültigen Studie nicht zu vertrauen, ist "Aberglaube". Vielleicht meinen Sie wirklich, dass Sie nicht glauben, dass es jemals endgültige Studien in SE geben kann (welche Aussage selbst offensichtlich eine große, gut unterstützte Beweislage erfordern würde).
Cris

1
Die Qualität einer Softwaremethode hängt davon ab, wie gut sie den lokalen menschlichen Bedürfnissen entspricht. Im Allgemeinen ist es nicht durch die Gesetze der Physik (Scotty) beschränkt. Es wird lange dauern, bis es 'Software' [Disziplin] gelingt, ihre unveränderlichen Grundgesetze zu destillieren. Siehe beispielsweise "Softwarequalitätsmetriken: Drei schädliche Metriken und zwei hilfreiche Metriken" in ppi-int.com/newsletter/SyEN-046.php#feature und ppi-int.com/newsletter/SyEN-047.php#feature
Philip Oakley

1
@Cris: Für die Aufzeichnung, nein, ich glaube nicht, dass es jemals eine wirklich endgültige Studie in diesem Bereich geben kann; siehe Anhang. Die Idee, dass eine "endgültige" Studie anstelle eines Expertenurteils verwendet werden kann, um eine kritische architektonische Entscheidung zu treffen, ist "Appell an die Autorität", was eine Form des logischen Irrtums ist :) Nach meiner Erfahrung - und ich mache keine Decke Anschuldigungen, nur eine Beobachtung - die Suche nach solchen Dingen ist meistens entweder ein Versuch, die Verantwortung für eine Entscheidung zu vermeiden, oder ein Versuch, eine bereits getroffene Entscheidung zu unterstützen.
Steven A. Lowe
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.