Ich finde es toll, dass das Schreiben von Python, Ruby oder Javascript so wenig Boilerplate erfordert. Ich liebe einfache funktionale Konstrukte. Ich liebe die klare und einfache Syntax.
Bei der Entwicklung einer großen Software in einer dynamischen Sprache kann ich jedoch drei Dinge wirklich schlecht:
- Im Code navigieren
- Identifizieren der Schnittstellen der von mir verwendeten Objekte
- Effizientes Refactoring
Ich habe sowohl einfache Editoren (dh Vim) als auch IDE (Eclipse + PyDev) ausprobiert, aber in beiden Fällen habe ich das Gefühl, dass ich viel mehr in den Speicher investieren und / oder ständig "grep" und den Code durchlesen muss, um mich zu identifizieren die Schnittstellen. Dies gilt insbesondere, wenn Sie mit einer großen Codebasis mit mehreren Abhängigkeiten arbeiten.
Was das Refactoring angeht, zum Beispiel das Ändern von Methodennamen, hängt es stark von der Qualität meiner Unit-Tests ab. Und wenn ich versuche, meine Komponententests zu isolieren, indem ich sie für den Rest der Anwendung "ausschneide", gibt es keine Garantie dafür, dass die Schnittstelle meines Stubs mit dem Objekt, das ich stubbe, auf dem neuesten Stand ist.
Ich bin sicher, es gibt Problemumgehungen für diese Probleme. Wie arbeiten Sie effizient in Python, Ruby oder Javascript?
quelle
Antworten:
Holen Sie sich einen besseren Editor als VIM.
Ich benutze Komodo Edit.
Gut. Denken ist gut. Ich finde, dass "Lernen" schließlich zu "Gedächtnis" führt.
Das ist typisch. Wenn Sie sich nicht an sie erinnern können, dann sind sie doch zu komplex, oder? Zeit zu vereinfachen.
Einfach ist schwer zu schaffen. Aber wenn Sie Probleme haben, sich zu erinnern, ist es ein Symptom für schlechtes Design.
Ich benutze grep. Für mich geht das. Mein Komodo Edit hat viele nette Suchmöglichkeiten. Notepad ++ auch
Doc Strings und die
help()
Funktion funktionieren. Ich benutze sie. Täglich.Das sind keine Neuigkeiten. Das war schon immer so, auch in einer statischen Sprache.
In einer statischen Sprache werden wir oft faul, wenn wir davon ausgehen, dass - solange es kompiliert wird - es sehr wahrscheinlich ist, dass es funktioniert. Dies ist offensichtlich falsch, aber wir werden faul.
Dies sind keine "Probleme" und erfordern keine "Problemumgehungen".
"den Typ der Objekte nicht kennen"? Ja wirklich. Wenn ich den Client eines Objekts entwerfe, weiß ich, welchen Typ ich entworfen habe.
Wenn ich einen Service definiere, der von mehreren Clients verwendet wird, ist der "genaue" Typ nicht relevant, wenn ich die erforderliche Schnittstelle von
quack()
und definiert habefeathers()
.Schließlich habe ich die Read-Execute-Print-Loop und andere Tools, um in den seltenen Fällen, in denen ich ein subtiles Problem habe, den "exakten" Typ zu bestimmen. Das benutze ich eigentlich jeden Tag.
Scheint nicht zu schwierig - zumindest in Python - den Typ eines Objekts abzuwickeln. Müssen dynamische Sprachen eine REPL haben, ist es ziemlich einfach zu sehen, was los ist.
Das ergibt wenig Sinn.
help()
funktioniert.Und meine IDE kann die Definition oft finden. Nicht immer - einige gewundene dynamische Konstrukte können die Basisklasse leicht verbergen. In diesem Fall muss ich über die Klasse des Objekts nachdenken, um die Methodendefinition zu finden. Natürlich schreibe ich den Code, also gibt es dort wenig (oder gar kein) Rätsel.
quelle
Eine schnelle Suche ergab Rfactor für Ruby ( Interview hier ) und Fahrradreparaturmann für Python. Ich bin mir nicht sicher, wie gut sie sind ... aber sie sind es wert, angeschaut zu werden.
quelle
Es gibt eine Firma - JetBrains - Autoren des ReSharper, TeamCity und IDEA. Sie haben kürzlich angefangen, sich mit dynamischen Sprachen zu beschäftigen, und bereits ihre Tools für Python, PHP und Ruby veröffentlicht.
Die Qualität ist super. Dies sind keine weiteren Plugins für Ihre Lieblings-IDE, aber voll funktionsfähige IDEs. Sie eignen sich sehr gut für Refactoring / Navigation / Debugging usw. - sie sind wie IDEA lite.
quelle