Code Smell 129 — Structural Optimizations

TL;DR: Don’t optimize anything until you have a real use scenario benchmark.

Problems

Solutions

  1. Cover your scenarios with tests.
  2. Write readable (and possible non-performant) code.
  3. Do a real benchmark with real user data. (No, iterating your code 100,000 times might not be a real use case).
  4. If you have conclusive data, you need to improve benchmark’s found bottlenecks using Pareto principle.
  5. Attack the worst 20% problems causing 80% bad performance.

Context

At university and online courses, we learn algorithms, data structures, and computational complexity before good design rules.

We tend to overestimate the (possible) performance problems and underestimate code readability and software lifetime.

Premature optimization often has no evidence of solving real problems.

We need to surgically improve our code when the facts tell us we have a real issue.

Sample Code

Wrong

for (k = 0; k < 3 * 3; ++k) {
i = Math.floor(k / 3);
j = k % 3;
console.log(i + ' ' + j);
}
//This cryptic piece of code iterates a
//two dimensional array
//We don't have proofs this will be useful
//In real contexts

Right

for (innerIterator = 0; innerIterator < 3; innerIterator++) {
for (outerIterator = 0; outerIterator < 3; outerIterator++) {
console.log(innerIterator + ' ' + outerIterator);
}
}
// This is a readable double for-loop
// 3 is a small number
// No performance issues (by now)
// We will wait for real evidence

Detection

[X] Manual

This is a semantic smell.

We might find the code is harder to read.

Tags

  • Premature Optimization

Conclusion

We need to stop optimizing for machines and start optimizing for humans readers and code maintainers.

We need to avoid programming languages designed for premature optimization and favor robust ones.

Relations

More Info

Premature optimization is the root of all evil is the root of evil

Credits

Photo by Priscilla Du Preez on Unsplash

Optimism is an occupational hazard of programming: feedback is the treatment.

Kent Beck

--

--

--

I’m a senior software engineer specialized in declarative designs. S.O.L.I.D. and agile methodologies fan. Maximilianocontieri.com

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Learning To Code: Project Two, Cafelist

4 Attributes Of A Good CI/CD Pipeline

Spring Boot Application Monitoring in Kubernetes

Building an API With GCP

SickOS 1.1 — Walkthrough (Vulnhub)

The Best Place to Get Started With AI: Google Colab Tutorial for Beginners

Teammate Tuesday: Sean Zhang

The Next Generation WebSDK by Agora!

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Maximiliano Contieri

Maximiliano Contieri

I’m a senior software engineer specialized in declarative designs. S.O.L.I.D. and agile methodologies fan. Maximilianocontieri.com

More from Medium

Code Smell 128 — Non English Coding

An introductory guide to functional programming concepts

Introduction to Functional Concepts

What’s wrong with this code?

SOLID principles in Functional Programming