Accepting that there might be more than one solution out there for a problem

Yaron Wittenstein
Jun 27 · 4 min read

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

Newborn technologies rise to popularity only to become obsolete sooner than expected and hardware advancements make things that were considered 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 emerging technologies in recent years:

  1. Blockchain
    Needless to say that blockchain has a good chance to disrupt the world as we know today
  2. The machine learning renaissance
    The increase of hardware capabilities has 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. Container orchestration infrastructures that only giants like Google previously had in-house are now publicly available for everyone (Kubernetes is the king here for now but the future will surely bring new tools)
  4. WebAssembly
    The motivation is to have one universal bytecode that will be used not only in browsers but in 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,
    Rust makes system programming a real joy. The most loved programming language in Stack Overflow surveys for the last 4 years
  6. Elixir
    The solution to making Erlang virtual machines (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
    An innovative key-value database with so many data-structures.
    The most loved database in Stack Overflow surveys 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, it means that in order to keep up, we can’t 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 it is the importance of unlearning things.


Unlearning

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 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 are 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 of 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

Better Programming

Advice for programmers.

Yaron Wittenstein

Written by

A Passionate Coder

Better Programming

Advice for programmers.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade