Inventions VS discoveries (in software development)

Who of you hasn't heard that from a more senior colleague / boss?

Software development hasn't truly changed at all in past 5/10/20/30 years. It's about all the same patterns / models / approaches that keep having their highs and lows alternately in cycles.

It may be an oversimplification, but it's true in surprisingly many cases - keep in mind recent renaissances of:

  • functional programming & lambda calculus
  • actor model
  • asynchronous (message-driven) communication
  • SOA (under the new, micro-name ...)
  • KV or object stores
  • LISP

Old ideas get refreshed, re-learned & people seem to notice (& appreciate) values they didn't find relevant (or just underestimated) before. Actually, it's not that easy to find a completely new, fresh idea that isn't really a refurbishment of something already tried before, and has made a real breakthrough.

Reactive Streams? Blockchain? Containers? Microkernels? Nope, they all have roots in something that has been invented before. I find the word "invented" very important here. Maybe the fact that we're continuously orbiting around same concepts, ideas & models has its reasoning in the origin of them.

Maybe they are not invented, but ...

... discovered?

Hopefully you get the difference intuitively:

  • invented is something that has been created by the inventor, brought to life with the power of someone's intellect - fully defined from scratch, as it didn't exist until then
  • discovered is something that did exist on its own, but lacked a proper definition / model / recognition - either wasn't named, had no clear purpose / use case or was completely ignored or unknown

If you think about that for a moment, so many (even sophisticated) programming models have their origin in behaviors, situations or patterns that happen within real life, in completely different areas of interest:

  1. Event Sourcing - works exactly like accounting (& many, many other things)
  2. OAuth 2 - compare it with the way your national ID is being issued & used
  3. Hystrix - well, as it's known as a ciruit breaker ...
  4. Gossip protocol - well ... uhm ... ok :)
  5. Neural networks, simulated annealing, bubble sort ...

Ok, enough.

Maybe the correct question is - are we actually inventing anything new in Computer Science? Or is it about mimicking real-life, physical models & reproducing it in the form of source code? "Discovering" them again, but in a digital way. Is it even possible to invent something new in software development? The answer isn't really obvious for me.

Fortunately (or not ...), that doubt isn't exclusive for this industry only:
https://www.quora.com/Was-mathematics-invented-or-discovered-1

Pic: © Sergey Nivens - Fotolia.com