Im Code navigieren
Holen Sie sich einen besseren Editor als VIM.
Ich benutze Komodo Edit.
Ich habe das Gefühl, dass ich mich viel mehr der Erinnerung widmen muss
Gut. Denken ist gut. Ich finde, dass "Lernen" schließlich zu "Gedächtnis" führt.
Ständig "grepen" und den Code durchlesen, um die Schnittstellen zu identifizieren.
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
Identifizieren der Schnittstellen der von mir verwendeten Objekte
Doc Strings und die help()
Funktion funktionieren. Ich benutze sie. Täglich.
Effizientes Refactoring ... es hängt stark von der Qualität meiner Unit-Tests ab.
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.
Ich bin sicher, es gibt Problemumgehungen für diese Probleme.
Dies sind keine "Probleme" und erfordern keine "Problemumgehungen".
Bei einer dynamischen Sprache geht es genau darum, den Typ der Objekte, die Sie bearbeiten, nicht zu kennen. Wenn Sie einen Parameter erhalten, nehmen Sie an, dass er eine "quack ()" - und eine "feathers ()" - Methode definiert, aber Sie wissen nicht, wo sich die Dokumentation befindet (in der Tat haben sie mehrere Dokumentzeichenfolgen in ihren verschiedenen Implementierungen).
"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 habe feathers()
.
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.
>>> x = some_mystery_factory( some, args )
>>> type(x)
>>> dir(x)
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.
Sie kennen auch die erwartete Parameterreihenfolge nicht. Es scheint schwer für eine IDE, dort zu helfen.
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.