Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
@PeterHilton
http://hilton.org.uk/
the hardest problem in programming
How to name things:
15 years as 

the dev team’s
only native
English speaker…
@PeterHilton • 2
George Orwell’s
rules for naming
How to name things, by G. Orwell
‘What is above all needed is to 

let the meaning choose the word, 

and not the other wa...
‘When you think of a concrete
object, you think wordlessly,
and then, if you want to
describe the thing you have
been visu...
‘When you think of something
abstract you are more inclined to
use words from the start, and
unless you make a conscious e...
1. Never use a metaphor, simile, or other figure of
speech which you are used to seeing in print.
2. Never use a long word...
‘These rules sound elementary,
and so they are, but they demand
a deep change of attitude in
anyone who has grown used to
...
Politics and the English Language

(1946)
1. ‘Never use a metaphor, simile, or
other figure of speech which you are
used to seeing in print’
(beware of over-using d...
2. ‘Never use a long word 

where a short one will do’
(prefer concise variable names, 

use longer names for a good reaso...
3. ‘If it is possible to cut a word out,
always cut it out’
(avoid additional words that don’t add any
meaning to a name)
...
AbstractAnnotationConfigDispatcher
ServletInitializer  
14@PeterHilton •
org.springframework.web.servlet.support.
‘This is ...
4. ‘Never use the passive 

where you can use the active’
(respect grammatical rules for identifiers)
e.g.
class  PlanEven...
5. ‘Never use a foreign phrase, a
scientific word, or a jargon word if
you can think of an everyday English
equivalent’
(d...
6. ‘Break any of these rules sooner
than say anything outright barbarous’
(don’t blame me if your code is featured on
The ...
It sounds like
writing prose 

is as hard as 

writing code.
Who knew? @PeterHilton • 18
Advice from 

other writers
21
‘Write with the 

door closed, 

rewrite with the 

door open.’
Stephen King on pair programming
@PeterHilton •
warriorwoman531 / CC BY-ND 2.0
23
Anne Rice on development hardware
‘I find the bigger 

the monitor, 

the better the
concentration.’
@PeterHilton •
Ernest Hemingway on user personas
‘When writing a novel a
writer should create living
people; 

people not characters. 

A...
W. Somerset Maugham on 

enterprise architecture
‘There are three rules for
writing the novel.
Unfortunately, no one
knows...
ranh / CC BY 2.0
Neil Gaiman on productivity
‘Write.



‘Put one word after another. 

Find the right word, put it down.


‘Finish what you...
Neil Gaiman on code review
‘Put it aside.
Read it pretending you’ve never read it
before.
Show it to friends whose opinion...
Neil Gaiman on review feedback
‘When people tell you something’s
wrong or doesn’t work for them,
they are almost always ri...
Neil Gaiman on refactoring
‘Fix it.
‘Remember that, sooner or later, before it ever
reaches perfection, you will have to l...
Neil Gaiman on humour in code
‘Laugh at your own jokes.’
33@PeterHilton •
Neil Gaiman on open source
‘The main rule of writing is
that if you do it with
enough assurance and
confidence, you’re all...
Summary of advice from writers
Advice from writers is useful, and 

not only about naming.
Writers have been at it for cen...
Getting it right
means a struggle
for every single
word.
@PeterHilton • 36
Naming things
badly
Phil Karlton on naming
‘There are only two hard things 

in Computer Science: 

1. cache invalidation and
2. naming things...
Lewis Carroll on bad naming
‘When I use a word,’
Humpty Dumpty said,
in rather a scornful tone,
‘it means just what I choo...
Deliberately meaningless names
In theory, foo is only used as a placeholder
name (because it doesn’t mean anything)
40@Pet...
Sam Gardiner on naming
‘If you don’t know what a thing should be
called, you cannot know what it is.
If you don’t know wha...
What is the worst ever

variable name?
data  
What is the second-worst name?
data2  
What is the third-worst name ever?
da...
Abbreviations are ambiguous
Is char a character or characteristic?
Does mod mean modify or modulo?
What about acc, pos or ...
One letter is too short
Local variable: what is the meaning?
var  a  =  42;  
The exception that proves the rule?
for  (in...
Functional programming:

one letter is still too short
45@PeterHilton •
def  modp[C]

        (f:  B1     (B2,  C),  a:  A...
46@PeterHilton •
()
Multiple words can be replaced by
more specific words
What’s an appointment_list?
a calendar  
What’s an company_person?
a...
Vague words are vague
51@PeterHilton •
Alan Green wrote* about vague words, e.g.
InvoiceManager  
TaskManager  
‘Manager’ ...
Vague words are vague
52@PeterHilton •
get at the start of a method name is

appropriate only for returning a field value....
Wrong words are wrong,
Synonyms are confusing
order ≠ shipment
carrier ≠ broker
shipment ≠ transport leg
shipment = consig...
Apache Camel - http://camel.apache.org
(Java enterprise 

middleware example)
//  Not  enough  jokes  in  code  
/**  Configure  and  start  Apache  Camel.  */  
{  
    Logger.info("Starting  Camel…"...
Property accessors revisited
In a numeric library, these method names
would be irresistible, but inadvisable:
getEven  
ge...
Summary of naming things badly
Meaningless: foo
Too general: data
Too short: a
Too long: text_correction_by_editor  
Abbre...
Better naming
How to solve the naming problem
Become a better writer.
Improve your vocabulary.
Adopt better naming practices.
Work on it...
Become a better writer
Naming is just one part of writing,
and is mostly about vocabulary.
You may remember working on voc...
Improve your general vocabulary
Read books, especially funny novels.
Play word games with someone who
always wins, until t...
63@PeterHilton •
Piotr / CC BY 2.0
Improve your general vocabulary
Use your dictionary and thesaurus…
65@PeterHilton •
@PeterHilton • 67
A sandwich walks
into a pub.
The barman says,

‘I’m sorry, we
don’t serve food.’
Tell jokes
Many jokes rely on word-play.
It takes practice to think of puns quickly.
Puns are important for naming, becaus...
Adopt better naming practices
69@PeterHilton •
Start with meaning and intention.
Use words with precise meanings.
Prefer f...
Replace vague words with more
specific synonyms
Manager  
Object  
Data  
Thing  
Info  
Amount  
Details

do  
execute  
...
Overcome fear of renaming
The only thing harder than naming is
renaming.
Renaming requires change, a conversation,
and new...
Chapter 10:
The power of
variable names
Chapter 2:
Meaningful
Names
Chapter 2:
Names
Gather domain-specific vocabulary
Scan the domain model entities’ Wikipedia
pages for names of related concepts.
Read nove...
Chapter 2:
Communication
and the use of
language
Programmers Stack Exchange - question by Tragedian answered by gnat / CC-BY-SA
For naming, there are six techniques
that w...
Additional benefits
If you become a better writer,
you could use your new skills
… for writing
80@PeterHilton •
Writing whole
sentences in code
‘Most of the things programmers
say about comments in code are
excuses for not writing any
comments at all.’
@PeterHilton
...
Comments: the basics
1. Don’t say what the code does

(because the code already says that)
2. Don’t explain awkward logic
...
Explain why the code exists
Even perfect code cannot explain its own
existence.
When should I use this code?
When shouldn’...
Discover which comments are hard
to write, and why
If a comment is easy to write, then that
code doesn’t need a comment.
W...
‘A common fallacy is to assume
authors of incomprehensible code
will somehow be able to express
themselves lucidly and cle...
Acknowledge that writing
(comments) is a specialist skill
On a cross-functional development team,
not everyone is good at ...
How to write good comments
(summary)
1. Try to write good code first.
2. Try to write a one-sentence comment.
3. Refactor ...
Summary
Summary
1. Naming is hard
2. Get inspiration from great writers
3. Read novels, tell jokes, play games
4. Expand your voca...
@PeterHilton
http://hilton.org.uk/
Peter Hilton is available for company
and conference presentations
peter.hilton@gmail.c...
How to name things: the hardest problem in programming
How to name things: the hardest problem in programming
How to name things: the hardest problem in programming
How to name things: the hardest problem in programming
How to name things: the hardest problem in programming
How to name things: the hardest problem in programming
How to name things: the hardest problem in programming
How to name things: the hardest problem in programming
How to name things: the hardest problem in programming
How to name things: the hardest problem in programming
How to name things: the hardest problem in programming
How to name things: the hardest problem in programming
Upcoming SlideShare
Loading in …5
×

How to name things: the hardest problem in programming

Developers can get better at their craft by learning from the great writers who mastered theirs. Writing software isn’t the same as writing a novel, but there are parallels. Besides, advice from writers is better because writers have been struggling with their craft for many centuries, not just a few decades. It’s better-written as well. This talk shares great writers’ best advice for coders: Stephen King on refactoring, Anne Rice on development hardware, Hemingway on modelling with personas, and Neil Gaiman on everything.

  • Be the first to comment

How to name things: the hardest problem in programming

  1. 1. @PeterHilton http://hilton.org.uk/ the hardest problem in programming How to name things:
  2. 2. 15 years as 
 the dev team’s only native English speaker… @PeterHilton • 2
  3. 3. George Orwell’s rules for naming
  4. 4. How to name things, by G. Orwell ‘What is above all needed is to 
 let the meaning choose the word, 
 and not the other way around. … the worst thing one can do with words is surrender to them.
  5. 5. ‘When you think of a concrete object, you think wordlessly, and then, if you want to describe the thing you have been visualising you probably hunt about until you find the exact words that seem to fit it.
  6. 6. ‘When you think of something abstract you are more inclined to use words from the start, and unless you make a conscious effort to prevent it, the existing dialect will come rushing in and do the job for you, at the expense of blurring or even changing your meaning…
  7. 7. 1. Never use a metaphor, simile, or other figure of speech which you are used to seeing in print. 2. Never use a long word where a short one will do. 3. If it is possible to cut a word out, always cut it out. 4. Never use the passive where you can use the active. 5. Never use a foreign phrase, a scientific word, or a jargon word if you can think of an everyday English equivalent. 6. Break any of these rules sooner than say anything outright barbarous.
  8. 8. ‘These rules sound elementary, and so they are, but they demand a deep change of attitude in anyone who has grown used to writing in the style now fashionable.’
  9. 9. Politics and the English Language
 (1946)
  10. 10. 1. ‘Never use a metaphor, simile, or other figure of speech which you are used to seeing in print’ (beware of over-using design patterns, and using their names just because you’re used to seeing them in code) e.g. AbstractConfigurationFactory 11@PeterHilton •
  11. 11. 2. ‘Never use a long word 
 where a short one will do’ (prefer concise variable names, 
 use longer names for a good reason) e.g. company_person_collection   vs staff 12@PeterHilton •
  12. 12. 3. ‘If it is possible to cut a word out, always cut it out’ (avoid additional words that don’t add any meaning to a name) e.g. AbstractObjectFormatterProxy   … 13@PeterHilton •
  13. 13. AbstractAnnotationConfigDispatcher ServletInitializer   14@PeterHilton • org.springframework.web.servlet.support. ‘This is like homeopathy. 
 What you’ve done is you’ve diluted the meaning until it’s all gone.’ @KevlinHenney
  14. 14. 4. ‘Never use the passive 
 where you can use the active’ (respect grammatical rules for identifiers) e.g. class  PlanEvents   vs class  EventPlanner   or even class  Scheduler   15@PeterHilton •
  15. 15. 5. ‘Never use a foreign phrase, a scientific word, or a jargon word if you can think of an everyday English equivalent’ (don’t let technical jargon from a library pollute your domain model) (beware libraries that import ‘foreign’ naming from one language to another) e.g. ShipmentMonad 16@PeterHilton •
  16. 16. 6. ‘Break any of these rules sooner than say anything outright barbarous’ (don’t blame me if your code is featured on The Daily WTF) Note: a lot depends on context; publishing library code is not the same as maintaining private application code 17@PeterHilton •
  17. 17. It sounds like writing prose 
 is as hard as 
 writing code. Who knew? @PeterHilton • 18
  18. 18. Advice from 
 other writers
  19. 19. 21 ‘Write with the 
 door closed, 
 rewrite with the 
 door open.’ Stephen King on pair programming @PeterHilton •
  20. 20. warriorwoman531 / CC BY-ND 2.0
  21. 21. 23 Anne Rice on development hardware ‘I find the bigger 
 the monitor, 
 the better the concentration.’ @PeterHilton •
  22. 22. Ernest Hemingway on user personas ‘When writing a novel a writer should create living people; 
 people not characters. 
 A character is a caricature.’ 25@PeterHilton •
  23. 23. W. Somerset Maugham on 
 enterprise architecture ‘There are three rules for writing the novel. Unfortunately, no one knows what they are.’ 27@PeterHilton •
  24. 24. ranh / CC BY 2.0
  25. 25. Neil Gaiman on productivity ‘Write.
 
 ‘Put one word after another. 
 Find the right word, put it down. 
 ‘Finish what you’re writing. Whatever you have to do to finish it, finish it.’ 29@PeterHilton •
  26. 26. Neil Gaiman on code review ‘Put it aside. Read it pretending you’ve never read it before. Show it to friends whose opinion you respect’ 30@PeterHilton •
  27. 27. Neil Gaiman on review feedback ‘When people tell you something’s wrong or doesn’t work for them, they are almost always right.
 
 ‘When they tell you exactly what they think is wrong and how to fix it, they are almost always wrong.’ 31@PeterHilton •
  28. 28. Neil Gaiman on refactoring ‘Fix it. ‘Remember that, sooner or later, before it ever reaches perfection, you will have to let it go and move on and start to write the next thing. ‘Perfection is like chasing the horizon. 
 Keep moving.’ 32@PeterHilton •
  29. 29. Neil Gaiman on humour in code ‘Laugh at your own jokes.’ 33@PeterHilton •
  30. 30. Neil Gaiman on open source ‘The main rule of writing is that if you do it with enough assurance and confidence, you’re allowed to do whatever you like.’ 34@PeterHilton •
  31. 31. Summary of advice from writers Advice from writers is useful, and 
 not only about naming. Writers have been at it for centuries; programming is merely decades old. Also, their advice is better written.
 And funnier. 35@PeterHilton •
  32. 32. Getting it right means a struggle for every single word. @PeterHilton • 36
  33. 33. Naming things badly
  34. 34. Phil Karlton on naming ‘There are only two hard things 
 in Computer Science: 
 1. cache invalidation and 2. naming things.’ 38@PeterHilton • 0. off-by-one errors
  35. 35. Lewis Carroll on bad naming ‘When I use a word,’ Humpty Dumpty said, in rather a scornful tone, ‘it means just what I choose it to mean - neither more nor less.’ Through the Looking-Glass, 
 and What Alice Found There (1871) 39@PeterHilton •
  36. 36. Deliberately meaningless names In theory, foo is only used as a placeholder name (because it doesn’t mean anything) 40@PeterHilton •
  37. 37. Sam Gardiner on naming ‘If you don’t know what a thing should be called, you cannot know what it is. If you don’t know what it is, you cannot sit down and write the code.’ http://97things.oreilly.com/wiki/index.php/ A_rose_by_any_other_name_will_end_up_as_a_cabbage 41@PeterHilton •
  38. 38. What is the worst ever
 variable name? data   What is the second-worst name? data2   What is the third-worst name ever? data_2 42@PeterHilton •
  39. 39. Abbreviations are ambiguous Is char a character or characteristic? Does mod mean modify or modulo? What about acc, pos or auth? Sadly, fab was just a function ƒ:A➞B
 (not fabulous) Allow one exception: id for ‘identity’ 43@PeterHilton •
  40. 40. One letter is too short Local variable: what is the meaning? var  a  =  42;   The exception that proves the rule? for  (int  i  =  1;  i  <  42;  ++i)   Not an improvement: 
 ii, jj, kk 44@PeterHilton •
  41. 41. Functional programming:
 one letter is still too short 45@PeterHilton • def  modp[C]
        (f:  B1    (B2,  C),  a:  A1):  
        (A2,  C)  =  {      val  (b,  c)  =  f(get(a))      (set(a,  b),  c)   }   https://github.com/scalaz/scalaz/blob/series/7.2.x/core/src/main/scala/scalaz/Lens.scala
  42. 42. 46@PeterHilton • ()
  43. 43. Multiple words can be replaced by more specific words What’s an appointment_list? a calendar   What’s an company_person? an employee or perhaps an owner   What’s a text_correction_by_editor? just an edit 50@PeterHilton •
  44. 44. Vague words are vague 51@PeterHilton • Alan Green wrote* about vague words, e.g. InvoiceManager   TaskManager   ‘Manager’ is very imprecise; one of its meanings may be the word you want: Bucket, Supervisor, Planner, Builder * http://www.bright-green.com/blog/2003_02_25/naming_java_classes_without_a.html
  45. 45. Vague words are vague 52@PeterHilton • get at the start of a method name is
 appropriate only for returning a field value. If it does anything else, or gets the data from anywhere else, use another name: fetch, find, lookup, create, calculate, derive, concoct,
  46. 46. Wrong words are wrong, Synonyms are confusing order ≠ shipment carrier ≠ broker shipment ≠ transport leg shipment = consignment carrier = transporter transport leg = journey 53@PeterHilton •
  47. 47. Apache Camel - http://camel.apache.org (Java enterprise 
 middleware example)
  48. 48. //  Not  enough  jokes  in  code   /**  Configure  and  start  Apache  Camel.  */   {      Logger.info("Starting  Camel…")      val  context  =  new  DefaultCamelContext()      configuredRoutes  foreach  {  route  =>  
      context.addRoutes(route)
    }      context.start()   } def  mountCamel()  {
  49. 49. Property accessors revisited In a numeric library, these method names would be irresistible, but inadvisable: getEven   getReal   getAround   getRoundTo   getRichQuick   getJoke 57@PeterHilton •
  50. 50. Summary of naming things badly Meaningless: foo Too general: data Too short: a Too long: text_correction_by_editor   Abbreviated: acc   Vague: InvoiceManager   Wrong: order   Just not funny: startCamel 58@PeterHilton •
  51. 51. Better naming
  52. 52. How to solve the naming problem Become a better writer. Improve your vocabulary. Adopt better naming practices. Work on it. 60@PeterHilton •
  53. 53. Become a better writer Naming is just one part of writing, and is mostly about vocabulary. You may remember working on vocabulary as part of learning a foreign language. Not having had to learn a foreign language is a mixed blessing. 61@PeterHilton •
  54. 54. Improve your general vocabulary Read books, especially funny novels. Play word games with someone who always wins, until they don’t. 62@PeterHilton •
  55. 55. 63@PeterHilton • Piotr / CC BY 2.0
  56. 56. Improve your general vocabulary Use your dictionary and thesaurus… 65@PeterHilton •
  57. 57. @PeterHilton • 67 A sandwich walks into a pub. The barman says,
 ‘I’m sorry, we don’t serve food.’
  58. 58. Tell jokes Many jokes rely on word-play. It takes practice to think of puns quickly. Puns are important for naming, because they rely on double-meanings. Spotting double-meanings is the essential skill for avoiding ambiguous names. 68@PeterHilton •
  59. 59. Adopt better naming practices 69@PeterHilton • Start with meaning and intention. Use words with precise meanings. Prefer fewer words in names. No abbreviations in names, except id. Use code review to improve names. Remember: ‘rename’ is the simplest but most effective refactoring. Use it.
  60. 60. Replace vague words with more specific synonyms Manager   Object   Data   Thing   Info   Amount   Details
 do   execute   perform   operate   manage   handle   get 70@PeterHilton •
  61. 61. Overcome fear of renaming The only thing harder than naming is renaming. Renaming requires change, a conversation, and new understanding. ‘Refactor’ is the safest refactoring. 71@PeterHilton •
  62. 62. Chapter 10: The power of variable names
  63. 63. Chapter 2: Meaningful Names
  64. 64. Chapter 2: Names
  65. 65. Gather domain-specific vocabulary Scan the domain model entities’ Wikipedia pages for names of related concepts. Read novels set in your customer’s domain, to learn their jargon. Find out what they really mean. 75@PeterHilton •
  66. 66. Chapter 2: Communication and the use of language
  67. 67. Programmers Stack Exchange - question by Tragedian answered by gnat / CC-BY-SA For naming, there are six techniques that were proven to work for me: 1. spend a lot of time on inventing names 2. use code reviews 3. don’t hesitate to rename 4. spend a lot of time on inventing names 5. use code reviews 6. don’t hesitate to rename
  68. 68. Additional benefits If you become a better writer, you could use your new skills … for writing 80@PeterHilton •
  69. 69. Writing whole sentences in code
  70. 70. ‘Most of the things programmers say about comments in code are excuses for not writing any comments at all.’ @PeterHilton 82@PeterHilton •
  71. 71. Comments: the basics 1. Don’t say what the code does
 (because the code already says that) 2. Don’t explain awkward logic
 (improve the code to make it clear) 3. Don’t add too many comments
 (it’s messy and they’ll get out of date) 83@PeterHilton •
  72. 72. Explain why the code exists Even perfect code cannot explain its own existence. When should I use this code? When shouldn’t I use it? What are the alternatives to this code? 84@PeterHilton •
  73. 73. Discover which comments are hard to write, and why If a comment is easy to write, then that code doesn’t need a comment. Write a one-sentence comment, for 
 every class and method, to start with. 85@PeterHilton •
  74. 74. ‘A common fallacy is to assume authors of incomprehensible code will somehow be able to express themselves lucidly and clearly in comments.’ @KevlinHenney 86@PeterHilton •
  75. 75. Acknowledge that writing (comments) is a specialist skill On a cross-functional development team, not everyone is good at visual design. The same goes for writing about code. Work out who is a better writer. Get help with writing comments. 87@PeterHilton •
  76. 76. How to write good comments (summary) 1. Try to write good code first. 2. Try to write a one-sentence comment. 3. Refactor the code until the comment is easy to write. 4. Now write a good comment. 5. Don’t forget the rules of good writing (e.g. remove unnecessary comments). 88@PeterHilton •
  77. 77. Summary
  78. 78. Summary 1. Naming is hard 2. Get inspiration from great writers 3. Read novels, tell jokes, play games 4. Expand your vocabulary 5. Try actual writing; 
 start with comments,
 try blogging, or even write a book 90@PeterHilton •
  79. 79. @PeterHilton http://hilton.org.uk/ Peter Hilton is available for company and conference presentations peter.hilton@gmail.com

×
Save this presentation