Bem, da mesma maneira que existem maus médicos, maus professores e etc, existem também maus informáticos. Neste momento a educação dada nos cursos de Engenharia Informática (pelo menos FEUP e IST) implica o desenvolvimento de variados projetos com um nível de complexidade considerável. Eu também passei por um Curso Tecnológico de Informática no Secundário.
Os estudantes têm a hipótese de passar pelas tarefas de Backend Developer, Frontend Developer, Solutions Architect, Quality Assurance, Tester e Gestor de Projetos. Desde aplicações nativas, móveis e web. O saber programar não é suficiente para fazer um projeto de software de sucesso, é preciso saber conceitos como Scrum ou XP para entregar um produto com maior valor. Se se trata de Software Crítico, ter noções de programação baseada em contratos. Enfim, é uma panóplia de coisas.
Para todos os efeitos, toda a gente com uma boa atitude consegue ser um autodidata e aprender muita coisa.