BOTD: Figuring out computer science


It is all about deep questions and problems computer science. Including the question whether such thing as computer science actually exists. I thing it does, but have occasional moments of doubts – mostly when I read something related to real science :-).

What does Andreas Zwinkau (it is read as ts-win-cow, my anglophone friends ;-)) think about it, can be found

His comments are amazingly deep for such a young guy. I wish when I was getting my comp-sci degree (1981-1986) we have had the same wonderful things these young fellas have now: ubiquitous internet and really world wide web with Google that actually makes it useful, Linux and many other wonderful open source projects (Apache, Jakarta, Firefox, Eclipse – you name it). Can you imagine studying computer science in a world where the Web does not exist (yet) ?

Book review: Dreaming in Code


Thanks to long weekend and more quiet time in last couple of days (Happy 140th Birthday, Canada!), I managed to read something else than Ruby-ism/Rail-ism. Among others, I finished the Dreaming in Code by Scott Rosenberg, a book promising to explain why software is hard.

It is pretty tough question to answer. The way this books tries to address it is following the story not very well known open source project named Chandler through it’s beginning over period of 3 years. Chandler was – and still is – developed by the OSAF – Open Source Application’s Foundation, founded (and financed) by Mitch Kapor, who was before the founder of Lotus Development Corporation and designer of the “Ur-spreadsheet” Lotus 1-2-3.

The Chandler project – unlike most opensource projects was blessed – or cursed – by very solid financial backing, which allowed to hire fairly large team for fairly long time, without worrying too much about running out of time or out of money. It also contributed to quite ambitious goals (“Outlook killer”) and to lot of time being allocated and spent on design and research projects (known also as BDUF – Big Design Up Front antipattern).

For me personally the most interesting discovery from reading the book was how similar can be the issues in two completely different projects that lacks clearly defined goal and requirements. In Chandlers case, the basic design questions were open for unhealthy long time: what is the platform for the repository ? Is it going to be peer-to-peer system or using centralized server ? What is the proper set of features ? How the user interface would look like ? I found these questions so familiar and reminded me of one other (non-opensource) project …

Throughout the book, you can find lots of quotations, observations and pieces of wisdom related to our profession collected from variety of sources – books, interviews, Web. For illustration few of them:

“Joy is an asset. It may well turn out that one of the most important effects of open source’s success will be to teach us that play is the most efficient mode of creative work” Eric Raymond

“In science, the whole system builds on people looking on other people’s results and building on top of them. In witchcraft, somebody had a small secret and guarded it … Traditional software is like witchcraft …” Linus Torvalds

“In any project that is introducing new technology or design … plan to throw one away, because you almost certainly won’t get it right for the first time” Frederick Brooks

“… we should train developers the way we train creative people like poets or artists…. They study great works of poetry. Do we do that in our software engineering disciplines ? No. You do not look at the source code for great piece of software. Or look at the architecture of great pieces of software. You do not look at their design …” Richard Gabriel

Conclusion: Maybe not as easy read as originally expected – mostly because of the length and level of details related to Chandler, but nevertheless worth reading by all means. If you are professionally involved in building software for living, this books outlines many issues of the field. You may even have feeling terribly strong deja-vu (if you are around for couple of years/decades). Or – if you are younger – it can be a great example of things to avoid 🙂


Quote of the day


The realization came over me with full force that a good part of the remainder of my life was going to be spent in finding errors in my own programs.

— Maurice Wilkes

What is so worthy mentioning on this obvious stament, describing fate likely shared by many thousand or milions of software developers worldwide ? Not much, only the date. According this book (which is a pretty good read btw),
Sir Maurice came to the sad realization mentioned above in the year 1949.

Just wondering – what have we learned since ?

Who is the most successful programmer of the world ?


Depending on how you define success, you may get different answer to the question above.

If you choose for the success criteria:

– amount of money made by programming AND
– number of people using the product AND
– impact on the community at large

the answer is probably Charles (Karoly) Simonyi, Hungarian born ex-Microsoft employee, billionaire, astronaut and original author of Microsoft Word.

True, there certainly are people that made more money than him and their fortune is closely related to software – but unlike Simonyi none of them was actively programming for major part of their career. Take Bill Gates for example – most of his coding goes back to his teenage years and after creating Basic, his role was not related with active code writing. Also the number of people using Altair Basic (or any basic) today is likely nowhere in the Word league.

Simonyi is also creator of contraversial Hungarian naming notation of variables, which was considered to be “canonical” notation for programming Windows with C and C++, popularized by another Charles, the author of de-facto standard Windows programming textbook – Charles Petzold. In a nutshell, Hungarian notation adds prefix to each variable name which encodes its data type: for example: char *lpszBuffer means long pointer to string (zero-terminated).

The supporters say that this allows easy visual control of how the variables are used, e.g. from:

strcpy(lpszBuff, &cName);

is obvious (at least for experienced C programmer) that the code will crash, because the right side is an address of single byte character, not a string and there is no terminating zero after the byte, therefore the strcpy will likely overwrite the buffer and possibly stack.

The opponents say that modern languages and modern compilers make most of these checks available in the compiler and that the name should denote what is the role/purpose of the variable, not it’s type – as the type can easily change. Roedy Green calls Hungarian Notation “the tactical nuclear weapon of source code obfuscation techniques.” (see his recommendation How to write unmaintainable code and Mozilla programmer Alec Flett wrote (using Hungarian Notation):

“prepBut nI vrbLike adjHungarian! qWhat’s artThe adjBig nProblem?

How did I get to writing about Charles Simonyi ausgerechnet today ? The MIT Technology Review published fairly interesting article on him and his latest brainchild – Intentional Programming. The article is fairly long read, but quite interesting. The goals of Intentional Programming are very ambitious and it is hard to say, how realistic is it to achieve them at all. The domain specific languages are certainly fashionable and idea of having “WYSIWYG” for graphical construction of code is attractive. But is it doable ? The details on are sketchy and without trying it out, it is hard to make any opinion – but it looks much more like interesting research concept than the production-ready system.

Take the example on Page 13 – it reminds me a lot of what I have seen during my PhD studies: a system that works for some very narrow, textbook size example – small, well defined problem with perfectly described boundaries and no inter-dependencies, but is just impractical for any real life application. Metaprogramming is still one of the many Holy Grails of software engineering – and we often get confused by believing that adding another level of indirection will substantially change the nature of the problem on hand …

IMHO best quote from the article was the Wirth’s Law (after Niklaus Wirth):

“Software gets slower faster than hardware gets faster.”

This is so true, especially if you look on Vista’s hardware requirements and think for a moment about your subjective feeling how responsive is your brand new, 2 GHZ dual core notebook with 2GB RAM running Vista. Now try to think few years back (if you can go back to 1998-99) and compare this to the state-of-the-art machine you were using at that time – probably something like a single core 300-450 MHz Pentium II with 128 MB RAM running Windows NT 4. How did that feel ?

As far as I can remember, the feeling was about the same – while doing the same things – develop software, browse Web, write documents and do emails – the old notebook did not perform considerably worse, certainly not 2-3 times worse. So despite the 10 times increase in RAM size, speed/CPU power, disk size and disk speed, we have not gained much on the user responsiveness side. Vista looks much nicer, but the feeling of speed is the same … only software is many times more bloated.

Surf more in less time: Google Reader


Back in stone age when most information available was actually printed on paper in forms of magazines and books , people experiencing the information overload invented techniques of speed reading to deal with it.

It worked – mostly.

Nowadays, we have most of the content coming to you through the browser window. Even if you can still speed read the web page, you can get even more speed advantage and quickly sort out the interesting content from the fluff by using the magic of news feeds, RSS, Atom and wonderful free tool Google Reader.

Rather that going to tens of favorites news web sites, blogs, etc you just subscribe to their feeds and the reader will show you whenever there is something new of interest. It also allows you to classify – tag the feeds and create groups, for example of Windows related blogs/news sites versus Apple related. It is completely up to you. You can also (as in Gmail) to “star” the favorite articles to keep them marked (or, to save a local copy in Google Notebook).

I have started to use the Reader again two weeks ago and never looked back. Now I have all my favorite feeds in one place and whenever I have some time (pretty rarely these days) I am trying to catch up. What I found very cool is bunch of tricks described in this lifehacler article.

My favorites are g+u keys as well as g+t/g+l keystrokes. Try them out.

And now for something completely different: tomorrow it will be 50 years from the death of the John von Neumann (or as he is known him in our geo-region – Neumann János (he was born in Budapest, Austria-Hungary in 1903). A computer science pioneer and world class mathematician. If the computer science, mathematics, physics had their own Halls of Fame – similar as the Hockey Hall of Fame – he would have place in all of them.

Software Oscar Award


In software industry there are no annual awards and recognitions of achievements that would resemble the Annual Academy Awards of the movie industry. Various magazines, publishers and companies do present theirs yearly list of Best Products, but they are often biased and seldom representative. The one list that stands apart and that in my opinion comes closest the Oscar is Jolt Awards published by used-to-be one of the best magazines for professional programmers – Dr Dobbs Journal. It is still around and still a pretty good magazine, I guess – but the evolution of the Internet and shift of the money towards on-line advertisement changed the business landscape for most of the magazines, depending on revenue stream from ads. The list has various categories: for books (general and technical), project management, database systems and tools, IDE, design tools, development libraries and so on.

As with the movies, it is nice to discover that the movie you have seen and liked makes it to the “Best of …” selection. I have noticed that several of my favorite products were listed for this year – namely JIRA, IronPython, Liferay, Textmate, and For last year, the match was even longer: Visual Studio 2005, SQL Server 2005, MySQL 5.0, JIRA, Enterprise Architect, Eclipse 3.1, Komodo, .NET Framework 2.0, Spring Framework, JBoss.

Go and have peek. You may discover your favorites in there too – or get some inspiration of the new apps to look at.

Unknown celebrity


Yes, I know, the title sounds like oxymoron and to certain degree, it is. What it should maybe say is Person who should have been celebrity

I am not going anywere close to movies or entertainment industry with this. There are more than enough sites, blogs and gossip channels out there that look at life of movie stars or singers. I will stay within the world of computers and technology, which has its own heros and celebrities, albeit known in smaller groups. In “real world”, pretty much everybody knows Bill Gates, Linus Torvalds, Steve Jobs, Larry Ellison, Steve Wozniak. They have made the headlines many times. Fewer people know names like James Gosling, Anders Hejlsberg, Bill Joy, Dennis Ritchie, Guido van Rossum, Guy L. Steele, Richard Stallman….

Strangely enough, there is a name in history of human-computer interaction and computer technology that is associated with such significant advances as graphical user interface, networking, groupware and internet. This man personally invented computer mouse in 1967 and his team developed hypertext, whose most famous implementation is World Wide Web.

His name is Douglas Engelbart, and he is still working – in his 81 years, as the director of his own company, the Bootstrap Institute. He never made any money on his mouse invention – the patent expired before the personal computers and GUI made the mouse ubiquitous. At least, his company is housed rent-free courtesy of the Logitech Corp., company which made lots of many on computer mice manufacturing. Nice gesture, Logitech – I will keep buying your products :-).