Probleme (wie Wartung) bei der Entwicklung mit unbeliebter Sprache


31

Ich entwickle eine Anwendung mit clojure (lisp) alleine in meinem Team. Es beginnt als kleine Anwendung. Kein Problem. Aber da es Features hat und den Bereich erweitert, wird es zu einem wichtigen Programm.

Ich habe mir Sorgen um Wartung oder so gemacht. Niemand in meinem Team kennt sich mit Clojure oder Lisp aus und interessiert sich auch nicht für Sprachen wie diese.

Ist es nicht falsch, in unbeliebten Sprachen zu programmieren? (Für meinen eigenen Spaß?) Soll ich populärere Sprachen verwenden? (Zumindest wie Python)

Ich bin mir sicher, wenn ich das Team verlasse - ohne zu sagen, dass ich gehe. :) - niemand würde es pflegen. Dieses Programm wird zerstört und einige werden sich mit einer anderen Sprache entwickeln.

Ich genieße es sehr, mich mit Clojure zu entwickeln. Ich habe gemerkt, dass dies möglicherweise nicht für mein Team ist.

Was denkst du darüber? Ich denke, viele Programmierer, die unbeliebte Sprachen lieben, haben sich mit ähnlichen Themen befasst.


2
Haben Sie keine lokalen Programmierstandards für die Verwendung von Sprachen für die lokale Entwicklung?
Versuchung

Nein, solche Standards gibt es nicht. Ich habe es nur meinem Chef gesagt und es wurde ohne Kommentare akzeptiert. Ich denke, mein Chef hat meine Entscheidung einfach respektiert und zugelassen.
Hybrid

12
"Unbeliebt" ist nicht das große Problem. "Nicht unterstützt" ist weitaus schlimmer. ZB schlägt Lisp VB 6.0 zweifellos.
MSalters

1
Wenn die App so wichtig ist, werden Sie durch jemanden ersetzt, der weiß, was er tut. Nur weil Ihr aktuelles Team begrenzt ist, heißt das nicht, dass sie niemanden finden können, der diese Sprache kennt.
JeffO

Antworten:


22

Ich fühle deinen Schmerz, ich würde gerne mehr Codierung in der funktionalen Programmierung machen (Haskell sieht so lustig aus!). Ich habe das Gefühl, ich habe gerade erst die Oberfläche zerkratzt, weil ich sie noch nicht in einem Geschäftskontext verwendet habe.

Ich würde jedoch dringend davon abraten . Wenn Sie nur in einer Sprache programmieren, die Sie kennen, können nur Sie diese unterstützen. Sofern Sie sich nicht mit jedem Support-Problem befassen müssen (auch wenn Sie andere Fristen / Prioritäten haben), kodieren Sie in einer Sprache, die Ihr Team kennt und unterstützen kann. Was passiert, wenn im Urlaub etwas kaputt geht? Was passiert, wenn Sie befördert werden möchten?

Ich würde empfehlen, dass Sie mindestens ein weiteres Teammitglied mit an Bord nehmen. Zeigen Sie ihnen einige coole Sprachfunktionen. Mit zwei Personen an Bord wird es funktionsfähig und Sie werden nicht mit der ganzen Unterstützung belastet.


8
Ich muss nicht zustimmen. Wenn eine andere Sprache das richtige Werkzeug für den Job ist, verwenden Sie sie. Ein Großteil der Komplexität in der modernen Softwareentwicklung ist darauf zurückzuführen, dass Programmierer ihre gesamte Anwendung auf eine Sprache anpassen müssen. Wenn Ihre Sprache z. B. nur eine geringe Parallelität aufweist, ist es möglicherweise angemessen, eine andere Sprache für die Nachrichtenübermittlung zu verwenden.
Quanticle

@quanticle OP heißt es: "Ist es nicht falsch, in unbeliebten Sprachen zu programmieren? (für meinen eigenen Spaß?)." Wenn es ein starkes Argument für die Verwendung einer anderen Sprache wie Nebenläufigkeit gibt, dann bin ich damit einverstanden, dass sich die Supportprobleme lohnen.
Tom Squires

1
@quanticle: Das Gegenteil ist der Fall: Zu viele Sprachen (dh mehr als eine) führen zu Redundanz, Doppelarbeit und unnötiger Neuerfindung des Rads.
ThomasX

Richtig, Unterstützung ist definitiv wichtig. Ich freue mich über Ihren Vorschlag, ein anderes Teammitglied an Bord zu holen. Ich werde so tief darüber nachdenken.
Hybrid

17

Ich bin mir sicher, wenn ich das Team verlasse - ohne zu sagen, dass ich gehe. :) - niemand würde es pflegen.

Möglicherweise falsch.

Wenn das Programm einen Wert hat und das Management den Wert sieht, wird es jemanden damit beauftragen, Clojure zu erlernen und zu warten.

Es passiert die ganze Zeit.

Dieses Programm wird zerstört und einige werden sich mit einer anderen Sprache entwickeln.

Immer wahr. Warum sich also darum sorgen?

Alle Programme müssen irgendwann ersetzt werden.


Da Clojure auf JVM, CLR oder Javascript ausgeführt wird, sollte es möglich sein, eine (wahrscheinlich hässliche) Übersetzung der Quelle in eine Standardsprache zu erhalten, auch wenn keiner der Mitarbeiter von Hybrid Clojure verwenden möchte. In den ersteren Fällen durch Nachdenken über den Bytecode / msil, in den letzteren durch Erfassen der direkt ausgegebenen js.
Dan Neely

2
@DanNeely - Sie denken, ein gültiger Wartungspfad kompiliert Clojure nach IL über ein (sehr cooles) Homebrew-Projekt und dekompiliert diesen Code dann nach C #? Ich bin nicht ganz davon überzeugt, dass es einfacher ist, jemanden zu bitten, die Sprache zu lernen.

@TheMouthofaCow Ich vermute, vor allem für eine größere Anwendung wäre es einfacher, Clojure zu lernen. Aber der Big Hammer-Ansatz würde hartnäckigen einsprachigen Programmierern erlauben, Änderungen vorzunehmen, ohne dass ein vollständiges Umschreiben erforderlich wäre. Eine eventuelle Umgestaltung zum Entfernen der Reflexionskruft würde wahrscheinlich zu einem de-facto-Umschreiben führen. Verteilen Sie die Kosten jedoch auf eine Reihe von Modifikationen, anstatt sie vor dem Hinzufügen der ersten neuen Funktion durchführen zu müssen.
Dan Neely

Vielen Dank. Es ist sehr unterstützend in meinem Kopf. Wenn ich irgendwie durch diese Situation komme, könnte ich auch an solche optimistischen Gedanken denken.
Hybrid

1
" Alle Programme müssen irgendwann ersetzt werden. " Oh, wäre das wahr? Es wird eine Menge COBOL-Code ausgeführt, der zurückgeschrieben wurde, als der Festplattenspeicher fürchterlich teuer war, und der gepatcht wurde, um Y2K zu überleben (erinnern Sie sich an Y2K?), Und der noch ausgeführt wird. Tatsächlich sterben die meisten Programme entweder jung an Missbrauch oder leben im Wesentlichen für immer. Die Wahl der Technologie ist also tatsächlich sehr wichtig. Weil Ihr Nachwuchs möglicherweise diese Programme pflegt.
Ross Patterson

10

Ich bin genau an der Stelle, an der Sie sich Ihren Nachfolger vorstellen. Ich wurde beauftragt, Funktionen zu einem Legacy-Programm hinzuzufügen, das Clojure und Erlang für die asynchrone Suche verwendete und es in ein Programm für die verteilte asynchrone Suche umwandelte. Als ich in diesen Job kam, wusste ich nur, dass Python und Java.

Mein Rat an Sie: Verwenden Sie das beste Werkzeug für den Job . Wenn es sich bei diesem Tool um Clojure handelt, ist es auch so. Programmiersprachen sind nicht so schwer zu lernen. Gut geschriebener Code in einer Sprache, die für die jeweilige Aufgabe geeignet ist, ist immer leichter zu lesen als Code, der versucht, etwas zu tun, für das die Sprache nicht entwickelt wurde. Es wird für Ihren Nachfolger einfacher sein, sauberes Clojure zu lesen als entstelltes Java.


5

Das Akzeptieren neuer Sprachen oder einer " eigenständigen " Sprache durch eine Aufgabe ist ein hohes Risiko in einem Projekt.

Wenn dieser Teil des Systems ein Problem hat oder dieser Teil verworfen werden muss, müssen Sie einen Programmierer finden, der die Fähigkeiten dieser Sprache erlernen muss. In beiden Fällen haben Sie viel Zeit verloren.

In einigen Fällen kann dieses Problem verwendet werden, um die Fähigkeiten eines Teams nach zukünftigen Aufgaben zu verbessern und zu diversifizieren.


Ich stimme zu, obwohl einer der Vorteile, die sich in Clojure ergeben, darin besteht, dass mein Team irgendwie davon betroffen ist. Ich stimme auch zu, dass dies ein hohes Risiko darstellt. Ich sollte vorsichtig sein Vielen Dank.
Hybrid

4

Clojure hat vielleicht eine kleine installierte Basis (es erschien 2007), aber es ist kaum unbeliebt - in der Tat ist es möglicherweise die "heißeste" neue Sprache, die es gibt. Es würde mich wundern, wenn Sie keine anderen Leute finden könnten, die daran interessiert sind, es zu lernen.

Auf jeden Fall sollte die Entscheidung , ob eine neue Sprache eingeführt werden soll, immer auf dem Wert für das Unternehmen beruhen . Sie können mit Ihrem Vorgesetzten die folgenden Punkte besprechen:

Vorteile von Clojure:

  • Produktiver als andere verwendete Sprachen - dies zeigt sich an der Menge nützlicher Funktionen, die Sie in kurzer Zeit und mit weniger Codezeilen bereitgestellt haben
  • Wir haben bereits eine wichtige App (Ihre) in Clojure geschrieben, daher lohnt es sich, Clojure-Kenntnisse aufzubauen, um sie zu pflegen (anstatt ein teures Umschreiben durchzuführen).
  • Die Verwendung von Clojure wird als innovativ angesehen und kann eine gute Möglichkeit sein, talentierte Entwickler zum Beitritt / Verbleib im Unternehmen zu motivieren.

Nachteile der Übernahme von Clojure

  • Eine zusätzliche zu unterstützende Sprache
  • Entwickler benötigen möglicherweise mehr Schulung und Zeit, um auf den neuesten Stand zu kommen

Wenn ich ein Manager wäre, der diese Entscheidung bewertet, würde mir die Idee einer höheren Produktivität von Clojure wahrscheinlich gefallen, um einige begrenzte Experimente zuzulassen, und die Entscheidung aufzuschieben, bis klar ist, wie gut das Team damit umgegangen ist. In diesem Fall müssten Sie wahrscheinlich ein Anwalt sein, als guter Lehrer auftreten und die anderen an Bord holen.


3

Mach dir keine Sorgen, sei glücklich.

Offensichtlich hat das Programm einen Wert, oder Sie würden es nicht erweitern. Herzlichen Glückwunsch zu einem erfolgreichen Projekt. Vermutlich haben Sie sich für Clojure entschieden, weil Sie damit Zeit und damit Geld für Ihren Arbeitgeber gespart haben. Wenn Sie es in Java geschrieben hätten, wäre das Programm daher noch schwieriger zu warten. Selbst wenn Ihre Kollegen das Programm Zeile für Zeile besser verstehen könnten, könnten sie es dann pflegen und erweitern?


2

Ich würde dir mehr Macht sagen! Lisp ist der Urvater der Computersprachen und auch heute noch relevant. Die Tatsache, dass es nicht so beliebt ist, liegt meiner Meinung nach an der Tatsache, dass es nicht die warmen, flauschigen IDEs von C # und Java hat und die Haupt-Compiler-Implementierung in Windows nur unter Cygwin (yuk!) läuft. Die Entwicklung scheint in Emacs zu erfolgen, und ich denke, es funktioniert besser mit Linux oder einem Mac.

Dieser Programmierwettbewerb wurde 2010 von einem Lisp-Programm gewonnen: http://planetwars.aichallenge.org/

Früher konnten sie das Debuggen aus einer Entfernung von 100 Millionen Meilen durchführen: http://www.flownet.com/gat/jpl-lisp.html

Sie verzichten definitiv auf eine rote Fahne für die Wartung, stellen sich dies jedoch als Lernmöglichkeit für eine andere Person vor. Wenn Sie eine Albtraumsprache (wie MUMPS) oder eine mühsame Sprache (wie TCL) verwenden, sollten meiner Meinung nach Fragen gestellt werden. Aber ich denke, Sie sollten sich als einen Mann vorstellen, der versucht, das Beste der alten Traditionen aufrechtzuerhalten :)


Tcl ist eine schöne Sprache, ich würde es nicht langweilig nennen. Schauen Sie sich Tkinter (in Python) an, um zu sehen, dass es ein nützliches Tool ist.
Francesco

@Francesco - Ich sollte darauf hinweisen, dass ich Tcl nicht Tcl / Tk sagte. Das grafische Toolkit könnte großartig sein. Ich sagte, Tcl sei langweilig, weil ich vor ein paar Jahren ein Vorstellungsgespräch an einem Ort geführt habe, an dem nur Tcl verwendet wird (sie nehmen Junior-Programmierer auf und unterrichten sie dann in einer sehr unhandelbaren Sprache, um es ihnen schwer zu machen, den Job zu verlassen), und lehnte dies ab, weil Tcl sah langweilig aus. Ich sage nicht, dass es nicht funktioniert (es könnte sein) Ich dachte nur, dass ich am Ende meine Arme abbeißen würde, wenn ich mehr als ein paar Tage Tcl schreiben müsste. Ich stehe dazu.

2

Es gibt viele gute Antworten, aber ich möchte einen Punkt hinzufügen.

Ich war in einer ähnlichen Situation, aber mit einer anderen Sprache. Ich musste alles auf die harte Tour lernen, dh durch Versuch und Irrtum wegen mangelnder Anleitung. Was ich aus meiner Erfahrung gelernt habe, als Sie darauf hingewiesen haben, dass Wartung / Erweiterbarkeit ein Problem darstellen, da man möglicherweise keine wirksamen Ansätze kennt, weil es an Anleitung mangelt.

Ich schlage vor, Sie sprechen mit Ihrem Vorgesetzten, um angemessene Hilfe zu erhalten, damit Sie in Zukunft Probleme vermeiden können.

Viel Glück!


2

In einigen Fällen kann eine Sprache wie Lisp die Implementierung von Funktionen beschleunigen oder vereinfachen, die in einer anderen Sprache sehr schwierig wären. Es beeinflusst auch die Art und Weise, wie Sie Probleme betrachten, und gibt Ihnen eine Perspektive, die andere in Ihrem Team möglicherweise nicht haben. Ein breiteres Spektrum an Funktionen und eine breitere Sicht auf die Möglichkeiten können für ein Unternehmen von großem Wert sein, das diese verstehen und nutzen kann. Der Preis für diese Funktionen ist jedoch ein Mangel an Standardisierung.

Viele Unternehmen versuchen, sich auf eine oder zwei Sprachen zu standardisieren, weil dies ihnen mehr organisatorische Flexibilität gibt: Sie können Entwickler von einem Projekt zu einem anderen verschieben, ohne sie neu trainieren zu müssen. Sie verfügen über einen eingebauten Wissensvorrat über die Sprachen, die sie verwenden. und Manager müssen nicht die Stärken und Schwächen der Verwendung der einen oder anderen Sprache für ein bestimmtes Projekt berücksichtigen. Wenn Sie nur einen Hammer haben, sieht alles aus wie ein Nagel.

Wie ich bereits ausgeführt habe, haben beide Ansätze bestimmte Vor- und Nachteile. Wie so oft gibt es keinen richtigen oder falschen Ansatz. Sie tauschen nur eine Reihe von Vor- und Nachteilen gegen eine andere aus. Ein Unternehmen muss auch nicht ganz in die eine oder andere Richtung gehen. Es ist durchaus sinnvoll, die meiste Arbeit in C ++ oder Java zu erledigen, aber tauchen Sie von Zeit zu Zeit in Lisp oder Python ein, um sie auszuprobieren und zu sehen, was funktioniert. Es klingt so, als würde Ihr Unternehmen das tun.

Gehen Sie also weiter (aber nicht weiter), lernen Sie so viel wie möglich und werden Sie der Clojure-Experte, auf den sich Ihr Manager verlassen kann, um Einsichten zu erhalten, die Ihre Kollegen möglicherweise nicht haben. Und fühlen Sie sich nicht schlecht dabei. Die Sorge um die organisatorischen Dinge ist die Aufgabe Ihres Managers.


1

Ich würde empfehlen, Ihr Programm in einer anderen (bequemeren) Sprache umzuschreiben, wenn Sie das Gefühl haben, dass die Wartung mit hoher Wahrscheinlichkeit das Problem beherrscht.

Wenn Sie es geschafft haben, es abschließend zu schreiben (was Sie nicht wussten, als Sie mit der Erstellung Ihrer App begannen, wie ich es verstanden habe), ist es kein Problem, es in einer vertrauteren / bequemeren Sprache umzuschreiben. Closure verwendet völlig andere Konzepte und daher ist die Umsetzung möglicherweise schwierig in eine andere Sprache zu übertragen. Aber die Sache ist, dass, wenn Sie Spaß daran hatten, eine neue App zum Abschluss zu schreiben, Sie es vielleicht interessant finden, Konzepte und Ideen, die Sie verwendet haben, in eine andere bequeme Sprache zu übertragen. Es könnte Spaß machen, verschiedene Sprachen und ihre Fähigkeiten zu vergleichen. Ich denke, Ihr Fall ist perfekt für solche Experimente.


Ich mache das ziemlich oft. Ich schreibe, wie es scheint, ein One-Shot-Dienstprogramm in Perl oder Erlang, das dann so oft verwendet wird, dass es zu einem Dienstprogramm wird, also schreibe ich es mit der Hauptsprache des Projekts (Java oder C #) um.
TMN

1

Es ist sicher nicht falsch, in "unpopulären" Sprachen zu programmieren. Warum interessiert es dich eigentlich, ob sie beliebt sind oder nicht? Da stimme ich @quanticle voll und ganz zu. Wenn Clojure oder eine andere Nicht-Mainstream-Sprache das beste Werkzeug für das zu lösende Problem ist, sollten Sie es auswählen.

Ich verstehe nicht, warum die Wartung ein Problem sein wird. Wenn Sie Unit, Integration usw. anwenden. Wenn Sie Ihren Code testen und dokumentieren, kann jeder Programmierer, der Interesse an funktionaler Programmierung hat, Ihr Programm warten. IMHO ist die Tatsache, dass Ihre Kollegen sich nicht für Clojure interessieren, kein gutes Argument dafür, es nicht zu verwenden, es sei denn, es ist eine Unternehmensrichtlinie, die Sie respektieren müssen.


0

Ob das Programm nach Ihrer Abreise fortgesetzt wird oder nicht, geht Sie aus meiner Sicht nichts an. Sie können die Programmiersprache verwenden, die Sie verwenden, um etwas zu machen, das Ihrem Chef gefällt, das sich für mich ziemlich gut anhört. Sich um die Fortsetzung zu sorgen, ist etwas, was Ihr Chef tun sollte.


3
Es ist die Aufgabe Ihres Chefs, sich um die Fortsetzung zu sorgen. Aber es ist Ihre Aufgabe, sicherzustellen, dass der Chef sich der Probleme bewusst ist, über die er sich Sorgen machen sollte. Sie sollten es mit dem Chef besprechen.
MarkJ

Ich stimme zu, obwohl sich das OP keine Sorgen machen sollte, wenn der Chef beschließt, nichts zu tun.
Paul Hiemstra

0

Organisieren Sie ein Tutorial oder eine Trainingseinheit. Wenn Ihre Teammitglieder nicht wie Profis agieren und ihr Wissen erweitern möchten, insbesondere wenn das Programm immer wichtiger wird, als es Ihnen selbst überlassen ist. Im schlimmsten Fall können Sie mit dem Management sprechen, und es kann sein, dass diese Art von Trainingseinheit angeordnet wird. Sie sehen vielleicht wie ein Idiot aus, aber zumindest sind Sie nicht der einzige, der das Programm warten muss. Die andere Möglichkeit besteht darin, einen zweiten Programmierer, der sich mit Clojure auskennt, in das Team aufzunehmen.

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.