How to Train Your Programmer

ashley g. williams
MIT Media Lab
7 October 2014

Take it from me, only students of mathematics can learn to code!
Old School CS Professor
I can teach you to be a junior developer in 3 months! No, 3 weeks!
Eager Entrepreneur
If you don't know C, you are not a real developer!
Guy who got too close to the metal

Computer Science education is growing extremely rapidly...

... in a word, EXPLODING

Hi, I'm Ashley

and I work at a company called Bocoup.

We're all about the OPEN WEB.

academic programmers

vs

non-academic programmers

programmers:

more academic background <-> more industry experience

DECONSTRUCTED!

ABSTRACTION

Our power, our muse, our curse.

The effective exploitation of his powers of abstraction must be regarded as one of the most vital activities of a competent programmer.
Edsger W. Dijkstra
"The Humble Programmer" (1972)

What do we mean by abstraction in programming?

The Abstraction Principle

Each significant piece of functionality in a program should be implemented in just one place in the source code. Where similar functions are carried out by distinct pieces of code, it is generally beneficial to combine them into one by abstracting out the varying parts.
Benjamin C. Pierce
Pierce, Benjamin (2002). Types and Programming Languages. MIT Press. p. 339. ISBN 0-262-16209-1.
[A]bstraction is the process of separating ideas from specific instances of those ideas at work... [It] tries to factor out details from a common pattern so that programmers can work close to the level of human thought, leaving out details which matter in practice, but are immaterial to the problem being solved.
"Abstraction (computer science)", Wikipedia. http://en.wikipedia.org/wiki/Abstraction_(computer_science). Accessed 6 October 2014.
[I]mmaterial to the problem being solved.

Ruby

            array.each do |element|
              #do something
            end
          

Javascript

            for(var i = 0; i < array.length; i++){
              //do something
            }
          
Programs must be written for people to read, and only incidentally for machines to execute.
Abelson and Sussman
The real problem in speech is not precise language. The problem is clear language ... It is really quite impossible to say anything with absolute precision, unless that thing is so abstracted from the real world as to not represent any real thing."
Richard Feynman
"New Textbooks for the "New" Mathematics", Engineering and Science volume 28, number 6 (March 1965) p. 9-15 at p. 14
There is no abstract art. You must always start with something. Afterward you can remove all traces of reality.
Pablo Picasso

Where should we begin?

"If you wish to make an apple pie from scratch, you must first invent the universe."
Carl Sagan

Teach Programming *Concepts* NOT Language Features...

Abelson and Sussman

Teach Programming as a Unified Discipline

Van Roy and Hadidi

The Kernel Teaching Method

A good way to organize a programming course is to start with a simple language and then to extend this language gradually.
Peter Van Roy
"Convergence in Language Design: A Case of Lightning Striking Four Times in the Same Place", FLOPS 2006, LNCS 3945, pp. 2-12, 2006.

Creative Extension Principle

You Aren't Gonna Need It (YAGNI)

Always implement things when you actually need them, never when you just foresee that you need them.
Ron Jeffries, co-founder XP
Ron Jeffries. "You’re NOT gonna need it!". Practices. X Programming. Retrieved 2007-11-07.

What do we even *mean* when we talk about programming?

The most thought-provoking thing in our thought-provoking time is that we are still not thinking.
Martin Heidegger
What is Called Thinking? [Was heisst Denken?] (1951–1952), as translated by Fred D. Wieck and J. Glenn Gray (1968)
It is the transcendent (or 'abstract' or 'self-contained') nature of music that the new so called concretism [...] opposes. But instead of bringing art and reality closer together, the new movement merely thins out the distinction.
Igor Stravinksy
Themes and Conclusions", (1982) p. 188

"Scientists work from models acquired through education and through subsequent exposure to the literature often without quite knowing or needing to know what characteristics have given these models the status of community paradigms"

Thomas Kuhn
The Structure of Scientific Revolutions", pg 46 (1962)

Resources

Lecture Notes(click for larger version)

thank you!

ashley williams

@ag_dubs

ashley@bocoup.com

ashleygwilliams