Good or bad

Telling the difference is hard.


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.
Math is hard


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.





Derived from the Buddhist teaching of the three marks of existence

  • impermanence
  • suffering
  • emptiness / absence of self-nature
Math is hard
We overvalue features.
We undervalue ease of use.

Some languages are crap

English is an objectively crap language.

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

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.

Formal / polite

English - hard to give offense accidentally.

  • With all due respect....
  • Thanks a bunch!
  • See you next Tuesday


PHP lacks threads

This means it's not possible to write programs that deadlock internally.

PHP lacks monkey-patching

r = 4/3  # => 1
r.class  # => Fixnum

require 'mathn'

r = 4/3  # => (4/3)
r.class  # => Rational
Features generally make things harder to use
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.
- John Dvorak

iPhone models in 10 years

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

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


Why is KFC popular around the world.

Good or bad? - telling the difference is hard.

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.