Highly Productive Web Development Tools
Over the years, most developers will accumulate a respectable arsenal of tools as part of their regular work flow. Following are a few from my toolbox which end up saving me hours every week if not each day. The list is geared toward LAMP development, starting with the heavy weights.
- Version Control
You are in the business of writing code so it’s safe to say that foregoing a versioning system is a Very Bad Idea. If you, or heaven forbid, your company are not using SVN or the equivalent, you can be certain that the quality of your code will be much worse. It will have more bugs, they will take longer to fix, your code will be harder to manage and consequently your product will take a longer time to reach maturity. Even if you are using Source Safe or some such versioning system, consider a more serious alternative like SVN. - Build environment
While I don’t consider this a must have for individuals (batch files can sometimes suffice and PHP files don’t require building) but if you set milestones, schedule releases or have multiple developers working on a set of features, you will probably want to work with a build system. Even as a solo developer, take the time to play with Phing or Ant and you may end up getting good use out of them. A build system will ensure that your application is always in a stable state so a developer working on the content management module isn’t blocked because you broke the login module. It will also allow you automatically compile your code, run unit tests, send out alerts and automate tasks like minifying your code, building dependencies and so on. If you have a lot of developers making a lot of changes throughout the day, CruiseControl or Xinc can result in even high stability through Continuous Integration. - Deployment
Depending on the complexity of your web applications, deployment can be a tedious process and a real bore. In most cases it involves transporting updated bits over to the production server but with RSync you need not look any further. It’s a comprehensive tool that uses an incremental algorithm for fast synchronization–so if you change one line in a 100KB file, Rsync will transfer only the one line instead of the whole file. If you are still using FTP to push out changes, you are getting old. On some days, I will sync dozens of times a day for even the most minor changes resulting in continuous improvement through dozens of small iterations. If you are using MySQL then consider using MySQLDump alongside Rsync to synchronize data. - Debugging / Editing
Like a lot of PHP developers I use print statements and a streaming Apache error log (tail -f error.log) for debugging. For more serious bugs, XDebug can drastically improve the time to pin bugs. PDT for Eclipse IDE is a more cohesive solution but I prefer the lightweight Notepad++ with XDebug support. E-Text Editor is another great editor I often use because it has the best live regex search/replace engine I have encountered (regexes are another a big time saver). And don’t forget to have a look at PHP Shell if you’re not familiar with it. It is terribly useful for experimenting, plus you can preempt the edit/test/debug cycle by interactively testing PHP scripts on the command-line. - Testing
Unit testing is useful for projects that plan to have a long shelf-life or many hands on deck (especially open source projects being touched by a passing stream of developers). I use PHPUnit which fits the bill quite well. Once you have it set up, writing unit tests is not that time consuming. However, I write unit tests on a need basis–such as when I want to refactor a tricky piece of code. In such scenarios, unit tests provide a cushion and margin of safety. - Client Side Tools
CSS can be quite tricky and usually requires to a lot of trial-and-error via the edit/save/reload cycle. Unless, ofcourse, you use the Test Styles bookmarklet which allows live CSS editing. The Javascript equivalent is the Javascript Shell which attaches a shell to any browser window and allows you to interact with the page. These two my favourite front-end tools along with the awesome Web Developer Toolbar which I hope most web developers are already familiar with. Then there are the irreplaceable usual suspects (particularly useful for Web 2.0 development): Firebug, Live HTTP Headers, Tamper Data and Add N Edit Cookies. There is also Aardvark which offers some handy DOM inspection and manipulation. YUICompress is reliable for minifying (and obfuscating) CSS/Javascript. - Libraries
For Javascript I limit myself to Prototype or jQuery because of the wide support and high level of activity (even ended up building an Online Scrabble game in the enthusiasm). CodeIgniter, Zend and Cake are popular for PHP though I have only had a cursory look at CodeIgniter. For CSS there has been a recent trend toward grid-based layouts for which I prefer the Blueprint CSS framework which also does a good job of performing a CSS reset. These libraries will speed up your development tremendously and rid you of annoyances like testing CSS/Javascript across multiple browsers or writing plumbing code. - Resources
Along with API documentation and generic help, there are a couple of other resources I frequent during projects. CSS Discuss Wiki documents answers for all commonly known CSS problems (browser hacks, layouts, techniques). Font Matrix is handy for choosing a good font stack along with some popular Color Tools for quick palettes.
If some of these tools are new to you, be prepared to spend more time upfront to learn their use but rest assured, they will continue to reap dividends for many moons.
What’s in your toolbox?
Great post! Some items I knew, others I didn’t. I think web developers that are in a team or solo environment, with PHP or not would benefit from a lot of the tools mentioned.
Also having the StackOverflow around is the great tool for the help when you need it 🙂
Couldn’t agree more. StackOverflow is an indispensable resource!