Coding is often just a small part of software development. There are lots of other tasks to attend to. Here are some tools to help with all aspects of the job.
When software developers get together, chatter quickly turns to shop talk. Developers regale one another with tales of hair-pulling bugs, demanding clients, cheap hardware, and fantastic hacks. Conversation includes esoteric debates, too: the advantages of one processor versus another, or the aesthetics of indentation. There’s even proselytizing: Emacs or vi? Mac or not Mac? RMS: angel or devil? And of course, no professional gathering would be complete without a discussion or three about the tools of the trade. Indeed, of late, there seems to be a veritable explosion of great tools for developers. The ubiquity of the Web has democratized the marketplace for such tools, but Web application development is sufficiently refined that propping up a new product online is quite tractable and inexpensive. Moreover, leasing an online service such as Github is cheap compared to purchasing licenses, installing software, and maintaining internal servers. And, in a boon for developers, the cost of switching from one online service to another is relatively slight. All things combined, these are heady days for software developers.
This week, I list some of my favorite software development tools. There are the usual suspects: an editor and a debugger, but I also highlight some tools that are far less technical but no less vital to the job.
Since this is Linux Magazine, it’s no shock that I consider Linux essential for the job. Virtually every tool and package is available on the platform, and since much of the software I use originates on Linux, its my canonical reference for operation. A bug in a Linux package installed via apt-get likely means the bug exists on all platforms. Software installation is also a snap, the source to every utility and library is readily available, and hosting is cheap. For software development, there is no equal.
However, coding is often just a fraction of the time developers spend on software development. There’s project management, reporting, email, documentation, billing, and more. Linux offers some solutions, but the king of productivity platforms is the Mac. From email to drawing tools such as OmniGraffle, the Mac is my preferred platform for daily work. On its surface, the Mac offers rich and GUI applications; at its heart, it’s a FreeBSD system that operates identically to my Ubuntu server.
I have a suite of preferred tools on the Mac. Parallels runs virtual instances of Linux and Windows on my Intel-based MacBook. Navicat, Seequel Pro, and MySQL Workbench peer into MySQL. Navicat is a power tool, but I find the minimal Seequel Pro more convenient of late. OmniGraffle creates diagrams and wireframes with ease and has no equal on any platform. And Textmate and BBedit are permanent denizens of my Dock. Textmate is incredible for Rails coding, but I prefer to write HTML and text documents in BBedit. I also run lots of little gems: PTHPasteboard Pro minatains a near-limitless less of clipboards; Teleport lets me use one mouse and keyboard to span a desktop full of Mac machines; and Billings keeps track of my billable hours.
Speaking of Firebug, it is my preferred tool for debugging client-side Web application code. I suppose it would be more correct to recommend Firefox, since Firebug is simply an extension. The third-party add-ons and extensions make Firefox a hands-down winner for application development. Y!Slow provides insight on non-performant Web pages, and SenSEO not provides similar metrics for search engine optimization (SEO) benchmarks. Just point SenSEO at a page and it advises how to improve the metadata accessible to the search engines.
On the server-side, I prefer debuggers over
inspect statements. Both irb and rdebug suffice for Ruby development, while embedded
debugger calls help to debug Rails applications running under the standard Rails Web server. Stalwart gdb tackles C.
Related to bugs, I currently use Lighthouse to track bug reports. One of its advantages is the email gateway: Others and I can submit new tickets, make amendments, and track progress all via email. Other tracking software, including Jira, also provide email portals, but this feature and the simplicity of the Lighthouse user interface. Another option is Sifter, which features an even more attractive and approachable user interface. Prices are comparable: each is around $20 per month for a few projects, disk space, and seats.
Lighthouse and Sifter are just two of many services now available online. Task management is the strong suit of Basecamp and a similar tool named Redmine. Basecamp is free or cheap and great for project management. It too features an email gateway: replies to certain messages are automatically appended to ongoing conversations.
Gthub and Beanstalk provide Git and Subversion hosting, respectively. I continue to use Git from the command-line, but I’ve switched to Versions on Mac OS X to interact with Subversion. Both version control systems seem popular, with some projects on one or the other. I suspect I use Git more, simply because its cool among Ruby aficianados, and its operation is something of an analog to traditional utilities like mv, rm, and the ancient Revision Control System (rcs) found on Unix systems back in the day.
Glancing at my bookmarks, I also use Twitter to follow projects, companies, and people. The advantage of Twitter and a Twitter client like Adium or TweetDeck is the immediacy: its flags a tantalizing message for me. I often forget to catch up on my RSS Feeds (read via NewsFire), so Twitter is an adequate substitute for instant updates. Many lay people use Twitter; others do not get it. For me, Twitter is an essential channel for me; otherwise, I’d miss a lot of important patches, releases, and security alerts.
And Lots More
I typically write about my arsenal of tools in this column. Recent entries included articles on Sunspot for search, Typekit for better fonts, and CSS frameworks to jump start Web page development. In no specific order, here are other favorites I am tinkering with now.
- Eliot Horowitz wrote about MongoDB this week. I’ve applied it to store everything from email messages to user profiles, two examples of data that can vary in size and content. MongoMapper is an ActiveRecord-like interface to MongoDB for Rails applications and I highly recommend it. Mongo drivers and software is also available for Java, Python, and PHP, too, at a minimum. I will write about MongoMapper next week.
- Stack Overflow is a great place to post questions and provide answers to assist your fellow geek. Each correct answer you post earns you some street cred and karma. If you’re in a jam, post here and look for a suitable Google Group for your topic. You should also consider IRC. Yes, it’s old school, but if lots of others are online, a quick chat can also provide a solution to some vexing issue in the middle of the night.
Finally, developers need proper fuel. Some run on cola, others on coffee, and still others on microbrews. My power source of choice is Thai food. With it, I can code and play the keyboard like Linus and Linus, that is Torvalds and Van Pelt, respectively.
If you have a favorite fuel or an application you cannot live without, drop me a line. I’d love to hear about it.
Martin Streicher is a freelance author and Ruby on Rails developer. You can reach Martin at firstname.lastname@example.org.