- that's where convention and documentation come in
The problem with conventions and documentation is that you have to spend time to learn it and get used to following it. If you had no way to change internal core fields and only some public methods were accessible, it would turn out that it's an intuitive API and you wouldn't even need to read that documentation and learn conventions to make a small plugin for a quick hack / fix / customization. In my opinion it's vital for the development speed.
Multiple dispatch is great, but why does it exclude single dispatch? - that I do not understand. Julia tries to combine the best practices from all the languages, so if that helps in a couple of scenarios, why not to make it another option available.
Also, my own observation:
This sentence reads well: "my cat is miauwing".
You don't write "miauwing my cat".
The same, (a) cat.miauw() reads better than (b) miauw(cat).
The (b) syntax hints there should be something else that I can pass to the miauw() function, so it is counter-intuitive when you read the code until you see at the miauw() definition.
I don't argue about a + b where it is a function over two independend arguments with similar "meaning weight".
IDEs and autocompletion
It's obvious that not only the goodness of the language itself is a key to be spread and be used, but also the tooling. That's why Scala team has been investing a lot of effort into developing tools for those who uses the language - IDE, knowledge bases, tutorials, quick-start tools, deployment etc.
So why I'm talking about tools? One thing is important when working with medium and huge projects - autocompletion.
When I'm working with a cat object, it's in the context in my head, I know it's name and it's easy to start a line of code with:
cat.| - where | is a cursor
At that point IDE will show a dropdown with all the methods available for cat.
I'll immediately see miauw() in the list, at least after typing "m".
Now back to Julia, if I want to do something with a cat but I don't remember what that method's name is, what should I do? Even if I type "m", I'll see all unrelated methods starting with "m" (I mean, not related to the cat).
This makes the process of writing code harder. And the bigger your project is, the harder it becomes to keep everything in context in your head.
So the language design choice is perfect, but my 2 cents after writing many years for web - I don't feel comfortable with struggling with method names.
Back to our WordPress example, there will be 1k+ methods overall.
So it looks like writing Menu.appendItem() both reads well and easy to type, i.e once you type "Menu." you can see what you could do with it. Makes sense?