Search This Blog

Tuesday, February 1, 2011

CS Education is fat and weak – 1


History of CS


CS Education


Yes: More than they should be. Less than they should be.
More because things are a certain way because of context that led up to them.
Less because we just dont learn from our mistakes!

In this post we will cover the history as it is usually given. In the next post, we will deconstruct this history to see why CS education today is such a mess.

Phil Greenspun1 says:
Many areas of computer science are what Kuhn would have called "pre-paradigmatic" science. People don't agree on enough fundamentals for progress to be made via writing journal papers. Progress is made with books…
Another way of saying this is that the field gets more harmed than helped when research in arcana take precedence over research on the fundamentals.

This is hardly surprising – if I keep filling my house with stuff without the minimum expenditure of time/money/energy on storage such as cupboards/drawers etc the house will soon become a mess.  Unfortunately in CS this is exactly what's happening. 99% of computer-users are just that – users – without the interest or background to change the field, and the one percent who can re-organize the field are too interested in their narrow research agendas to take a broad view.

In his Turing award speech, Minsky concludes with:
There is a real conflict between the logician's goal and the educator's. The logician wants to minimize the variety of ideas, and doesn't mind a long, thin path. The educator (rightly) wants to make the paths short and doesn't mind –in fact, prefers– connections to many other ideas. And he cares almost not at all about the directions of the links.
In this and the following posts I expand on Minsky's and Greenspun's direction.  In any field we find three orders in which the field develops – the historical, the logical and the pedagogical.  For example in math we see the manifestation of these orders:

linear algebraset theorygroup theory
group theorygroup theorylinear algebra
set theorylinear algebraset theory

That is to say, linear algebra and vectors were first invented in the 18th century, groups in the 19th and set theory was axiomatized in the 20th. Today however it is optimal (logically) to define a group as a set with operations and a linear space as 3 groups, 2 making a field, etc. And yet even the most formal minded math teacher would not think to teach axiomatic set theory before getting students used to groups and vector spaces.

CS is still stuck mostly at the historical order, sometimes the logical, only rarely is the pedagogical optimum realized. 

On a more personal level, my teacher of programming Prof hvs would say that his teacher Prof Rajaraman was taught assembly as the first programming language because it was easy and Fortran (II??) only later because it was advanced and difficult.

Do we laugh at this curiosity of the 60s?  If we do, consider: Do you really think we have advanced from then?

Below I first repeat the well-known facts of history decade-wise and then give the pedagogical mixups and messes from each of these eras.

The History

1930s The Seminal Era
The Turing machine which is really a corollary to Gödel's theorem shake up millennia of accepted mathematics and logic
1940s War
Turing uses the excuse of war to convert the theoretical Turing machine into a code-making and breaking wonder
1950s The Computer era
The first commercially available computers.  Their initial use for numerical analysis gives rise to the name 'computer'.
1960s The Mainframe era
and the first high level languages
1970s The Computer Science era
The principal languages which are or are the antecedents of modern programming languages were invented – C, Pascal, Simula. Software engineering morphs into a concern with the problems/importance of programming languages.
Also the decade in which Knuth's algorithms trilogy was published.
And the decade when Unix happened.

In short the decade of HLLs, Algorithms, Unix and academic departments of CS
1980s Democratization, DOS
I was a student in the early 80s when the university's mainframe computer was decommissioned and we started using BBC micros.   From a computer whose size demanded a whole building and whose cost needed to be shared by the university with three local organizations to little TVs that sat on desk(tops) – the collapse in scale was dramatic.

And then a year or so later, there was a new wonder of God's creation – something called DOS.
1990s IT and the Internet
Scripting languages: The era of tcl and perl followed by python.
Windows, Linux and the beginning of the OS-wars
And the mother/father of hype – IT and the Internet!
2000s Convergence
Bell's law kicks in once again.  And those of us talking 'computer's are behind the curve because the most ubiquitous computer is no more but
2010s Cloud Computing
While I am uncomfortable with the decibels of the cloud-hype, I need to point out that everyone is using the cloud: gmail and googledocs, debian/ubuntu's apt and window's updates, dropbox, blogs like this one… 
In my next post, we will start deconstructing this history

[1] Famous for Greenspun's tenth rule
[ More than just the title comes from John Backus.  See next post ]


  1. Any suggestions for self-study of group theory?

    1. From one POV, group theory is mostly irrelevant to CS – needed in some specialized areas of coding theory and little else.
      And (keeping this POV) one may wonder whether the emphasis of group theory in traditional undergraduate discrete math courses is not overdone.

      Do a small alpha rename of 'group theory' to 'algebraic structures' and the picture changes.
      eg see Andrzej Tarlecki and Sannella foundations of algebraic specifications.

      And then when you see the importance of algebra to CS and also find the usual group-theory-equals-algebra books mostly useless, maybe you look beyond to more general algebraic structures like
      Azriel Rosenfeld's Algebraic structures -- a difficult book that will improve your moral musculature if you wrestle with it.