This is my feeling, too. I never took any serious CS course during my studies, not more than maybe an hour a week at best on Mathlab, Caml, Prolog or Pascal, a tiny bit of assembler or LOGO, and these courses were almost always tied to other scientific disciplines, using the computer as a tool in the exact same way as we would use a ruler, an erlenmeyer or a LED.
I learned programming at work. I was working in a startup that I joined shortly after the internet bubble burst, in 2002, as their first employee. I was taught, beyond syntax and flow, to find my own "Way of the Programming Fist", as I like to name it, and more importantly to keep an open mind for other ways of programming. The key, and possibly the only lesson that is still relevant today:
"When in doubt, remember that your Way of Programming is complete, which means you can eventually build anything with it, anything. Whether you want to display a barchart from a static printer spool log or light up a bulb with a handclap, your Way of Programming can eventually do it. For every goal, there are probably faster, stronger or easier Ways, but these are never 100% better: there's always a tradeoff. For that reason you don't need to learn the other Ways - but make sure you acknowledge their existence, learn and remember these pros & cons your whole life."
You're talking about "Quality Code" - I didn't get it through people looking at my code, but through me looking at other people's code. My brains designed some abstract "compiler" of sorts, used in my very mind to parse an alien piece of source. For me, "Quality" in that domain is the amount of work I need to do to be understand the "Way of the Programming Fist" of the coder, and use it in turn for my own programs. It has a lot to do with conventions, design patterns, formatting, naming and of course the programming language's "family", whether it's procedural, functional, object-oriented or whatever.
A decade later, it feels like it's still only the beginning, but I'm now proficient enough to understand the pros and the cons of some of the various conventions, design patterns, algorithms or programming languages I've met along the way, the way they fit with various goals and requirements, I'm mature enough to make my own choices, and I actually have my own programming business.
I would absolutely describe myself as a self-taught programmer, but like the above poster said, I would have gone absolutely nowhere on my own. Programming is all about knowledge transfer - "Here's what I use to do this, and here are the benefits, here are the tradeoffs" should be every programmer's favourite sentence.
I learned programming at work. I was working in a startup that I joined shortly after the internet bubble burst, in 2002, as their first employee. I was taught, beyond syntax and flow, to find my own "Way of the Programming Fist", as I like to name it, and more importantly to keep an open mind for other ways of programming. The key, and possibly the only lesson that is still relevant today:
"When in doubt, remember that your Way of Programming is complete, which means you can eventually build anything with it, anything. Whether you want to display a barchart from a static printer spool log or light up a bulb with a handclap, your Way of Programming can eventually do it. For every goal, there are probably faster, stronger or easier Ways, but these are never 100% better: there's always a tradeoff. For that reason you don't need to learn the other Ways - but make sure you acknowledge their existence, learn and remember these pros & cons your whole life."
You're talking about "Quality Code" - I didn't get it through people looking at my code, but through me looking at other people's code. My brains designed some abstract "compiler" of sorts, used in my very mind to parse an alien piece of source. For me, "Quality" in that domain is the amount of work I need to do to be understand the "Way of the Programming Fist" of the coder, and use it in turn for my own programs. It has a lot to do with conventions, design patterns, formatting, naming and of course the programming language's "family", whether it's procedural, functional, object-oriented or whatever.
A decade later, it feels like it's still only the beginning, but I'm now proficient enough to understand the pros and the cons of some of the various conventions, design patterns, algorithms or programming languages I've met along the way, the way they fit with various goals and requirements, I'm mature enough to make my own choices, and I actually have my own programming business.
I would absolutely describe myself as a self-taught programmer, but like the above poster said, I would have gone absolutely nowhere on my own. Programming is all about knowledge transfer - "Here's what I use to do this, and here are the benefits, here are the tradeoffs" should be every programmer's favourite sentence.