How Not Writing PHP Makes You Better At PHP

How Not Writing PHP Makes You Better At PHP

Given at PHP Benelux 2015

6696617169722009ed1ec8c52496c6da?s=128

Daniel Cousineau

January 24, 2015
Tweet

Transcript

  1. HOW NOT WRITING PHP CAN MAKE YOU BETTER AT PHP

  2. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM @dcousineau

  3. @croscon

  4. None
  5. HOW NOT WRITING PHP CAN MAKE YOU BETTER AT PHP

  6. HOW TO LIFEHACK YOUR WAY INTO LEARNING PROGRAMMING

  7. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM Don’t

    do more work than you have to My middle school swim coach
  8. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM PROGRAMMING

    LANGUAGES
  9. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM TURING

    COMPLETE
  10. None
  11. None
  12. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM any

    real-world computation can be translated into an equivalent computation involving a Turing machine. CHURCH-TURING THESIS
  13. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM

  14. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM Turing

    Complete
  15. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM THE

    LANGUAGE IS A MEANS TO AN END A WAY TO EXPRESS ABSTRACT THOUGHT
  16. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM THE

    LANGUAGE IS A MEANS TO AN END A WAY TO EXPRESS ABSTRACT THOUGHT ALGORITHMS
  17. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM EXPLANATION

  18. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM In

    the beginning, there was Assembly
  19. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM …and

    it was not good
  20. main: li $a0, 1 li $a1, 2 li $t0, 3

    jal addthem add $t0, $t0, $v0 syscall addthem: addi $sp, $sp, -4 sw $ra, 0($sp) add $v0, $a0, $a1 lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra
  21. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM And

    then there was C
  22. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM int

    main() { int t0 = 3; int v0 = addthem(1, 2); return v0 + t0; } int addthem(int a0, int a1){ int t0 = a0 + a1; return t0; }
  23. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM CONSTRUCT

    FUNCTION WHAT’S YOUR … FUNCTION
  24. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM function

    recurse() { recurse(); } recurse(); RangeError: Maximum call stack size exceeded.
  25. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM REPETITION=LEARNING

  26. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM http://bit.ly/bk-js

    Linguistic Relativity in Programming Langauges
  27. + DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM

    SAPIR-WHORF HYPOTHESIS The languages you speak determine the way you think
  28. + DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM

    SAPIR-WHORF HYPOTHESIS The languages you speak influence the way you think
  29. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM Culture

    Language thought
  30. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM Culture

    Language thought
  31. + DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM

    BLUB PARADOX “Some programming languages are more powerful than others… I look at [Python, Java, C and Perl]. How can you get anything done in them, I think, without macros?” Paul Graham http://www.paulgraham.com/avg.html
  32. + DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM

    BLUB PARADOX “They're satisfied with whatever language they happen to use, because it dictates the way they think about programs.” Paul Graham http://www.paulgraham.com/avg.html
  33. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM IDIOMS

  34. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM Combination

    of words in common use that have a figurative, and sometimes literal, meaning
  35. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM In

    this case, it was routed straight to the Director of Central Intelligence and, because it evidently discussed the identity of a field spook, to the Deputy Director (Operations), since all the field spooks worked for her. The former was a busier person than the latter, but that didn’t matter, since the latter was married to the former Tom Clancy, Rainbow Six
  36. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM What

    beliefs or what wrong could motivate a man to do murder on a large scale? In the former case, Brightling was not a religious fanatic. In the latter, he had no overt dissatisfaction with his country. Tom Clancy, Rainbow Six
  37. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM His

    last through before closing his eyes on this sunny morning was that he hoped the contact number hadn’t been changed, or compromised. If the latter, then he’d have to do some explaining to the local police… Tom Clancy, Rainbow Six
  38. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM Yes,

    this could and would work. The only question was daylight or nighttime. The latter was the usual answer, but he’d learned the hard way that counter-terror teams loved the night… Tom Clancy, Rainbow Six
  39. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM “Language

    and economics.” The former had proven very useful. The latter had been totally valueless, since the Marxist idea of economics had not exactly proven to be an effective one. Tom Clancy, Rainbow Six
  40. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM Means

    of expressing a recurring construct or abstract idea, often across multiple languages
  41. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM i

    = 0 for line in text.split("\n"): print "#{0} {1}".format(i, line) i += 1
  42. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM for

    i, line in enumerate(text.split("\n")): print "#{0} {1}".format(i, line)
  43. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM def

    my_enumerate(iterable): i = 0 for item in iterable: yield i, item i += 1 for i, line in my_enumerate(text.split("\n")): print "#{0} {1}".format(i, line)
  44. None
  45. None
  46. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM function

    enumerate($iterable) { $i = 0; foreach ($iterable as $item) { yield [$i, $item]; $i++; } } foreach (enumerate(explode("\n", $text)) as list($i, $line)) { print "#$i $line\n"; }
  47. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM DECISIONS

    ARE LIKE WATER
  48. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM (defn

    manhattan-distance [piece board] "Find the manhattan distance between a piece and its goal" (let [pos (locate piece board) goal-pos (locate piece *goal-state*)] (abs (+ (- (floor (/ pos 3)) (floor (/ goal-pos 3))) (- (mod pos 3) (mod goal-pos 3)))))) (defn manhattan-distance-sum [board] "Find the sum of the manhattan distances" (reduce + (map #(manhattan-distance % board) board)))
  49. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM var

    sortedDict = _(someDict).chain() .map(function(v, k) { return [k,v]; }) .sortBy(function(a) { return a[0]; }) .reduce(function(s, v) { s[v[0]] = v[1]; return s; }, {}) .value();
  50. DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM PHP

    MADE ME BETTER
  51. + DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM

    THE TAKEAWAY Other languages make certain ABSTRACT concepts easier to learn By making it easier to use said concept than not use it in a way that your current language does not
  52. THANKS. FOR YOUR ATTENTION DANIEL COUSINEAU // FOLLOW ME :

    @DCOUSINEAU OR HTTP://DCOUSINEAU.COM