Having taught some courses to graduate students (in economics) that involve programing, some of them using Julia, my perspective on the “first programming language” question is the following.
Some people gravitate to programming at an early age, eg during the elementary and primary school years. They find computers fascinating, and they want to learn to program. Initially, a lot of their knowledge is self-taught and not necessarily organized, they can have important blind spots. Nevertheless, they quickly master basic concepts, and can move up to more advanced ones quickly.
Other people realize that they have to program, usually in their senior undergrad years, or during the first part of their graduate education. They are not especially attracted to it, and frequently just want to solve a problem with the minimum programming necessary.
This is of course a simplification, and the age of starting programming may not be the key factor. The point is that the two groups require different approaches. For the first one, Julia can be a source of fascinating concepts and tools (multiple dispatch, metaprogramming, …). For the second one, it can be a collection of sophisticated tools which are overwhelming upon first encounter to the point of incomprehensibility.
When writing introductory material, I find it helpful to keep the above distinction in mind. I think that a carefully chosen subset of Julia can be a great “first programming language”, one that also provides seamless transition into learning advanced concepts later, within the same language. But choosing this subset depends on the target audience, their objectives (eg optimization problems, differential equations, dynamic programming, DSGE models, etc).
This is why I think that metaprogramming, and even the intricacies of types and multiple dispatch can be omitted in a “first programming language” context. I think the place for them is short, self-contained tutorials. But again, the manual is very good for that purpose.