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.
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.
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
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?