Code difficult to read, tricky with names without semantic. Sometimes using language's accidental complexity.
TL;DR: Don't pretend you are too smart. Clean code asks for readability and simplicity.
Problems
Readability
Maintainability
Code Quality
Premature Optimization
Solutions
Refactor the code
Use better names
Examples
- Optimized loops
Exceptions
- Optimized code for low level operations.
Sample Code
Wrong
function primeFactors(n){
var f = [], i = 0, d = 2;
for (i = 0; n >= 2; ) {
if(n % d == 0){
f[i++]=(d);
n /= d;
}
else{
d++;
}
}
return f;
}
Right
function primeFactors(numberToFactor){
var factors = [],
divisor = 2,
remainder = numberToFactor;
while(remainder>=2){
if(remainder % divisor === 0){
factors.push(divisor);
remainder = remainder/ divisor;
}
else{
divisor++;
}
}
return factors;
}
Detection
Automatic detection is possible in some languages.
Watch some warnings related to complexity, bad names, post increment variables, etc.
Relations
Code Smell 02 - Constants and Magic Numbers
Maxi Contieri ・ Oct 21 '20
Code Smell 20 - Premature Optimization
Maxi Contieri ・ Nov 8 '20
Also Known as
- Obfuscator
Conclusion
Too clever developers write cryptic code to brag. Smart developers write clean code.
Clear beats clever.
Tags
- Declarative
More Info
Credits
Photo by NeONBRAND on Unsplash
Programming can be fun, so can cryptography; however they should not be combined.
Kreitzberg & Shneiderman
Software Engineering Great Quotes
Maxi Contieri ・ Dec 28 '20
This article is part of the CodeSmell Series.
How to Find the Stinky parts of your Code
Maxi Contieri ・ May 21 '21
Last update: 2021/06/08
Top comments (7)
You are of course aware that math background promotes using single character names for variables? Also, there are valid (due to historical reasons) short names, like
i
for iterator in afor
loop?The code in the "wrong" example is not being clever at all. It's just obfuscated. That kind is typically written by juniors trying to look smart.
I'd swap the "A.K.A." section with the headline.
There is no difference between wrong and right code.
Refresh the page. This appears to be a bug in (at least) the Android DEV app.
Yep you are right
From a machine point of view it isn't. The semantic parsing trees are equivalent
In the point.