I thought I’d put together my list of essential items for any software developer:
- Text editor
As word processors, type writers and stationary are to journalists, so text editors (e.g, CodeWright, Scite, VI, EMACS or Visual Studio) are for programmers: the tools closest to our hearts. They are the main way we interact with our medium and they are one of our most personal choices as every individual has a different way of thinking and working. Having an editor that you are an expert with is probably one of the biggest productivity gains a programmer can make by installing a single piece of software. If you are just starting out as a programmer finding and mastering a text editor (or IDE like Visual Studio or Eclipse) should be one of your goals early on. - Debugger
Debuggers are essential to accurately investigate, diagnose and fix bugs as they allow programmers to step into executing source code: follow the execution of the program, inspect variable values at run time and set breakpoints to halt executing programs at interesting points of execution. Debuggers and text editors often come bundled together in the form of an Integrated Development Environment (IDE) examples of which would be Visual Studio or Eclipse. - An efficient way of finding information
Finding information is a common theme from software developers whether it is finding all instances of the use of a particular class in your program’s source code or finding workarounds for a particular compiler error: search tools are essential. Fortunately internet search has been made dramatically easier by Google, and programs like Grep that use regular expressions have helped ease the chore of finding information quickly on your computer. Some advanced text editors and IDEs also feature regular expression based searching, which is great as it gives you one less tool to learn. - Unit testing framework
Unit testing frameworks like the xUnit family of test frameworks (e.g, NUnit for .net applications) have rapidly become essential tools in the continuing battle to improve source code quality and avoid implementing the same bugs repeatedly during the course of development (regression). Unit tests relieve the programmer of having to manually test all the program components every time they make a change in order to verify the quality of the change. This is both a huge time saving and a great confidence booster when all the tests pass after a change, this does not mean that no ad hoc manual testing should be done. Test frameworks are also starting to be included in IDEs or integrated into existing IDEs via add-ons or plug-ins which again makes them even slicker. - Source Control
Source or version control software is an essential part of any project that is more than a script that will only ever be used once. Version control allows a programmer to check in source files into the source control repository at regular intervals, access the history of those files (e.g, see what they’ve changed) and for other programmers to sync copies of those source files onto their computers. Source control is essential in any team setting or for any complex work as there is otherwise a significant risk that work will be lost, due to either re-factoring disasters (it worked before but now it doesn’t and you can’t remember your changes) or synchronisation issues when trying to share files between multiple programmers (especially if two or more programmers edit the same file). Source control is also starting to be integrated into IDEs and text editors which is great as there is nothing more jarring than having to leave your editor to find and check out a source file.
My personal quiver of tools is as follows:
- Text Editors: Visual Studio (for C, C++ & C#), Eclipse with PyDev (for python) and Scite (for XML & misc. scripting languages).
- Debugger: Visual Studio or Eclipse with PyDev.
- Search: Google (www), Visual Studio, Scite or occasionally Google Desktop.
- Testing: NUnit or the xUnit for the language and platform I’m working on.
- Source Control: Perforce, pretty much on any platform, for any language.
Post a Comment