Slide 1

Slide 1 text

A BRIEF HISTORY OF CODE

Slide 2

Slide 2 text

@AVIFLOMBAUM DEAN, FLATIRON SCHOOL

Slide 3

Slide 3 text

MY STORY • Grew up in NYC • Have been programming since the third grade. • Dropped out of the University of Wisconsin • CTO of a hedge fund at 20 • Started DesignerPages.com at 24 • Started Flatiron School at 28

Slide 4

Slide 4 text

QBASIC ~ 1994

Slide 5

Slide 5 text

THE INTERNET, MY FIRST LOVE

Slide 6

Slide 6 text

THE FIRST WEBPAGE I MADE

Slide 7

Slide 7 text

NYC

Slide 8

Slide 8 text

DESIGNERPAGES.COM

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

“Programmers change the world more on a daily basis than any other profession.” Yehuda Katz (@wycats), Ruby on Rails, jQuery, Ember.js

Slide 11

Slide 11 text

CODE IS Declarative Knowledge: sqrt(x) = y^2 Imperative Knowledge: How to find the sqrt of x 1. Guess a number < x, known as g 2. Put it in x = g^2 3. If that is x, stop 4. If it is > x, guess a lower number 5. if it is < x, guess a higher number Codifying How To Knowledge

Slide 12

Slide 12 text

ALGORYTHMSHMALGLORYTHM Babylonian Method for Solving Squares 1. Begin with an arbitrary positive starting value x0 (the closer to the actual square root of S, the better). 2. Let xn+1 be the average of xn and S / xn. 3. Repeat step 2 until the desired accuracy is achieved. http://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method

Slide 13

Slide 13 text

ALGORYTHMSHMALGLORYTHM

Slide 14

Slide 14 text

CHARLES BABBAGE December 1791 - October 1871 Inventor of the Difference Engine (just a fancy name for the first automatic calculator that could do polynomial functions).

Slide 15

Slide 15 text

ADA LOVELACE Collaborated with Babbage. Worked on something called the analytical engine, wrote the first algorithm intended to be processed by a machine. The analytical engine introduced logic and control flow to the difference engine. December 1815 - November 1852

Slide 16

Slide 16 text

ADA LOVELACE The Analytical Engine, on the contrary, is not merely adapted for tabulating the results of one particular function and of no other, but for developing and tabulating any function whatever. In fact the engine may be described as being the material expression of any indefinite function of any degree of generality and complexity... December 1815 - November 1852

Slide 17

Slide 17 text

ADA LOVELACE Supposing, for instance, that the fundamental relations of pitched sounds in the science of harmony and of musical composition were susceptible of such expression and adaptations, the engine might compose elaborate and scientific pieces of music of any degree of complexity or extent. December 1815 - November 1852

Slide 18

Slide 18 text

ALAN TURING June 1912 - June 1954 • first computer ever, the Mark 1 • first program ever, ACE • conceived of Artificial Intelligence • the turing test • really sad, but in 1952, was convicted for indecency for being a homosexual, was chemically castrated and eventually died of cyanide poisoning (probably a suicide).

Slide 19

Slide 19 text

MANCHESTER MARK 1 2nd best thing to come out of Manchester

Slide 20

Slide 20 text

TURING TEST the reverse CAPTCHA

Slide 21

Slide 21 text

CODE IS

Slide 22

Slide 22 text

CODE IS First perceiving and bringing together under one idea the scattered particulars so that one makes clear the particular thing which he wishes to do. Second, the separation of ideas into classes, by dividing it where the natural joints are, and not trying to break any part, after the manner of a bad carver...

Slide 23

Slide 23 text

CODE IS First perceiving and bringing together under one idea the scattered particulars so that one makes clear the particular thing which he wishes to do. Second, the separation of ideas into classes, by dividing it where the natural joints are, and not trying to break any part, after the manner of a bad carver... ...I love these processes of division and bringing together...and if I think any other man is able to see things that can naturally be collected into one and divided into many, him I will follow as if he were a god. Plato, greek philosopher guy, Phaedrus (Dialogue)

Slide 24

Slide 24 text

COMPOSITION AND SYNTHESIS

Slide 25

Slide 25 text

COMPOSITION AND SYNTHESIS

Slide 26

Slide 26 text

COMPOSITION AND SYNTHESIS

Slide 27

Slide 27 text

true || false

Slide 28

Slide 28 text

x = 0

Slide 29

Slide 29 text

while x < 10 puts "I <3 Ruby" x = x+1 end

Slide 30

Slide 30 text

def ten_to_the_love(love) 10.times do puts "I <3 #{love}" end end ten_to_the_love("code") ten_to_the_love("nyc")

Slide 31

Slide 31 text

class Love def initialize(name) @name = name end def say_it 10.times do puts "I <3 #{@love}" end end end

Slide 32

Slide 32 text

code = Love.new("code") code.say_it nyc = Love.new("NYC") nyc.say_it

Slide 33

Slide 33 text

IDEALIZED COMPONENTS & INFINITE COMPLEXITY

Slide 34

Slide 34 text

GRACE HOPPER First compiler, COBOL, debugging Hopper's belief that programs should be written in a language that was close to English rather than in machine code or languages close to machine code (such as assembly language) was captured in the new business language, and COBOL would go on to be the most ubiquitous business language to date. December 1906 - January 1992

Slide 35

Slide 35 text

GRACE HOPPER First compiler, COBOL, debugging It's easier to ask forgiveness than it is to get permission. I had a running compiler and nobody would touch it. ... they carefully told me, computers could only do arithmetic; they could not do programs. You manage things, you lead people. December 1906 - January 1992

Slide 36

Slide 36 text

EDSGER W. DIJKSTRA May 1930 - August 2002 Inventor of Structured Programming x = 0 x = x+1 puts "Hello #{x}" GOTO: 2 if x < 10 while x < 10 x = x+1 puts "Hello #{x}" end

Slide 37

Slide 37 text

EDSGER W. DIJKSTRA for, while, until, case In classical structured programming, three basic structures are used: sequence, repetition, and selection. Sequence is the execution of one program unit following another; repetition is the repeated execution of the same program unit until a desired program state is reached; and selection is the executing of one and only one of a fixed set of possible alternative program units depending on the program state.

Slide 38

Slide 38 text

EDSGER W. DIJKSTRA The job [of operating or using a computer] was actually beyond the electronic technology of the day, and, as a result, the question of how to get and keep the physical equipment more or less in working condition became in the early days the all-overriding concern. As a result, the topic became —primarily in the USA— prematurely known as "computer science" —which, actually is like referring to surgery as "knife science"— and it was firmly implanted in people's minds that computing science is about machines and their peripheral equipment. Quod non [Latin: "Which is not true"]

Slide 39

Slide 39 text

EDSGER W. DIJKSTRA The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities. FORTRAN --"the infantile disorder"--, by now nearly 20 years old, is hopelessly inadequate for whatever computer application you have in mind today: it is now too clumsy, too risky, and too expensive to use. About the use of language: it is impossible to sharpen a pencil with a blunt axe. It is equally vain to try to do it with ten blunt axes instead. An exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer.

Slide 40

Slide 40 text

EDSGER W. DIJKSTRA The major cause [of the software crisis] is that the machines have become several orders of magnitude more powerful! To put it quite bluntly: as long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has become an equally gigantic problem. In this sense the electronic industry has not solved a single problem, it has only created them, it has created the problem of using its products.

Slide 41

Slide 41 text

EDSGER W. DIJKSTRA For me, the first challenge for computing science is to discover how to maintain order in a finite, but very large, discrete universe that is intricately intertwined. And a second, but not less important challenge is how to mold what you have achieved in solving the first problem, into a teachable discipline: it does not suffice to hone your own intellect (that will join you in your grave), you must teach others how to hone theirs. The more you concentrate on these two challenges, the clearer you will see that they are only two sides of the same coin: teaching yourself is discovering what is teachable.

Slide 42

Slide 42 text

EDSGER W. DIJKSTRA How do we convince people that in programming simplicity and clarity - in short: what mathematicians call "elegance" - are not a dispensable luxury, but a crucial matter that decides between success and failure? The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.

Slide 43

Slide 43 text

ADELE GOLDBERG July 1945 XPARC, co-developer of Smalltalk, inventor WIMP (windows, icons, menu, and pointer), GUI pioneer “Don’t ask whether you can do something, but how to do it”

Slide 44

Slide 44 text

OBJECTS IN SPACE

Slide 45

Slide 45 text

ALAN KAY May 1940 father of object orientation, inventor of the GUI. You’re welcome. “I fear - as far as I can tell - that most undergraduate degrees in computer science these days are basically Java vocational training. I’ve heard complaints from even mighty Stanford University with its illustrious faculty that basically the undergraduate computer science program is little more than Java certification.”

Slide 46

Slide 46 text

ALAN KAY father of object orientation, inventor of the GUI. You’re welcome. "Lisp isn't a language, it's a building material."

Slide 47

Slide 47 text

ALAN KAY father of object orientation, inventor of the GUI. You’re welcome. "I thought of objects being like biological cells or individual computers on a network, only able to communicate with messages”

Slide 48

Slide 48 text

OBJECT ORIENTATION The beginning of wisdom is to call things by their right names. Chinese Proverb

Slide 49

Slide 49 text

OBJECT ORIENTATION Classes define a new kind of thing. class User end

Slide 50

Slide 50 text

OBJECT ORIENTATION Create new instances of that class. avi = User.new #

Slide 51

Slide 51 text

OBJECT ORIENTATION Define behaviors for objects. class User def authenticate(password) true if password == @password end end

Slide 52

Slide 52 text

OBJECT ORIENTATION Send objects messages. avi.authenticate(“password”) #=> true

Slide 53

Slide 53 text

ALAN KAY father of object orientation, inventor of the GUI. You’re welcome. "The best way to predict the future is to invent it." "The real romance is out ahead and yet to come. The computer revolution hasn't started yet. Don't be misled by the enormous flow of money into bad defacto standards for unsophisticated buyers using poor adaptations of incomplete ideas."

Slide 54

Slide 54 text

LARRY WALL The three chief virtues of a programmer are: Laziness, Impatience and Hubris. September 1954

Slide 55

Slide 55 text

LARRY WALL Post-Modernism was a reaction against Modernism. It came quite early to music and literature, and a little later to architecture. And I think it's still coming to computer science. So, to drag the subject back to computers, one of the characteristics of a postmodern computer language is that it puts the focus not so much onto the problem to be solved, but rather onto the person trying to solve the problem. I claim that Perl does that, and I also claim that, on some level or other, it was the first computer language to do that.

Slide 56

Slide 56 text

LARRY WALL perl, the post-modern language http://www.wall.org/~larry/pm.html A Modernist has to decide whether this is true OR that is true. The Modernist believes in OR more than AND. Postmodernists believe in AND more than OR.

Slide 57

Slide 57 text

LARRY WALL You learn a natural language once and use it many times. The lesson for a language designer is that a language should be optimized for expressive power rather than for ease of learning. It's easy to learn to drive a golf cart, but it's hard to express yourself in one. You'd like to ignore some of the dimensions [of the language] to begin with. You'd like to be able to talk baby talk and be understood. It's okay if a language is difficult to learn, as long as you don't have to learn it all at once.

Slide 58

Slide 58 text

TESLA

Slide 59

Slide 59 text

OCTOBER 1909

Slide 60

Slide 60 text

TESLA? OF COURSE

Slide 61

Slide 61 text

TIM BERNERS-LEE •physicist •worked at cern •invented the world wide web in 1989 •HTTP and HTML

Slide 62

Slide 62 text

TIM BERNERS-LEE In 1989, he proposed a global hypertext project, to be known as the World Wide Web. Based on the earlier "Enquire" work, it was designed to allow people to work together by combining their knowledge in a web of hypertext documents. He wrote the first World Wide Web server, "httpd", and the first client, "WorldWideWeb" a what-you-see-is-what-you- get hypertext browser/editor which ran in the NeXTStep environment. This work was started in October 1990, and the program "WorldWideWeb" first made available within CERN in December, and on the Internet at large in the summer of 1991.

Slide 63

Slide 63 text

TIM BERNERS-LEE Anyone who has lost track of time when using a computer knows the propensity to dream, the urge to make dreams come true and the tendency to miss lunch. Physicists analyze systems. Web scientists, however, can create the systems. The most important thing that was new was the idea of URI-or URL, that any piece of information anywhere should have an identifier, which will allow you to get hold of it.

Slide 64

Slide 64 text

TIM BERNERS-LEE The Web as I envisioned it, we have not seen it yet. The future is still so much bigger than the past. The Semantic Web is not a separate Web but an extension of the current one, in which information is given well-defined meaning, better enabling computers and people to work in cooperation. When I invented the web, I didn't have to ask anyone's permission.

Slide 65

Slide 65 text

TIM BERNERS-LEE The web is more a social creation than a technical one. I designed it for a social effect — to help people work together — and not as a technical toy. The ultimate goal of the Web is to support and improve our weblike existence in the world. We clump into families, associations, and companies. We develop trust across the miles and distrust around the corner. The Web does not just connect machines, it connects people.

Slide 66

Slide 66 text

TIM BERNERS-LEE In an extreme view, the world can be seen as only connections, nothing else. We think of a dictionary as the repository of meaning, but it defines words only in terms of other words. I liked the idea that a piece of information is really defined only by what it's related to, and how it's related. There really is little else to meaning. The structure is everything. There are billions of neurons in our brains, but what are neurons? Just cells. The brain has no knowledge until connections are made between neurons. All that we know, all that we are, comes from the way our neurons are connected.

Slide 67

Slide 67 text

THE APACHE FOUNDATION • powers about 57% of the web (100 million sites), 68% of the top 100 • started by Rob McCool (real name), as NCSA HTTPd Server • named apache after the native american tribe, but also because it is “A Patchy Server” - as in software patches • Mostly written by a guy named Brian Behlendorf (who was also the CTO for the Burning Man festival and apparently quite the raver) • Over 650 people have committed to this project 1995

Slide 68

Slide 68 text

YUKIHIRO MATSUMOTO 1965, Invented Ruby in 1995 “The goal of Ruby is to make programmers happy. I started out to make a programming language that would make me happy, and as a side effect it’s made many, many programmers happy.” "I hope to see Ruby help every programmer in the world to be productive, and to enjoy programming, and to be happy. That is the primary purpose of Ruby language."

Slide 69

Slide 69 text

5.times do print "We <3 Ruby" end

Slide 70

Slide 70 text

YUKIHIRO MATSUMOTO minswan: Matz is nice so we are nice. "Make Ruby natural, not simple, in a way that mirrors life." "Ruby is simple in appearance, but is very complex inside, just like our human body"

Slide 71

Slide 71 text

YUKIHIRO MATSUMOTO We often feel beauty in simple code. Balance is the final element of beautiful code. So far I have talked about brevity, conservatism, simplicity, and flexibility. No element by itself will ensure a beautiful program.

Slide 72

Slide 72 text

_WHY THE LUCKY STIFF “When you don’t create things, you become defined by your tastes rather than ability. Your tastes only narrow and exclude people. so create.” “Ruby is so... To code ruby is really to love, to feel passion, to feel pleasure, it stirs you inside so greatly, its such a beautiful language, also erotic i would say. Method calls striped, undressed of their parenthesis, chaining them together raw like... Just red ebullient jewel.”

Slide 73

Slide 73 text

_WHY THE LUCKY STIFF “until programmers stop acting like obfuscation is morally hazardous, they’re not artists, just kids who don’t want their food to touch.”

Slide 74

Slide 74 text

_WHY THE LUCKY STIFF _why’s poignant guide to ruby

Slide 75

Slide 75 text

_WHY THE LUCKY STIFF _why’s poignant guide to ruby “I’ll be straight with you. I want you to cry. To weep. To whimper sweetly. This book is a poignant guide to Ruby. That means code so beautiful that tears are shed. That means gallant tales and somber truths that have you waking up the next morning in the arms of this book.”

Slide 76

Slide 76 text

_WHY THE LUCKY STIFF _why’s poignant guide to ruby My conscience won’t let me call Ruby a computer language. That would imply that the language works primarily on the computer’s terms. That the language is designed to accommodate the computer, first and foremost. That therefore, we, the coders, are foreigners, seeking citizenship in the computer’s locale. It’s the computer’s language and we are translators for the world. But what do you call the language when your brain begins to think in that language? When you start to use the language’s own words and colloquialisms to express yourself. How can it be the computer’s language? It is ours, we speak it natively! We can no longer call it a computer language. It is the language of our thoughts.

Slide 77

Slide 77 text

_WHY THE LUCKY STIFF hackety hack

Slide 78

Slide 78 text

_WHY THE LUCKY STIFF tryruby.org

Slide 79

Slide 79 text