I like Julia as a teaching language because it has a good model for computation. The same is true for C BTW which is also an excellent first language. For example, take a look at these lecture notes on Optimizing Serial Code (
https://book.sciml.ai/notes/02/). You can walk through details about memory layouts, stack vs heap allocations, different levels of compiler IR and optimizations, etc. all in a way that flows easily. Then talk about parallelism, code generation, type inference, etc. Julia is both "explicit" and "concise" in some sense: it can look simple, but it's also easy to peel back the abstractions and really show what's working and why. C is a good teaching language because it has a similar explicitness to its computing model.
I really dislike Python as a teaching language because students can leave a course without really knowing much about computation itself. They might know how to "make Python do a thing", but they don't leave with an appreciation of computation itself. The details of memory models, cache levels, AVX, distributed computing, etc. are just a whole different universe and students have to almost relearn from scratch with a new model if they want to advance. Things like Bjarne's "Why you should avoid linked lists" (https://www.youtube.com/watch?v=YQs6IC-vgmo) are incomprehensible to the programming model provided in the Python universe: it has a better O(n) so why would it be worse? While you always need to make simplifications while teaching, I believe that starting people on Python goes a bit too far and sooner or later they have to unlearn bad habits or relearn a new programming model.
I believe it's much easier for students to learn something explicit and then later say "yeah Python automates the heap allocation of objects by boxing like this, and from what you have already learned, that's obviously slow which is why the language has overhead but it's pretty nice ain't it?"