Sure, anyone who can learn can learn to program, in theory; in practice, there will always be differences in people's ability even when you control for the amount of effort they apply.
Meaning, although anyone can learn to program, some will always be better than others, even if they apply the same amount of effort. There are differences in people's brains and it's wishful thinking to say that everyone can be as good as everyone else at everything just by putting the effort in. Effort probably accounts for the difference between the best and the worst, but within the top, say, 20%, the difference in ability is more to do with nature than nurture.
Programming talent is definitely something some people are more predisposed to than others. But I do think that a huge part of the equation is how much interest a person has in programming.
Skills are picked up much quicker when a person wants and needs those skills and is enthusiastic about learning them.
You also need to consider there are many types of programming with many applications. To be successful at any particular task, you need to pick up specific knowledge. To be really great you need to be motivated enough to become an expert at the task. Being a genius doesn't allow one to skip this whole process.
But there are some programming tasks that some people will never be competent at no matter how hard they try.
Sorry, I've got to learn not to type rants after midnight. I had misread both of your posts. Ever notice how rants make you laugh after you realize you are ranting about a point that no one else was talking about? I did break down and get the book though, and currently reading it. I have to admit, I'm great at problem solving real world things on the fly, but when it comes to programming my problem solving skills aren't fine tuned so I'm actually hoping this book helps me refine them more. I honestly do fall into the description he uses in the first paragraph of the book though.
Do you struggle to write programs, even though you think you understand programming languages? Are you able to read through a chapter in a programming book, nodding your head the whole way, but unable to apply what you’ve read to your own programs? Are you able to comprehend a program example you’ve read online, even to the point where you could explain to someone else what each line of the code is doing, yet you feel your brain seize up when faced with a programming task and a blank screen in your text editor?
Spraul, V. Anton (2012-08-01). Think Like a Programmer: An Introduction to Creative Problem Solving (Kindle Locations 183-185). O'Reilly Distribution. Kindle Edition.
Hey everyone! I saw this thread and thought I'd pop in and answer the questions I saw. The book isn't a Very First Book on Programming. It's intended for someone who has gotten their feet wet with programming and can understand syntax, who can read programs, but has trouble writing them, specifically the problem-solving angle. I've had lots of students who could answer questions about programs in a textbook, proving they could read them, and who could write code when given specific guidance ("Write a 'for' loop with an 'if' statement that...") but that really struggled when the guidance was withheld and there was only a problem description. So my book is intended to be an alternative to the typical sink-or-swim approach to problem solving.
In terms of the chapter breakdown, which someone mentioned, the first two chapters introduce the keys concepts, then the next four chapters cover different areas of programming--classes, pointers, etc. I wasn't so much concerned with the specific areas as having lots of different situations to try out. I think of it as a mental cross-training course. Then the last two chapters talk about building programming skills long-term and putting the whole thing together.
Anyway, I hope it will help a lot of people who are genuinely interested in programming (like iseeplusplus, I think that's a key to success) get past the problem solving hurdle.
If anyone has any other questions about the book, please let me know!