Slide 1

Slide 1 text

“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

Slide 2

Slide 2 text

The Future of Programming PHP UK 2015

Slide 3

Slide 3 text

The Future of Programming PHP UK 2015

Slide 4

Slide 4 text

The Future of Programming PHP UK 2015

Slide 5

Slide 5 text

The Future of Programming PHP UK 2015

Slide 6

Slide 6 text

The Future of Programming PHP UK 2015

Slide 7

Slide 7 text

The Future of Programming PHP UK 2015

Slide 8

Slide 8 text

L O N D O N H O M E B O Y

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Haskell

Slide 11

Slide 11 text

[Imagine graphic of abstract representation of thought]

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

Rich Hickey: Simple Made Easy Gary Bernhardt: Boundaries Alan Kay: The Future Doesn’t Have to be Incremental Anthony Ferrara: Beyond Series

Slide 18

Slide 18 text

Design Patterns

Slide 19

Slide 19 text

“Extracting patterns from today's programming practices ennobles them in a way they don't deserve.” — Alan Kay

Slide 20

Slide 20 text

22 Patterns → 1 Responsibility: Communication

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

State

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

Boundaries

Slide 27

Slide 27 text

Tools

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

“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”

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

“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

Slide 32

Slide 32 text

“[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

Slide 33

Slide 33 text

The Mind Math & Physics Backend Frontend Dev Ops Dev IA PM Arch. Biz ppl Design Copy

Slide 34

Slide 34 text

http://worrydream.com/#!/ABriefRantOnTheFutureOfInteractionDesign

Slide 35

Slide 35 text

Observability

Slide 36

Slide 36 text

Observability

Slide 37

Slide 37 text

Observability

Slide 38

Slide 38 text

Observability

Slide 39

Slide 39 text

Observability

Slide 40

Slide 40 text

Observability

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

Language

Slide 45

Slide 45 text

“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

Slide 46

Slide 46 text

x2 + 10x = 39 vs. http://worrydream.com/MediaForThinkingTheUnthinkable/

Slide 47

Slide 47 text

“Language is a user interface for ideas.” — Me (and probably other people)

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

Data Data Data Data Data UI UI UI UI UI

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

• Events • Callbacks • Promises • Database cursors • Arrays • etc. Streams (aka observables, aka sequences)

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

• …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

Slide 54

Slide 54 text

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; });

Slide 55

Slide 55 text

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'))); };

Slide 56

Slide 56 text

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);

Slide 57

Slide 57 text

'id' pipline = (member) => { 'tasks', filter: { member }, reject: { complete: true }, pick: 'dueDate', sortBy: 'dueDate' } 'title' 'priority'

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

Design & Engineering

Slide 60

Slide 60 text

Task List [{…}, {…}, {…}] → SELECT * from tasks owner = “Nate” → array_filter(…) “title (countdown)” →
  • duedate → usort(…)

    Slide 61

    Slide 61 text

    Task List [{…}, {…}, {…}] → SELECT title, duedate, (…) as countdown FROM tasks WHERE owner = “Nate” ORDERBY duedate “title (countdown)” →
  • Slide 62

    Slide 62 text

    No content

    Slide 63

    Slide 63 text

    @nateabele [email protected]