I am coding in Java and TypeScript. I am creating backend applications using Java platform and a bit of Node.Js. These languages and related platforms are being created in 1995 (Java) and 2012 (TypeScript). Do we change something? 17 years are gone, more complex problems to solve, but the same level of abstraction we have in programming languages and platforms. It’s time to change our tooling.
Now, in 2023, modern programming languages are focusing only on one thing:
How to satisfy all the developers in the world, that they can use only our language to solve all their problems?
The Biggest problem we have now, that the languages we’re dealing with are the products of the majority votes. Do we need reflection and annotations? Most developers will say “yes”, no matter how bad is reflection. The same with static methods. The same with 90% of features in “modern” programming languages such as Java, Kotlin, TypeScript, Go, Ruby, etc.
While languages and platforms formulate the maintainability of the programs we create, modern languages start looking uglier, uglier, and uglier. To satisfy all the needs, modern languages inevitably start introduce ability to write the same things in a different way, a.k.a flexibility, or syntactic sugar.
Simply put, higher quality comes from simpler languages. - Yegor Bugayenko
Just look at JEP 445: Unnamed Classes and Instance Main Methods, the Java 21 preview feature:
Java main method and class a.k.a entry point can be presented now in 2 ways:
public class Entry {
public static void main(String[] args) {
// logic
}
}
void main() {
// logic
}
The same happens with all the languages. They introduce new and new features to satisfy all the developers around the world and boost their creators on the stock market (Google, Microsoft).
What is the solution?
I believe that now, we need more high-level languages with focus on specific use-cases. It should be simple, high-level, and specific-focused. That’s it.
There are some features of really new and modern programming language, based on D29:
- VSC support at language level
- UML and OCL support at language level
- CI/CD support at language level
- Declarative programming
- Distributed objects/functions and their scalability
- Cloud Computing
- Data formats e.g., XML, JSON, YAML, CSV
- Testing: unit, integration, end-to-end, performance
- Multithreading
- Documentation
- Software licenses
- Low-code compatibility
- Runtime platforms e.g., Docker, K8s
- Object Metadata
- Object metrics
- Component repository: e.g., Sonatype Nexus
- Design patterns indication
- Compilation into other programming languages
- No scalar types e.g.,
int
,boolean
- No data flow control e.g.,
for
,while
- No reflection