Programmiersprache systematisch auswählen [geschlossen]

24

Ich suche nach einer Methode zur Auswahl einer Sprache. Ich frage nicht nach Meinungen über Sprachen. Ich wurde beauftragt, die aktuelle Sprache unseres Shops mit anderen verfügbaren zu vergleichen. Wir sind übrigens ein Webentwicklungsshop.

Unser CEO hätte gerne ein umfassendes Whitepaper zu allen verfügbaren webbasierten Sprachen, zu welcher übergeordneten Sprache sie abgeleitet sind (z. B. ist jsp von java, das von c / c ++ stammt). Ich muss eine Matrix mit allen Schlüsselfaktoren einer bestimmten Sprache und den Nachteilen dieser bestimmten Sprache erstellen. Ist die Sprache durch die Plattform begrenzt, ist sie für funktionale Programmierung, prozedurale oder OO ausgelegt oder kann sie mit jedem Programmierparadigma verwendet werden?

Ich muss auch weniger technische Informationen haben, wie die Größe des Talentpools für eine bestimmte Sprache und das mittlere Gehalt in diesem Pool. Wie wird der Marktplatz unsere Wahl sehen?

Wir haben begonnen, einen Berater zu suchen, der uns hilft, all diese Dinge zu verstehen, aber wir haben festgestellt, dass die meisten Berater einen Entwicklungshintergrund haben und oft die Antwort lautet: " xxx ist die beste Sprache, weil es die ist, die ich bin habe in den letzten n Jahren am meisten benutzt und es hat mich nie im Stich gelassen. Du könntest es mit yyy für das Frontend ergänzen und die zzz- Bibliothek verwenden. "

Ich fühle mich von dieser Aufgabe überwältigt, und angesichts dessen, wonach unser CEO sucht, ist es die beste Vorgehensweise, einen Blick in die Welt der Wissenschaft zu werfen und einen Professor ohne tatsächliche Entwicklungserfahrung einzustellen, um uns "beizubringen" über alle möglichen Sprachen.

Musste noch jemand diese Übung machen? Wenn ja, können Sie die Schritte und / oder Methoden mitteilen, die Sie verwendet haben, um den Prozess zu durchlaufen?

Lanze
quelle
21
Plant der CEO tatsächlich, diese Matrix zu verwenden, um Dinge wie "Wir werden $ {language} verwenden, um $ {nextBigProject} zu erstellen!" Etwas zu erstellen, das tatsächlich nützlich sein könnte (obwohl ich nicht sicher bin, ob es jemals ernsthaft nützlich sein wird), würde wahrscheinlich eine erhebliche Menge an Zeit in Anspruch nehmen und es würde auch eine laufende Wartung daran geben.
FrustratedWithFormsDesigner
3
Ich denke, ein allgemeiner Leitfaden für die Auswahl einer Sprache / Umgebung für ein Projekt könnte darin bestehen, zunächst zu versuchen, ein tieferes Verständnis für das spezifische Problem zu erlangen, das das Projekt (sprachunabhängig) zu lösen versucht, und nach Tools / Bibliotheken zu suchen, die Am besten lösen Sie es zu diesem Zeitpunkt , und schauen Sie sich dann an, welche Sprachen Sie für die Arbeit mit diesen Tools / Bibliotheken benötigen. Das wird Ihnen wahrscheinlich eine kurze Liste von Sprachen geben, und von dort aus können Sie sie auf der Grundlage Ihrer Vertrautheit mit diesen Sprachen, der Unterstützung von Anbietern, des Budgets usw. aufschlüsseln.
FrustratedWithFormsDesigner
9
Die allererste zu beantwortende Frage lautet: "Müssen wir uns überhaupt ändern?" Welche Probleme werden durch Ihre aktuelle Sprachauswahl nicht gelöst?
John Bode
4
Wie kann Stack Overflow Entwicklern helfen, Technologien zu bewerten? "Heute Morgen hatte ich ungefähr 8 Frameworks vor mir und versuchte zu entscheiden, welches ich verwenden werde ..."
Mücke
7
In der Praxis kann man auch Darts werfen. In der Web-Arena (insbesondere JavaScript und andere) gibt es Dutzende (wenn nicht Hunderte) von Optionen mit unterschiedlichen Stärken, Schwächen, Affinitäten und Inkompatibilitäten. Sie können es zu Tode analysieren oder einfach eine Vermutung anstellen, fortfahren und bei Bedarf eine Korrektur während des Kurses vornehmen.
Daniel R Hicks

Antworten:

53

@FrustratedWithFormsDesigner hat dies oben angedeutet, ich bin stumpfer: Ihnen wurde eine teure, aber nutzlose Aufgabe angelastet.

Ich vermute, der CEO sucht nach unwiderlegbaren, objektiven Beweisen, die seine Wahl der Sprache unterstützen. Das Problem ist, dass die Präferenz der Sprache mit viel zu vielen subjektiven und extrinsischen Faktoren beladen ist, als dass das Whitepaper sinnvoll oder gar nützlich wäre.

Anders ausgedrückt, wenn es eine ideale Sprache gäbe, würde sie jeder anstelle dieser "objektiv" fehlerhaften Sprachen verwenden. Es spricht auch für ein gewisses Mikromanagement, das die Provinz der Ingenieure sein sollte, die dafür sorgen müssen, dass es funktioniert. Erlang mag der "objektiv beste" sein, aber wenn es niemand weiß, addieren Sie 6 Monate / Techniker-Startkosten und 6 weitere Monate / Techniker, um Kompetenz zu erlangen.

Da ich Ihren Job nicht habe, mache ich mir keine Sorgen, ihn zu verlieren, obwohl Sie es vielleicht tun. Ich würde dem CEO ein Papier über die Physical Church-Turing Thesis geben. Ich würde mich dann mit den leitenden Ingenieuren zusammensetzen und ihre nicht strenge, nicht objektive Meinung dazu einholen, was verwendet werden soll, und dem CEO sagen, dass Sie das verwenden sollen. Im Gegenzug versprechen Sie den Ingenieuren, sich von Vorstandssitzungen, CFOs, Buchhaltungsmethoden, der Auswahl von Vizepräsidenten usw. fernzuhalten. Es gibt einen Grund, warum wir uns spezialisiert haben, und er hat in den technischen Vorlieben nicht mehr Platz als Sie in seiner Domäne.

msw
quelle
6
Ha, ich liebe die rücksichtslose Begeisterung des letzten Absatzes. Ich würde sagen, es ist die Domäne des CEOs, wegen der lästigen 6 Monate, die Sie erwähnt haben. Das ist alles, was Sie brauchen, um ihm / ihr imho zu sagen.
Nathan Cooper
1
"Physical Church-Turing Thesis" Gehen wir nicht dorthin. Nur sehr wenige Programmiersprachen haben eine formale Semantik, eine Grundvoraussetzung dafür, dass Turing vollständig ist. (Ohne eins ist es nicht einmal ein Rechenmodell.)
Rhymoid
4
Wählen Sie einfach Lisp und fertig.
Eric
1
Mit Lisp meinen Sie natürlich ClojureScript. :-)
Brian Knoblauch
1
+1. Es ist Ihre Aufgabe als Ingenieur, einem CEO mitzuteilen, warum dies kein guter Ansatz ist. Das mag schwierig sein, weil es nach einem guten Ansatz aussieht, aber es ist notwendig.
Djechlin
25

Einige breite Pinselstriche zu beachten:

Popularität der Sprache

Dies sollte eigentlich keine Rolle spielen, da Popularität nicht unbedingt mit Produktivität, Ausdruckskraft oder einer der anderen wichtigen Sprachqualitäten gleichzusetzen ist. Diese Überlegung ist jedoch häufig wichtiger als alle anderen Überlegungen, da:

  1. Es ist einfacher, Softwareentwickler in einer beliebten Sprache zu finden.
  2. Es ist einfacher, Tools und Bibliotheken in einer gängigen Sprache zu finden.
  3. Entscheidungsträger verstehen die Sprachkompromisse nicht und treffen daher die sichere Entscheidung ("viele Unternehmen verwenden diese Sprache, es muss also gut sein").

Anwendbarkeit auf die Problemdomäne

Jedes Programm kann in einer beliebigen Programmiersprache von Turing-complete geschrieben werden. Einige Sprachen eignen sich jedoch besser für bestimmte Problembereiche als andere. Wenn Sie Webanwendungen schreiben, werden Sie sich wahrscheinlich für Sprachen und Tools interessieren, die dafür gut geeignet sind, und sie werden höchstwahrscheinlich objektorientierte Sprachen sein.

Auf der anderen Seite werden Sie sich wahrscheinlich für Sprachen interessieren, die funktionale Paradigmen umfassen, wenn Sie Software schreiben, die hauptsächlich auf Forschung oder Mathematik basiert .

Und natürlich gibt es alles dazwischen. Viele Sprachen unterstützen mehrere Paradigmen, und einige Softwaremuster existieren nur, um Einschränkungen in den Sprachen zu überwinden, denen bestimmte Funktionen oder Paradigmen fehlen.

Ausdruckskraft und Produktivität

Einige Sprachen sind ausdrucksvoller als andere. Was mit tausend Codezeilen in einer Sprache geschrieben werden kann, kann mit hundert Codezeilen in einer ausdrucksstärkeren Sprache geschrieben werden. Der Nachteil ist, dass die hundert Codezeilen wahrscheinlich in einer weniger populären Sprache geschrieben sind, von Leuten mit größerem Fachwissen.

Viele der Codezeilen in objektorientierten Sprachen, die zum Schreiben von Branchenanwendungen verwendet werden, sind Zeremonien. Diese Zeremonie kostet zwar Zeit und Mühe, um sich zu entwickeln, bietet aber auch eine sichtbare Struktur, die sonst in einer ausdrucksstärkeren Sprache nicht ohne weiteres erkennbar wäre. Es ermöglicht Personen mit weniger Fachwissen, als sie ansonsten mit einem geringeren Risiko an dem Code arbeiten müssten.

Die Ära der mehreren Sprachen

Abschließend behaupte ich, dass der Wunsch, sich für eine einzelne Sprache zu entscheiden, ein falsches Dilemma sein kann. Bewerbungen werden heute oft nicht nur in einer, sondern in mehreren Sprachen verfasst. Jede Sprache hat ihre eigenen Stärken und ist (theoretisch) spezifisch auf die jeweilige Aufgabe zugeschnitten. Einige Problemdomänen (wie die Webbrowser-Logik oder der Datenbankzugriff) erfordern bestimmte Sprachen.

Robert Harvey
quelle
7
Ich möchte zum letzten Punkt hinzufügen, dass es nützlich sein kann, eine Plattform in Betracht zu ziehen, die eine einfache Interoperation zwischen ihnen unterstützt (.Net CLR oder JVM), wenn Sie mehrere Sprachen verwenden möchten.
Svick
9
@ NathanCooper: Sie meinen, Sie haben noch nie eine Webanwendung geschrieben? Auch ein kleiner? Oder musste eine mobile App auf mehrere Plattformen portiert werden? Oder in Embedded gearbeitet? Oder Daten aus einer SQL-Datenbank abgerufen?
Robert Harvey
10
@ NPSF3000: Sie haben sich natürlich nicht die Mühe gemacht, Ihre Methode der Zauberei offenzulegen. Ich nenne Shenanigans.
Robert Harvey
9
@ NPSF3000 Auch wenn C # eine gute Wahl für Ihre Arbeit ist (obwohl die Verwendung von Unity die Dinge auf jeden Fall ein wenig ausdehnt, da es ausdrücklich dafür vorgesehen ist, dass alle mehrsprachigen Aufgaben für Sie ausgeführt werden), widerlegt Ihre einzige Anekdote den Punkt nicht. Sicherlich sind die meisten nicht trivialen Projekte in dem Sinne mehrsprachig, dass sie SQL und eine andere Technologie verwenden, aber auch darüber hinaus verwenden viele verschiedene Programmiersprachen parallel oder schreiben ihre Anwendung in einer Sprache und ihre Werkzeuge in einer anderen usw. Ich finde die Behauptung überhaupt nicht umstritten.
Chris Hayes
7
@ NPSF3000 Wenn das dein Problem ist, dann sag das . Lassen Sie uns nicht versuchen, herauszufinden, was Sie meinen. Ich bin sicher, Robert würde sich freuen, eine Bearbeitung vorzunehmen, wenn Sie direkt gesagt hätten: "Ich bin nicht einverstanden, dass einige Problemdomänen bestimmte Sprachen erfordern". Trotzdem sehe ich hier keinerlei Auswirkungen darauf, dass das Arbeiten in mehreren Sprachen "standardmäßig vorteilhaft" ist.
Chris Hayes
5

Es gibt geschäftliche Gründe für die Wahl einer Sprache und technische Gründe für die Wahl einer Sprache, und die beiden treffen sich nicht immer. Aus akademischen Gründen wird es wahrscheinlich noch schlimmer machen. Ich bezweifle, dass ein Professor Ihnen so helfen kann, wie Sie es brauchen.

Die Fakten über die Abstammung und Merkmale einer Sprache sind ziemlich leicht zu finden. Sie könnten wahrscheinlich einen Tag auf Wikipedia verbringen, um das meiste davon auszufüllen. Größe und Gehalt des Talentpools sind schwieriger, da sich die meisten Menschen nicht als einsprachige Programmierer betrachten. Unternehmen, die weniger beliebte Sprachen wie Scala verwenden, erwarten, dass sie gute allgemeine Programmierer einstellen, die keine sprachspezifische Erfahrung haben. Nach einigen Präsentationen zu urteilen, die ich gesehen habe, scheint diese Strategie gut funktioniert zu haben.

Selbst wenn Sie die Fakten kennen, haben Sie immer noch eine ziemlich subjektive Wahl. Ihr CEO möchte, dass es sich auf eine grobe Metrik wie Dollar pro Feature reduziert. Um ein genaues Bild zu erhalten, müssen Sie einige Prototypen erstellen und dann darüber sprechen, wie einfach das Erlernen eines Prototyps war, wie schnell es war, einen Prototyp zu schreiben, nachdem Sie die Grundlagen erlernt hatten und wie einfach die Wartung Ihrer Meinung nach wäre und wie allgemein Sie glauben, dass dies für die Art von Arbeit gilt, die Sie normalerweise ausführen.

Anstatt zu versuchen, alle Sprachen abzudecken, würde ich versuchen, Vertreter aus den verschiedenen Programmierparadigmen und Framework-Typen zu gewinnen und in jedem einen Prototyp zu implementieren.

Hier ist eine grobe Liste der Back-End-Kategorien:

  • Microsoft. (Kann Unterkategorien haben. Ich weiß nichts über sie.)
  • Schwergewichts-OOP, wie Drupal.
  • Leichte OOP, wie Pythonflasche.
  • Spielen / Heben / Skalatra mit Scala.
  • Spielen / Heben mit Java.
  • Frühlingshaft.
  • Strebenartig.
  • Schienenartig.
  • Haskell-basiert.
  • Node.js

Am vorderen Ende:

  • JavaScript im OOP-Stil
  • Funktionales JavaScript wie bei Underscore
  • JavaScript im reaktiven Stil, wie bei Bacon
  • Google Web Toolkit
  • Ulme

Ein oder zwei Tage für jede Kategorie zu investieren, um einen einfachen Prototyp zu implementieren, würde ein paar Monate dauern. Danach könnten Sie die Stärken und Schwächen jeder Kategorie besser einschätzen. Vielleicht könnten Sie einige aufgrund der Kultur oder Erfahrung Ihres Unternehmens schneller ausschließen.

Da es sich um einen Geschäftsbericht handelt, würde ich mir auch etwas Zeit nehmen, Dinge wie "Welche Sprache verwendet <Firma>" zu googeln, um verschiedene von Ihnen bewunderte Firmen zu ersetzen. Viele von ihnen haben eigene Whitepapers darüber verfasst, warum sie bestimmte Sprachen gewählt haben, was für Sie eine hervorragende Referenz wäre.

Karl Bielefeldt
quelle
4

Identifizieren und kosten Sie die Mängel, die Ihrem vorhandenen Entwicklungsprozess inhärent sind, als $ A. Ermitteln Sie die Kosten für den Wechsel zu einem anderen Entwicklungsprozess als $ B.

Wenn $ A kleiner als $ B ist, stoppen Sie.

Wenn Ihre bekannten Mängel die Änderungskosten überwiegen (und das ist ein großes Wenn!), Analysieren Sie die Mängel im Detail und suchen Sie nach einer Sprache / Entwicklungsumgebung / Entwicklungsprozess-Änderung, die sie behebt und keine weiteren teureren Probleme mit sich bringt.

Um ehrlich zu sein: Wenn Sie derzeit nicht versuchen, Web-Apps in Fortran zu entwickeln, wirkt sich die verwendete Sprache nur auf die Kosten der Vertragspartner aus, mit denen Sie die Lücken schließen. Mainstream- und ausgereifte Sprachen / Tools / Entwicklungsprozesse haben bereits die meisten Probleme gelöst, mit denen Sie wahrscheinlich konfrontiert sind, da die heißesten, neuesten und sexysten Tools die teuersten Trainer und Auftragnehmer, aber die am wenigsten ausgereiften Lösungen enthalten. Und wenn Sie Mängel haben, die eine solche Änderung rechtfertigen, ist es unwahrscheinlich, dass Ihre Wahl der Sprache diese in vollem Umfang angeht.

Wenn Rentabilität hier jedoch nicht das vorrangige Ziel ist, müssen Sie das Stigma, als altmodisch zu gelten, gegen das Ansehen der Spitzenklasse einkalkulieren. Fragen Sie Ihren Chef nach den Dollarwerten, die für diesen Teil der Gleichung verwendet werden sollen.

Paul Smith
quelle