Over the last twenty years, I have used over a dozen languages professionally, from C to Common Lisp, from Java to Python, from C++ to Typescript.
They are used by people who get shit done.
This makes it easy to find people who:
- understand business needs,
- can iterate quickly
- have shipped and maintained many projects in the past.
There is a lot of FUD that has been cargo-culted throughout the years.
Their quality is offset by other factors.
These languages are not popular for their elegance, but for other reasons.
These can be:
- ease of deployment
PHP is a favorite of mine because of its cgi-bin model:
- legacy codebases can be refactored in pieces
- resource leaks are non-existent
- caching and scaling are simpler
They are fun.
Because basic areas of the language are problematic areas means that programming comes with a sense of experimentation. There is pleasure in finding ways to write elegant code in a language that doesn't prescribe any.
Janky programming languages are great equalizers.
Because they are quite permissive, they allow people of all levels and backgrounds to get started with programming. You can be a complete PHP beginner and get a real website going within days.
Having started by copy-pasting BASIC snippets and later on making my own websites with PHP2 and PHP3, I feel pride in being able to pay back by helping newcomers where they are.
Poo-poo-ing a 12-year-old or a recent BootCamp graduate because they are writing actual code is missing the point.
In fact, because users are builders and learners because they have diverse backgrounds, janky languages tend to have very active and welcome communities.
I never had issues writing good code.
- first-class functions
- sometimes traits and prototypal inheritance.
Good software is:
- product alignment
- software design
- naming and design patterns
- enforcing invariants through static analysis or unit testing
- providing fast and effective feedback loops to developers
- good team communication
None of which depend on the language.
- solid libraries
- pragmatic static analysis tools
- great IDE support
In fact, they have better tooling than many a "serious" programming language.
I love legacy codebases.
A legacy codebase means that the product is performing well. It means that I can often make immediate and impactful improvements.
For me, nothing comes close to the pleasure of improving a product with many users.