Programming is difficult business, and is not meant to be taken in ignorance, so says Douglas Crockford.
I mean non-trivial computer programming in a real world context (in your job, for example). As Alan Perlis would say, programming entails
making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical.
So it is no surprise that you devote so much time, energy, sweat and resources into building your programming career. Whatever is your first programming language exposure, it’s becoming more and more entrenched into your professional career.
When it’s time to program in another language using syntax that is way too different from your first language exposure, you may feel deeply annoyed. The programming idioms, style and philosophy are different.
You may encounter one of the following:
- class-based vs prototype-based
- imperative vs functional programming
- OOP vs functional programming
- strong typing vs loose typing
- compiler vs interpreter
- Java vs .NET
- and so on and so forth
If you don’t know anything about the theory, history or rationale behind a programming language, you may be experiencing programmer crunch (that is, code first, theory later). The code deliverable is too urgent and all too important for your work that you don’t have time to learn the theory. You risk getting your tools bland. Or worse, it manifests as the Law of the Instrument.
If the only tool you have is a hammer, you tend to think of all problems as nails.
The worst of this first exposure effect is that, you tend to think of tools as if it’s a religious dogma. There is no such thing as the best tool. The best tool is the one you already know. But the caveat is, you need to be aware of its shortcomings lest you befall the tar pits of technical debt and obsolescence.
The antidote to the first exposure effect is jumping off the cliff onto a vastly different terrain. Taking a contrasting viewpoint and adopting it can be a rewarding experience. I like to think of it as the programming counterpart to mixed martial arts.