Single Status Update
So as the subject says, I want to begin to learn C or C++ but am unsure where to begin. I've downloaded Microsoft Visual Studio Express and have the most basic tutorial I could find which is basically having it display a text in a command prompt. I'm not sure where to begin learning why it works, but I'm very interested in learning. Any advice on how to start? Should I just copy YouTube tutorials to begin with? Any suggestions are greatly appreciated.
Edit: I guess I should say why I want to learn. I've been messing around with PC hardware and building for many years. I'm fairly knowledgeable in the hardware area but not so much in software. Eventually I want to get myself into developing small programs and little games to play with friends/my daughter in the future. Possibly even get into the IT field which I have an internship in at the school I work at right now. Problem is the IT department is a mess with a director who was basically bumped up into the position when the original director left to work from home. He was awesome. Very very good with coding and programming. A shame I couldn't get in while he was the director, but it is what it is and I'm still dying to learn and will do so regardless. Thanks for your advice in advance :)
- Show previous comments 21 more
Are you one who hates C++ for being too dense in features, and deliberately writes code in C? I prefer C++ for the ability to organize my code in classes and for the automatic scope clean-up, which to my knowledge is missing in C.
You'll find that there's an endless number of features you can consider "missing" if you don't attribute any value to having a small language. Actually, there's a good Dijkstra quote on this subject:
Finally, although the subject is not a pleasant one, I must mention PL/1, a programming language for which the defining documentation is of a frightening size and complexity. Using PL/1 must be like flying a plane with 7000 buttons, switches and handles to manipulate in the cockpit. I absolutely fail to see how we can keep our growing programs firmly within our intellectual grip when by its sheer baroqueness the programming language —our basic tool, mind you!— already escapes our intellectual control. And if I have to describe the influence PL/1 can have on its users, the closest metaphor that comes to my mind is that of a drug. I remember from a symposium on higher level programming language a lecture given in defense of PL/1 by a man who described himself as one of its devoted users. But within a one-hour lecture in praise of PL/1. he managed to ask for the addition of about fifty new “features”, little supposing that the main source of his problems could very well be that it contained already far too many “features”. The speaker displayed all the depressing symptoms of addiction, reduced as he was to the state of mental stagnation in which he could only ask for more, more, more...
For myself, and to answer your question: there was a time when I said I knew C++ but they just keep adding new stuff to it, and I've already started seeing C++ code I don't understand any more because I don't know what all the new stuff does. So nowadays it's fair for me to say "I avoid C++ because I don't know how to program in it". My favourite example is rvalue references which I tried to read about and gave up. I really just don't understand what this garbage is for or why it's supposed to be a good idea (and no, I don't want you or anyone else to explain this for me either, please don't bother trying).
Basically I just don't consider myself clever enough to write C++, so I prefer to stick to dumb languages where I can at least reason about things. I prefer C because I can at least look at a statement like "a = b + c;" and have some degree of confidence about what it does. But I certainly don't consider C any kind of gold standard nowadays either. It's a relic from the '70s which has aged well, but its flaws are pretty extensibly documented by now (I'm sure you're already aware of them).
My preferred languages nowadays are probably Python, Go and (if necessary) C, I think they cover basically all things I would ever want to write. I like them because (1) they're small languages and I'm too stupid to learn anything complicated; (2) they seem thoughtfully designed and minimalist, which is something I have a lot of appreciation for. I've heard a lot of good things about Rust and I'm curious to learn that too, but haven't got around to learning it yet.
But even if you have a different philosophy, I'll encourage you to read what I wrote again. If you're clever enough to write C++, that's great, but I was just saying that C++ isn't a good language for learning programming. For me it just seems obvious that the smaller the syntax, the smaller the learning curve. If you can learn programming by writing C++ or Python, but to learn C++ requires learning more things at once, that seems necessarily more difficult. Does that make sense?
I'm thinking about basic introductory programming stuff, like practicing writing loops to produce particular results. You're trying to develop the "mentality" of programming, about being able to logically reason about how the program flows and how the machine executes it. For sure you can learn to do that in any language, but some languages get more "in your way" and make you have to learn other things as well at the same time. A simple example is that in C/C++/Java, all variables have types, so you first need to learn the concept of what a type is to get anywhere. Programming's one of those things you learn by doing, so I kind of think that it makes sense to start with a simpler language that lets you focus on the core principles and fully develop that "mentality" of thinking and reasoning - it's a transferable skill you can then easily reuse when learning more complicated languages.