111 lines
4.8 KiB
Org Mode
111 lines
4.8 KiB
Org Mode
|
:PROPERTIES:
|
||
|
:ID: 3acde895-6fb6-433a-a46c-3ebd0dedcdbe
|
||
|
:END:
|
||
|
#+title: On software programming evolution
|
||
|
#+Author: Yann Esposito
|
||
|
#+Date: [2024-02-10]
|
||
|
|
||
|
- tags ::
|
||
|
- source ::
|
||
|
|
||
|
* Software Programming
|
||
|
|
||
|
My first contact with programming occurred when I was about 10 years old.
|
||
|
I was confronted with BASIC on a local computer.
|
||
|
BASIC was the UI you need to use to do anything interesting with your computer.
|
||
|
|
||
|
The hardware interface was, a keyboard, two joysticks with a single button and
|
||
|
an electronic pen.
|
||
|
You could push your pen on the screen and the computer could detect the position
|
||
|
of your pen.
|
||
|
|
||
|
So as a child, to play any game I needed to put a magnetic tape in a recorder
|
||
|
and wait for prompt to show and write something like:
|
||
|
|
||
|
#+begin_src basic
|
||
|
RUN ""
|
||
|
#+end_src
|
||
|
|
||
|
And after a while I saw that you could play with this computer by writing
|
||
|
commands to draw things on the screen.
|
||
|
And quickly I copied from a book a few commands to make a loop that drawed
|
||
|
lines.
|
||
|
And I felt it was incredible. Just drawing a few lines on the computer because,
|
||
|
I could control how these lines were drawn.
|
||
|
|
||
|
It wasn't easy to grasp what and how I could change things. But after a while I
|
||
|
did my first computer program that was really useful.
|
||
|
|
||
|
Of course, if I wanted to draw the same thing again, I needed to write the
|
||
|
program from scratch all over again.
|
||
|
|
||
|
I was lucky enough to also have to play with LOGO, and other programming
|
||
|
languages.
|
||
|
Year passed and I familiarized myself with Pascal.
|
||
|
Then I really started my studies and really learned how to program.
|
||
|
And a program was always something you mostly controlled.
|
||
|
|
||
|
The mysterious part for a long time was the driver interface.
|
||
|
I could write program that did various complex things.
|
||
|
But I wouldn't be able to explain how my program could really write on the
|
||
|
screen, or print something on a printer, etc…
|
||
|
The layer provided by the OS was long a mystery to me.
|
||
|
|
||
|
But mainly you had to accept the "Standard Library" that comes with your compiler.
|
||
|
That can makes commands like `println` to really print a string into your
|
||
|
terminal on your screen.
|
||
|
|
||
|
And I quickly understood that if I wanted to create games or any kind of
|
||
|
graphics you need to adopt an external component. A Graphic Library which
|
||
|
exposed function that, if you used them, somehow, magically did things on the
|
||
|
screen. Or generate some sounds.
|
||
|
|
||
|
But mainly, that was it.
|
||
|
|
||
|
A program has always been, for a very long time something starting with the
|
||
|
standard library provided with the compiler of your programming language (C,
|
||
|
Pascal, Java, etc…), and perhaps, you need to install *ONE* big dependency. Like
|
||
|
QT, or something else. And that was it.
|
||
|
You started mostly from scratch every time.
|
||
|
|
||
|
Then, years passed, and I started to earn money for programming.
|
||
|
And slowly, I witnessed the evolution of programs.
|
||
|
From a single man, a small team work from scratch.
|
||
|
To... a kind of social construction.
|
||
|
|
||
|
In particular, I saw how Silicon Valley startups could use the power of many
|
||
|
open source projects, use many libraries to build more complex programs.
|
||
|
And it really changed the pace of the production of the end product.
|
||
|
But, more and more, people started to forget about this initial art of writing
|
||
|
something from scratch without the help of an external library or framework.
|
||
|
|
||
|
Now, I feel, the situation appear to be a bit ridiculous.
|
||
|
We are not even talking about library but people consider to use paying services
|
||
|
instead of libs to provide and publish an application.
|
||
|
And what is left to software engineer is about how to put these external, paying
|
||
|
tools together.
|
||
|
|
||
|
Of course, there is always a bit of code you need to write, but the objects you
|
||
|
manipulate are already pretty abstract things coming from external libraries.
|
||
|
And somehow, this is so much ingrained in people minds now, that people are
|
||
|
afraid to build something themselves. They prefer the comfort of using a bloated
|
||
|
external code that provide a feature they need. Generally, you introduce a new
|
||
|
dependency that could be quite big just for a small part of the proposed features.
|
||
|
This is not only code, but also, publication of your application that is done
|
||
|
that way.
|
||
|
|
||
|
Instead of executing a binary on your own machine, or a machine you lend.
|
||
|
You kind of package all this in many layers of complex things.
|
||
|
Part of the complexity is justified, but probably a big part is not for most
|
||
|
applications.
|
||
|
This has simply became "best practices" to deploy and publish an application.
|
||
|
You add tons of dependencies, which are pretty huge comparatively to the feature
|
||
|
your app will provide, you deploy them in "the Cloud", or a pretty expensive
|
||
|
lent computers, generally inside a containers with a complex topology of
|
||
|
machines and services.
|
||
|
|
||
|
To me it looks like an incredible waste of resources for most use case.
|
||
|
But as this is "cheap" nobody really cares.
|
||
|
But, doing things this way kind of removed the magic of feeling in control and
|
||
|
feeling that you really built something you understand top to bottom.
|