Friday, October 9, 2009

Exploding Software Myths - MS Research

Over the last few years, Microsoft has been putting real study into development processes and techniques. Which makes sense, since they've got enough development teams to be able to do (mostly) controlled experiments.

Some of their findings:
  • TDD: "code that was 60 to 90 percent better in terms of defect density...took longer to complete their projects—15 to 35 percent longer"
  • Assertions: "definite negative correlation: more assertions and code verifications means fewer bugs. Looking behind the straight statistical evidence, they also found a contextual variable: experience."
  • Organizational Structure: "Organizational metrics, which are not related to the code, can predict software failure-proneness with a precision and recall of 85 percent"
  • Remote workers: "the differences were statistically negligible" for distributed development"

“I feel that we’ve closed the loop,” Nagappan says. “It started with Conway’s
Law, which Brooks cited in The Mythical Man-Month; now, we can show that,
yes, the design of the organization building the software system is as crucial
as the system itself.”

Awesome.

Thursday, October 8, 2009

Considering Clojure

I've been looking at clojure for awhile, now. I liked lisp, back in the day, but never got particularly good at it. Since then, I've done some minor projects in Scheme (Chicken scheme, to be specific). The syntax and programming styles really "did it" for me. Problems just seemed simpler to solve.

When I was working on an earlier revision of this project in .NET, I passed up on F#. I used it for some small test apps, liked it a lot, but decided against it. The main reason is that nobody else is using it. This might change with its inclusion in VS.NET 2010, but I'm not going to hold my breath. Besides, C# has a lot of functional-like syntax these days, so while I may miss some of the F# sugar (pattern matching, for example), I don't feel all that hemmed in with C#.

This next chunk of code I have to write for my little indexing project is discrete from the rest of the project. If clojure doesn't take off as more than an interesting niche language, I could easily find myself replacing it with bog-standard Java.

'Cause I have to admit it: Java sucks. It isn't that it is hard, it's that it is a pain in the ass. In some ways, I preferred programming in C - I spent a lot less time working, it seems. Maybe because I did so much in C; I don't know. I do know that just about every language I've tried since then (except PIC) has been less of a hassle.

I do like all the JVM application containers, though. To me, that's the real winner for Java.

Which leaves me with the whole "changing horses in midstream" problem. I really should write the whole thing in one language. You wouldn't think that would be too much to ask, would you? I certainly wouldn't hesitate to ask it of someone else.

So, I'll probably keep poking around through the tutorial. I may end up with working code which I end up using for the next bit. At the very least, I'll have a good idea as to whether or not this was a good idea.

LiquiBase - Database Version Control

If you're a fan of Ruby on Rails, then you probably know about migrations (and what a pain they can be).

Well, LiquiBase promises to bring the same benefits (and headaches) associated with Rails-style migrations. I haven't had a chance to check it out, yet, but I will update when I do.

Thursday, September 24, 2009

The Importance of Other Stuff

There haven't been a lot of updates around here, lately, and for that I apologize.

Ya see, I've been busy. I won't go into the specifics. I'll only say that I haven't been poking at computers that much this month because I've been doing Other Stuff.

Given the fast and ever-changing nature of this business, it can be very easy to get caught up trying to keep up with everything. There's always a new technology, a new product, or even just a new version of existing products. There's also all of the tech that one doesn't know anything about, but would be very useful to know.

That's just it, though. Nobody can keep up with it all; there's just too much. A long time ago (get off my lawn!), I concluded that I would commit as little as possible to memory. I focus on the overall patterns, but the specifics tend to be ephemeral, obsolete before you ever get to use them again. If I do memorize something, it is because I use it all of the time. The most important thing I've learned is how to find the answer quickly, even when I've already answered that particular question. (Putting it in a blog doesn't hurt, either.)

There's just so much more to the world. It is a shame to miss it.

Well hey, maybe you're young, and hungry, and this is all you want to do. Okay, that's your call, but you're limiting yourself in the long run. Not just in a "there's more to life" kind of way, but professionally.

You see, all of this tech is about people. Not as "lusers", but as people. The most successful technology isn't the "cool" technology, it's the tools which help people do what people have always done: talk to other people.

They say that a business is about the people. That isn't entirely true. If it were, then we'd still have huge secretarial pools. It is about the interactions between those people. Outside of improving the overall process, the boss isn't interested in what tools you used to get those numbers, only that you got those numbers and they are correct.

There's an attitude among too many of the people in this field that users are stupid. Worse still are the ones who believe that their success in this field translates to success in other fields. The one commonality among them is that they don't do anything else. They don't leave their comfort zones, they forget what it is like to be the least knowledgeable person in the room.

That's why it is important to do Other Stuff.

Thursday, September 3, 2009

Pash - PowerShell for Unix

Regular readers of this blog - both of you (Hi Mom, and that guy in Australia who subscribed to the RSS) - know that I loves me some MS PowerShell. I've called it a "game changer", because it greatly simplifies Windows administration. It is good enough that I've abandoned cygwin on my Windows systems; PowerShell is better than bash.

Well, somebody has released a version of PowerShell that runs on *nix systems: Pash. It builds on Mono, so there is a huge library of objects for it to work on. I don't know how well it works, yet, but I'm certainly going to be trying it.