Josh Hawkins began coding at 9 years old, focusing on video games, but now focuses on full stack dev, compiler dev, and hacks away every day on countless open source projects related to the field.
That's not exactly true, though. Thinking primitively for a second, IDEs can still make approximations, as do linters like Rubocop. They can't provide guarantees in all cases, but at least approximations for types, lifetimes/scopes, signatures...
Just look at PyCharm, RubyMine. Both do a stellar job of reading between the lines to tell all of this for you via static analysis.
Some languages even provide language servers to do just this without evaluating the code. Even though it's a compiled language, Go IDEs do it this way, for instance. In fact, tons of languages have language servers to do this via static analysis, if I understand correctly: langserver.org/
That's not exactly true, though. Thinking primitively for a second, IDEs can still make approximations, as do linters like Rubocop. They can't provide guarantees in all cases, but at least approximations for types, lifetimes/scopes, signatures...
Just look at PyCharm, RubyMine. Both do a stellar job of reading between the lines to tell all of this for you via static analysis.
Some languages even provide language servers to do just this without evaluating the code. Even though it's a compiled language, Go IDEs do it this way, for instance. In fact, tons of languages have language servers to do this via static analysis, if I understand correctly: langserver.org/
Oh sure, I meant it as a generic remark.