Is Julia's way of OOP superior to C++/Python? Why Julia doesn't use class-based OOP?

In general, this is something I think would be really valuable. I continually run into people who say “Julia is just a fast Python, but who cares, because I can make Python fast anyway”. Besides the issues involved in making Python universally fast (which are not always well articulated by Julia proponents), I feel this misses the point.

The value proposition of Julia isn’t just speed. There is tremendous value in how you approach software architecture and reusable / interoperable / composable package ecosystems when multiple dispatch is available, and this message definitely isn’t well appreciated by those who only see Julia as a way to possibly speed up some numerics. And while Julia advertises itself as solving the two-language problem, it’s still not really clear to many people, who rely on extensive C-backed Python libraries with dedicated dev teams, what kind of advantage that can be in lowering the bar to more user-level contributions, among other virtues.

For that matter, it’s not well appreciated how other powerful other Julia language features can be, like metaprogramming, ability to take advantage of a compiler to do compiler-like things at a higher level of abstraction, etc. — and how they all work together in a “whole is greater than the sum” way. The “walks like Python, runs like C” performance idea seems to have taken over general perception of what Julia is about, to the exclusion of all else.

What I feel would be useful is a series of blog posts, as you say, that dive into some of these issues in a more concrete way, and not contrived hypothetical scenarios, but with examples from real Julia packages or use cases. (Not necessarily just scientific/numerical use cases, either.)

And I think it would also be helpful to make some more direct comparisons to other languages, like Python, in terms of “why it would be hard to do this without language features X, Y, and Z”. This can be a little dangerous, because it’s not great to appear to be picking a fight with another language or set of libraries. But on the other hand, I feel that lacking more direct comparisons, users of other languages are having a hard time concretely understanding what it is we’re going on about. There are some examples along these lines, like @ChrisRackauckas’s “Why Numba and Cython are not substitutes for Julia” or @tamasgal’s post in another recent thread, that provide some real examples of how Julia development can be different from Python. I think there’s just a question of how to make some of these points more widely, yet respectfully.

I’m not sure what the best solution here is, but I can say that, based on my experience trying to describe Julia to non-Julia users, that there there needs to be more basic messaging we can point to about how multiple dispatch and other Julia features can fundamentally improve software development beyond just “making some things faster”.

36 Likes