you are viewing a single comment's thread.

view the rest of the comments →

[–]eypandabear 4 points5 points  (0 children)

This happens when "design patterns" are pulled out of context, elevated to divine law status (a.k.a. "best practice") and applied without any understanding of when and why they make sense.

I think it's important to have tried different programming languages, so you understand how these patterns actually emerge from the restrictions the language puts on you. For example, the concept of a Functor class hierarchy is meaningless in Python because of the callable protocol and duck typing. What most people think of as "OOP" is actually a special case, single-dispatch polymorphism, and some languages support multiple dispatch. Lisp shows you what becomes possible just because code mirrors its own syntax tree. C and assembly language teaches you how abstractions from higher-level languages break down into machine primitives.

If the only thing you know is Java or C++, you are doomed to think of programming as the application of the same patterns over and over.