What Makes a Good Software Developer?

TSS.NET posed this question in one of their newsgroups on March 1.  Here are the comments I added to the thread:

They only write what they need to. They tend to choose open source libraries and components for needed functionality instead of writing things themselves. They definitely don’t replicate functionality already provided by whatever platform they’re coding against (whether it’s .NET or Java).
A companion characteristic is that they’re good integrators. Because they use third-party components to develop solutions, they’re skilled at making them play well with each other.
They’re good at refactoring. The first version of any application is always the worst one. A good software developer refines and otherwise improves their code as they go along.
The companion characteristic to refactoring is unit testing. No developer can consider themselves good unless this practice is part of their everyday work. A robust set of unit tests is the first line of defense when it comes to high-quality code.

This was what I came up with off the top of my head.  I’d be curious to hear opinions from others (yes, all three of my loyal readers) on what makes a good software developer.

The Honest Boss

Some friends of mine on a mailing list I belong to are having an interesting dialogue on ways to deal with co-workers when they make mistakes.  One of the list members posted a link to the interview with an honest boss e-card from Hallmark.  Mostly, it’s good for a laugh.  But what the “honest boss” says about promotions is a bit too true to be funny.

SQL Server Cursors

Personally, I dislike them. I avoid using them whenever possible. But I came across this excellent post that talks about cursors, alternatives to cursors, and provides a performance comparison between them.

The performance comparison in particular was quite useful.  If I’m able to reproduce the results for myself in a local environment, I may have to revise my current stance on cursors.

ApexSQL Diff

I first heard about this tool from my friend Greg at work.  I’ve been using it the past couple of weeks now as a free trial and it’s awesome.  Compare the structure and/or data of any two databases and synchronize them with just a few mouse clicks.

This tool is perfect for deploying database changes to different environments.  It’s already saved me hours of time compared to what I would have spent trying to do things manually.  I’ll definitely be buying a copy for myself.  Every DBA should own a copy.

Daimler-Chrysler: Another Failed Merger?

Today’s news brings word that Daimler may be looking to break up with Chrysler.  I find this particular merger interesting because it came up more than once in my MBA studies.  While the problems we studied had more to do with integrating two different engineering cultures and technology platforms, the financial wisdom of such a merger was always what I questioned.

I have a strong anti-merger bias, having been on both sides of such mergers at each of my last three employers.  I’ve written about them in this blog before.  Thanks to this transcript of a PBS NewsHour segment, it’s possible to look back at the time when this merger was fresh and new.

I found it interesting to read how positively all the guests viewed the merger at the time.  Not until almost the end of the segment do you find much skepticism about whether or not the merger will be successful.

Short circuiting in .NET

Last week revealed an interesting difference between C# and VB.NET. C# operators like “and” (&&) and “or” (||) do it automatically. The VB.NET operators “And” and “Or” don’t do this by default. So if you use these, all the conditions are evaluated, regardless of whether or not that’s necessary.

In the .NET 2.0 Framework, instead of making these operators work like the C# ones, VB.NET added two new keywords: AndAlso and OrElse.

It’s good that VB.NET has the facility, I just don’t like the implementation.  It’s another reason to prefer C# at the very least.

Agile vs. Waterfall

It seems clear enough to me which approach is the best way to develop software, but not everyone in my office seems to agree. So I thought I’d do a bit of research on the two approaches and summarize my findings here. I really wanted to find some impartial statistics that compared the productivity of the two approaches. In addition to the usual Google searches, I included information I could find from the Software Engineering Institute (SEI) and the Association for Computing Machinery (ACM).

The first comparison of the methodologies I reviewed was on pages 23-24 of a PDF I found at SEI. The comparison mapped waterfall activities to agile activities and highlighted the key difference–the waterfall methodology lacks an opportunity to demonstrate the output of an iteration and make improvements based on feedback.

The first statistics I could find came from this wiki entry. While they’re specific to a single company, they make a very compelling case for the use of agile methods. Agile methods (specifically SCRUM) delivers more lines of codes, with fewer defects, in less time than waterfall methods.

Coding Guidelines

Another free e-book, this time on C# and VB.NET development standards.  Fair warning, you do have to provide an e-mail address to download it.

We’ve needed something like this at my current employer for a long time.  Come to think of it, my previous employer could have used this too.  I worked with some colleagues to put together a small SQL standards guide to direct our database development.  I wanted to write a companion document for our .NET development efforts but have had far too much other work to do.

Free .NET Book

Charles Petzold has written a book titled .NET Book Zero.  It’s a guide to implementing application in C# targeted at C and C++ programmers.  I haven’t read it myself yet, but I plan to.  I hope it’s a resource I can use to help build the skills of developers that report to me who aren’t familiar with C#.

The author has made it available in PDF and XPS formats.  There’s source code too.

Sandcastle Rant

I came across this excellent post on the problems with Sandcastle, the Microsoft offering for generating help documentation for .NET 2.0 assemblies.  In addition to pointing out the problems with Sandcastle, the author (Grant Drake) brings us up to date on the status of other successors to NDoc.
As someone who used NDoc 1.3 a lot on projects in the last couple of years, I was very disappointed that the author decided to discontinue work on NDoc 2 (especially since we have mailbombers to thank for the loss).