Where in a typical engineering profession you would have a somewhat defined checklist on how to diagnose an issue and a proven method to fix it, in software engineering you have a million possibilities: "- Did you check x? - Was this nth specific step for this specific framework followed? etc.."
It's messy because the problem space can't be as easily enumerated.
Software has always had the problem of information being outdated before the books even reach retailers. However, this is one of my big frustrations with SO. There are so, so many c++ questions with accepted answers that are now 'wrong' due to changes in the language. That, and the fanatical insistence to close questions that are opinion based closes off a lot of questions more experienced programmers will have.