Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A Brief History of Code

Avi Flombaum
December 04, 2012

A Brief History of Code

Just a talk about the nature of code and the programmers that have brought computer science to the world.

Avi Flombaum

December 04, 2012
Tweet

More Decks by Avi Flombaum

Other Decks in Programming

Transcript

  1. 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
  2. NYC

  3. “Programmers change the world more on a daily basis than

    any other profession.” Yehuda Katz (@wycats), Ruby on Rails, jQuery, Ember.js
  4. 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
  5. 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
  6. 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).
  7. 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
  8. 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
  9. 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
  10. 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).
  11. 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...
  12. 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)
  13. 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")
  14. class Love def initialize(name) @name = name end def say_it

    10.times do puts "I <3 #{@love}" end end end
  15. 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
  16. 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
  17. 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
  18. 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.
  19. 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"]
  20. 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.
  21. 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.
  22. 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.
  23. 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.
  24. 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”
  25. 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.”
  26. ALAN KAY father of object orientation, inventor of the GUI.

    You’re welcome. "Lisp isn't a language, it's a building material."
  27. 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”
  28. OBJECT ORIENTATION The beginning of wisdom is to call things

    by their right names. Chinese Proverb
  29. 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."
  30. LARRY WALL The three chief virtues of a programmer are:

    Laziness, Impatience and Hubris. September 1954
  31. 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.
  32. 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.
  33. 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.
  34. 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.
  35. 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.
  36. 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.
  37. 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.
  38. 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.
  39. 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
  40. 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."
  41. 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"
  42. 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.
  43. _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.”
  44. _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.”
  45. _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.”
  46. _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.