This makes no sense to me:
"The reason for that is that people who dive right into Assembly, tend
to write sub-optimal code because they don't understand well how this
code is executed by the processor and how to compile it. This is while
programmers who've learned C are better equipped to understand how
Assembly code works, because it is somewhat more convenient yet still
very close to Assembly."
Someone technically oriented could well start with assembly on a good
architecture (which qualification immediately excludes all Intel
products.) I can't see how learning C first helps. They should be
*taught* good assembly programming technique (data types, indexing on
structures, bare-metal binary math concepts, general organization,
commenting) so they don't grow their own bad habits, just like
teaching tennis or skiing.
There's a lot to be said about learning on an untyped language. C
programmers often get confused when learning assembly because they
really can't grasp the concept that most types aren't inherent to a
machine architecture, but are human constructs, or that something in
memory can be thought of as several types simultaneously; casting is
mostly in your head. This can be funny.
A modern non-GUI BASIC is a very good way to learn to program. It has
the advantage that, for engineering applications, the first language
you learn is possibly the only one you will ever need. I still do tons
of useful engineering stuff in PowerBasic, the DOS version. I use the
Console Compiler for 32-bit stuff that must run under Windows and do
TCP/IP and such, and the true Windows version for disgusting GUI
things which, luckily, are rarely needed.