Software Verification

This morning I stumbled across a job advertisement for a “Software Verification Engineer”. In my opinion it is high time that verification spreads and that our industry takes a more responsible approach towards its artifacts, so I was curious to find out which company was advertising.

Unfortunately, the advertisement was a complete disappointment and it only underlined just how miserable a state our profession is in: the “Software Verification Engineer” turned out to be a “Software Tester”. Before you misread this as disrespect for software testers: I fully appreciate the value of the work of software testers…. Only, it is not verification!

Edsger W. Dijkstra’s “Program testing can best show the presence of errors but never their absence.” is folklore. Yet not only do we see job advertisements like the one that made me start this post, even the Wikipedia entry on “software verification” mentions testing as an approach to verification.

The only way to verify software is to rigorously prove that it fulfills its specification.

Improve Problem-Solving Ability

Here are some excellent hints on improving your problem-solving ability. Surely, not all of them will work for everyone, but you may want to try some of them…

Software version numbering inflation comes to Firefox

It happens regularly and it happens in some of the best families developer communities. At some point there is a change in the version numbering scheme. The most recent such headline is “Mozilla Switches Firefox to 18-Week Development Cycle; Firefox 5 Expected June 21”. And in the article we read “speeding up the development cycle for Firefox releases”. While I suspect that the motivation behind the move is “not to fall behind” in some sense, whether or not the project runs on an 18-week (or other) development cycle has absolutely no impact on the speed of the development cycle, merely on the number of releases. Just like reading the KM/h scale instead of the MPH scale of the speedometer does not change the speed at which I travel.

Firefox releases
version date development time
0.1 September 23, 2002
1.0 November 9, 2004 779
2.0 October 24, 2006 715
3.0 June 17, 2008 603
4.0 March 22, 2011 1009
5.0 scheduled for
June 21, 2011 92

Other projects have made similar changes in the past. Interestingly, I have never seen a numbering scheme change to less frequent major version number changes.

In all the cases where I have seen this step taken in the past, it always left the impression that some marketing-oriented people in the respective project community are confusing cause and effect: it’s not by incrementing the major version number that you get substantial/fundamental development progress. It’s, of course, the other way around: after much development progress you find that the software has been entirely rewritten and that’s when you feel you have to change the major version number to reflect this. In my opinion this is one of the (and by far not the only) things that Linux kernel development gets right: version 2.0 is from 1996, 2.6 current, and there was lots of development progress…

New Blogging Tool

I often think I should blog more, but somehow can’t bring myself around to do it. One thing that turns me off is the web-based editing of the post. I understand that all the blog engines go to great lengths to accommodate their users.

If you are used to a text editor that you have been using for over 20 years(!) and you do pretty much everything that remotely resembles text in that editor: from keeping your appointments and agenda, preparing slides, writing email, writing source code, you name it, then those web-based interfaces are a slowdown by a factor of…, well I don’t know, but enough to turn me off.

So here comes org2blog which I am just trying out. It uses org-mode which is an awesome tool for structured text. Maybe with that in place I can bring myself to post more often.

It’s programming

I know of no field that is immune to trends and fashions and computing is no exception. Often I find it amusing to see these fashions and fads appear and reappear. One such occasion was when Java was new and many of its proponents were touting its use of the JVM as revolutionary. Well, the p-code machine predated the JVM by over 15 years with a very similar purpose. Yes, “Those who don’t know history are destined to repeat it.”

Most recently, I am amused by the much-hyped “computational thinking”. One definition found on Google’s Exploring Computational Thinking is “Computational thinking (CT) involves a set of problem-solving skills and techniques that software engineers use to write programs that underlay the computer applications you use such as search, email, and maps. Below is a list of specific techniques along with real world examples from our every day lives.” then that page lists decomposition, pattern generalization and abstraction, and algorithm design as skills or techniques.

But wait a minute: what a software engineer does, the above list of skills and techniques… This is programming!!!

And yes, I agree, students should learn programming in school and it will be easier for them if they can practice their programming skills across diverse subjects.

Computational thinking… “A rose by any other name would smell as sweet

Integrated Development Environment

So I was just about to write about how Unix is a developer’s toolbox and environment, when I though “Somebody sure must have written about this before”. What would I google? How about “Unix is an IDE”. Sure enough: http://www.c2.com/cgi/wiki?UnixIsAnIde. I also came across this one: http://news.ycombinator.com/item?id=627722 and http://stackoverflow.com/questions/24109/c-ide-for-linux.

One less article for me to write…

a package I’d like to see appear in pkgsrc

“Sage s a free open-source mathematics software system licensed under the GPL. It combines the power of many existing open-source packages into a common Python-based interface.” http://www.sagemath.org/

I’d like to see a package for this in pkgsrc. If I find some time I might look into it myself.