Faço programação web há muito tempo e, em algum lugar, perdi a noção de por que estamos fazendo o que estamos fazendo hoje (ou como chegamos a fazer as coisas dessa maneira)?
Comecei com o desenvolvimento básico da Web ASP e, desde o início, a lógica de exibição e de negócios foi misturada na página. O desenvolvimento do lado do cliente variou bastante (VBScript, diferentes tipos de JavaScript), e tivemos muitos avisos sobre validações do lado do servidor (e, portanto, fiquei longe da lógica do lado do cliente).
Então mudei para o ColdFusion por um tempo. O ColdFusion foi provavelmente a primeira estrutura de desenvolvimento web que separou a lógica de exibição e de negócios usando suas tags. Pareceu-me muito claro, mas muito detalhado, e o ColdFusion não estava em alta demanda do mercado e, portanto, segui em frente.
Então pulei no vagão de banda do ASP.NET e comecei a usar sua abordagem MVC. Também percebi que o Java parecia ser uma linguagem de torre de marfim dos sistemas corporativos e também tentei sua abordagem MVC. Posteriormente, o ASP.NET desenvolveu esse padrão de design do MVVM e o Java (precisamente, J2EE ou JEE) também teve dificuldades e saiu com suas abordagens MVC2.
Mas hoje, o que eu descobri é que a programação de back-end não é mais onde a emoção e o progresso estão. Além disso, as práticas MVC baseadas no servidor parecem obsoletas (as pessoas realmente usam mais o JSTL?). Hoje, na maioria dos projetos em que participei, descobri que as estruturas JavaScript e o desenvolvimento do cliente são onde estão sendo realizados todos os progressos emocionantes e inovadores.
Por que esse movimento do servidor para o desenvolvimento do lado do cliente ocorreu? Fiz uma contagem simples de linhas de um dos meus projetos JEE e há mais linhas de código em JavaScript que Java (excluindo bibliotecas de terceiros). Acho que a maioria do desenvolvimento de back-end usando linguagens de programação como Java ou C # é simplesmente produzir uma interface semelhante a REST, e que todo o esforço de exibição, visualização, entrada / saída de dados, interações do usuário, etc. via estrutura do lado do cliente, como Angular, Backbone, Ember, Knockout, etc ...
Durante a era pré-jQuery, vi muitos diagramas em que havia uma linha clara e conceitual entre M, V e C no MVC no desenvolvimento de n camadas. Pós-jQuery, onde essas linhas são desenhadas? Parece que o MVC e o MVVM estão todos lá no código JavaScript, no lado do cliente.
O que eu quero saber é: por que fizemos essa transição (da ênfase da programação do servidor para a do cliente, do favorecimento de linguagens compiladas para linguagens de script, do imperativo para a programação funcional, tudo isso parece ter ocorrido simultaneamente ) e que problemas essa transição / mudança resolveu?