Tools
This hastily thrown-together page shows some of the tools of the trade I use, and one or two that I've written recently.
Vim
I use Vim as an editor, and I use it for pretty much
everything, including as a command interpreter.
(It's easy, assuming you're using a Unix-like operating system: just create a file in your home
directory called .inputrc and type set editing-mode vi into it. This will
make things like Esc j work in Bash, PostgreSQL and Python's command interpreters, and
more!) However, I'm not hardcare enough to use the Vĩmperator FireFox plugin.
Since I don't want to perpetuate any religious war, I'll state now that I don't think Vim is necessarily better than Emacs, or any other serious editor for that matter. I've just been using Vim for so long that it would take years to become as proficient with anything else, negating any alleged benefit. I do note, however, that a lot of my Emacs friends have switched to Vim in recent years.
Equally important as the editor itself are the plugins I use:
- BufExplorer: makes managing
buffers (multiple open files) much nicer. I've also added a shortcut to the vim command
edit %:p:hto make a complimentary 'path explorer' - JavaBrowser: opens an IDE-like sidebar with quick access to Java class members
- Java_APIDoc: shows the API in your web browser for the class or method under the cursor
- JCommenter: quickly produces boilerplate for javadocs
- engspchk: a spelling checker—I actually use a modified version I wrote for Australian English
- Increment: makes it easy to generate code (or whatever) with incrementing numbers—not so relevant now but I used it a lot in my C programming days
- autovariable: this is a work in progress, so I haven't submitted it to vim.org yet, but it automatically generates or completes Java variable names based on the closest class name before the cursor.
There are a couple more little ones, including self-made ones like autovariable, and my vimrc file has also evolved with a lot of shortcuts over the years. After I've installed Vim on a machine, I get up and running quickly by downloading and extracting this zip file, copying either .vimrc or _vimrc to my new home directory, and modifying just one line in it. More details are in the vimrc file itself (without the period or underscore).
Java Coding
Even though I do most of my coding using Vim, a good IDE can make refactoring and debugging easier. The two big ones, of course, are IntelliJ Idea and Eclipse, and I'm comfortable with both.
As you would expect, the first plug-ins I install are either IdeaVim or VIMPlugin, so I can keep using Vim keystrokes. IdeaVim provides better Vim emulation and IntelliJ generally has better support for quickly loading a file in the real Vim, so for this reason I prefer IntelliJ. But the slowness of any IDE, and the tendency for them to crash at the worst possible moment, makes me only use these when I need to.
A nice plug-in for Eclipse is Modelistic; I find it helpful for getting to know a new Java codebase.
Web Development
It's hardly news that FireBug has made web development a hundred times easier, and the Yahoo utility YSlow adds even more functionality. The Web Developer add-on compliments FireBug nicely.
Then there's Internet Explorer. No, this is not a recommendation, but an acknowledgement of the reality we software engineers have to live with. To make my reality easier, I use Multiple IE, which allows me test my web work on multiple versions of IE on one Windows box. That way, I'm at least more likely to find IE-related bugs myself, instead of waiting to hear about them from QA or an end user.
A good AJAX framework abstracts a lot of browser-specific JavaScript issues away, and I've come to feel quite at home with jQuery. I'm not really into the fancy-pants concatenations of functions, though; I find the more traditional line-at-a-time JavaScript style easier to read and maintain. And speaking of JavaScript maintainability, JSDoc allows me to compile JavaDocs from my JavaScript.
Python
I'm still pretty new to Python, but I use it for pretty much everything these days. It really lives up to its promise of more compact code, and there are so many libraries for it that writing anything is a breeze. It takes me less than half the time to write a Python script than a comparable bash script, and it even measures up against Java, a language I've had an in-depth knowledge of for years.
As an example, refer to this podcast receiver I recently wrote. (You'll need these utility classes.)