[フレーム]

How to name things: the hardest problem in programming

The document discusses the challenges of naming in programming, drawing on George Orwell's rules for effective communication. It emphasizes the importance of clarity and conciseness in naming conventions and offers advice on improving naming practices by studying literature and expanding one's vocabulary. Additionally, it highlights the role of comments in code and suggests strategies for writing effective comments and improving overall communication in programming.

Embed presentation

@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 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
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 character is a caricature.’ 25@PeterHilton •
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 • ()
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() {
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
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, 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
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

More Related Content

100+ ChatGPT Prompts for SEO Optimization
PDF
100+ ChatGPT Prompts for SEO Optimization
How to write good comments
PDF
How to write good comments
JavaScript Promises
PPTX
JavaScript Promises
Ch_13_Dictionary.pptx
PPTX
Ch_13_Dictionary.pptx
Créer un site WordPress optimisé SEO en 1h - Webisland
PPTX
Créer un site WordPress optimisé SEO en 1h - Webisland
How Search Works
PPTX
How Search Works
Learning HTML
PPT
Learning HTML
純粋関数型アルゴリズム入門
PPTX
純粋関数型アルゴリズム入門
100+ ChatGPT Prompts for SEO Optimization
100+ ChatGPT Prompts for SEO Optimization
How to write good comments
How to write good comments
JavaScript Promises
JavaScript Promises
Ch_13_Dictionary.pptx
Ch_13_Dictionary.pptx
Créer un site WordPress optimisé SEO en 1h - Webisland
Créer un site WordPress optimisé SEO en 1h - Webisland
How Search Works
How Search Works
Learning HTML
Learning HTML
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門

What's hot

Javascript tutorial
DOCX
Javascript tutorial
Dynamic Rendering - is this really an SEO silver bullet? SMX WEST
PDF
Dynamic Rendering - is this really an SEO silver bullet? SMX WEST
Quick & Dirty Tips for : Better PowerPoint Presentations Faster
PDF
Quick & Dirty Tips for : Better PowerPoint Presentations Faster
CSS3 Media Queries
PDF
CSS3 Media Queries
A whirlwind tour of the LLVM optimizer
PDF
A whirlwind tour of the LLVM optimizer
Presentation on nesting of loops
PPTX
Presentation on nesting of loops
JavaScript: Events Handling
PPT
JavaScript: Events Handling
Recursion with Python [Rev]
PPTX
Recursion with Python [Rev]
Flexbox and Grid Layout
PDF
Flexbox and Grid Layout
BrightonSEO-Pres.pdf
PDF
BrightonSEO-Pres.pdf
How to unlock the secrets of effortless keyword research with ChatGPT.pptx
PPTX
How to unlock the secrets of effortless keyword research with ChatGPT.pptx
The Full Scoop on Google's Title Rewrites
PPTX
The Full Scoop on Google's Title Rewrites
Django in the Real World
PDF
Django in the Real World
Fundamental JavaScript [UTC, March 2014]
PDF
Fundamental JavaScript [UTC, March 2014]
Quill vs Slick Smackdown
PPTX
Quill vs Slick Smackdown
Haskell超入門 Part.1
PDF
Haskell超入門 Part.1
Html tags describe in bangla
PDF
Html tags describe in bangla
Most Valuable SEO Presentation - Advanced Search Summit - DMO Advanced 2021 -...
PPTX
Most Valuable SEO Presentation - Advanced Search Summit - DMO Advanced 2021 -...
Introduction to JavaScript Basics.
PPTX
Introduction to JavaScript Basics.
Random Life Hacks
PDF
Random Life Hacks
Javascript tutorial
Javascript tutorial
Dynamic Rendering - is this really an SEO silver bullet? SMX WEST
Dynamic Rendering - is this really an SEO silver bullet? SMX WEST
Quick & Dirty Tips for : Better PowerPoint Presentations Faster
Quick & Dirty Tips for : Better PowerPoint Presentations Faster
CSS3 Media Queries
CSS3 Media Queries
A whirlwind tour of the LLVM optimizer
A whirlwind tour of the LLVM optimizer
Presentation on nesting of loops
Presentation on nesting of loops
JavaScript: Events Handling
JavaScript: Events Handling
Recursion with Python [Rev]
Recursion with Python [Rev]
Flexbox and Grid Layout
Flexbox and Grid Layout
BrightonSEO-Pres.pdf
BrightonSEO-Pres.pdf
How to unlock the secrets of effortless keyword research with ChatGPT.pptx
How to unlock the secrets of effortless keyword research with ChatGPT.pptx
The Full Scoop on Google's Title Rewrites
The Full Scoop on Google's Title Rewrites
Django in the Real World
Django in the Real World
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]
Quill vs Slick Smackdown
Quill vs Slick Smackdown
Haskell超入門 Part.1
Haskell超入門 Part.1
Html tags describe in bangla
Html tags describe in bangla
Most Valuable SEO Presentation - Advanced Search Summit - DMO Advanced 2021 -...
Most Valuable SEO Presentation - Advanced Search Summit - DMO Advanced 2021 -...
Introduction to JavaScript Basics.
Introduction to JavaScript Basics.
Random Life Hacks
Random Life Hacks

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

Naming guidelines for professional programmers
PDF
Naming guidelines for professional programmers
Naming Things
PDF
Naming Things
Naming Things (with notes)
PDF
Naming Things (with notes)
Clean Code
PDF
Clean Code
How to tell a better story (in code)(final)
PDF
How to tell a better story (in code)(final)
Clean code: meaningful Name
PDF
Clean code: meaningful Name
A Primer on High-Quality Identifier Naming [ASE 2022]
PDF
A Primer on High-Quality Identifier Naming [ASE 2022]
On Coding Guidelines
PPTX
On Coding Guidelines
Coding Standards
PPT
Coding Standards
Writing Good Code
PPT
Writing Good Code
Even Naming This Talk Is Hard
PDF
Even Naming This Talk Is Hard
Clean code
PPTX
Clean code
Documentation avoidance for developers
PDF
Documentation avoidance for developers
Giving Code a Good Name
PDF
Giving Code a Good Name
Clean Code
KEY
Clean Code
Coding Best Practices.docx
DOCX
Coding Best Practices.docx
Voxxed Days Thessaloniki 2016 - Documentation Avoidance
PDF
Voxxed Days Thessaloniki 2016 - Documentation Avoidance
How2research
PDF
How2research
C# coding standards, good programming principles & refactoring
PPTX
C# coding standards, good programming principles & refactoring
Software Craftsmanship and Agile Code Games
PPTX
Software Craftsmanship and Agile Code Games
Naming guidelines for professional programmers
Naming guidelines for professional programmers
Naming Things
Naming Things
Naming Things (with notes)
Naming Things (with notes)
Clean Code
Clean Code
How to tell a better story (in code)(final)
How to tell a better story (in code)(final)
Clean code: meaningful Name
Clean code: meaningful Name
A Primer on High-Quality Identifier Naming [ASE 2022]
A Primer on High-Quality Identifier Naming [ASE 2022]
On Coding Guidelines
On Coding Guidelines
Coding Standards
Coding Standards
Writing Good Code
Writing Good Code
Even Naming This Talk Is Hard
Even Naming This Talk Is Hard
Clean code
Clean code
Documentation avoidance for developers
Documentation avoidance for developers
Giving Code a Good Name
Giving Code a Good Name
Clean Code
Clean Code
Coding Best Practices.docx
Coding Best Practices.docx
Voxxed Days Thessaloniki 2016 - Documentation Avoidance
Voxxed Days Thessaloniki 2016 - Documentation Avoidance
How2research
How2research
C# coding standards, good programming principles & refactoring
C# coding standards, good programming principles & refactoring
Software Craftsmanship and Agile Code Games
Software Craftsmanship and Agile Code Games

More from Peter Hilton

Beautiful code
PDF
Beautiful code
E-Prime: English for scientific writing
PDF
E-Prime: English for scientific writing
How to write maintainable code
PDF
How to write maintainable code
Process-oriented reactive service architecture
PDF
Process-oriented reactive service architecture
HTTP demystified for web developers
PDF
HTTP demystified for web developers
Meeting-avoidance for self-managing developers
PDF
Meeting-avoidance for self-managing developers
Scaling business app development with Play and Scala
PDF
Scaling business app development with Play and Scala
Play framework: lessons learned
PDF
Play framework: lessons learned
Beautiful code
Beautiful code
E-Prime: English for scientific writing
E-Prime: English for scientific writing
How to write maintainable code
How to write maintainable code
Process-oriented reactive service architecture
Process-oriented reactive service architecture
HTTP demystified for web developers
HTTP demystified for web developers
Meeting-avoidance for self-managing developers
Meeting-avoidance for self-managing developers
Scaling business app development with Play and Scala
Scaling business app development with Play and Scala
Play framework: lessons learned
Play framework: lessons learned

Recently uploaded

Unit 1 - Machine Learning Basics AUCE.docx
DOCX
Unit 1 - Machine Learning Basics AUCE.docx
AstroBirdz Token – Smart Contract Security Audit Report by EtherAuthority
PDF
AstroBirdz Token – Smart Contract Security Audit Report by EtherAuthority
How to do Portable Applicance Testing: example
PDF
How to do Portable Applicance Testing: example
Hyperon Chain – Smart Contract Security Audit Report by EtherAuthority
PDF
Hyperon Chain – Smart Contract Security Audit Report by EtherAuthority
The future of software delivery is agentic
PDF
The future of software delivery is agentic
Scrape Grocery App Data from BigBasket, Zepto, and Blinkit.pptx
PPTX
Scrape Grocery App Data from BigBasket, Zepto, and Blinkit.pptx
Combinatorial Interview Problems with Backtracking Solutions - From Imperativ...
PDF
Combinatorial Interview Problems with Backtracking Solutions - From Imperativ...
vMix Overview & Key Features Easily Produce, Record and Live Stream
PDF
vMix Overview & Key Features Easily Produce, Record and Live Stream
Data Governance and Compliance Choosing a Tableau Replacement with Strong Con...
DOCX
Data Governance and Compliance Choosing a Tableau Replacement with Strong Con...
Communicating Software Architecture using Arc42 v1.1
PPTX
Communicating Software Architecture using Arc42 v1.1
PPT GIS Origin and introduction, raster data
PPTX
PPT GIS Origin and introduction, raster data
Developing a Language Plugin LSP versus the Joy of Learning
PPTX
Developing a Language Plugin LSP versus the Joy of Learning
Enhance Workplace Safety with EHA Good Catch System
PPTX
Enhance Workplace Safety with EHA Good Catch System
A Complete Guide to Salesforce for Education.pdf
PDF
A Complete Guide to Salesforce for Education.pdf
Guard Tour Patrol System in Singapore_ Real-Time Tracking and Free Payroll.pptx
PPTX
Guard Tour Patrol System in Singapore_ Real-Time Tracking and Free Payroll.pptx
How to Make Your AI Reliable: Comprehensive Guide to Testing AI Applications ...
PDF
How to Make Your AI Reliable: Comprehensive Guide to Testing AI Applications ...
AOX Apps - Mobile App Development Company New York
PDF
AOX Apps - Mobile App Development Company New York
Free Versus Paid Enterprise IT Monitoring Tools
PDF
Free Versus Paid Enterprise IT Monitoring Tools
A new Vision of Software Sustainability and its Engineering: Reflections and ...
PDF
A new Vision of Software Sustainability and its Engineering: Reflections and ...
Attacking and Defending AI by Adity Roy and Nikita Biradar
PPTX
Attacking and Defending AI by Adity Roy and Nikita Biradar
Unit 1 - Machine Learning Basics AUCE.docx
Unit 1 - Machine Learning Basics AUCE.docx
AstroBirdz Token – Smart Contract Security Audit Report by EtherAuthority
AstroBirdz Token – Smart Contract Security Audit Report by EtherAuthority
How to do Portable Applicance Testing: example
How to do Portable Applicance Testing: example
Hyperon Chain – Smart Contract Security Audit Report by EtherAuthority
Hyperon Chain – Smart Contract Security Audit Report by EtherAuthority
The future of software delivery is agentic
The future of software delivery is agentic
Scrape Grocery App Data from BigBasket, Zepto, and Blinkit.pptx
Scrape Grocery App Data from BigBasket, Zepto, and Blinkit.pptx
Combinatorial Interview Problems with Backtracking Solutions - From Imperativ...
Combinatorial Interview Problems with Backtracking Solutions - From Imperativ...
vMix Overview & Key Features Easily Produce, Record and Live Stream
vMix Overview & Key Features Easily Produce, Record and Live Stream
Data Governance and Compliance Choosing a Tableau Replacement with Strong Con...
Data Governance and Compliance Choosing a Tableau Replacement with Strong Con...
Communicating Software Architecture using Arc42 v1.1
Communicating Software Architecture using Arc42 v1.1
PPT GIS Origin and introduction, raster data
PPT GIS Origin and introduction, raster data
Developing a Language Plugin LSP versus the Joy of Learning
Developing a Language Plugin LSP versus the Joy of Learning
Enhance Workplace Safety with EHA Good Catch System
Enhance Workplace Safety with EHA Good Catch System
A Complete Guide to Salesforce for Education.pdf
A Complete Guide to Salesforce for Education.pdf
Guard Tour Patrol System in Singapore_ Real-Time Tracking and Free Payroll.pptx
Guard Tour Patrol System in Singapore_ Real-Time Tracking and Free Payroll.pptx
How to Make Your AI Reliable: Comprehensive Guide to Testing AI Applications ...
How to Make Your AI Reliable: Comprehensive Guide to Testing AI Applications ...
AOX Apps - Mobile App Development Company New York
AOX Apps - Mobile App Development Company New York
Free Versus Paid Enterprise IT Monitoring Tools
Free Versus Paid Enterprise IT Monitoring Tools
A new Vision of Software Sustainability and its Engineering: Reflections and ...
A new Vision of Software Sustainability and its Engineering: Reflections and ...
Attacking and Defending AI by Adity Roy and Nikita Biradar
Attacking and Defending AI by Adity Roy and Nikita Biradar
In this document
Powered by AI

Introduction to the difficulty of naming in programming, referenced by Peter Hilton.

Personal insight from Peter Hilton about his 15 years of experience as the only native English speaker in a dev team.

Discussion of George Orwell's rules for naming, emphasizing the importance of clarity and meaning in word choice.

Practical examples demonstrating how Orwell's naming rules can be applied to programming for better clarity.

Reflection on the similarities between writing prose and coding, highlighting the intricacies involved.

Advice from renowned writers like Stephen King, Anne Rice, and Neil Gaiman applicable to coding.

Exploration of the complexities of naming in computer science, supported by quotes from famous authors.

Identification of poor naming practices in programming and how they lead to confusion.

Strategies for enhancing naming abilities, focusing on vocabulary and precise usage in programming.

Techniques for dealing with the challenges of naming and renaming in coding as essential skills. Emphasis on gathering domain-specific terms to enhance understanding and communication in programming.

Discussion on the importance of writing and comments in code, promoting better coding practices.

Guidelines for writing better comments in code, stressing the significance of clarity and intent.

Summary of the themes discussed, reaffirming the connection between effective naming and good writing.

Final slide providing Peter Hilton's contact details and invitation for presentations.

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
  • 4.
  • 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
  • 19.
  • 21.
    21 ‘Write with the 
 door closed, 
 rewrite with the 
 door open.’ Stephen King on pair programming @PeterHilton •
  • 22.
  • 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
  • 37.
  • 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
  • 46.
  • 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 •
  • 59.
  • 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 •
  • 63.
  • 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
  • 73.
  • 74.
  • 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 •
  • 76.
  • 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 •
  • 81.
  • 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 •
  • 89.
  • 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

AltStyle によって変換されたページ (->オリジナル) /