Navigazione nel codice
Ottieni un editor migliore di VIM.
Uso Komodo Edit.
Sento che devo impegnarmi molto di più nella memoria
Buona. Pensare è buono Trovo che "apprendere" alla fine porti alla "memoria".
"Grep" costantemente e leggere il codice per identificare le interfacce.
Questo è tipico Se non riesci a ricordarli, sono troppo complessi, vero? È tempo di semplificare.
Semplice è difficile da creare. Ma quando hai difficoltà a ricordare, è un sintomo di cattiva progettazione.
Uso grep. Per me funziona. La mia modifica di Komodo ha molte belle ricerche. Così fa Notepad ++
Identificare le interfacce degli oggetti che sto usando
Doc Strings e la help()
funzione funzionano. Li uso. Quotidiano.
Refactoring in modo efficiente ... diventa fortemente dipendente dalla qualità dei miei test unitari.
Questa non è una novità. È sempre stato vero, anche in un linguaggio statico.
In un linguaggio statico, spesso diventiamo pigri, supponendo che - fintanto che si compila - è davvero probabile che funzioni. Questo è manifestamente falso, ma diventiamo pigri.
Sono sicuro che ci sono soluzioni alternative per questi problemi.
Questi non sono "problemi" e non richiedono "soluzioni alternative".
Un linguaggio dinamico riguarda proprio il non conoscere il tipo di oggetti che manipoli. Quando ricevi un parametro, supponi che definisca un metodo "quack ()" e un "feathers ()", ma non sai dove sia la documentazione (in effetti, avranno più docstring nelle loro molteplici implementazioni).
"non conoscendo il tipo di oggetti"? Veramente. Quando progetto il client di un oggetto, so quale tipo ho progettato.
Quando definisco un servizio, utilizzato da più client, il tipo "esatto" non è rilevante, quando ho definito l'interfaccia richiesta di quack()
e feathers()
.
Infine, ho Read-Execute-Print-Loop e altri strumenti per determinare il tipo "esatto" nei rari casi in cui ho un problema sottile. Questo è quello che uso effettivamente ogni giorno.
>>> x = some_mystery_factory( some, args )
>>> type(x)
>>> dir(x)
Non sembra troppo difficile - almeno in Python - rilassare il tipo di un oggetto. I linguaggi dinamici devono avere un REPL, rendendo abbastanza facile vedere cosa sta succedendo.
Neanche tu conosci l'ordine dei parametri previsti. Sembra difficile che un IDE ci aiuti.
Non ha molto senso. help()
lavori.
E il mio IDE può spesso individuare la definizione. Non sempre: alcuni costrutti dinamici contorti possono facilmente nascondere la classe base. In tal caso, devo effettivamente pensare alla classe dell'oggetto per individuare la definizione del metodo. Certo, sto scrivendo il codice, quindi c'è poco (o no) mistero lì.