Hi Junilu,
Thank you for your kind words and your question!
This is a really interesting question because I think it is cultural. I had a unique opportunity to "straddle" the worlds of software engineering and ML and get some insights into these cultural differences. In traditional computer science / software engineering (by traditional here I mean Knuth's Art of Computer Programming algorithms), there is a virtue in using strong typing like in Java, Kotlin, Scala, etc. Strong typing helps with software engineering because it assists you with analysis of your code in advance of execution (both manually and with the compiler) and produce higher quality results in your applications or systems. So, there is a culture of software engineers who are working professionally in traditional software engineering roles, writing business logic, implementing backends, deploying microservices, etc who get constant self-reinforcement on the virtue of strong typing based on their professional roles.
ML & data science field is different. In this field you still depend on traditional IT (compute, storage, networking) but the practice of doing ML & DS is more like the scientific process: you analyze data, form hypothesis about data, chose models for data, and compare model performance. Hence, the outcome of the ML & DS projects are less known in advance and you don't rely on the compiler to help prove your algorithm correct. In ML & DS, you algorithms / models are correct primarily based on data rather than your code implementation. To make matters worse for strongly typed languages, having type checking is actually a hindrance in ML / DS rather than an advantage. In traditional software engineering, once you have a typed object (e.g. a Customer), that object has a consistent interface for the lifetime of the program: you expect Customer to continue to have the same fields (name, address, etc) when your code is executing. In contrast, in ML & DS, the entire point of the field is to keep changing the schema/type of a dataset that has something like Customer data. For example in the ML & DS code, you are likely to take Customer schema and merge/join with other tables, e.g. PersonalInformation. Then you may re-encode representation of Customer zip code from integer to string, then change the zip code from a column of strings to a "one-hot encoded" set of columns where each zip code is represented with a binary value, and so on.
In a nutshell, traditional software engineers depends on strong typing to get good results while ML & DS see strong typing as a hindrance or an obstacle to getting good results. Python is a mature, expressive language with a strong technical foundation that was designed outside of the strong typing culture. That's why I think it proved attractive to the practitioners in the field. Also, since the practitioners liked the language, they built great libraries for DS & ML, for example Pandas and Scikit-Learn.
As the result, Python is on track to become one of the top, if not the top programming language for practitioners.
Best,
Carl.