Friday, December 12, 2008

My Software Development Technology Stack

I want to focus (a little) on my technology stack for software development so that I can proceed away from being a jack of all trades, master of none. However, software development encompasses such a broad scope of technologies and skills, there will still be lots to learn. At a minimum I can select certain tools and technologies to use exclusively in my software development and direct my learning in those areas.

Here is the technology stack I have selected:
  • Operating System - Mac OS X: I have an iMac (one generation back) and a MacBook (one or two generations back) so Mac OS X is a default choice to work on. Not that I mind. I find Mac OS X provides a superior development experience compared to Windows and a better desktop experience compared to GNU/Linux. The best of both worlds. Though I will be using Mac OS X as a development platform, I will not necessarily be targetting it exclusively as the platform for any software I write.
  • Programming Languages - C++ and Python: C++ is my language of choice. I like its expressiveness and freedom compared with other statically typed languages. I add Python to the mix as my dynamic language of choice. Again, I am a fan of the syntax including the meaningful whitespace. I may throw Objective-C into the mix as I have some thoughts of writing an app for the iPhone/iPod touch.
  • Editor - TextMate: I am not much of an IDE person. I much prefer having a powerful text editor that is not tied to any particular editee technology. TextMate fills this role.
  • Version Control: Haven't completely decided on this yet. It will be Subversion (because it is something I know) or Mercurial. Possibly both.
  • Build: SCons will be my choice here. It is not as fast as some other build systems. But it is simple to use and is developed in Python.
  • Unit Testing: For C++ I really like the simplicity of UnitTest++. Not yet sure for Python.
  • Libraries: This list will evolve over time. The only thing I can say definitively now is that I will make use of the Boost C++ library.
  • Documentation: Right now I am most familiar with LaTeX for documentation. However, I would like to spend some time exploring DocBook for capturing my documentation. This will require learning about DocBook itself and also the technologies for taking a source file and creating a pdf.
  • Bug Tracking: I've signed up for an account on FogBugz. Currently I just have a trial account and I will switch over to the free startup version soon.
Wrapping all of this technology is my ongoing reading and learning about general software construction best practices.

This blog is intended to contain my day-to-day thoughts and ramblings. My Know Thy Tools blog (which will have address www.knowthytools.com soon) will be the place I record my learning about the items in my technology stack. I will also be creating another site to capture more static information regarding any software projects I start. I'll post here once I have that up and running along with my intended software projects.

0 comments: