Programming Paradigms as Language Destiny
Why do some programming languages feel neat and orderly and others seem loaded with inconsistencies?
When I first started trying to write my own programming language I was surprised by how difficult it seemed to be to find best practices on language design. In an industry filled with opinions, where people will fight to the death over tabs -vs- spaces, there isn’t much guidance for would-be program language designers.
Eventually I came to my own conclusions: the pathway to success with program language design is to think of programming paradigms as logical groupings of abstractions and be as intentional about what is included and what isn’t.
What Is a Programming Paradigm?
A programming paradigm can be thought of as a philosophy of structuring and executing code. Unlike styles and conventions, paradigms cannot be leveraged unless they are built into the design of the language. You probably already know many programming paradigms:
- Object-orientated programming
- Functional programming
- Procedural programming
Then there are some more obscure ones you might not know about:
- Logical programming
- Agent-orientated programming
Most mainstream programming languages mix paradigms. Single paradigm languages are not really all that useful, but the languages that we find clean and beautiful tend to implement support for paradigms in a more structured way. The languages that people tend to think are “ugly” present the abstractions as alternative ways of doing the same thing, without any reference to the paradigm it was created to support. When we mix abstractions that have fundamentally different assumptions, we end up with really ugly work arounds and unknown consequences.