As a professional educator I sometimes get the “those who can’t do teach” line thrown at me. To this I gleefully reply that the full quote is “those who can’t do teach, those who can’t teach do” :-)
To be more precise I think there are three skills at work here. The ability to understand the theory of programming (as possessed by university professors), the ability to produce code in industry on time that meets customer expectations (as possessed by software engineers) and the ability to teach others coding in theory and practise (as possessed by educators). For simplicity lets label these A (for academic ability), B (for building ability) and C (for communication ability).
Everyone in our industry possesses some measure of A,B and C. But its interesting how rarely all three are present to a high degree in the same individual. Its an article of faith that academics have no understanding of software engineering in practise (Bjarne Stroustrup has written very well on this). Equally there are many highly skilled and productive developers who are (sometimes defiantly) ignorant of lower levels of abstraction (quotes by DHH come to mind). Finally of course there is the apocryphal “those who cant teach”.
This isn’t just a coffee break debate. The shadow of A,B and C is cast over everything we do in IT. The issue of integrating new graduates into a company or even new developers onto a team is one we constantly struggle with. When even Kent Beck talks about the stress of tackling new codebases you know there is a problem.
Another good example is language design. The recent fashion for functional programming can be seen as A finally getting some payback against B. For the first time in a looooong time we have the A’s asserting that all problems in B can be solved by better understanding of abstract theory. A perfect example of this caught my eye the other day:
One final manifestation of A,B and C is in the appearance of DevOps. As pointed out by Gareth Fleming at our recent DevOps BASH just as Agile made it OK to be a developer doing tests or even (gasp, horror) a tester so DevOps is making it OK to be a system administrator.
So progress is being made although slowly. If I could wave a magic wand and change one thing in IT it would be to have those who are good at something do it. Instead (as pointed out in the amazing Pragmatic Thinking book and discussed here) we “herd race horses and race sheep”. Until we are all brave enough to admit the we are lacking in one of A, B or C we will all suffer from imposter syndrome, for the very good reason that we are all imposters :-)