Software I can’t live without
Windows XP Pro:
- Microsoft OneNote for notes.
- Microsoft Visio for technical drawings.
- Microsoft Visual Studio for programming.
- Visual Assist for Visual Studio for improved IDE functions.
- Intel VTune for profiling.
- NUnit for .Net unit testing.
- Scite text editor for scripting and XML.
- WinSplit Revolution for managing my desktop windows.
- Beyond Compare for comparing files and folders.
- Cygwin for finding things with grep.
- Paint.net for converting or resizing images.
- Workrave for not getting RSI.
Mac OS X Leopard:
- Omni Outliner for note taking.
- Omni Graffle for technical drawing.
- Kompozer for web editing.
- Photoshop Elements for image conversion and resizing.
- Maple for mathematics.
- Idle for python programming.
- PyUnit for python unit testing.
- Spaces for managing my desktops.
- Skype for talking to relatives.
- Anti-RSI for not getting RSI.
Both:
- Microsoft Office for documents and work email.
- Microsoft Messenger for communicating with workmates.
- Microsoft Remote Desktop Connection for working remotely.
- Mozilla Firefox for the web.
- Google Gmail for personal email.
- Perforce for source control.
- NovaMind for mind mapping.
- iTunes for music and podcasts (iPod at work).
Reflection Checklist
Slight deviation from the normal Tuesday & Thursday visualisations this week, due to OmniGraffle‘s (an excellant Visio substitute) trial version expiring on me so I can’t do any visualisations until I buy a copy at the weekend. So this week I’m going to do some lists instead!
What is the task?
- Describe the task.
- Describe the desired output of the task.
How are you performing the task?
- Describe the steps you take to perform the task.
Could you measure your performance?
- Can you think of a metric that would let you benchmark your performance e.g, time taken.
- Measure (or estimate) using the metric.
What steps are you performing well?
- List the steps you are performing well.
What steps are you not performing well?
- List the steps you are not performing well.
How could you improve your performance?
- List your ideas to improve each step.
Try your improvement ideas.
- List the results of your ideas here, with metrics if possible.
5 Sep 2008, 1:00am
Programming Software Development: Lists Software Development
by Daniel

leave a comment
Programming Software Development: Lists Software Development
by Daniel
leave a comment
Development Tools: The Essentials
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.








