The Future of Programming

7fca546408cc6d46ab158f06baed2535?s=47 Nate Abele
February 19, 2015

The Future of Programming

"The most dangerous thought you can have as a creative person is to think you know what you’re doing."
— Richard Hamming, The Art of Doing Science and Engineering

7fca546408cc6d46ab158f06baed2535?s=128

Nate Abele

February 19, 2015
Tweet

Transcript

  1. “The most dangerous thought you can have as a creative

    person is to think you know what you’re doing.” — Richard Hamming The Art of Doing Science and Engineering
  2. The Future of Programming PHP UK 2015

  3. The Future of Programming PHP UK 2015

  4. The Future of Programming PHP UK 2015

  5. The Future of Programming PHP UK 2015

  6. The Future of Programming PHP UK 2015

  7. The Future of Programming PHP UK 2015

  8. L O N D O N H O M E

    B O Y
  9. None
  10. Haskell

  11. [Imagine graphic of abstract representation of thought]

  12. None
  13. None
  14. None
  15. None
  16. None
  17. Rich Hickey: Simple Made Easy Gary Bernhardt: Boundaries Alan Kay:

    The Future Doesn’t Have to be Incremental Anthony Ferrara: Beyond Series
  18. Design Patterns

  19. “Extracting patterns from today's programming practices ennobles them in a

    way they don't deserve.” — Alan Kay
  20. 22 Patterns → 1 Responsibility: Communication

  21. None
  22. None
  23. State

  24. None
  25. None
  26. Boundaries

  27. Tools

  28. None
  29. “enormous, […] but not stronger” “inherent defects at the most

    basic level” “primitive word-at-a-time style” “close coupling of semantics to state transitions” “division […] into […] expressions & […] statements” “inability to use powerful combining forms” “lack of useful mathematical properties for reasoning”
  30. None
  31. “We've got things back-asswards today: we let Intel make processors

    that may or may not be good for anything, then the programmer's job is to make Intel look good, by making code that will actually somehow run on it.” — Alan Kay https://www.youtube.com/watch?v=ubaX1Smg6pY
  32. “[W]e were able to do the operating system, the programming

    language, the applications and the user interface in about 10,000 lines of code. Now it's true that we were able to build our own computers, that makes a huge difference.” — Alan Kay https://www.youtube.com/watch?v=ubaX1Smg6pY
  33. The Mind Math & Physics Backend Frontend Dev Ops Dev

    IA PM Arch. Biz ppl Design Copy
  34. http://worrydream.com/#!/ABriefRantOnTheFutureOfInteractionDesign

  35. Observability

  36. Observability

  37. Observability

  38. Observability

  39. Observability

  40. Observability

  41. None
  42. None
  43. None
  44. Language

  45. “That language is an instrument of human reason, and not

    merely a medium for the expression of thought, is a truth generally admitted.” — George Boole
  46. x2 + 10x = 39 vs. http://worrydream.com/MediaForThinkingTheUnthinkable/

  47. “Language is a user interface for ideas.” — Me (and

    probably other people)
  48. None
  49. Data Data Data Data Data UI UI UI UI UI

  50. • Events • Callbacks • Promises • Database cursors •

    Arrays • etc.
  51. • Events • Callbacks • Promises • Database cursors •

    Arrays • etc. Streams (aka observables, aka sequences)
  52. None
  53. • …show list of incomplete tasks for a given user

    • …display the title and priority • …sorted by date Given a list of tasks… http://scott.sauyet.com/Javascript/Talk/2014/01/FuncProgTalk
  54. http://scott.sauyet.com/Javascript/Talk/2014/01/FuncProgTalk var getIncompleteTaskSummariesForMember = function(memberName) { return fetchData() .then(function(data) {

    return data.tasks; }) .then(function(tasks) { var results = []; for (var i = 0, len = tasks.length; i < len; i++) { if (tasks[i].member == memberName) { results.push(tasks[i]); } } return results; }) .then(function(tasks) { var results = []; for (var i = 0, len = tasks.length; i < len; i++) { if (!tasks[i].complete) { results.push(tasks[i]); } } return results; }) .then(function(tasks) { var results = [], task; for (var i = 0, len = tasks.length; i < len; i++) { task = tasks[i]; results.push({ id: task.id, dueDate: task.dueDate, title: task.title, priority: task.priority }) } return results; }) .then(function(tasks) { tasks.sort(function(first, second) { return first.dueDate - second.dueDate; }); return tasks; });
  55. http://scott.sauyet.com/Javascript/Talk/2014/01/FuncProgTalk var getIncompleteTaskSummariesForMember = function(memberName) { return fetchData() .then(get('tasks')) .then(filter(propEq('member',

    memberName))) .then(reject(propEq('complete', true))) .then(map(pick(['id', 'dueDate', 'title', 'priority']))) .then(sortBy(get('dueDate'))); };
  56. var taskPipeline = (member) => { return pipe( 'tasks', filter({

    member }), reject({ complete: true }), pick(['id', 'dueDate', 'title', 'priority']), sortBy('dueDate') ); }; var pipeline = taskPipeline(memberName); return fetchData().then(pipeline);
  57. 'id' pipline = (member) => { 'tasks', filter: { member

    }, reject: { complete: true }, pick: 'dueDate', sortBy: 'dueDate' } 'title' 'priority'
  58. None
  59. Design & Engineering

  60. Task List [{…}, {…}, {…}] → SELECT * from tasks

    owner = “Nate” → array_filter(…) “title (countdown)” → <li> <?=$title … ?> </li> duedate → usort(…)
  61. Task List [{…}, {…}, {…}] → SELECT title, duedate, (…)

    as countdown FROM tasks WHERE owner = “Nate” ORDERBY duedate “title (countdown)” → <li> <?=$title … ?> </li>
  62. None
  63. @nateabele nate@radify.io