I have been using Python for about 20 years. I had experience with multiple programming languages before that, and have learned others since.
Python is still my favourite actually-existing programming language, despite the many things I can nitpick in its design and the many disagreements I've had with other prominent Pythonistas. I still don't use type annotations except for documentation purposes and still don't see value in doing so. I'm rarely confused by functions in my own old code because I keep them too short to get confusing. I put only a few hundred lines in each source code file and still feel like I can accomplish quite a bit in that space.
Of the languages I'd consider using nowadays, Python is the only one where I feel like I can work on non-trivially sized projects without an IDE. Other languages are harder to read due to having more boilerplate, and manually finding the definition of a function or class in C++ can be quite an endeavour. Type annotations in others' Python code often make it harder for me to reason about the code, because they give complex type specifications in an awkward syntax and often rule out inputs that would work just fine (because they're needlessly specified in terms of concrete types rather than protocols or ABCs). I find names to be far better "free documentation" than types could ever be.
> After all the guessing game and refactoring, how do I ensure my changes work effectively? The only way to be sure is by running the code and verifying that every line is executed under all possible combinations.
> Years of coding in Go gave me this comfortable feeling: if it compiles, it works. (Rust takes it to the next level; if it compiles, you won’t have memory issues or data races.) The compilation gives quick feedback, which makes it very easy to make changes.
> Type hints solve these issues to some extent, but bugs can still slip through.
Even "real" (static, manifest) types don't actually solve this problem, and compilation is quite slow in some languages.
I have pretty much the opposite experience.
I have been using Python for about 20 years. I had experience with multiple programming languages before that, and have learned others since.
Python is still my favourite actually-existing programming language, despite the many things I can nitpick in its design and the many disagreements I've had with other prominent Pythonistas. I still don't use type annotations except for documentation purposes and still don't see value in doing so. I'm rarely confused by functions in my own old code because I keep them too short to get confusing. I put only a few hundred lines in each source code file and still feel like I can accomplish quite a bit in that space.
Of the languages I'd consider using nowadays, Python is the only one where I feel like I can work on non-trivially sized projects without an IDE. Other languages are harder to read due to having more boilerplate, and manually finding the definition of a function or class in C++ can be quite an endeavour. Type annotations in others' Python code often make it harder for me to reason about the code, because they give complex type specifications in an awkward syntax and often rule out inputs that would work just fine (because they're needlessly specified in terms of concrete types rather than protocols or ABCs). I find names to be far better "free documentation" than types could ever be.
> After all the guessing game and refactoring, how do I ensure my changes work effectively? The only way to be sure is by running the code and verifying that every line is executed under all possible combinations.
> Years of coding in Go gave me this comfortable feeling: if it compiles, it works. (Rust takes it to the next level; if it compiles, you won’t have memory issues or data races.) The compilation gives quick feedback, which makes it very easy to make changes.
> Type hints solve these issues to some extent, but bugs can still slip through.
Even "real" (static, manifest) types don't actually solve this problem, and compilation is quite slow in some languages.