I have a question for everyone going back to the beginning of this whole thread. I'm many years out of college with a major in history, I've worked a variety of jobs over the years and I'm currently bored out of my mind. I would like to transition into a new career and something in the tech field is very appealing to me.
I'm not interested in going back to school for another degree and ignoring for now the question of CS degree vs self taught programming for job prospects what is the best path to start learning; jump straight into a language (Java, Python, C variant?) or start off with something like the MIT open courses?
As it stands having skimmed through this whole thread obviously 90% of the discussion flew completely over my head so I'm wondering when first starting out what a reasonable expectation time wise would be to feel like you aren't just drowning in new terminology and concepts. Also is it generally expected that you go into programming knowing already that you love it or have any of you gotten to that place as you learned it more in depth.
I know I'm late to the party on this but I generally agree with what was already posted. I'd list order of learning from a practical standpoint to be this:
Basic computer and OS components (I assume you already know this)
Procedural programming/scripting (Python and PERL are great IMO)
Learn more advanced scripting. Download some basic open source libraries and read and understand what the code does. Write your own function libraries to handle a specific problem and then compare approaches.
After getting a handle here, taking some intro classes online and really doing pretty well with procedural programming, it's time to revisit hardware. Take a class on OS and hardware. Understand I/O stacks, how a bus works, drive speeds and memory management schemes.
Now turn to daddy C. Start off by learning to do all the shit that was super easy in python and PERL in C. Get all the syntax down, get comfortable with basic memory management, learn about libraries, get used to using a compiled language instead of an interpreted one. Get used to using an IDE instead of notepad++. Become used to debugging complex code and utilizing both IDE debugging tools and manual console output you added.
Now learn about references and the basics of more advanced concepts and object oriented programming. At this point you will need to understand the differences between structures and classes, functions and methods. Get a handle on instantiation, inheritance, parent/child relationships in OOP, polymorphism, overloading operators, etc.
Once you are comfy with the basics and all these concepts, you are pretty grounded and ready to stop making shit text only applications like calculators and fake point of sale systems with inventory in teststuff.txt and things like that. I would then take all that knowledge and try to dig into the languages and types of applications you want to learn. By this point you may not know the syntax but when you watch a vid/lecture/example and they are talking about ensuring the array is initialized but to make sure you save memory by only passing a pointer to your next method, it all makes sense and you can follow along. You will start off with "hello world" once again but you will blitz through to the interesting stuff.
I do think everyone who wants to program should eventually learn C/C++ and should learn to program with limited computing resources.