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

Man Computer Symbiosis

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Alex Wheeler Alex Wheeler
November 15, 2017
130

Man Computer Symbiosis

Avatar for Alex Wheeler

Alex Wheeler

November 15, 2017
Tweet

Transcript

  1. J.C.R Licklider • Director at IPTO 1962-1964 - Information Processing

    Techniques Office • Funded Project MAC • Intergalactic Computer Network
  2. • “men will set the goals, formulate the hypotheses, determine

    the criteria, and perform the evaluations. • “computing machines will do the routinizable work that must be done to prepare the way for insights and decisions in technical and scientific thinking”
  3. • About 85 per cent of my "thinking" time was

    spent getting into a position to think, to make a decision, to learn something I needed to know • Several hours of calculating were required to get the data into comparable form. When they were in comparable form, it took only a few seconds to determine what I needed to know
  4. Lisp • "the greatest single programming language ever designed” -

    Alan Kay • The most powerful programming language is Lisp. If you don't know Lisp (or its variant, Scheme), you don't appreciate what a powerful language is - Richard Stallman
  5. Lisp • list processing • dialect - Scheme, Common Lisp,

    Clojure, Emacs Lisp • expressions that evaluate to a single value
  6. 10 [10 20 30 40] ‘(:a :b :c :d) (average

    [2 4 6 8]) (+ 2 2) (/ (+ 2 2) 2)
  7. (defmacro infix [infixed] (list (second infixed) ;; + (first infixed)

    ;; 1 (last infixed))) ;; 1 (infix (1 + 1)) => 2
  8. user=> (source when) (defmacro when [test & body] (list 'if

    test (cons 'do body))) (when (even? 2) (println "foo") (println "foo") (println "foo"))
  9. user=> (macroexpand ‘(when (even? 2) (println "its even") (println “yep")))

    => (if (even? 2) (do (println "its even”) (println "what he said")))
  10. (defn calculate [] (->> (range 10) (filter odd? ,,,) (map

    #(* % %) ,,,) (reduce + ,,,))) (GET "/:foo/:id" [foo id] (str "Foo = " foo "; Id = " id))
  11. (s/def ::big-even (s/and int? even? #(> % 1000))) (s/valid? ::big-even

    10) => false (s/valid? ::big-even 100000) => true
  12. (def suit? #{:club :diamond :heart :spade}) (def rank? (into #{:jack

    :queen :king :ace} (range 2 11))) (def deck (for [suit suit? rank rank?] [rank suit])) (s/def ::card (s/tuple rank? suit?)) (s/def ::hand (s/* ::card)) (s/def ::name string?) (s/def ::score int?) (s/def ::player (s/keys :req [::name ::score ::hand])) (s/def ::players (s/* ::player)) (s/def ::deck (s/* ::card)) (s/def ::game (s/keys :req [::players ::deck]))
  13. (s/explain ::game {::deck deck ::players [{::name “Alan Kay" ::score 100

    ::hand [[2 :banana]]}]}) user=> In: [::players 0 ::hand 0 1] val: :banana fails spec: ::card at: [::players ::hand 1] predicate: suit?
  14. • The Dream Machine: J.C.R. Licklider and the Revolution That

    Made Computing Personal • Dealers of Lightning • Any talks by Rich Hickey/David Nolen