Reducing complexity

This is a collection of concepts compared by simplicity.

#Explicitness > Implicitness

Explicitly expressing relationships, interfaces, types, dependencies etc. not only helps to optimize performance by compilers or other tools, but also increases readability for the next programmer to understand your code.

#Static > Dynamic

Our intellectual powers are rather geared to master static relations and that our powers to visualize processes evolving in time are relatively poorly developed.

Edsger W. Dijkstra

#Immutable > Mutable

It is much easier to reason about your code if you know that the variable you are using can not be changed by some other external effect. Therefore immutability reduces the complexity of writing concurrent software. It can also be used to implement features like undo without increasing complexity.

#Guarantees > Discipline

Especially in large scale software guarantees have much more value than discipline. You can read more about why relying on discipline should be avoided on my page about discipline in programming

#Polyfill > Library

The web’s API is huge and increasing every day. That’s why we should embrace standards to remove complexity. Sebastian Markbage gave a great talk about this topic at JSConfEU 2014.

#Static Analysis > Runtime errors

The earlier you know about errors in your code the better. Reconstructing the state of a system when a bug occured is much harder than a linter, compiler or another tool pointing out errors in your code before you even test it locally.