[u-u] Some thoughts on programmer productivity

D. Hugh Redelmeier hugh at mimosa.com
Thu Oct 26 18:31:49 EDT 2023

| From: Giles Orr <gilesorr at gmail.com>
| I should admit up front that I gave up in disgust after about five
| minutes of the video - so I haven't seen the whole thing.

Ditto.  But I let it roll to the end while typing this.

I felt that almost every paragraph was at best not quite correct.

Just about the Ken Thompson part (From my memory):

- ed(1) was so simple that no significant number of people would be 
  willing to use it today.  I, for example, implemented an extended 
  version of ed for my Altair that fit in 7k along with an assembler, a 
  debugger, an EPROM burner, audio tape drivers, serial drivers, etc (self 
  hosted on a bare machine).

- Ken wrote ed as a minimal subset of QED.  Ken previously wrote QED for 
  CTSS and and another for Multics.  So he had lots of practice.

- writing for one machine is different from writing portable code.
  The first UNIX ran only on a single PDP-7.

- An assembler is really easy to write.  Especially when it has no 
  creature comforts (e.g. no macro processor) and it is for a very simple 
  machine (e.g. the PDP-7).  The PDP-7 was considerably simpler than an 
  Intel 8080 (that's a Good Thing).

- an OS for a PDP-7 is pretty simple.  What's notable about UNIX is that 
  it had good bones (but no pipes yet).  But Ken had been using and 
  contributing to several operating systems before this.

| But
| here's another thing: he was writing an OS for raw hardware in an

Right.  The PDP-7 had no mechanisms to implement security.  No MMU, for 
example.  So there was no thought of security.  The (later) PDP-11 was 

Just like security, there are a host of other things we require these days 
that were impossible back then.


- user-friendly

- provision for change

- co-existence with other programs on the same playground

- interoperation

- support multiple developers and even teams

- portability

- support for version migration

| I'm not saying he's wrong - but he failed to back up his point in a
| useful way, or look like he was going to address multiple other
| mitigating factors.


I'm looking at 0:22 for his strata of programming languages.

I wonder why he mentioned C# and not Java?  Is that a tell?

When we wrote in machine language, we could be masters of the machine.  
But the cost was that you burned so many of you cycles on book-keeping 
that all programs really ought to be short.

Assembler helped a lot.  Especially with changing your program.  When you 
added a line of assembler, a large portion of the machine language 
program changed.  Better to let the assembler look after that 

You did lose a bit of feel for the machine.  Especially with really 
helpful assemblers.  Powerful macro languages let you go crazy.  As a 
machine language programmer, more puns were available to you.  I once used 
a constant word in a PDP-8 program for three different purposes

- to hold the address at which to enter the OS

- to hold -(page size)

- to be an instruction

C was a great step forward.  Sure you lost machine efficiency but not a 
lot and, if used carefully, could make programs portable-ish.

FORTRAN (which I hated because it was imposed on me) really made it 
possible for area specialists to program.  What could be more important?

C++ is no friend of mine.  But it does let programmers enough leverage to 
build big systems, beyond what C can support.

Haskell is very productive for those who understand it.  It is very 
different from those previous languages.

JavaScript is horrible and wonderful.  It doesn't support much discipline 
but its ubiquity means that it can be used to solve many important 
problems.  It's a low road Java that succeeded at Java's goals.  I mean 
who would have thought something like WASM would be useful.  This links 
us back to machine language.

It's dinner time, I'll stop.

More information about the u-u mailing list