5 min read

The Importance of Unlearning


The world of software is changing constantly at a very fast pace. Yesterday’s axioms might be tomorrow’s anti-patterns.

Newborn technologies rise to popularity and most of them will become obsolete sooner than expected and hardware advancements make game changers for things that were considered as science-fiction a few years ago possible.

The only certainty is that we don’t know what the future will bring us.

Emerging Technologies

Here is a partial list of recent years emerging technologies:

1. Blockchain
Needless to say that blockchain has a good chance to disrupt the world as we know today

2. Machine Learning Renaissance
The increase of Hardware capabilities brought a new wave of tools and disruption to many industries that take advantage of Machine Learning

3. Containers
Now it’s much easier to deploy self-contained isolated components to the cloud. Containers orchestration infrastructures that only giants like Google had in-house are now publicly available for everyone (Kubernetes is the king here for now but the future will bring new tools for sure)

4. WebAssembly
The motivation is to have one universal bytecode that will be used not only on the browsers but on everything (desktop/smartphones/god knows). This technology will transform the portability of software between platforms

5. Rust
One of the most innovative programming languages ever invented, makes system programming a real joy. The most loved programming language in Stack Overflow survey for the last 4 years

6. Elixir
The solution to how to make Erlang virtual machine (called BEAM) mainstream, mainly thanks to its Ruby-like syntax and great tooling

7. Serverless
Why deploy containers to the cloud when we want only a single function that doesn’t need to be up 24x7?

8. GraphQL
REST API is not ideal for every problem, many data models are actually viewed better as a graph and this protocol plays nicely with them

9. Redis
The innovative key-value database having so many data-structures. The most loved database in Stack Overflow survey for the last 3 years

10. Kafka
Distributed commit log that serves as the single point of truth of a system data. It makes it very easy to add/remove independent producers/consumers for our system architecture. Thanks to Kafka it’s easy to select a checkpoint and “re-play” historical data.

On the one hand, it’s an exciting time to be a software developer. On the other hand, it means that in order to keep up, we must not stop learning or we’ll become irrelevant

I’ve always loved (and still do) learning.
I love reading technical books (I own too many).
I love reading beautiful pieces of source code.
I always seek for ways to be more productive and get out of my comfort zone.

But, I think there is one important thing that people often overlook and is the importance of unlearning things


Unlearning means we need to accept that there might be more than one solution to a given problem, and this solution might be counterintuitive for us.

It also requires humility and willingness to start over in order to gain a new perspective and extend our toolbox.

Let’s review again the above list of technologies:

1. Blockchain
In order to understand how blockchain technologies work, we must forget about the centralized middleman model.

2. Machine Learning
For example, we need to accept here that computer neural networks can output results which we’ll be impossible for us to understand exactly where they came from

3. Containers
Containers disrupted the DevOps world and are the key reason for the micro-services architecture explosion. Without them, we’d stay with more monolithic systems.

4. WebAssembly
Will open many opportunities, the obvious is using new programming languages for Frontend Programming. Another world of possibilities will be consuming WebAssembly libraries and using them within our applications. For example, a Rust program that will initiate a WebAssembly runtime hosting other wasm programs that were originally coded in Golang/Swift/other)

5. Rust
Learning the Rust programming language requires us to think on resources differently in terms of borrowing/ownership.

6. Elixir
The Let it crash philosophy of Erlang asks us to accept unknowns and that things will break and prepare for them from the beginning

7. Serverless
Asks us to stop thinking only about services but also about single functions. It opens new opportunities to save money since we only pay for when the usage of a function (which might not be available 24x7)

8. GraphQL
Requires us to accept that REST isn’t always the best for every scenario and that sometimes there is actually a graph. (I personally think that starting from a REST API and gradually move towards a GraphQL is less risky for a green-field project)

9. Redis
Requires us to represent data in many more shapes: Key-Value / Hashes / Set / SortedSets / Lists etc.

10. Kafka
Once we start viewing our system data as a log, we can think more about replaceable components on our system. For example, we can easily add a new consumer and make it process data and spill it into a new database and know it won’t interfere with the rest of the system.

Unlearning is a continuous inner fight. If done properly can be a huge enabler and if not, then we risk missing growth opportunities.

A change in perspective is worth 80 IQ points
- Alan Kay