Why static languages suffer from complexity
So whenever I have to study someone else's 'dynamic' python I encounter this sort of thing:  def foo(bar, baz):
      bar(baz)
      ...

What the heck is 'bar' and 'baz'? I deduce no more than 'bar' can be called with a single 'baz'. I can't use my editor/IDE to "go to definition" of bar/baz to figure out what is going on because everything is dynamically determined at runtime, and even  grep -ri '\(foo\|bar\|baz\)' --include \*.py

Won't tell me much about foo/bar/baz, it will only start a hound dog on a long and windy scent trail.