I wholeheartly agree that having an expressive and performant language where you can stay inside the language is dope. In this regard, Julia is miles ahead of python for data sciency stuff. Python only works for the community because of compiled libraries that lift you from the crippling performance of python.
For example, when using pandas, one starts to shy away from using .apply
(mapping a function over a column), although really useful, because it kills performance crossing from C to Python. I cannot overstate my joy when finding out that Julia DataFrame.jl columns are basically just common Julia arrays. So you can throw the whole ecosystem at them, without an eye blink, opposed to carefully selecting your operations in order to stay inside the librarie’s domain (and computing context).
Having said that, I find it more demanding to write robust and correct code in Julia for an above small sized code base than in a language with an expressive type system. As an illustration, think about refactoring. It’s a real brittle thing to do in a dynamic language; you can only hope you have written enough tests catching your newly introduced mistakes. Core Python does not even care if you accidentally pass a string instead of a float to a function - if you are lucky, it results in some runtime error, but it can be a silent bug as well.
In a language like Rust the compiler guides you in large parts through a refactoring, e.g. you split up a function, fix the type errors, and more often than not it just works™.
“Fixing the two language problem”, in the sense that it reduces the context switching cost necessary in for example (Science)Python is superb! However, in my opinion, it does not make Julia a general purpose language fit for scaling up your business. In my eyes, for this it foremost misses tooling/assistants for writing robust and scalable software - like a static type checker.
I’m probably victim of the confirmation bias, but I observe a trend towards statically typed and functional programming in the industry, because there is a need to manage software. Look at TypeScript for example, introducing gradual typing to JavaScript or Go getting generics or Rust’s success (none of them are functional languages, mind you, but some of them borrow heavily from that world). In my experience, the scientific computing community often times is a few steps behind in this regard. I think, they don’t know what they are missing.
In the end, both the software industry and science has a need for correctness and reproducibility. It seems to me that the industry begins to make use of the available technology supporting those aims, whereas the science community seems to focus more on producing results quickly. Oftentimes reproducibility and correct implementation is an afterthought. Try to reproduce the results of papers that made heavy use of a computer. In most cases, code isn’t even a part of the publication (for various reasons), so you just have to believe I guess.