Have you noticed how many books on software development have a chapter/section devoted to guide the reader on how to spot the right problem to solve and avoid wasting time and effort? They are many I would say, and they tackle the issue from different angles – when gathering requirements, when planning next sprint/iteration, before coding – and providing several techniques – using examples, polishing user stories, avoiding to polish user stories.
This makes you feel a little bit like for fifty+ years there have been many of us struggling with the same problems and several have succeeded in their quests and have documented their findings. Making a software bible out of the best titles doesn’t sound right. Just to propose choosing the “best titles” should unleash the Wrath of God. But we still need this one source where to concentrate knowledge and if there were someone to guide in the learning process… Dreamy.
These books you usually would read after you’re finished becoming an engineer. You know, after five years of preparing your brain to solve problems with Mathematics, Geometry and Physics, and, learning generalities on computing-related matters like networking, programming, IT auditing, etc, won’t get you too far on your first programming job when you discover you should not use JDBC but some JPA layer in the JEE architecture to make that query. Difficult.
Adding more years to school is not a solution. Actually everybody is trying to make it shorter and easier to become an engineer so more people want to be one, regardless of the sucky professionals they might spit out to the market. Plain irresponsible.
What if universities teach basics and generalities for three years and then you have to choose an specialization, let’s say on software development, so that you spend two years learning the many ways to point at and solve the right problem. This is not new, it’s what they do in Psychology. Mastering all about computers nowadays reaches far beyond the eyes can see and competitivity won’t forgive those who know a bit of everything. That’s knowing nothing.
Spending two years learning structural, object oriented, functional and more programming and how to test it will sure make a better programmer. Learn formal and agile methodologies to track your project growing will make you at least aware of the tools at your disposal. Learn TDD, BDD, specification by example and you will aim your effort to the right problem. Have a teacher assisting you in the learning process of something you chose to get good at and those two years will be a delightful journey.
What I mean is education on computing science at under degree level should rely on specialization during the last years.