2024-02-01 14:16:14 +00:00
|
|
|
|
:PROPERTIES:
|
|
|
|
|
:ID: a397da72-7731-4a69-9460-38f4a76fbfc1
|
|
|
|
|
:END:
|
|
|
|
|
#+Title: Rigid vs Flexible
|
|
|
|
|
#+Author: Yann Esposito
|
|
|
|
|
#+Date: [2023-12-24]
|
|
|
|
|
|
2024-08-14 09:35:42 +00:00
|
|
|
|
- tags :: [[id:a5be1daf-1010-428f-a30f-8faf95c1a42f][blog]]
|
2024-02-01 14:16:14 +00:00
|
|
|
|
- source ::
|
|
|
|
|
|
|
|
|
|
* Introduction
|
|
|
|
|
|
|
|
|
|
A common debate in software programming is about choosing a Static vs Dynamic
|
|
|
|
|
programming language.
|
|
|
|
|
After many years of debate, I think I would prefer to move the discussion toward
|
|
|
|
|
Rigid vs Flexible programming.
|
|
|
|
|
|
|
|
|
|
Before starting the discussion here are a few important points to remember:
|
|
|
|
|
|
|
|
|
|
First of all, remember that the word "Dynamic" in dynamic programming language,
|
|
|
|
|
was tailored to make it impossible to attack.
|
|
|
|
|
It is impossible to find a negative meaning to the word dynamic [^1].
|
|
|
|
|
From its inventor Richard E.
|
|
|
|
|
Bellman:
|
|
|
|
|
|
|
|
|
|
> It also has a very interesting property as an adjective, and that is it’s
|
|
|
|
|
> impossible to use the word, dynamic, in a pejorative sense.
|
|
|
|
|
> Try thinking of some combination that will possibly give it a pejorative meaning.
|
|
|
|
|
> It’s impossible.
|
|
|
|
|
> Thus, I thought dynamic programming was a good name.
|
|
|
|
|
> It was something not even a Congressman could object to.
|
|
|
|
|
> So I used it as an umbrella for my activities.
|
|
|
|
|
|
|
|
|
|
Second point, I would like to say that while clearly in Rigid vs Flexible you
|
|
|
|
|
feel the wording is more positive around the term Flexible.
|
|
|
|
|
I am personally convinced that like in nature and the body of animals, the
|
|
|
|
|
flexibility vs rigidity could be optimized differently depending on your task
|
|
|
|
|
and environment.
|
|
|
|
|
I have two dogs.
|
|
|
|
|
One of the is a beagle, for a dog, he is not very flexible.
|
|
|
|
|
But this give this dog a great advantage, acceleration.
|
|
|
|
|
He can go from 0 to maximal speed almost instantly, he could switch direction
|
|
|
|
|
almost in a single jump.
|
|
|
|
|
He is like a spring.
|
|
|
|
|
|
|
|
|
|
My other dog, is a log bigger, she is a mix of an Anatoly Sheperd and Pyrenean
|
|
|
|
|
Mountain Dog.
|
|
|
|
|
And she is extremely flexible.
|
|
|
|
|
So flexible in fact, that when we had to put a Dog surgery collard, we had to
|
|
|
|
|
change it to a lot longer one because she could curve entirely herself so well.
|
|
|
|
|
She is a *lot* faster than my Beagle.
|
|
|
|
|
|
|
|
|
|
Despite her bigger size and her speed, my dogs play together it is not always
|
|
|
|
|
her that wins.
|
|
|
|
|
Simply because the beagle developed a strategy to take advantage of his
|
|
|
|
|
properties.
|
|
|
|
|
Mainly, the main disadvantage of flexibility, is the lack of acceleration.
|
|
|
|
|
So the Beagle wait for the bigger dog to be very close to him and he switch its
|
|
|
|
|
direction at the last second.
|
|
|
|
|
The Sheperd need to take a longer time to change direction.
|
|
|
|
|
This way he can take back another direction.
|
|
|
|
|
In the end as she is a lot bigger dog which was tailored to be a defender she
|
|
|
|
|
always is the winner.
|
|
|
|
|
|
|
|
|
|
In software engineering, I think we can that analogy is still relevant.
|
|
|
|
|
|
|
|
|
|
You have programming languages, frameworks, libraries that can be more or less
|
|
|
|
|
flexible or rigid. Sometime rigidity has advantages. It makes you start faster,
|
|
|
|
|
prevent you from making mistakes.
|
|
|
|
|
While more flexible libraries put too much burden on the programmer that need to
|
|
|
|
|
learn himself by making mistakes how he should behave.
|
|
|
|
|
|
|
|
|
|
So let's jump on a few more concrete examples.
|
|
|
|
|
|
|
|
|
|
[^1]: https://pubsonline.informs.org/doi/pdf/10.1287/opre.50.1.48.17791
|
|
|
|
|
|
|
|
|
|
* Examples
|
|
|
|
|
|
|
|
|
|
** Partial functions
|
|
|
|
|
|
|
|
|
|
One biggest hurdle in programming are partial functions.
|
|
|
|
|
Mainly a function whose given the wrong argument will throw an exception.
|
|
|
|
|
|
|
|
|
|
There are so many strategies to handle these, but here are a few:
|
|
|
|
|
|
|
|
|
|
1. throw an exception at runtime like ~div(2,0)~
|
|
|
|
|
2. returns ~null~
|
|
|
|
|
3. check the type and fail the compilation, it works for types, but not for
|
|
|
|
|
values though. So if you also want to prevent some value to be passed you
|
|
|
|
|
need to created a few pretty advanced mechanism to ensure your type does not
|
|
|
|
|
contain any forbidden value typically to protect a division by 0 for example.
|