C# has named and optional arguments and is feels sane.
anExample.ExampleMethod(3, optionalint: 4);
You can name all the parameters in calls if you like, but it can become overwhelming like Objective-C.
In JavaScript you'll see the .exampleMethod(3, { optionalint: 4 }) pattern used often, where the last object is optional named values.
The worst case without named arguments is foo(3, true). But then IDSs these days can insert the parameter name without actually having in the source.