Press 'c' to toggle code style
Press 's' for speaker notes
Being a programmer is mostly
Drinking coffee
Googling answers on stackoverflow
Making choices
Which framework to use
Which libraries to use
How code should be written
Which frameworks are good, and which are bad.
Which libraries are good, and which are bad.
What code would be good, and what would be bad.
What is good?
What is bad?
"No wireless. Less space than a Nomad. Lame."
Rob Malda (founder of slashdot), on the iPod at its release in 2001.
400 million iPods sold
There's no chance that the iPhone is going to get any significant market share. No chance. It's a $500 subsidized item. They may make a lot of money. But if you actually take a look at the 1.3 billion phones that get sold, I'd prefer to have our software in 60% or 70% or 80% of them, than I would to have 2% or 3%, which is what Apple might get.
Steve Ballmer, Microsoft CEO, 30 April 2007
1.2 billion iPhones sold
$750 billion revenue
Why this talk
Some still saw the iPhone as shit:
can't even replace the battery
can't even put a memory card in it
can't even send MMS at launch.
Some thought the iPhone was only selling well for the wrong reasons:
First smart phone to the market.
Apple products sell well just because they look good.
Apple spends more on marketing than other companies.
Iphone owners are sheep who buy it just because it's popular
If you think something is bad, but it's hugely popular, you're failing to tell good from bad.
Emotions
Math is hard
Emotions
http://www.mongodb-is-web-scale.com/
Which of these is better
Code that is easy to understand, has a good design, and has a good number unit tested.
Code that is rough around the edges, is full of hacks and isn't fully tested.
Aesthetics
Kintsugi
https://en.wikipedia.org/wiki/Kintsugi
Wabi-sabi
https://en.wikipedia.org/wiki/Wabi-sabi
Wabi-sabi
Derived from the Buddhist teaching of the three marks of existence
English can be understood through tough thorough thought though.
Did you read it?
Yes, I read it.
English has pursued other languages down alleyways to beat them unconscious and rifle their pockets for new vocabulary.
PHP keeps old bugs around
English keeps old spellings around like "won't" "cholmondeley" "Featherstonhaugh"
English lacks features.
Most European languages have a polite and informal way of saying 'you'.
Other languages have deferential ways of talking
Less, "Yo! Get me a some water?"; and more, "It's a warm day for a nice refreshment, no?"
Java has a feature that PHP lacks: threads
Ruby has a feature that PHP lacks: Monkey-patching
One of the most powerful aspects of Ruby is the ability to re-open any class and change it’s methods.
Yes that’s right, you can actually reopen any class and change how it works. This includes the standard Ruby classes like String, Array or Hash!
Neither PHP or English are widely used.
80% of the web powered by PHP
1.5 billion people speak English, and it's the language used for business worldwide.
If you think something is bad, but it's hugely popular, you're failing to tell good from bad.
Lack of consistency
Easier to adopt new ideas.
Easier to grow and adapt.
Things that affect everyday use accumulate, but that involve big numbers
Why was the iPod so successful?
Itunes - shit but good enough
The wheel interface
Nokia made a huge mistake
Apple should pull the plug on the iPhone
This is not an emerging business. In fact it’s gone so far that it’s in the process of consolidation with probably two players dominating everything, Nokia and Motorola.
These phones go in and out of style so fast that unless Apple has half a dozen variants in the pipeline, its phone, even if immediately successful, will be passé within 3 months.
There is no likelihood that Apple can be successful in a business this competitive.
iPhone
iPhone 3G
iPhone 3GS
iPhone 4
iPhone 4S
iPhone 5
iPhone 5c
iPhone 5s
iPhone 6
iPhone 6 Plus
iPhone 6s
iPhone 6s Plus
iPhone SE
iPhone 7
iPhone 7 Plus
iPhone 8
iPhone 8 Plus
iPhone X
Nokia models in just 2007
Nokia N800
Nokia N93i
Nokia 6110 Navigator
Nokia 6131 NFC
Nokia N76
Nokia 3110 classic
Nokia E61i
Nokia E65
Nokia E90
Nokia N77
Nokia 5070
Nokia 5700 XpressMusic
Nokia 7088
Nokia 8800 Sirocco Gold
Nokia 6120 classic
Nokia 1200
Nokia 1208
Nokia 1208b
Nokia 1650
Nokia 2505
Nokia 2630
Nokia 2660
Nokia 2760
Nokia 2760h
Nokia 3109 classic
Nokia 6500 classic
Nokia 6500 slide
Nokia 8600 Luna
Nokia 3500 classic
Nokia 6121 classic
Nokia 6267
Nokia 5611 XpressMusic
Nokia 6131i
Nokia 7500 Prisma
Nokia 7900 Prism
Nokia 6555
Nokia 500 Auto Navigation
Nokia 5310 XpressMusic
Nokia 5610 XpressMusic
Nokia N81
Nokia N81 8GB
Nokia N95 8GB
Nokia 8800 Sirocco Edition
Nokia E51
Nokia 6301
Nokia 2135
Nokia N810
Nokia 6066
Nokia NM705i
Nokia 8800 Arte
Nokia 8800 Sapphire Arte
Nokia N82
Nokia 3110 Evolve
Nokia 6263
53!!ONE!!! different models.
List from http://nokiamuseum.info/category/launching-year/2007/
Why was the iPhone so successful?
Left features out - no copy paste, no MMS
Really simplified the interface. 3 buttons vs 9 buttons + 5 way nipple on my old SE K800i
Spent a huge amount of engineering on making the scrolling smooth
Getting better at telling good from bad
Recognise your own emotions.
Push back against features.
Put effort into making life easy
Be prepared to still be wrong
Be prepared to be wrong.
Decouple your code
Write tests
Spend less time thinking deciding between good or bad
A large part of being a programmer is making choices, whether it's what framework to use, what libraries to use or just how to structure code. Every day when we're programming we try to take choices that are good, and avoid choices that are bad.
But what if actually we're all terrible at telling the difference between good and bad? What if we're all just not very good at a fundamental skill needed to do our jobs?
In this talk I'm going to try to demonstrate a couple of common epistemological mistakes that people make, how you can try to analyze what is good and what is bad a bit better, and how to limit the consequences that come inevitably when bad choices are made.