Untitled Presentation
How to Name Things
Two Hard Problems in Computer Science
Cache invalidation
Naming things
Off-by-one errors
Phil Karlton
Oh hey, these are some notes. They'll be hidden in your presentation, but you can see them if you open the speaker notes window (hit 's' on your keyboard).
Coding Horrors
if (data) {
if (data.data) {
data = data.data;
}
}
addBottomWhiteBorderIfFirstOfMultipleCarousel();
Programming is communication
Lesser mortals write for computers
Great developers write for humans
Experiment
Give a name for the variable
decimal ??? = 0;
forEach (item in cart)
{
??? += item.Price;
}
Conversation
Leverage mutual knowledge
Engage in reflexive thinking
Good names are
Readable
Accurate
Descriptive
Short, but no shorter
Unique
Memorable
Bad names are
nsReqProd
getName() with side-effects
Object
flushAllTemporaryBuffersIfClearFlagIsSet()
VideoItemCover
a
Things
Concept
Library | Namespace
Class | Module
Function | Method | Procedure | Routine
Variable
Casing Conventions
PascalCase
camelCase (lower)
snake_case
SCREAMING_SNAKE_CASE
train-case
Naming Conventions
C# Pascal for classes, methods; Camel for variables
Java Pascal for classes; Camel for methods, variables
Python Pascal for classes; Camel/Snake for functions, variables
Ruby Camel for classes; Snake for functions, variables
JavaScript Camel for constructors; Camel for functions, variables
Stick to the convention of a language, even in mixed-language programming
Exception: if developers cross languages frequently
Variable Naming
Ideas
Prefer why > what THREE = 3 (bad)
Look to domain terminology
Identify points of variation
Use opposites previous/next
Use literal phrases totalCustomersInCanada
Contextualize with qualifiers itemPrice vs item.price
Variable Naming
Guidelines
Use ASCII characters only
Avoid confusing characters oO0iIl1
Avoid words with multiple meanings number
Avoid overloading established words stack
Use full words and standard abbreviations
Variable Naming
Guidelines
Standardize order of qualifiers fruitTotal vs totalFruit
Spellcheck US or UK
Prefix booleans with is- or has-
Avoid negatives isInactiveDisabled
Pluralize enums and collections
Variable Naming
Exercise
Replace condition with variable
string displayName;
if (patient != null
&& patient.name != null
&& patient.name != ""
&& !privacyPolicy.isAnonymous(patient))
{
displayName = String.format("Patient {0}", patient.name);
}
else
{
displayName = "X";
}
Function Naming
Ideas
Prefer why > how
Look to domain terminology
Refer to recognized patterns Factory.create()
Look for established concepts push, pop, flush
Think symmetry open(file)/close(file)
Function Naming
Guidelines
Use prepositions for transformations celsiusToFarenheit()
Standardize syntax of getters/setters Product.Price() vs Product.GetPrice()
Avoid words with multiple meanings number
Avoid overloading established words stack
Use full words and standard abbreviations
Function Naming
Exercise
Name the function
public TaxRules ??? (PricingContext context)
if (context.hasTaxOverride) {
return context.getTaxOverride();
}
else if (context.isTaxFree) {
return new NullTaxRules();
}
else if (context.geo !== null) {
if (!context.geo.isInEu) {
return new EuTaxRules();
}
else {
return new DefaultTaxRules();
}
}
else {
return null;
}
Concept Naming
Ideas
Create portmanteaus facetime
Use metaphors and analogies token
Invoke imagery toast
Tell a story bug
Consult a thesaurus
Concept Naming
Guidelines
Avoid made-up words cystilizer
Avoid overloaded words kernel
Avoid trademarks Xerox, Google
Concept Naming
Exercise
Pull to refresh components
Fast Company
Fluffy Words Greylist
Verbs do, handle, process, perform
Nouns callback, car1 car2, data, feature, handler, manager, object, thing
Adjectives fast, normal, smart, temp
Credits
Background Images (in order of appearance)
Daniel Lombraña González, "La piedra Rosetta", https://www.flickr.com/photos/teleyinex/4983505622, CC Attribution-ShareAlike 2.0, with modifications to darken image;
Board of European Students of Technology, "Discussion group during GA", https://www.flickr.com/photos/bestorg/8733059592/, CC Attribution-NonCommercial 2.0, with modifications to darken image;
Pixabay, https://pixabay.com/en/word-cloud-words-tag-cloud-679936/, CC0 Public Domain, with darkened and lightened variants;