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

Man Computer Symbiosis

Alex Wheeler
November 15, 2017
99

Man Computer Symbiosis

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