Share
Embed
How Not Writing PHP Makes You Better At PHP
Given at PHP Benelux 2015
Daniel Cousineau
January 24, 2015
Transcript
52 slides
-
DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM Don’t
do more work than you have to My middle school swim coach -
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 -
DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM THE
LANGUAGE IS A MEANS TO AN END A WAY TO EXPRESS ABSTRACT THOUGHT -
DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM THE
LANGUAGE IS A MEANS TO AN END A WAY TO EXPRESS ABSTRACT THOUGHT ALGORITHMS -
DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM In
the beginning, there was Assembly -
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 -
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; } -
DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM CONSTRUCT
FUNCTION WHAT’S YOUR … FUNCTION -
DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM function
recurse() { recurse(); } recurse(); RangeError: Maximum call stack size exceeded. -
DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM http://bit.ly/bk-js
Linguistic Relativity in Programming Langauges -
+ DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM
SAPIR-WHORF HYPOTHESIS The languages you speak determine the way you think -
+ DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM
SAPIR-WHORF HYPOTHESIS The languages you speak influence the way you think -
+ 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 -
+ 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 -
DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM Combination
of words in common use that have a figurative, and sometimes literal, meaning -
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 -
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 -
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 -
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 -
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 -
DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM Means
of expressing a recurring construct or abstract idea, often across multiple languages -
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 -
DANIEL COUSINEAU // FOLLOW ME : @DCOUSINEAU OR HTTP://DCOUSINEAU.COM for
i, line in enumerate(text.split("\n")): print "#{0} {1}".format(i, line) -
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) -
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"; } -
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))) -
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(); -
+ 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 -
THANKS. FOR YOUR ATTENTION DANIEL COUSINEAU // FOLLOW ME :
@DCOUSINEAU OR HTTP://DCOUSINEAU.COM