I started programming when I was 7, in basic (very little things). In the school we had Logo when I was 8, I found that boring. When I was 12 I was programming ASM in the Z80. Later I learned pascal in the first year of secondary school, and C one year later. I was attracted to programming because I suck at arcade games. When all my friends where playing wanderboy or whatever, I was programming things. I enjoyed being able to create what my imagination wanted.

I learned a lot by trial en error, and I tried to get my hands in whatever document would help me to code better. I remember getting from a BBS a copy of the coding style of Linux. I found extremely insightful.

The good thing of learning to program in the 80s, is that some things that later became (stupidly) prohibited, were all in trend: RAII, normal naming of variables, dynamic typing... later the people when to stupidity and insisted in declaring all variables at the beginning of the function, naming conventions like hungarian notation, and strong typing... not everything is reverting to the normality.

Then in the university I learned C++ (C++98) and "OOP". I thought I knew what I was doing, even worked 1 year producing real software for automation of radio broadcasting automation (mp3 was still not a thing, we had all the music in big discs --4GB! :) and played form there). Also developed a presence server for Nextel Sprint, and a geolocation application, based on signal strength (when cell phones did not have GPS). Among many other applications, for billing, alarm handling, protocol analysis...

UNTIL: in 2010 I came across SICP. It was like "all you ever wanted to understand about SW engineering and nobody told you." That lead me to read the Lisp books like "Practical common lisp" and I understood I had no idea what OOP was really... Because how I learned to code, I always used already the "wishful thinking method". I tend to write the programs so that it is almost the algorithm I want to implement in psedo-code, and the go ahead programming the functions that I assumed exist, again with the same method. Each iteration in a new set of files, which represents a deeper (less) abstraction, until I get to system or library calls. Sometimes I made a wrapper for a library, so I start parts bottom-up.

FF another 10 years, working in a different country and industry, I see how important is to not be smart while writing code. Use KISS principle. More and more the idea of "write psedo-code" takes importance...

And I see how some industries, countries, or even continents, for some estrange reason, are 30 years behind in computer science. I see constantly people where I work defining all variables at the beginning of the function, using kind of hungarian notation, (no kidding, loop variable named nmp_CntIdx_si32), using inheritance for absolutely everything, the concept of "has a" does not exist, they insist in "is a" abstraction. I've seen inheritance chain of 14 classes, one after another, to make a Kalman Filter, which inherits from std::vector. Last but not least, they make every single function a template, because "you do not know if later you want to add the ability for other type". Mind you, is a BIG company, making "safety critical" software...

All that to say: yeah, what does "meaningful" means after all. I find more meaningful my beginning writing automation SW for radios, as the stupidity I do today...