Archive for Uncategorized

Coding & Programming as Theory Building

I recently came across Peter Naur’s 1985 essay “Programming as Theory Building.” I am unsure how well his argument holds up nearly 30 years later in professional software development, but in computer science education, especially at a liberal arts college, it is an absolute revelation. In many ways, it perfectly captures why I detest the term "coding" and prefer “programming”. I wish I could find a hard-copy of Computing: A Human Activity.

As evidence, I quote the following excerpts with minimal commentary to celebrate its prescience. Please reflect on modern concerns such as coding bootcamps, code plagiarism, and stack-overflow scaffolding with Naur’s 1985 insight:

“Programming as Theory Building

…programmers form or achieve a certain kind of insight, a theory, of the matters at hand. This suggestion is in contrast to what appears to be a more common notion, that programming should be regarded as a production of a program and certain other texts…

Programming and the Programmers’ Knowledge

I shall use the word programming to denote the whole activity of design and implementation of programmed solutions. What I am concerned with is the activity of matching some significant part and aspect of an activity in the real world to the formal symbol manipulation that can be done by a program running on a computer

The Theory To Be Built By The Programer

…what has to be built by the programmer is a theory of how certain affairs of the world will be handled by, or supported by, a computer program. On the Theory Building View of programming the theory built by the programmers has primacy over such other products as program texts, user documentation, and additional documentation such as specifications…

… the programmer’s knowledge transcends that given in documentation in at least three essential areas:

  1. The programmer having the theory of the program can explain how the solution relates to the affairs of the world that it helps to handle…
  2. The programmer having the theory of the program can explain why each part of the program is what it is, in other words is able to support the actual program text with a justification of some sort…
  3. The programmer having the theory of the program is able to respond constructively to any demand for a modification of the program so as to support the affairs of the world in a new manner…

…Also the very use of the program itself will inspire ideas for further useful services that the program ought to provide. Hence the need for ways to handle modifications.” [I often inform students: as soon as your program works, it’s time to move on. CS students are designing & debugging 99% of the time!]

Excited to employ these ideas in assessing my intro & data structures courses this term.

Processing Twenty Years of Programming

I have lived in our current house longer than I have lived anywhere my entire life and we are moving later this month (next week!). While rummaging through boxes I have carried to New York, from New Jersey by way of Georgia — Smyrna, West Atlanta and Marietta, Georgia — one box held a collection of floppy disks from high school (1994–1998). I bought a USB floppy disk reader to resurrect this artifact.


I fell in love with computer science when I started programming sometime during the ages of 12–16. Before that I wanted to be a lawyer. I took a computer programming class at Paulsboro High School (two classes in fact, taught by Mrs. Pollino, also my Geometry teacher) where we learned Basic and Pascal—and in my estimation, the cold tyranny of flow charts. I even participated in some programming contests at a local college named Rowan University.

But, it was really a nexus of fortunate events that led me to a career in computer science. In addition to the high school class where I had an awesome friend and partner constantly pushing me (an eventual CS major in college, but now an anesthesiologist), earlier I had an uncle gift me a Commodore Vic-20 with manuals and cassette storage when he upgraded to a Commodore 64, a friend’s programmer dad gave me DOS batch scripting tips, and critically, my parents allocated a unexpected influx of cash to buy my brother and me a 50Mhz Packard Bell multimedia machine with 4MB of RAM, a 256 MB hard-drive, cdrom and modem in the early 90’s. That was the last computer we owned for a while until my girlfriend (and future wife) fronted me some money to buy a used surplus laptop from PSE&G after my first-year of college in 1999 (which I promptly installed Linux upon). I remember another student mocking me that first year of college for being a computer science major without a computer, it bummed me out, but luckily my friendly roommate let me use his Compaq PC to create my first website and rattle off some mean C++ and perl, all while listening to some music due to Napster.

Fast forward: later I’d own lots of computers, program robot dogs, help design sensor networks, and teach other students the joy of writing code to create art, stories, and worlds.

Some QBASIC programs

Now to the programs I dug up. They aren’t well written, and the graphically interesting selections presented below aren’t much more than graphing calculators, but they opened an entire new world for me. So they are special to me: authentic.

That experience of discovery and invention is what I hope to inspire in my students in 2017 and beyond. Even if with more or less modern things like text, games, robots, graphics, and computer vision.

p.s. Thanks to dosbox and renegade QBASIC executables for helping me run these old hacks!

Code as Language: L&T&C Take 2

In 2015 we introduced a computing component into Bard’s Language and Thinking program. We will be presenting a paper about that pilot project at ITiCSE this July.

We revised the curriculum in 2016 after the first experience. We revamped the coding workshop to be taught by Bard student instructors, moved the infrastructure to github, and made it about the idea of code and language. Starting with a free-write, then moving on to a hands-on lesson in HTML & JavaScript, and ending with an optional reflection on code and language. From WEIZENBAUM to POSTMAN to STEIN, students reflected on code as language, code acts, and creativity. We are again revising it this summer for the 2017 incarnation, stay tuned …

Summer Vacation 2015: Part II (Language & Thinking)

This summer I taught a course in the Bard Prison Initiative (BPI) in addition to advising undergraduate research students. I also co-developed a computing component for our Language and Thinking (L&T) program. This post covers the L&T effort, the previous post was about BPI.

Since its inception, the Bard computer science program (i.e., department) has posited that computing is a valuable and integral part of a liberal arts education. Since I have joined the program, I have adopted this mission whole-heartedly — thus, this blog. As a program, we offer a wide variety of introductory computing courses involving: the web, simulation, interactive graphics, robotics, and digital humanities. These courses expose students from many backgrounds to computational thinking, communicating algorithms to computers and people alike in PHP, Logo, Processing and Python.

Last year our college was interested in exposing all of our students to coding & computing. Given this ambition, our program thought long and hard in consultation with others around campus. A new college-wide distribution requirement? A MOOC? Hour-of-Code? Scratch? App-Inventor? Scribbler Robots?
Read more

Summer Vacation 2015: Part I (BPI)

Many wonder what teachers and professors actually do in their free summer months. Days on the beach? Long walks in the woods? Fishing? Crabbing? Well, I did a little of that this summer, but I also had the most extraordinary, and busiest, summer so far in my career.

After teaching computer science to undergraduates at Bard for six years, this summer was a bit of a reawakening. In addition to advising great undergraduate research students via BSRI, which I do most summers, I also taught a course in the Bard Prison Initiative (BPI) and co-developed a computing component for our Language and Thinking program. This post (Part I) covers BPI, and the L&T effort is up next in Part II.
Read more