Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Good ideas that we forgot

153 views

Published on

Good ideas that we forgot by Joe Armstrong

Over the years there have been many good ideas in computer science and many stupid ideas. What can we learn from history? Which of the old and forgotten ideas should be brought back to life and re-evaluated? What can we learn from the stupid ideas of the past?

Published in: Technology
  • Thanks for the help. I also ordered from www.HelpWriting.net
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • I have always found it hard to meet the requirements of being a student. Ever since my years of high school, I really have no idea what professors are looking for to give good grades. After some google searching, I found this service ⇒ www.HelpWriting.net ⇐ who helped me write my research paper.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • I have always found it hard to meet the requirements of being a student. Ever since my years of high school, I really have no idea what professors are looking for to give good grades. After some google searching, I found this service ⇒ www.WritePaper.info ⇐ who helped me write my research paper. The final result was amazing, and I highly recommend ⇒ www.WritePaper.info ⇐ to anyone in the same mindset as me.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you’re looking for a great essay service then you should check out ⇒ www.HelpWriting.net ⇐. A friend of mine asked them to write a whole dissertation for him and he said it turned out great! Afterwards I also ordered an essay from them and I was very happy with the work I got too.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Download The Complete Lean Belly Breakthrough Program with Special Discount. ●●● https://tinyurl.com/y6qaaou7
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Good ideas that we forgot

  1. 1. Good ideas that we forgot Joe Armstrong
  2. 2. My goals
  3. 3. • To remind you of the important things worth knowing • Identify the stuff worth learning • Identify some problems worth solving
 
 [note: this is a very biased view]
  4. 4. What ideas has we forgotten?
  5. 5. I made some lists • Collect lots of items easy • Assign to lists difficult • Shorten the lists to N items (N is small) very difficult
 Throwing things away is much more difficult than collecting things - but what’s left is better.
  6. 6. But before we get to the lists we need some principles to evaluate the results
  7. 7. Computer science 101
  8. 8. #1 - Observational Equivalence • Two systems are equivalent if they cannot be distinguished on the basis of their observable inputs and outputs. Inputs Outputs Need Several languages: - Describe the Inputs and outputs - Describe Computations - Describe Connections - Describe sequences of events
  9. 9. #2 - Isolation • Two systems are isolated if what happens in one system cannot influence what happens in the other system. Messages - Messages should never crash the system - Messaging is inevitable - The sender never knows if the message is received
  10. 10. #3 - Composition • Things are composable if they can be combined in such a way that the combination behaves in a similar manner to the individual parts.
  11. 11. #4 - Causality • Effect Follows Cause Messages A B - B does not know how A IS only how it WAS - A does not know if B received the last message it sent
  12. 12. #5 - Physics • For a computation to take place all the data and the program must be at the same place in space time So you can move the data or the program or both. Tip: get all the data you need and the program to one place before doing a computation
  13. 13. Violating any one of these principles will lead to brittle software that may appear to work but will one day fail in ways that are difficult to understand
  14. 14. Following these principles has many benefits …
  15. 15. isolation gives • Fault-tolerance • Scalability • Security For free :-) What benefits come from obeying the other principles?
  16. 16. Part 2 Things to learn which you might have forgotten or not known about
  17. 17. • 2 great papers to read • 4 old tools to learn • 4 really bad things • 3 great books to read • 7 reasons why software is difficult now • 10 reasons why software was easier back in the day • 1 fun programming exercise • 8 great machines from the past 
 … and … 80 things to do
  18. 18. … • 3 performance improvements • 5+ YouTube videos to watch • 6 things not to do • 5 sins • 4 languages to learn • 4 great forgotten ideas • 6 areas to research • 2 dangers • 4 ideas that are obvious now but strange at first • 2 fantastic programs to try
  19. 19. 80
  20. 20. 2 great papers to read • A Plea for Lean Software - Niklaus Wirth • The Emperor’s old clothes - ACM Turing award lecture - Tony Hoare
  21. 21. 4 old tools to learn • emacs (vi) • bash • make • shell

  22. 22. 3 great books to read
  23. 23. 1 fun programming exercise Serious fun - might cause your brain to melt
  24. 24. YouTube videos to watch • The computer revolution has not happened yet
 Alan Kay • Computers for Cynics
 Ted Nelson
  25. 25. Part 4 Four great forgotten ideas
  26. 26. Flow Based Programming
  27. 27. Flow Based Programming • Invented by John Paul Morrison in the early 1970’s • Programming by “placing objects next to each other” • Binary distribution of components • Account for all packets
  28. 28. EndStart F1 F2 F3 Start F1 F3 F4 EndSplit F2 Merge
  29. 29. {ok, X} | {error,W} F(X) {ok, F(X)} {error, …}} {error,W} Errors are forwarded though the network All “jobs” are numbered
  30. 30. 1,2,3,… {1,ok,…},{2,error,…} The input is a stream of messages 1,2,3,4 The output is a stream of replies No packets are lost
  31. 31. • We’re building apps and websites • We should be building components that can be wired together
  32. 32. Sins • Programs that cannot be remotely controlled • Programs that cannot share their data • Programs that create data in a proprietary format • Program without a published interface
  33. 33. Pipes
  34. 34. Pipes • The output of my program should be the input to your program • A | B | C • Text-flows across the boundary • Killed by GUIs and Apps (Apps are not pipeable)
  35. 35. “Doug has been explicit in saying that he very nearly exercised managerial control to get pipes installed.” “Point 1's garden hose connection analogy, though, is the one that ultimately whacked us on the head to best effect.” http://cm.bell-labs.com/cm/cs/who/dmr/mdmpipe.html M.Douglas McIIroy
  36. 36. “.. he conceived Unix pipes, which allow programs to work together with no knowledge of each other...”
  37. 37. Pipes • Are formed by composing items • Items are black box equivalent • Items obey causality • Individual Items are isolated
  38. 38. Apps • Pads - Tablets - Phones • Human can interact with Apps • Apps can’t interact with each other • You are locked inside your Apps. They all do different things with a varying degree of success.
  39. 39. Linda Tuple Spaces
  40. 40. Linda Tuple Spaces • Shared Whiteboard • Gelernter and Carriero 1986 • More declarative than message passing • We just create jobs and don’t know who will do them
  41. 41. Tuple Space Operations • out (adds a tuple to the store) • in (reads a tuple and removes it from the store) • rd (reads a tuple) • eval (create a new parallel process)
  42. 42. Id = random_int(), out <fac_request,Id,50> in <fac_response,Id,N> in <fac_request,Id,X> F = factorial(X), out <fac_response,Id,N> <fac_request,345126313,34> <fac_request,7654212512,29> <fac_response,23132394234,120> … in <fac_request,Id,X> F = factorial(X), out <fac_response,Id,N> in <fac_request,Id,X> F = factorial(X), out <fac_response,Id,N> in <fac_request,Id,X> F = factorial(X), out <fac_response,Id,N> in <fac_request,Id,X> F = factorial(X), out <fac_response,Id,N> in <fac_request,Id,X> F = factorial(X), out <fac_response,Id,N> “client” “servers” Shared tuple space
  43. 43. Hypertext
  44. 44. Hypertext • 1960’s - Ted Nelson - Xanadu (first approximation to Xanadu was 1998) • 1962 - Douglas Engelbart - NLS (oN Line System) • 1963 - Ted Nelson coins the word “Hypertext” • 1980 - Tim Berners Lee makes a simple hypertext system • 1987 - TBL Makes WWW • 1987 - Apple makes Hypercard
  45. 45. • WWW is not hypertext • HTML is not hypertext • HTML links are not hypertext links
  46. 46. Page not found 404
  47. 47. All web pages are not writable
  48. 48. How to correct a typo on a web page
  49. 49. Correcting a typo (1) 1. Learn GIT 2. Locate the program that creates the page 3. Locate the typo in the source code 4. Correct the typo and test 5. Send a push request to the maintainer of the site
  50. 50. Correcting a typo (2) 1. Select the text 2. Type in the correction 3. All people observing the page see the change after a propagation delay
  51. 51. • Links can break • Cannot write any page • Sparse knowledge • Few authors per page • Gigantic WWW Wiki • Links cannot break • Can write any page • Dense knowledge • Many authors per page • Small
  52. 52. Xanadu • Ted Nelson’s Hypertext system • https://en.wikipedia.org/wiki/ Project_Xanadu#Original_17_rules • No data is ever lost - no 404’s • All data is secure • Every user can read write and store data • …
  53. 53. It’s your turn nextt
  54. 54. Programs that are not secure and cannot be remotely controlled should not be written All Apps should be scriptable All Apps should be composable Finally

×