I have known many people that are experts in linguistics that get dumbfounded by programming. Apon first consideration this makes no sense – until you come to the conclusion that its not the language that they’re having trouble with. In reality its the programming that they’re having trouble with and the language is just heavily associated with the act of programming itself. When you look at most people, when they try to learn programming, its all about memorization. They try to memorize the dos and don’ts, the key words, common syntaxes etc. The problem is, during all of this memorization, they forget to learn to program.
I was watching a college lecture that had been put on the internet that was focused on learning your first programming language. The professor appeared to be great, he taught the students how to create variables, about logical statements, functions, mathematical operators and the like, and then came their first problem: “Okay, so how would you tell if a number is even or odd?”. The class went silent as nobody had an answer to this simple problem. The professor then proceeded to explain that by dividing a number by two, if there is a remainder, it is an odd number. The reason they didn’t know how to solve this problem wasn’t because they didn’t know how to memorize a language – that’s simple – the reason why they didn’t know how to solve this problem is because they didn’t know how to program.
As I have stated previously, programming isn’t the simple act of typing. It is engineering. It is problem solving in a way that is (or better put, appears) abstract. When talking to new programmers, they often times make an emphasis on how many languages the learn. “I know 3 languages”, or “I know 11 languages”, they’re missing the point clearly. It’s not the learning languages that is important, its the learning how to program. Its learning how to problem solve. When you watch a new programmer learn to program, they’ll think in terms of “What feature would I use to solve this problem”, if you watch someone who is more experienced they tend to think in terms of “How would I solve this problem” and then “How would I implement that in this language” or “What tool will I use to implement my solution?”.
So, how can you learn programming/programming languages faster? Separate your learning into two categories, programming, and programming language. One thing you’ll notice about programming language books, is they all teach essentially the same thing. “This is how you use arrays. This is what arrays are.” or “These are the basic operators. Here is how you use them”. Once you’ve learned that, you don’t need to learn it again. Once you understand a programming methodology/ideology, you just have to learn syntaxes and key words.
You don’t even have to memorize key words/syntax, you just have to use the language, and stumble through your nonlogical errors until you can use the language comfortably.
One thing to be weary of is learning to program and then only advancing your skill in programming languages. Often times programmers will go on with a basic understanding, solving problems such as “How do you tell if a number is even or odd” with clumsy solutions such as (x % 2). They don’t even bother to learn enough about computers/software to come to the conclusion that (most) computers are digital machines, all you have to do is check the first bit to see if it is one or zero to figure out if its an even or odd number (x & 1).
My point in all of this is, as programmers we constantly have to learn new languages, and this task shouldn’t be a challenge to us. We should not program worse in a new language. Instead we should have a firm understanding of the concepts behind computers, behind programming, behind engineering, and we should be able to transfer these concepts with little effort. The secret to becoming a better programmer isn’t in learning the most languages, its learning to program the best.