Python is great. I've been using it for 15 years now, and since then it has evolved from a niche-solution to the most popular programming language of the planet. It is being used massively in Data Science, Machine Learning, Web Development and automation.
The main advantages are ....
But still, some aspects of Python are just annoying. I collected my personal list of shortcomings - but beyond just complaining, I also complement them with benefits, alternatives and songs of praise.
1. Global Interpreter Lock (GIL)
Coming from other languages and having experience in multi-threaded programming, the Global Interpreter Lock probably will make you feel tempted to smash your head against the next wall. Indeed, in the age of multi-core computers and especially for applications as Data Science, where you typically want as much performance as you can squeeze out of your computer, this feels outdated and not state-of-the-art.
There exist a whole lot of ways to mitigate this issue. Ranging from obvious choices in the standard library like multiprocessing over dedicated packages like joblib to fully-fledged parallel architectures, you will find a way to speed up our good old snake. I'm working on a separate article for that, so stay tuned.
2. Why do I have to put self everywhere?
When writing classes in Python, we need to put self in every method declaration. This is definitely annoying, and also error prone.
Actually, no there are no alternatives. Just deal with it.
Beyond this, Python is flexible in terms of programming paradigms, so maybe you should stop writing classes or at least use OOP where it makes sense - and not beyond. that.