I wonder if building these mental models has become more difficult with the rise of multi-layered/full-featured programming frameworks. I'm thinking of things like Spring or Rails. A given webapp might involve a dozen layers or so: a database language (SQL), a database wrapper (Hibernate or ActiveRecord), a server side language, templating languages, client side languages (javascript), CSS, HTML, etc... etc...
Understanding all of that seems overwhelming. IOW, being a "full stack" generalist is getting harder, imho.
IOW, being a "full stack" generalist is getting harder, imho
But more valuable. Coding with people who started with Rails, they may not know that there are 1000x differences between things that seem equivalent to them. In ye olden dayes it was hard to be off by that much because the problems would surface sooner.
I know people who make incredibly good money cleaning up after teams that lack a single full-stack person.
I think the size and complexity of the program is the reason why we need to think first before we look at the code. I'll probably look at the obvious indicators (logs, stacktrace etc) and then the "thinking" could begin. Obviously with a huge program there are more probability for the local fix to happen because there are so many moving parts
One of the things it has led me to do is assume that the everything else is correct and I must be doing something wrong. We do that with compilers, interpreters, the OS, hardware, etc., too.
It's usually a decent starting assumption, but it can lead to wasted hours when the problem really is outside of what you've done.
Understanding all of that seems overwhelming. IOW, being a "full stack" generalist is getting harder, imho.