Sunday, May 25, 2014

Doom...

Doom...  I feel the doom approaching...


This isn't as pretty as my mom's...

This isn't as pretty as my mom's ... but I suspect it tastes a whole lot better :)

Just in time for Memorial Day...

Just in time for Memorial Day ... my crafty mom has finished a project she's been wanting to do for a long time: making a U.S. flag from some very old fence pickets.  You can see it at right, hung over the front of her home near Charlottesville, VA.  Gorgeous, isn't it?

For my history-challenged readers, that flag design is a Betsy Ross flag – the original design of the U.S. revolutionary flag.  There are 13 stars arranged in a circle; each star represents one of the original 13 U.S. colonies.

Geek: Mathematical Cryptology...

Geek: Mathematical Cryptology...  A textbook, free online.  I don't know anything about its completeness or quality...

Geek: Edsger Dijkstra papers online...

Geek: Edsger Dijkstra papers online...  Dijkstra was a Dutch computer scientist whose work had a large influence on me as I started seriously programming in the late '70s.  Today his work has had many layers built upon it, to the point where its entirely possible for a practicing software engineer to be completely unfamiliar with his name.  Back in the '70s, his work was the foundation for the bleeding edge of two areas of programming: writing correct (e.g., bug-free) programs, and synchronizing the operation of multiple processes or threads within programs.

The general notion of “structured programming” derived from a key insight of Dijkstra's: that the use of GOTO statements was associated with hard-to-understand programs, and those were where most of the bugs were to be found.  This insight was published in the famous 1968 letter to the editor of CACM (Nikolas Wirth!) as “Go To Statement Considered Harmful”.  I remember reading this letter in about 1975 (no Internet back then; it took a while for ideas like this to make it to the field :), and being shocked by the simple and powerful ideas in it.  I then bought and read the book Structured Programming that he co-authored, and used the techniques in the first program I was ever paid to write: Tarbell Basic, in 1976.  Dijkstra detested BASIC, and I suspect it wouldn't have made him feel any better to know that his techniques were used to write a BASIC interpreter :)

In the late '70s I started writing programs for microcomputers that involved multiple processes that needed to synchronize their operations.  Back then, long before microcomputer operating systems and programming languages included support for such synchronization, it all had to be done from scratch for every program.  The need for synchronization cropped up most frequently between foreground processes and interrupt processing routines.  Here Dijkstra's ground-breaking work on semaphores (with his famous P-operations and V-operations) provided the key insights that allowed thousands of programmers like me to write reliable programs with multiple processes.

So why am I relating all this?  Because Dijkstra's papers – the famously hand-written “EWDs” – are being published online, and made freely available.  They are a walk down memory lane for me; I can still remember the first time I read some of these and felt the ideas just pouring through me.  They were the first serious contact I had with academic computer science, and along with Knuth's work they remain some of the most useful and fundamental sources of my understanding of programming.  A younger programmer, versed in much more modern ideas, might find them quaint and old-fashioned – but Dijkstra's ideas and insights are the foundation of vast swathes of today's computer science...