How to name things: the hardest problem in programming

Peter Hilton
Peter Hiltonsoftware developer
@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
How to name things: the hardest problem in programming
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 way around.
… the worst thing one can do with
words is surrender to them.
‘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.
‘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…
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.
‘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.’
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 design patterns, and
using their names just because you’re used
to seeing them in code)
e.g.
AbstractConfigurationFactory
11@PeterHilton •
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 •
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 •
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
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 •
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 •
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 •
It sounds like
writing prose 

is as hard as 

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

other writers
How to name things: the hardest problem in programming
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 •
How to name things: the hardest problem in programming
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 •
How to name things: the hardest problem in programming
W. Somerset Maugham on 

enterprise architecture
‘There are three rules for
writing the novel.
Unfortunately, no one
knows what they are.’
27@PeterHilton •
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’re writing. Whatever you
have to do to finish it, finish it.’
29@PeterHilton •
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 •
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 •
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 •
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 allowed
to do whatever you like.’
34@PeterHilton •
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 •
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.’
38@PeterHilton •
0. off-by-one errors
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 •
Deliberately meaningless names
In theory, foo is only used as a placeholder
name (because it doesn’t mean anything)
40@PeterHilton •
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 •
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 •
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 •
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 •
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
46@PeterHilton •
()
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
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 •
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
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,
Wrong words are wrong,
Synonyms are confusing
order ≠ shipment
carrier ≠ broker
shipment ≠ transport leg
shipment = consignment
carrier = transporter
transport leg = journey
53@PeterHilton •
Apache Camel - http://camel.apache.org
(Java enterprise 

middleware example)
//  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()  {
How to name things: the hardest problem in programming
Property accessors revisited
In a numeric library, these method names
would be irresistible, but inadvisable:
getEven  
getReal  
getAround  
getRoundTo  
getRichQuick  
getJoke 57@PeterHilton •
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 •
Better naming
How to solve the naming problem
Become a better writer.
Improve your vocabulary.
Adopt better naming practices.
Work on it.
60@PeterHilton •
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 •
Improve your general vocabulary
Read books, especially funny novels.
Play word games with someone who
always wins, until they don’t.
62@PeterHilton •
63@PeterHilton •
Piotr / CC BY 2.0
How to name things: the hardest problem in programming
Improve your general vocabulary
Use your dictionary and thesaurus…
65@PeterHilton •
How to name things: the hardest problem in programming
@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, because
they rely on double-meanings.
Spotting double-meanings is the essential
skill for avoiding ambiguous names.
68@PeterHilton •
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.
Replace vague words with more
specific synonyms
Manager  
Object  
Data  
Thing  
Info  
Amount  
Details

do  
execute  
perform  
operate  
manage  
handle  
get
70@PeterHilton •
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 •
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 novels set in your customer’s domain,
to learn their jargon.
Find out what they really mean.
75@PeterHilton •
Chapter 2:
Communication
and the use of
language
How to name things: the hardest problem in programming
How to name things: the hardest problem in programming
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
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
82@PeterHilton •
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 •
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 •
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 •
‘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 •
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 •
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 •
Summary
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 •
@PeterHilton
http://hilton.org.uk/
Peter Hilton is available for company
and conference presentations
peter.hilton@gmail.com
1 of 91

Recommended

Naming guidelines for professional programmers by
Naming guidelines for professional programmersNaming guidelines for professional programmers
Naming guidelines for professional programmersPeter Hilton
1.6K views60 slides
Clean Code by
Clean CodeClean Code
Clean CodeHendrik Ebel
14.9K views27 slides
Clean code by
Clean codeClean code
Clean codeAlvaro García Loaisa
5.4K views60 slides
Clean code and Code Smells by
Clean code and Code SmellsClean code and Code Smells
Clean code and Code SmellsMario Sangiorgio
15.6K views48 slides
Plant uml language_reference_guide_fr by
Plant uml language_reference_guide_frPlant uml language_reference_guide_fr
Plant uml language_reference_guide_frPorfirio Vazquez
560 views128 slides
Clean code by
Clean codeClean code
Clean codeArturo Herrero
70K views88 slides

More Related Content

What's hot

LaravelConf Taiwan 2017 單頁面應用與前後端分離開發 by
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發俊仁 陳
5.4K views78 slides
Second Level Cache in JPA Explained by
Second Level Cache in JPA ExplainedSecond Level Cache in JPA Explained
Second Level Cache in JPA ExplainedPatrycja Wegrzynowicz
4.1K views72 slides
Clean coding-practices by
Clean coding-practicesClean coding-practices
Clean coding-practicesJohn Ferguson Smart Limited
32.8K views62 slides
REST: From GET to HATEOAS by
REST: From GET to HATEOASREST: From GET to HATEOAS
REST: From GET to HATEOASJos Dirksen
48.3K views53 slides
Algebre relationelle by
Algebre relationelleAlgebre relationelle
Algebre relationellehnsfr
8.9K views56 slides
Clean Code by
Clean CodeClean Code
Clean Codeswaraj Patil
562 views49 slides

What's hot(20)

LaravelConf Taiwan 2017 單頁面應用與前後端分離開發 by 俊仁 陳
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
俊仁 陳5.4K views
REST: From GET to HATEOAS by Jos Dirksen
REST: From GET to HATEOASREST: From GET to HATEOAS
REST: From GET to HATEOAS
Jos Dirksen48.3K views
Algebre relationelle by hnsfr
Algebre relationelleAlgebre relationelle
Algebre relationelle
hnsfr8.9K views
clean code book summary - uncle bob - English version by saber tabatabaee
clean code book summary - uncle bob - English versionclean code book summary - uncle bob - English version
clean code book summary - uncle bob - English version
saber tabatabaee774 views
RxJS Operators - Real World Use Cases (FULL VERSION) by Tracy Lee
RxJS Operators - Real World Use Cases (FULL VERSION)RxJS Operators - Real World Use Cases (FULL VERSION)
RxJS Operators - Real World Use Cases (FULL VERSION)
Tracy Lee4.8K views
Spring HATEOAS by Yoann Buch
Spring HATEOASSpring HATEOAS
Spring HATEOAS
Yoann Buch890 views
SQLite in Flutter.pptx by Nabin Dhakal
SQLite in Flutter.pptxSQLite in Flutter.pptx
SQLite in Flutter.pptx
Nabin Dhakal3.6K views
Keep your code clean by macrochen
Keep your code cleanKeep your code clean
Keep your code clean
macrochen1.3K views
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee) by 삵 (sarc.io)
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
삵 (sarc.io)2.7K views
You Don't Know Query - WordCamp Portland 2011 by andrewnacin
You Don't Know Query - WordCamp Portland 2011You Don't Know Query - WordCamp Portland 2011
You Don't Know Query - WordCamp Portland 2011
andrewnacin11.1K views
Clean Code - Writing code for human by NETKO Solution
Clean Code - Writing code for humanClean Code - Writing code for human
Clean Code - Writing code for human
NETKO Solution109 views
Clean architecture by andbed
Clean architectureClean architecture
Clean architecture
andbed10.7K views

Similar to How to name things: the hardest problem in programming

How to write maintainable code - Peter Hilton - Codemotion Amsterdam 2017 by
How to write maintainable code - Peter Hilton - Codemotion Amsterdam 2017How to write maintainable code - Peter Hilton - Codemotion Amsterdam 2017
How to write maintainable code - Peter Hilton - Codemotion Amsterdam 2017Codemotion
976 views53 slides
How to write maintainable code by
How to write maintainable codeHow to write maintainable code
How to write maintainable codePeter Hilton
2.1K views53 slides
Ewrt 1 a class 5 by
Ewrt 1 a class 5Ewrt 1 a class 5
Ewrt 1 a class 5kimpalmore
319 views26 slides
Introduction to ChatGPT by
Introduction to ChatGPTIntroduction to ChatGPT
Introduction to ChatGPTDamian T. Gordon
4.8K views38 slides
Plagiarism and paraphrasing by
Plagiarism and paraphrasingPlagiarism and paraphrasing
Plagiarism and paraphrasingAnkita Kunwar
68 views27 slides
EAPP LESSON 2 SUMMARIZING AND PARAPHRASING.pdf by
EAPP LESSON 2 SUMMARIZING AND PARAPHRASING.pdfEAPP LESSON 2 SUMMARIZING AND PARAPHRASING.pdf
EAPP LESSON 2 SUMMARIZING AND PARAPHRASING.pdfMaryJoyFrondoza
24 views50 slides

Similar to How to name things: the hardest problem in programming(20)

How to write maintainable code - Peter Hilton - Codemotion Amsterdam 2017 by Codemotion
How to write maintainable code - Peter Hilton - Codemotion Amsterdam 2017How to write maintainable code - Peter Hilton - Codemotion Amsterdam 2017
How to write maintainable code - Peter Hilton - Codemotion Amsterdam 2017
Codemotion976 views
How to write maintainable code by Peter Hilton
How to write maintainable codeHow to write maintainable code
How to write maintainable code
Peter Hilton2.1K views
Ewrt 1 a class 5 by kimpalmore
Ewrt 1 a class 5Ewrt 1 a class 5
Ewrt 1 a class 5
kimpalmore319 views
Plagiarism and paraphrasing by Ankita Kunwar
Plagiarism and paraphrasingPlagiarism and paraphrasing
Plagiarism and paraphrasing
Ankita Kunwar68 views
EAPP LESSON 2 SUMMARIZING AND PARAPHRASING.pdf by MaryJoyFrondoza
EAPP LESSON 2 SUMMARIZING AND PARAPHRASING.pdfEAPP LESSON 2 SUMMARIZING AND PARAPHRASING.pdf
EAPP LESSON 2 SUMMARIZING AND PARAPHRASING.pdf
MaryJoyFrondoza24 views
Solving for ambiguity: what the data literate can learn from the design process by Dean Malmgren
Solving for ambiguity: what the data literate can learn from the design processSolving for ambiguity: what the data literate can learn from the design process
Solving for ambiguity: what the data literate can learn from the design process
Dean Malmgren4.8K views
Os Goodger by oscon2007
Os GoodgerOs Goodger
Os Goodger
oscon2007944 views
Ewrt 1 a plus hybrid week 3 by kimpalmore
Ewrt 1 a plus  hybrid week 3Ewrt 1 a plus  hybrid week 3
Ewrt 1 a plus hybrid week 3
kimpalmore310 views
Getting a job in industry by Austin Baird
Getting a job in industryGetting a job in industry
Getting a job in industry
Austin Baird234 views
FOJ Lectures by Sarah Kent
FOJ LecturesFOJ Lectures
FOJ Lectures
Sarah Kent408 views
How to write good comments by Peter Hilton
How to write good commentsHow to write good comments
How to write good comments
Peter Hilton16.1K views
API Simplicity == Speed; Designing APIs That are Easy and Fun to Use by Harold Madsen
API Simplicity == Speed; Designing APIs That are Easy and Fun to UseAPI Simplicity == Speed; Designing APIs That are Easy and Fun to Use
API Simplicity == Speed; Designing APIs That are Easy and Fun to Use
Harold Madsen822 views
Peer edit project by jsnart
Peer edit projectPeer edit project
Peer edit project
jsnart550 views
Lecture notetaking by msmaya
Lecture notetakingLecture notetaking
Lecture notetaking
msmaya1.1K views

More from Peter Hilton

Beautiful code by
Beautiful codeBeautiful code
Beautiful codePeter Hilton
901 views37 slides
E-Prime: English for scientific writing by
E-Prime: English for scientific writing E-Prime: English for scientific writing
E-Prime: English for scientific writing Peter Hilton
898 views29 slides
Process-oriented reactive service architecture by
Process-oriented reactive service architectureProcess-oriented reactive service architecture
Process-oriented reactive service architecturePeter Hilton
1.1K views45 slides
HTTP demystified for web developers by
HTTP demystified for web developersHTTP demystified for web developers
HTTP demystified for web developersPeter Hilton
1K views27 slides
Documentation avoidance for developers by
Documentation avoidance for developersDocumentation avoidance for developers
Documentation avoidance for developersPeter Hilton
1.5K views72 slides
Meeting-avoidance for self-managing developers by
Meeting-avoidance for self-managing developersMeeting-avoidance for self-managing developers
Meeting-avoidance for self-managing developersPeter Hilton
1.5K views52 slides

More from Peter Hilton(8)

E-Prime: English for scientific writing by Peter Hilton
E-Prime: English for scientific writing E-Prime: English for scientific writing
E-Prime: English for scientific writing
Peter Hilton898 views
Process-oriented reactive service architecture by Peter Hilton
Process-oriented reactive service architectureProcess-oriented reactive service architecture
Process-oriented reactive service architecture
Peter Hilton1.1K views
HTTP demystified for web developers by Peter Hilton
HTTP demystified for web developersHTTP demystified for web developers
HTTP demystified for web developers
Peter Hilton1K views
Documentation avoidance for developers by Peter Hilton
Documentation avoidance for developersDocumentation avoidance for developers
Documentation avoidance for developers
Peter Hilton1.5K views
Meeting-avoidance for self-managing developers by Peter Hilton
Meeting-avoidance for self-managing developersMeeting-avoidance for self-managing developers
Meeting-avoidance for self-managing developers
Peter Hilton1.5K views
Scaling business app development with Play and Scala by Peter Hilton
Scaling business app development with Play and ScalaScaling business app development with Play and Scala
Scaling business app development with Play and Scala
Peter Hilton1.8K views
Play framework: lessons learned by Peter Hilton
Play framework: lessons learnedPlay framework: lessons learned
Play framework: lessons learned
Peter Hilton6.6K views

Recently uploaded

Gen Apps on Google Cloud PaLM2 and Codey APIs in Action by
Gen Apps on Google Cloud PaLM2 and Codey APIs in ActionGen Apps on Google Cloud PaLM2 and Codey APIs in Action
Gen Apps on Google Cloud PaLM2 and Codey APIs in ActionMárton Kodok
5 views55 slides
AI and Ml presentation .pptx by
AI and Ml presentation .pptxAI and Ml presentation .pptx
AI and Ml presentation .pptxFayazAli87
11 views15 slides
The Era of Large Language Models.pptx by
The Era of Large Language Models.pptxThe Era of Large Language Models.pptx
The Era of Large Language Models.pptxAbdulVahedShaik
5 views9 slides
Myths and Facts About Hospice Care: Busting Common Misconceptions by
Myths and Facts About Hospice Care: Busting Common MisconceptionsMyths and Facts About Hospice Care: Busting Common Misconceptions
Myths and Facts About Hospice Care: Busting Common MisconceptionsCare Coordinations
5 views1 slide
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko... by
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...Deltares
14 views23 slides
WebAssembly by
WebAssemblyWebAssembly
WebAssemblyJens Siebert
48 views18 slides

Recently uploaded(20)

Gen Apps on Google Cloud PaLM2 and Codey APIs in Action by Márton Kodok
Gen Apps on Google Cloud PaLM2 and Codey APIs in ActionGen Apps on Google Cloud PaLM2 and Codey APIs in Action
Gen Apps on Google Cloud PaLM2 and Codey APIs in Action
Márton Kodok5 views
AI and Ml presentation .pptx by FayazAli87
AI and Ml presentation .pptxAI and Ml presentation .pptx
AI and Ml presentation .pptx
FayazAli8711 views
Myths and Facts About Hospice Care: Busting Common Misconceptions by Care Coordinations
Myths and Facts About Hospice Care: Busting Common MisconceptionsMyths and Facts About Hospice Care: Busting Common Misconceptions
Myths and Facts About Hospice Care: Busting Common Misconceptions
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko... by Deltares
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...
DSD-INT 2023 Simulation of Coastal Hydrodynamics and Water Quality in Hong Ko...
Deltares14 views
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx by animuscrm
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
animuscrm14 views
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft... by Deltares
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...
Deltares7 views
Advanced API Mocking Techniques by Dimpy Adhikary
Advanced API Mocking TechniquesAdvanced API Mocking Techniques
Advanced API Mocking Techniques
Dimpy Adhikary19 views
360 graden fabriek by info33492
360 graden fabriek360 graden fabriek
360 graden fabriek
info3349238 views
DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J... by Deltares
DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J...DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J...
DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J...
Deltares9 views
Navigating container technology for enhanced security by Niklas Saari by Metosin Oy
Navigating container technology for enhanced security by Niklas SaariNavigating container technology for enhanced security by Niklas Saari
Navigating container technology for enhanced security by Niklas Saari
Metosin Oy14 views
DSD-INT 2023 Wave-Current Interaction at Montrose Tidal Inlet System and Its ... by Deltares
DSD-INT 2023 Wave-Current Interaction at Montrose Tidal Inlet System and Its ...DSD-INT 2023 Wave-Current Interaction at Montrose Tidal Inlet System and Its ...
DSD-INT 2023 Wave-Current Interaction at Montrose Tidal Inlet System and Its ...
Deltares11 views
Quality Engineer: A Day in the Life by John Valentino
Quality Engineer: A Day in the LifeQuality Engineer: A Day in the Life
Quality Engineer: A Day in the Life
John Valentino6 views
Headless JS UG Presentation.pptx by Jack Spektor
Headless JS UG Presentation.pptxHeadless JS UG Presentation.pptx
Headless JS UG Presentation.pptx
Jack Spektor7 views
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with... by sparkfabrik
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
sparkfabrik5 views
Fleet Management Software in India by Fleetable
Fleet Management Software in India Fleet Management Software in India
Fleet Management Software in India
Fleetable11 views
DSD-INT 2023 The Danube Hazardous Substances Model - Kovacs by Deltares
DSD-INT 2023 The Danube Hazardous Substances Model - KovacsDSD-INT 2023 The Danube Hazardous Substances Model - Kovacs
DSD-INT 2023 The Danube Hazardous Substances Model - Kovacs
Deltares8 views
DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the... by Deltares
DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the...DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the...
DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the...
Deltares6 views
DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h... by Deltares
DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...
DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...
Deltares5 views

How to name things: the hardest problem in programming

  • 1. @PeterHilton http://hilton.org.uk/ the hardest problem in programming How to name things:
  • 2. 15 years as 
 the dev team’s only native English speaker… @PeterHilton • 2
  • 5. 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.
  • 6. ‘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.
  • 7. ‘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…
  • 8. 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.
  • 9. ‘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.’
  • 10. Politics and the English Language
 (1946)
  • 11. 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 •
  • 12. 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 •
  • 13. 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 •
  • 14. 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
  • 15. 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 •
  • 16. 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 •
  • 17. 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 •
  • 18. It sounds like writing prose 
 is as hard as 
 writing code. Who knew? @PeterHilton • 18
  • 21. 21 ‘Write with the 
 door closed, 
 rewrite with the 
 door open.’ Stephen King on pair programming @PeterHilton •
  • 22. warriorwoman531 / CC BY-ND 2.0
  • 23. 23 Anne Rice on development hardware ‘I find the bigger 
 the monitor, 
 the better the concentration.’ @PeterHilton •
  • 25. 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 •
  • 27. W. Somerset Maugham on 
 enterprise architecture ‘There are three rules for writing the novel. Unfortunately, no one knows what they are.’ 27@PeterHilton •
  • 28. ranh / CC BY 2.0
  • 29. 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 •
  • 30. 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 •
  • 31. 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 •
  • 32. 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 •
  • 33. Neil Gaiman on humour in code ‘Laugh at your own jokes.’ 33@PeterHilton •
  • 34. 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 •
  • 35. 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 •
  • 36. Getting it right means a struggle for every single word. @PeterHilton • 36
  • 38. 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
  • 39. 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 •
  • 40. Deliberately meaningless names In theory, foo is only used as a placeholder name (because it doesn’t mean anything) 40@PeterHilton •
  • 41. 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 •
  • 42. 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 •
  • 43. 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 •
  • 44. 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 •
  • 45. 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
  • 50. 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 •
  • 51. 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
  • 52. 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,
  • 53. Wrong words are wrong, Synonyms are confusing order ≠ shipment carrier ≠ broker shipment ≠ transport leg shipment = consignment carrier = transporter transport leg = journey 53@PeterHilton •
  • 54. Apache Camel - http://camel.apache.org (Java enterprise 
 middleware example)
  • 55. //  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()  {
  • 57. Property accessors revisited In a numeric library, these method names would be irresistible, but inadvisable: getEven   getReal   getAround   getRoundTo   getRichQuick   getJoke 57@PeterHilton •
  • 58. 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 •
  • 60. How to solve the naming problem Become a better writer. Improve your vocabulary. Adopt better naming practices. Work on it. 60@PeterHilton •
  • 61. 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 •
  • 62. Improve your general vocabulary Read books, especially funny novels. Play word games with someone who always wins, until they don’t. 62@PeterHilton •
  • 65. Improve your general vocabulary Use your dictionary and thesaurus… 65@PeterHilton •
  • 67. @PeterHilton • 67 A sandwich walks into a pub. The barman says,
 ‘I’m sorry, we don’t serve food.’
  • 68. 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 •
  • 69. 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.
  • 70. Replace vague words with more specific synonyms Manager   Object   Data   Thing   Info   Amount   Details
 do   execute   perform   operate   manage   handle   get 70@PeterHilton •
  • 71. 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 •
  • 72. Chapter 10: The power of variable names
  • 75. 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 •
  • 79. 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
  • 80. Additional benefits If you become a better writer, you could use your new skills … for writing 80@PeterHilton •
  • 82. ‘Most of the things programmers say about comments in code are excuses for not writing any comments at all.’ @PeterHilton 82@PeterHilton •
  • 83. 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 •
  • 84. 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 •
  • 85. 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 •
  • 86. ‘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 •
  • 87. 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 •
  • 88. 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 •
  • 90. 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 •
  • 91. @PeterHilton http://hilton.org.uk/ Peter Hilton is available for company and conference presentations peter.hilton@gmail.com