skool is kool
have to work a lot, but you miss out on a lot without a good education
algorithms, time & space complexity, multithreading, memory management, compilers
there are a lot of things that an amateur programmer will have no idea how to tackle without proper reading material & pacing. it's also fairly common for beginners to stumble in the transition from procedural to OOP simply because they're not reading good material or looking up the right things
you can't really become a good programmer without becoming an efficient programmer first
i recommend starting out with C++. i wholly recommend the books i used my freshman year, in the following order:
Starting Out with C++ From Control Structures to Objects (8th Edition) - Tony Gaddis
Absolute C++ - Walter Savitch
Data Structures and Other Objects using C++ 4th Edition (read simultaneously with Absolute C++)
you should also get acquainted with some architecture & logical math, in the following order:
Digital Design By Morris Mano 5th Edition (read simultaneously with Starting out with C++, and i recommend using OrCAD to play with the logic gates)
KIP R. IRVINE - Assembly Language for x86 Processors (read simultaneously with Absolute C++)
you have to go out of your way to try implementing the examples & practice problems they assign to compensate for the lack of formal homework
you should become familiar with using a text editor to write up your language first before hopping into IDE's if you want to replicate the old school method of programming (which i highly highly highly recommend before you get into the latter part of data structures & C++). my school's policy is that freshmen are prohibited from coding in IDE's until the very end of their first semester, and i think it's really for the better. at the latest, switch over once you get to the assembly book.
compile using g++, input/output via files & console (command prompt) until you get to GUI's and interfaces, answer questions the book provides you, take detailed notes like as if you were studying in a class, and most importantly, work your butt off young man!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if you haven't been in school for a while, here is how i recommend you structure your notes (this example is from Starting Out with C++): https://drive.google.com/file/d/0B911a_7xx2ysT2R1eEJqbjJaeW8/view?usp=sharing
don't worry about the material above; i purposefully gave you a later chapter so you can look at it from an abstraction rather than merely as a template. bold your keywords & key phrases, bold & underline any clarifications, and tabulate to represent a relationship. format code as accurately as possible to the standards given in the book.
read 1 or 2 chapters a week, try doing 1 or 2 programming assignments from the book each week, stay away from using libraries as much as possible when starting out & try to confine your available methods & code to the materials given in each chapter.
need to read in formatted data & parse it? do it with a char* instead of a String. you'll learn a lot about pointers & memory management that way.
have bounds/limits on your data, or no? understand what data structures are appropriate for your algorithm, and weigh their advantages/disadvantages accordingly (do you need to insert/remove a lot, do you need to sort/search a lot, do you want data to have priority over others, do you need to grow or compress your data structure, etc.)
when you get to data structures, take great care in abstracting your methods. with that said, templates are your friend, but understand when, why, and how to use them.
don't cop out in assembly and use the high-level methods to get around coding more. use the lowest level methods that the book laboriously details. recognize when something is introduced as an efficient high-level workaround, and restrain from using it until you truly get it. don't be arrogant; you can always improve your algorithm. think about the lowest level way of implementing it.
if you have no idea what most of the advice i just gave means, that's great. i didn't either when i first started! i was literally completely and utterly new to programming my freshman year; up to that point, i was just a "power user" that played games. programming has been an utterly humbling, yet utterly rewarding avenue for me.
there is no "get smart quick" method to programming. it is academic, it is laborious, but it is so much fun.
pretend that you've literally never seen any code before and you'll get the most out of your education.
now get to reading already!
p.s. after you get through all this, it's all about problem solving. you will effectively be "syntax fluent" in assembly & C++, and you shouldn't have any issue transferring to higher level languages if necessary. you'll still be missing out on a lot of architecture & formal mathematics to really go super low-level (OS, compilers, etc.), but you'll be able to work on problems more efficiently & effectively. talk to me when you're done and i can guide you further.