Navigating the code
Get a better editor than VIM.
I use Komodo Edit.
I feel like I have to commit a lot more to memory
Good. Thinking is good. I find that "learning" leads eventually to "memory".
Constantly "grep" and read through the code to identify the interfaces.
This is typical. If you can't remember them, then they're too complex, aren't they? Time to simplify.
Simple is hard to create. But when you have trouble remembering, it's a symptom of bad design.
I use grep. It works for me. My Komodo Edit has lots of nice search. So does Notepad++
Identifying the interfaces of the objects I'm using
Doc Strings and the help()
function work. I use them. Daily.
Refactoring efficiently...
it becomes hugely dependent on the quality of my unit tests.
That's not news. That's always been true, even in a static language.
In a static language, we often get lazy, assuming that -- as long is it compiles -- it's really likely to work. This is manifestly false, but we get lazy.
I'm sure there are workarounds for these problems.
These aren't "problems" and don't require "workarounds".
A dynamic language is precisely about not knowing the type of the objects you manipulate. When you receive a parameter, you assume it defines a "quack()" and a "feathers()" method, but you don't know where there documentation is (in fact, they will have multiple docstrings in their multiple implementations).
"not knowing the type of the objects"? Really. When I design the client of an object, I know what type I designed.
When I define a service, used by multiple clients, the "exact" type is not relevant, when I have a defined the required interface of quack()
and feathers()
.
Finally, I have the Read-Execute-Print-Loop and other tools to determine the "exact" type in the rare cases when I have a subtle problem. That's what I actually use every day.
>>> x = some_mystery_factory( some, args )
>>> type(x)
>>> dir(x)
Doesn't seem too difficult -- at least in Python -- to unwind the type of an object. Must dynamic languages have a REPL, making it pretty easy to see what's going on.
You don't know the expected parameter order either. It seems hard for an IDE to help there.
That doesn't make much sense. help()
works.
And my IDE can often locate the definition. Not always -- some convoluted dynamic constructs can easily conceal the base class. In that case, I have to actually think about the object's class to locate the method definition. Of course, I'm writing the code, so there's little (or no) mystery there.