SlideShare a Scribd company logo
@aupajo
.co.nz
Hi, I’m Pete. I’ve been writing Ruby for about 11 years, I work for a company called Trineo, and I live in New Zealand. That’s me squinting in the sun at RubyConf AU back
in March.
@aupajo
NAMING

THINGS
What is code?
Ostensibly for the computer. In reality, it’s a recipe that has to be digested by two audiences: the computer and the developers. You have to encode behaviour and intent.
What is good
code?
Good code is efficient. By efficient, I don’t mean efficient for the computer, I also mean efficient for the human mind. To understand that, I want you to focus on an idea:
cognitive overhead.
Why is naming
things important?
It’s our primary tool for communication. It is the artefact left behind of someone’s thoughts and intentions. A good name conveys how to use something and give you a
clear sense of when it should change.
Why is naming
things hard?
Often because when we’re forced to pick a name, we have to articulate a concept. Often it is hard to express a concept in a simple word or two. Ideas can be subtle.
Struggling to name something is an important part of of design. Difficulty comprehending indicates more clarification needs to be done.
VARIABLES
Who can tell me what’s wrong here?
Remove all ambiguity about units!
No context. Hard to search for.
Some developers solve this problem with comments. But why is it you have to explain the code? Why can’t the code explain itself?
Better. But elapsed time for what?
Best. The context is clear.
What does this code do?
Nothing has changed but for your ability to understand this code. To the computer, these expressions are identical. But everything important to you, the developer, has
changed.
Flagged for what?
Ah. Wouldn’t want to mistake that one.
Abbreviations are hard to read. Why `res` instead of `response`?
Better.
Creates confusion. Did the author intend an array here?
If it is meant to be an array, let it be an array.
If it isn’t meant to be an array, avoid numbers. This is a common pattern seen in tests.
This is better. Now you’re articulating why you have two users: one is earlier and one is later.
Type suffixes usually add more context than is necessary, and cause greater churn when you replay one type for another (bigger concern in a dynamic language).
Better. We discarded information that probably isn’t useful.
These properties and methods return booleans. But you wouldn’t know it to look at them.
Better.
Be careful of words like “info” and “data”. What do they mean? Are these all equivalent. It’s a bit like saying “thing” in English.
Better.
METHODS
Redundancy.
Better.
Repeated prefixes in a method name or property name often indicate one thing…
You found another object!
CLASSES
Prefixes: not the worst thing, but consider why this happens. It’s because the author wanted to use the name “File” twice. Consider what would happen if they were
forced to pick another name.
Better.
Perhaps this also hints at an object though?
These names are red flags. Why?
What does a “page manager” do? Any guesses? Well, it manages a page. So anything that could plausibly be considered “managing a page” could easily get added to
this class. These classes quickly balloon out of control.
Here’s an example. Imagine you have a “page formatter”.
By turning this into a formatted page, you are now talking about the end result of what this class does – what you’re trying to achieve. This allows you to think more
clearly about what is and isn’t needed.
Specificity is good, but use your judgement. For instance, it’s probably fine to call a postal address simply an “address”.
However, if your application deals with more than one type of address, you may want to consider increasing its specificity.
CONVENTIONS
These methods invite confusion, because you constantly have to ask yourself “is this object add, insert, or append”?
Here, never have to think.
Always consider your domain. For instance, does your business sell to “users”?
Probably not. You should be able to speak the language of the domain.
Avoid patterns in names. Design patterns are implementation details, and encoding the pattern into the name prevents altering that class in the future to not use that
pattern. They’re unnecessary information that usually only adds cognitive overhead.
Better. The API is clear to use, and that’s all that matters.
NAMING
ERGONOMICS
Directories and their structure are just as important as the file name. Both can add context and lower overhead for finding files or figuring out where to place files. A well-
named directory can be more powerful than a well-named class.
Consider the ergonomics. Folders with too many items take longer to read. A folder with one item is like having a category with one item, which is not a useful category
to have.
Long names are bad, because they often contain too many concepts, indicating an object that has a high cognitive overhead.
They also lead to abbreviations, because typing out “bookings_products_vehicle_types” everywhere is cumbersome. (This is a real world example.)
If necessary, make the name longer. Brevity is good, but the ultimate goal is clarity. Here, the key concept is that we have vehicle types.
When the inevitable shortening happens, it’s easier to do things like this. Not perfect, but far better than “bpvt”.
Beware of names that vary in small ways. They can easily be confused.
What is it you do?
You are a translator for two audiences. You are the bridge between the human and the computer. You need to know how computers work and how humans work – both
the humans which your software serves, and the humans which your software will by changed by. Your primary weapon in your toolbox against ambiguity and cognitive
overhead – the forces that corrode a software’s maintainability – is to name. You name things every day. Be mindful about the words you choose. Software should be
written to be read by another developer.
Programs must be written
for people to read, and
only incidentally for
machines to execute.
“
Harold Abelson
Structure and Interpretation of
Computer Programs
@aupajo
Slides twitter.com/aupajo
Thank you.
The ratio of time spent reading
versus writing is well over 10 to 1.
We are constantly reading old
code as part of the effort to
write new code.
Making it easy to read makes it
easier to write.
Robert C. Martin
“Uncle Bob”
The ratio of time spent reading
versus writing is well over 10 to 1.
We are constantly reading old
code as part of the effort to
write new code.
Making it easy to read makes it
easier to write.
Robert C. Martin
“Uncle Bob”
The ratio of time spent reading
versus writing is well over 10 to 1.
We are constantly reading old
code as part of the effort to
write new code.
Making it easy to read makes it
easier to write.
Robert C. Martin
“Uncle Bob”
A parable about
stones
Marco Polo describes a bridge, stone by stone. "But which is the stone that supports the bridge?" 

Kublai Khan asks. "The bridge is not supported by one stone or another," Marco answers,   

"but by the line of the arch that they form.” Kublai Khan remains silent, reflecting. Then he adds: 

"Why do you speak to me of the stones? It is only the arch that matters to me.” Polo answers: "Without stones there is no arch."
On Exactitude
To my mind exactitude means three things above all:
(1) a well-defined and well-calculated plan for the work in
question;
(2) an evocation of clear, incisive, memorable images;
(3) a language as precise as possible both in choice of
words and in expression of the subtleties of thought and
imagination.
- Italo Calvino

More Related Content

Similar to Naming Things (with notes)

A class action
A class actionA class action
A class action
Luciano Colosio
 
On Readability of Code
On Readability of CodeOn Readability of Code
On Readability of Code
Arun Saha
 
Technical Writing For Consultants
Technical Writing For ConsultantsTechnical Writing For Consultants
Technical Writing For Consultantsrlucera
 
SearchLove Boston 2017 | Will Critchlow | Building Robot Allegiances
SearchLove Boston 2017 | Will Critchlow | Building Robot AllegiancesSearchLove Boston 2017 | Will Critchlow | Building Robot Allegiances
SearchLove Boston 2017 | Will Critchlow | Building Robot Allegiances
Distilled
 
Introduction to programming
Introduction to programmingIntroduction to programming
Introduction to programmingAndre Leal
 
Low maintenance perl notes
Low maintenance perl notesLow maintenance perl notes
Low maintenance perl notes
Perrin Harkins
 
WordCamp US: Clean Code
WordCamp US: Clean CodeWordCamp US: Clean Code
WordCamp US: Clean Code
mtoppa
 
E1f14172a91215931ed787d97dee1301fe7d
E1f14172a91215931ed787d97dee1301fe7dE1f14172a91215931ed787d97dee1301fe7d
E1f14172a91215931ed787d97dee1301fe7d
Klaus Lieblich
 
Designing bots
Designing botsDesigning bots
Designing bots
Sebastian Stockmarr
 
Untangling spring week8
Untangling spring week8Untangling spring week8
Untangling spring week8
Derek Jacoby
 
Technology So Easy Your Lawyer Could Do It (OSCON 5/18)
Technology So Easy Your Lawyer Could Do It (OSCON 5/18)Technology So Easy Your Lawyer Could Do It (OSCON 5/18)
Technology So Easy Your Lawyer Could Do It (OSCON 5/18)
Zoe Landon
 
Large Components in the Rearview Mirror
Large Components in the Rearview MirrorLarge Components in the Rearview Mirror
Large Components in the Rearview Mirror
Michelle Brush
 
“Don’t Repeat Yourself”: 4 Process Street Features to Keep Work DRY
“Don’t Repeat Yourself”: 4 Process Street Features to Keep Work DRY“Don’t Repeat Yourself”: 4 Process Street Features to Keep Work DRY
“Don’t Repeat Yourself”: 4 Process Street Features to Keep Work DRY
LizzyManz
 
Rethinking Object Orientation
Rethinking Object OrientationRethinking Object Orientation
Rethinking Object Orientation
IASA
 
Documentation for developers
Documentation for developersDocumentation for developers
Documentation for developers
Michael Marotta
 
Flow based-1994
Flow based-1994Flow based-1994
Flow based-1994
getdownload
 
Digital Rhetoric and Writing for April 23
Digital Rhetoric and Writing for April 23Digital Rhetoric and Writing for April 23
Digital Rhetoric and Writing for April 23
Miami University
 
Knowing Ranking Factors won't be enough!
Knowing Ranking Factors won't be enough!Knowing Ranking Factors won't be enough!
Knowing Ranking Factors won't be enough!
Mark Orr
 

Similar to Naming Things (with notes) (20)

A class action
A class actionA class action
A class action
 
On Readability of Code
On Readability of CodeOn Readability of Code
On Readability of Code
 
Technical Writing For Consultants
Technical Writing For ConsultantsTechnical Writing For Consultants
Technical Writing For Consultants
 
Introduction toprogramming
Introduction toprogrammingIntroduction toprogramming
Introduction toprogramming
 
SearchLove Boston 2017 | Will Critchlow | Building Robot Allegiances
SearchLove Boston 2017 | Will Critchlow | Building Robot AllegiancesSearchLove Boston 2017 | Will Critchlow | Building Robot Allegiances
SearchLove Boston 2017 | Will Critchlow | Building Robot Allegiances
 
Introduction to programming
Introduction to programmingIntroduction to programming
Introduction to programming
 
Low maintenance perl notes
Low maintenance perl notesLow maintenance perl notes
Low maintenance perl notes
 
WordCamp US: Clean Code
WordCamp US: Clean CodeWordCamp US: Clean Code
WordCamp US: Clean Code
 
E1f14172a91215931ed787d97dee1301fe7d
E1f14172a91215931ed787d97dee1301fe7dE1f14172a91215931ed787d97dee1301fe7d
E1f14172a91215931ed787d97dee1301fe7d
 
Designing bots
Designing botsDesigning bots
Designing bots
 
Untangling spring week8
Untangling spring week8Untangling spring week8
Untangling spring week8
 
Technology So Easy Your Lawyer Could Do It (OSCON 5/18)
Technology So Easy Your Lawyer Could Do It (OSCON 5/18)Technology So Easy Your Lawyer Could Do It (OSCON 5/18)
Technology So Easy Your Lawyer Could Do It (OSCON 5/18)
 
Large Components in the Rearview Mirror
Large Components in the Rearview MirrorLarge Components in the Rearview Mirror
Large Components in the Rearview Mirror
 
“Don’t Repeat Yourself”: 4 Process Street Features to Keep Work DRY
“Don’t Repeat Yourself”: 4 Process Street Features to Keep Work DRY“Don’t Repeat Yourself”: 4 Process Street Features to Keep Work DRY
“Don’t Repeat Yourself”: 4 Process Street Features to Keep Work DRY
 
Rethinking Object Orientation
Rethinking Object OrientationRethinking Object Orientation
Rethinking Object Orientation
 
Documentation for developers
Documentation for developersDocumentation for developers
Documentation for developers
 
Flow based-1994
Flow based-1994Flow based-1994
Flow based-1994
 
ScienceBehindUX
ScienceBehindUXScienceBehindUX
ScienceBehindUX
 
Digital Rhetoric and Writing for April 23
Digital Rhetoric and Writing for April 23Digital Rhetoric and Writing for April 23
Digital Rhetoric and Writing for April 23
 
Knowing Ranking Factors won't be enough!
Knowing Ranking Factors won't be enough!Knowing Ranking Factors won't be enough!
Knowing Ranking Factors won't be enough!
 

Recently uploaded

IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
Abida Shariff
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 

Recently uploaded (20)

IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 

Naming Things (with notes)

  • 1.
  • 2. @aupajo .co.nz Hi, I’m Pete. I’ve been writing Ruby for about 11 years, I work for a company called Trineo, and I live in New Zealand. That’s me squinting in the sun at RubyConf AU back in March.
  • 4. What is code? Ostensibly for the computer. In reality, it’s a recipe that has to be digested by two audiences: the computer and the developers. You have to encode behaviour and intent.
  • 5. What is good code? Good code is efficient. By efficient, I don’t mean efficient for the computer, I also mean efficient for the human mind. To understand that, I want you to focus on an idea: cognitive overhead.
  • 6. Why is naming things important? It’s our primary tool for communication. It is the artefact left behind of someone’s thoughts and intentions. A good name conveys how to use something and give you a clear sense of when it should change.
  • 7. Why is naming things hard? Often because when we’re forced to pick a name, we have to articulate a concept. Often it is hard to express a concept in a simple word or two. Ideas can be subtle. Struggling to name something is an important part of of design. Difficulty comprehending indicates more clarification needs to be done.
  • 9. Who can tell me what’s wrong here?
  • 10. Remove all ambiguity about units!
  • 11. No context. Hard to search for.
  • 12. Some developers solve this problem with comments. But why is it you have to explain the code? Why can’t the code explain itself?
  • 13. Better. But elapsed time for what?
  • 14. Best. The context is clear.
  • 15. What does this code do?
  • 16. Nothing has changed but for your ability to understand this code. To the computer, these expressions are identical. But everything important to you, the developer, has changed.
  • 18. Ah. Wouldn’t want to mistake that one.
  • 19. Abbreviations are hard to read. Why `res` instead of `response`?
  • 21. Creates confusion. Did the author intend an array here?
  • 22. If it is meant to be an array, let it be an array.
  • 23. If it isn’t meant to be an array, avoid numbers. This is a common pattern seen in tests.
  • 24. This is better. Now you’re articulating why you have two users: one is earlier and one is later.
  • 25. Type suffixes usually add more context than is necessary, and cause greater churn when you replay one type for another (bigger concern in a dynamic language).
  • 26. Better. We discarded information that probably isn’t useful.
  • 27. These properties and methods return booleans. But you wouldn’t know it to look at them.
  • 29. Be careful of words like “info” and “data”. What do they mean? Are these all equivalent. It’s a bit like saying “thing” in English.
  • 34. Repeated prefixes in a method name or property name often indicate one thing…
  • 35. You found another object!
  • 37. Prefixes: not the worst thing, but consider why this happens. It’s because the author wanted to use the name “File” twice. Consider what would happen if they were forced to pick another name.
  • 39. Perhaps this also hints at an object though?
  • 40. These names are red flags. Why?
  • 41. What does a “page manager” do? Any guesses? Well, it manages a page. So anything that could plausibly be considered “managing a page” could easily get added to this class. These classes quickly balloon out of control.
  • 42. Here’s an example. Imagine you have a “page formatter”.
  • 43. By turning this into a formatted page, you are now talking about the end result of what this class does – what you’re trying to achieve. This allows you to think more clearly about what is and isn’t needed.
  • 44. Specificity is good, but use your judgement. For instance, it’s probably fine to call a postal address simply an “address”.
  • 45. However, if your application deals with more than one type of address, you may want to consider increasing its specificity.
  • 47. These methods invite confusion, because you constantly have to ask yourself “is this object add, insert, or append”?
  • 48. Here, never have to think.
  • 49. Always consider your domain. For instance, does your business sell to “users”?
  • 50. Probably not. You should be able to speak the language of the domain.
  • 51. Avoid patterns in names. Design patterns are implementation details, and encoding the pattern into the name prevents altering that class in the future to not use that pattern. They’re unnecessary information that usually only adds cognitive overhead.
  • 52. Better. The API is clear to use, and that’s all that matters.
  • 54. Directories and their structure are just as important as the file name. Both can add context and lower overhead for finding files or figuring out where to place files. A well- named directory can be more powerful than a well-named class.
  • 55. Consider the ergonomics. Folders with too many items take longer to read. A folder with one item is like having a category with one item, which is not a useful category to have.
  • 56. Long names are bad, because they often contain too many concepts, indicating an object that has a high cognitive overhead.
  • 57. They also lead to abbreviations, because typing out “bookings_products_vehicle_types” everywhere is cumbersome. (This is a real world example.)
  • 58. If necessary, make the name longer. Brevity is good, but the ultimate goal is clarity. Here, the key concept is that we have vehicle types.
  • 59. When the inevitable shortening happens, it’s easier to do things like this. Not perfect, but far better than “bpvt”.
  • 60. Beware of names that vary in small ways. They can easily be confused.
  • 61. What is it you do? You are a translator for two audiences. You are the bridge between the human and the computer. You need to know how computers work and how humans work – both the humans which your software serves, and the humans which your software will by changed by. Your primary weapon in your toolbox against ambiguity and cognitive overhead – the forces that corrode a software’s maintainability – is to name. You name things every day. Be mindful about the words you choose. Software should be written to be read by another developer.
  • 62. Programs must be written for people to read, and only incidentally for machines to execute. “ Harold Abelson Structure and Interpretation of Computer Programs
  • 64.
  • 65. The ratio of time spent reading versus writing is well over 10 to 1. We are constantly reading old code as part of the effort to write new code. Making it easy to read makes it easier to write. Robert C. Martin “Uncle Bob”
  • 66. The ratio of time spent reading versus writing is well over 10 to 1. We are constantly reading old code as part of the effort to write new code. Making it easy to read makes it easier to write. Robert C. Martin “Uncle Bob”
  • 67. The ratio of time spent reading versus writing is well over 10 to 1. We are constantly reading old code as part of the effort to write new code. Making it easy to read makes it easier to write. Robert C. Martin “Uncle Bob”
  • 68. A parable about stones Marco Polo describes a bridge, stone by stone. "But which is the stone that supports the bridge?"  Kublai Khan asks. "The bridge is not supported by one stone or another," Marco answers,    "but by the line of the arch that they form.” Kublai Khan remains silent, reflecting. Then he adds:  "Why do you speak to me of the stones? It is only the arch that matters to me.” Polo answers: "Without stones there is no arch."
  • 69. On Exactitude To my mind exactitude means three things above all: (1) a well-defined and well-calculated plan for the work in question; (2) an evocation of clear, incisive, memorable images; (3) a language as precise as possible both in choice of words and in expression of the subtleties of thought and imagination. - Italo Calvino