Some people claim that dynamic languages are too difficult to manage without using powerful IDEs. One theory is that a lack of static typing means that static analysis is insufficient to write and to manage great gobs of code.

I look at the problem differently. I don't want to manage great gobs of code. I want to use small, sharp, flexible, well-designed tools that I can fit together in a coherent form.

I wrote about recursion and tail call elimination in the Modern Perl book yesterday. As I was doing so, I realized that I should at least look at Yuval Kogman's new Sub::Call::Tail and Sub::Call::Recur.

Granted, I do have root privileges on my local machine (though with local::lib that doesn't matter anymore) and I have the suitable development tools installed (gcc, make, the Perl headers, system headers), and I have my CPAN client installed -- but installing these distributions to test was almost trivial:

$ cpan Sub::Call::Tail

In less than the time it took to read the documentation on search.cpan.org, the CPAN client prompted me for a sudo password. I changed three lines in my example code and ran the tests and everything passed.

You read that right. It took fewer than five minutes from deciding to install a language extension to using that extension productively. Yes, my example was small, but my confidence in the code and the ecosystem is high because CPAN has been a fundamental part of the professional, modern Perl experience for over a decade.

I don't have to care about installation paths or mirror selection. I don't have to care about having the right dependencies. I don't have to care about losing out on the latest version or wondering if the code works right on my machine. The tools are great.

(Caveat: sometimes I do have to worry about those things, but those are the exceptions which demonstrate how amazing it is that a system begun 14 years ago with tens of thousands of modules written by thousands of authors works together so well.)

Part of this is a testament to the Unix philosophy. Sub::Call::Tail does one thing and does it well. There's almost no interface. There's little to learn. It's a very simple language extension that, if it behaves properly, should only make your code clearer and somewhat more efficient (if you even need to measure it).

Part of this is that Yuval is a good, careful coder with good design sense. See also the first point.

Part of this is also that I have more than a decade of practical experience with Perl 5, so I know that I can trust Yuval and I know how to wrangle CPAN to do what I want. Then again, the CPAN ecosystem has improved so much even in the past three years that that ease doesn't come only from practical experience.

Could an IDE replicate the CPAN experience? I suppose there could be a graphical IDE to browse and install CPAN distributions in the same way that some people find Synaptic easier to use than aptitude. I'd like to see such a thing, personally -- but make no mistake, that's just an interface over what makes CPAN work: the CPAN distribution system, CPAN metadata, CPAN Testers, CPANTS, community standards, and the realization among effective Perl programmers that programming modern Perl effectively means making the most of what's available on the CPAN.

My productivity doesn't depend on an IDE writing code for me or performing automatic refactorings. (I have no problem with the latter.) My productivity depends on reusing great code, most of it code I didn't have to write. If you overlook the CPAN tools because they don't come with a splash screen or a point and drag installer, you're overlooking one of the most powerful benefits of modern Perl.