I'm repeatedly surprised by how often good coders take their skillsets for granted, as something everyone could learn in a short time if they set their mind to it. They think that just because computers make intuitive sense to them, and they can learn any new programming language or paradigm in a few weeks, a newbie could do the same -- albeit in a matter of months, perhaps. They learned their most important skills from toodling around on the internet, or deconstructing simple machines or programs or something, and they think that this means you don't need formal training, it can come to anyone with time.
The thing is, I don't think people appreciate how much of a deep skill thinking logically is. It's not something you can pick up in a weekend: there is a monstrous gap between the basic common sense appreciation of cause and effect that nearly everyone attains in their lifetime, and the rigorous analytic mind that can look at a series of instructions and deduce all possible outcomes. This is a skill that doesn't require formal training, yes, but it is a skill that must be mastered, with all its requisite 10,000 hours of training beforehand. The best programmers have all been doing this for years, deconstructing the world and its workings whenever they can, and learning the mechanical structure behind their every experience. This training has given them a unique mastery, and while it's not for me to say whether this skill is fundamentally innate or purely a result of practice, it certainly takes years to develop the right modes of thinking. All I can say is that mastery the ability to think logically is a prerequisite for programming in any deep sense, and not everyone has this skill. This is why when I ask my mathematician and physicist friends to look at a program, they can decipher it in minutes even if they don't consider it particularly gripping, while if I ask my writer and even medically trained friends they blankly stare at a wall of gibberish.
Sorry if this answer is more anecdotal than you are asking for, but in my experience there is a fundamental skill in programming that must be mastered that many programmers take for granted, and you can't expect people without it to pick up deep programming in a reasonable amount of time. That's not to say there's no useful place in a place with colleagues for someone who can't really synthesize new bulletproof code, especially in this age of Google and StackOverflow, but the kind of skill people need to whip up a prototype of a novel application on their own without outside assistance takes years. I think Zed Shaw is right in his response to this blog post, if you really are a "people person" than perhaps coming to a programmer with a completely thought-through user experience designed out matches your skillset better, and it's every bit as valuable to the final product as programming knowledge.
This is one of the best comments I've read on this topic. Again, anecdotally, I look at the world in a massively different way than other people in my family (other than my brother who is also good with computers). This way of thinking is repeat with looking under the hood, analyzing why things behave the way they do, and imagining other outcomes that could occur. There is also a lo more questioning, followed by needing to know the answer.
I wonder how you could define a study to determine corellation versus causation here. Maybe I think this way because I've spent so much time fighting computers. Or maybe I've been willing to spend so much time fighting computers because I think this way. It's a fascinating question to me.
Comments
I'm repeatedly surprised by how often good coders take their skillsets for granted, as something everyone could learn in a short time if they set their mind to it. They think that just because computers make intuitive sense to them, and they can learn any new programming language or paradigm in a few weeks, a newbie could do the same -- albeit in a matter of months, perhaps. They learned their most important skills from toodling around on the internet, or deconstructing simple machines or programs or something, and they think that this means you don't need formal training, it can come to anyone with time.
The thing is, I don't think people appreciate how much of a deep skill thinking logically is. It's not something you can pick up in a weekend: there is a monstrous gap between the basic common sense appreciation of cause and effect that nearly everyone attains in their lifetime, and the rigorous analytic mind that can look at a series of instructions and deduce all possible outcomes. This is a skill that doesn't require formal training, yes, but it is a skill that must be mastered, with all its requisite 10,000 hours of training beforehand. The best programmers have all been doing this for years, deconstructing the world and its workings whenever they can, and learning the mechanical structure behind their every experience. This training has given them a unique mastery, and while it's not for me to say whether this skill is fundamentally innate or purely a result of practice, it certainly takes years to develop the right modes of thinking. All I can say is that mastery the ability to think logically is a prerequisite for programming in any deep sense, and not everyone has this skill. This is why when I ask my mathematician and physicist friends to look at a program, they can decipher it in minutes even if they don't consider it particularly gripping, while if I ask my writer and even medically trained friends they blankly stare at a wall of gibberish.
Sorry if this answer is more anecdotal than you are asking for, but in my experience there is a fundamental skill in programming that must be mastered that many programmers take for granted, and you can't expect people without it to pick up deep programming in a reasonable amount of time. That's not to say there's no useful place in a place with colleagues for someone who can't really synthesize new bulletproof code, especially in this age of Google and StackOverflow, but the kind of skill people need to whip up a prototype of a novel application on their own without outside assistance takes years. I think Zed Shaw is right in his response to this blog post, if you really are a "people person" than perhaps coming to a programmer with a completely thought-through user experience designed out matches your skillset better, and it's every bit as valuable to the final product as programming knowledge.
This is one of the best comments I've read on this topic. Again, anecdotally, I look at the world in a massively different way than other people in my family (other than my brother who is also good with computers). This way of thinking is repeat with looking under the hood, analyzing why things behave the way they do, and imagining other outcomes that could occur. There is also a lo more questioning, followed by needing to know the answer.
I wonder how you could define a study to determine corellation versus causation here. Maybe I think this way because I've spent so much time fighting computers. Or maybe I've been willing to spend so much time fighting computers because I think this way. It's a fascinating question to me.