Abstração é um conceito-chave de programação de computadores e estruturas que ajudam os programadores a conseguir isso. Isto é uma coisa boa. Duvido que muitos de nós gostaríamos de desenvolver sistemas complexos em linguagem assembly! O problema vem, eu acho, quando os programadores têm pouca idéia do que a camada de abstração está mascarando. Em outras palavras, você precisa ter uma idéia do que acontece sob o capô, mesmo se você não interagir diretamente ou interagir com ele.
Lembro-me de desenvolver alguns dos primeiros sites dinâmicos em meados dos anos 90, usando C e CGI (numa época em que a maioria dos sites ainda era HTML estático). Não havia realmente nenhuma linguagem de script madura do lado do servidor (como PHP ou ASP) e muito poucas bibliotecas; portanto, você precisava escrever o fluxo de resposta HTTP inteiro no servidor com todas as páginas. A análise dos parâmetros GET e POST exigiu a gravação de sua própria biblioteca. Foi tedioso, lento, trabalhoso e propenso a erros. Eu não sinto falta nem um pouco!
No entanto, também sinto que estruturas como os formulários da Web do ASP.NET abstraem toda a natureza apátrida da web a um ponto em que muitos novos desenvolvedores da web têm poucas pistas do que realmente está acontecendo sob o capô. Isso leva a um código ineficiente e inchado que apresenta um desempenho ruim porque o desenvolvedor está unindo componentes usando uma metodologia "drag'n'drop" sem perceber o que está acontecendo no nível HTTP.
Portanto, acredito que as estruturas são essenciais para o desenvolvimento de software de alto nível, mas elas não impedem os desenvolvedores de entender o que está sendo abstraído. Sim, estruturas podem torná-lo burro, mas apenas se você não as entender.