@imserious I know what you mean as I said I considered ZP myself. Seemed it would save me some time, but thinking down the road I would have more headaches from it, I decided to stay away.
Hard to recommend something because I only read 2 books (if even that) about programming. None of them about algorithms and data structures. Thing is I had a great informatics teacher in high school and he taught me all that very well.
Whatever you do, do not start learning with C++ - for the basics it is ok, but then once you get into pointers and memory allocation/management you will wish you weren't born.
First find answers to the "how does it work" and "what is" questions:
- How does a program work?
- How does it start, how do the instructions get executed, how does it use actual data, etc.
- How ... whatever you come up with.
- What is an instruction
- What is a variable
- What is a function
- What is a class, an object, an instance
- What is an error/exception
- etc. find answer for any question right when you have the question!
USE IRC!!!!! People forgot about this ancient technology but there's an IRC channel for every programming language. Every time you have a question go and ask for help there. Be specific, they don't like lazy people who don't read and will send you to RTFM if you don't ask the right question the right way.
It depends who you ask and what you ask. This is because some languages are harder and some are easier to start with. In turn, this makes most programmers that work in a language dumber or smarter. Let me clarify that. For example PHP is easy to start with even if you don't know how to code. It is also easy/fast to produce an usable program in PHP. Because of that, since PHP coders can get stuff done (usually poorly) without having to read a lot in advance, they are "dumber" than Java coders. Why are Java coders smarter? Well in Java you have to basically learn about half of the language and its principles before you can do something useful. There is no way you get a Java program working without understanding the program well. Also Java is more strict so building poorly designed programs in Java is less frequent, because Java forces you to do it well. But Java is way too bloated and strict for automation scripts.
So basically if you have generic algorythm/programming/structures questions is better to ask for help from a coder that uses a more difficult language because chanches are he knows the reasoning behind something.
Do not try to learn from difficult books. If you start reading a book and you're in a few chapters and you don't really get it, STOP and try a different book. Some people learn better from book1, others from book2 - it is a matter of what clicks with you.
If you're 100% newbie start with something that is targeted at retarded monkeys. I'm not being mean but learning from material way below your intelligence helps you establish a foundation you are confident on and also gives you a sense of accomplishment for actually understanding without frustration. Basically start with something targeted at beginners. Stay away from "* for dummies" books they are shit.
After you learn the basics - algorithms/data structures/pseudocode - and play with the language you chose (as in actually write some programs and learn all its basics) then it is time you take the user/developer manual where you find every single variable, function, class and module and read it all. This is to understand what is available in the language so when you need something you know where to go and what to use. Do not even try to memorize or learn anything practical from there, the purpose is just to figure out what "tools" you have at your disposal within that language so you know where to go in the future.
After you covered all this (it will take a while) you are basically at newbie level. lol, yeah really! From here starts the hard work - actually getting something useful done from A to Z. In this process you will bump into problems and exasperation. I had times when I spent a whole week on an error/bug/whatever that took me 1 minute to fix, I just didn't knew ho to "ask" for a solution or how to describe my problem. This exhausting process is where you actually learn the language well - because in that week while you were trying to fix one problem you do so much trial and error and learn so much irrelevant stuff that is unbelievable. All that stuff that was useless for your immediate problem will actually save you weeks in the future.
I think pretty much anybody can learn how to code if they have patience and a somewhat analytical mind. However I am open to the idea that maybe some people are just not wired for coding well. Like I'm not particularly wired for singing. If you spend a month and you feel like shit and you didn't learned shit and all books seem shit and cryptic and you tried quite a few of them, maybe you should really focus on your strengths and just forget about coding. But then again, maybe you were not patient enough and maybe you approached all this with doubt or hate from the beginning. Your wish to learn something should be filled with love. If you don't love the idea of learning something, the whole experience will suck or at best will be mediocre.
To find out what books to start with, go on IRC on the channels of several languages - C, C++, C#, Java, Python, PHP and ask those folks to recommend you books. Tell them you will probably start learning <insert_the_language_you_choose_here> as a language but are interested for books to learn programming foundations, algorithms, data structures, etc. Make a list with all suggestions, if some are more recommended than others start with those.
Then you do the same asking for recommended books in the IRC channel of <insert_the_language_you_choose_here> only - this is when you want to learn that language specifically.
There is also the approach of learning both the basics and a language at the same time and actually I think it is in a way a better idea because you can practice stuff and it also saves time. In this case you want a book that explains the basics (algo/structs) and has examples using an actual programming language.
Obviously check out the bestsellers on Amazon too.
Stay away from programming forums! Don't try to learn from forums, most people there are mediocre, that's why they are there. In the beginning stay away from tutorials. Tutorials don't help you to get a solid foundation but a really flimsy one. You can use tutorials after you have a foundation, just to find quick solutions to specific problems/needs.
Good luck!
Oh and BTW, the fact you learn how to code is not mutually exclusive with buying ZennoPoster templates. I mean is not like you're going to become comfortable coding production-grade tools in the next couple of months. On average I would say it will take you about 3 months minimum and at least 3 completed projects (not simple shit but actual projects that take 2-3 weeks) to become comfortable with coding.
Bookmarks