Whenever I learn a new set of skills—such as photography or cooking—I want to learn as much as I can about the tools that the pros use.
Sure, to learn photography you need to understand exposure and depth of field, but that’s only part of what it takes to be a real photographer, to be a good photographer. What camera and lenses should you buy? What brand of film? I even pay attention to borderline ridiculous details like what kind of camera bag the pros use. Learning first-rate cooking skills won’t do you much good if you don’t have a good set of pans. Any chef will tell you that having quality, sharp knives make a world of difference in the experience of cooking, even though it may not change the flavor. And, as I love to watch Gordon Ramsay scold, keeping a clean kitchen is an essential (and too often overlooked) step in producing quality food.
The point is that there is more to learn than just the fundamentals. It makes sense to learn from the trial-and-error experience of people who are already working with these tools everyday. I may decide I disagree with their preferences, but knowledgeably making a different choice is much better than stumbling around on my own. Plus in the process, I know I will discover some of the intricacies and pitfalls that come with working in the field.
In that spirit, here are the tools that help me as a web developer.
I have always been an Apple user so that is where I am the most comfortable. It has been a great choice for web development because I can develop on OS X’s Unix and deploy on Linux. I like having a laptop because everything travels with me. If I need to fly to a meeting in California or teach a course in Texas, I have all my web development files with me. I can work on the plane. I can answer client emails from the hotel. I can upload bug fixes as soon as I find out about them. I prefer the 15″ because the 17″ is harder to lug around and I don’t need the extra width (screen height is more important for programming than width).
In order to have more screen real estate, I attach an additional monitor to my laptop. When I’m developing, I usually keep my code and any server connections (FTP, SSH) in front of me and use my external monitor for my web browser(s). Fix code over here, view the changes over there.
Recently, I’ve also started using OS X’s Spaces to good effect. Spaces let’s you create several virtual screens that you can quickly switch between. It works well for me when I’m multi-tasking. I can put email and personal web browsing in one space and then put work for three different clients in three separate spaces. If I have a brainstorm of if a phone call comes in from a client, it only takes a second to switch spaces and start taking notes or making changes.
External Hard Drive / Time Machine & Time Capsule
Backup, backup, backup. If cleanliness is essential to a career in the kitchen, then backing up your computer is essential to a career in programming. It may not make your code any better but it will make the experience better. An external hard drive is a tiny investment for a huge data insurance policy. Of course you have to remember to use it! At a minimum, backup once a month and/or before any trip. For key files, I recommend keeping two versions. You can safely throw out the oldest version when you make a new backup because you know there is another full backup. Be sure not to forget about non-obvious files like MySQL databases.
You can also get software to run backups for you. I’ve tried different programs and techniques with mixed results. The best so far is Apple’s Time Machine when pair with their Time Capsule. Every hour, my computer boots up the Time Capsule hard drive and records any file changes. I don’t have to remember to make the backup. I always know I’m covered. One of the added benefits of Time Machine is that you can also see the old versions of the files, even deleted files, in case you made a revision or deletion you didn’t mean to make.
Don’t attempt coding without a good text editor, especially one that has code coloring. While I know that a lot of developers prefer a full Integrated Development Environment (IDE) over a simple text editor, I do not. I prefer the simplicity of a tool that does one job really well. I don’t want to have to learn the ins-and-outs of the IDE. I don’t want to spend time wrestling with its peculiarities and bugs. If I were working with a compiled language like C++ or Java maybe I would find an IDE more useful, but for web programming it’s easy enough to host my own development environment (whose peculiarities I already know).
For many years, BBEdit was my favorite editor, but about three years ago I switched to TextMate and I’ve never looked back. TextMate lets me open up a whole project at once with a file drawer and tabs that make it easy to move around. It will fold up (collapse) sections of code to get them out of my way when I’m not using them. It lets me bookmark code to make it easy to locate later. It has great search and replace features (searching using regular expressions is a feature I insist on). It has customizable code coloring/formatting, a long list of language specific helpers (bundles), and many useful hot keys and shortcuts. The only feature I miss from BBEdit, is the ability to run diff on two folders. You can manage it in TextMate but not as easily. I still have BBEdit around for those rare times when I need it.
The best FTP software I’ve used. Simple and reliable.
I have recently started using ExpanDrive and I can’t say enough good things about it. It is SFTP software that mounts a remote server as if it were a local drive. You can drag/drop and open files using the Finder, just like they were on your Mac. The only reason that this software won’t replace Transmit for all my FTP needs is that it is for SFTP only right now. (Half of the servers I use use FTP and half use SFTP.)
One note, if you want to use ExpanDrive to open files as a project in TextMate, TextMate will slow to a crawl while it refreshes the list of files in the project every time you switch to it from another program. There is a plugin called Remate that removes the wait and gives you a manual “Refresh Project Files” link instead.
The standard for working with MySQL databases in a simple user-friendly web interface. I love the fact that it exposes most of the SQL requests it makes so that beginners can learn from it and pros can tweak and edit it. I still use MySQL from the command line too, but for a quick answer, for working out complex queries, or for importing and exporting records, phpMyAdmin gets me there faster.
This blog uses it. It’s easy to install for clients (or friends) who need a simple, free blog or content management system. I also find it instructive to watch the development of WordPress, both from the code and business perspective. The WP team is doing a lot of things right.
I use QuickBooks for all my business accounting. I use it to record deposits, write checks, and keep track of projects. I can run a report and know which projects brought in the most revenue and which were the most profitable (not the same thing). Four times a year I send the file off to my accountant who figures out how much I own in taxes. Because it is designed for users with an accounting background, I’m not sure how easy it would be for a beginner to pick up on their own. I had an accountant teach me.
Dictionary & Thesaurus
It may sound strange, but the dictionary and thesaurus have been frequently useful to me. Not just for writing client proposals, but for when I am actually programming. Suppose you are working on a site where you need a database for “types” or “classes”. But “type” and “class” are reserved words in most programming languages. Just open up the thesaurus and find a synonym–maybe “brands”, “groups”, “vintages”, or “flavors”. They can also be a great help when trying to think of new domain names, project names, or company names.
I have been a long time client of Pair. I love them for their stability, domain management tools, and email management. They are a great place to host an HTML or PHP site, but Ruby on Rails hosting is not one of their strengths.
For Rails hosting (or any hosting really), I can’t say enough good things about Slicehost. They are inexpensive, it is fast and easy to sign up or modify your account, and their online documentation is good.
The only downside to Slicehost is that you have to be server savvy. When you sign up it’s literally like taking a brand new Linux server out of the box with only the base software installed. You have to do the rest. Beginners will do better to go with shared hosting environment where much of it is pre-configured for you. But experts will love the freedom.
Rackspace is the Mercedes Benz of web hosts. I can’t afford them but some of my clients can. If a client wants reliability and top-notch customer service, and will spend the money to get it, then I refer them to Rackspace.
And even though I use them less frequently, I can also report good experiences with MediaTemple and LiquidWeb.
And rounding out the list would be some more obvious choices: Firefox, Safari, Internet Explorer, Photoshop, Illustrator, iCal, Mail, Keynote and iTunes.
I’d love to hear what tools help you. I still have plenty to learn from others!