Executando verificação de segurança...
1

Eu venho do PHP e Laravel + jQuery. O frontend era quadrado, formulário básico e tal. A internet evoluiu e jQuery se tornou obsoleto.

O Laravel me encantou por ser fácil e intuitivo, documentação muito bem organizada e escrita, e em relação a estrutura e código com design patterns aplicado do jeito certo tal qual Facade, Singleton, Builders (...) me faz apaixonar pelo framework.

Mas precisava usar algum framework de JavaScript e aposentar o jQuery, e testei vue.js e Next.js e vou te dizer: mesmo com typescript é decepcionante! Todo ecossistema do JavaScript é uma completa gambiarra, pior, é um caos!

Muitas dependencias de pequenos mantenedores. Um package para listar arquivos de uma pasta, outro package para criar um arquivo...

Tinha o NPM, e ao invés de melhorar o NPM, criaram o PNPM, depois dezenas de gerenciadores de pacotes.

Javascript tem em si o espirito das distro linux. Todos os dias alguem faz fork do Ubuntu e melhora algo, e ao invés de fazer (ou aceitar) uma pull request, e a consequencia é muda o nome (Kubuntu por exemplo) e dizer ser um sistema operacional novo. O ponto é que cada um quer ter seu 'framework' ao invés de contribuir com (ou aceitar contribuição em) um projeto já existente.

A comunidade de JavaScript constroem packages e frameworks igual ao dono dessa casa. Sem estudo, sem planejamento, um andar de cada vez, e quando precisar ampliar, ao invés de reestruturar, o negócio é "se a casa não caiu, dá pra morar dentro".
Casa construida com gabiarra

Desconhecem orientação a objetos, DRY, e todos os padrões de projeto.

Eu sei que estou sendo dramático, mas não estou exagerando...

Acho que todos que codaram node usaram Prisma ao menos uma vez, e na documentação deles, na seção de boas práticas, olha como eles definem Singleton:

import { PrismaClient } from '@prisma/client'

const prismaClientSingleton = () => {
  return new PrismaClient()
}

declare const globalThis: {
  prismaGlobal: ReturnType<typeof prismaClientSingleton>;
} & typeof global;

const prisma = globalThis.prismaGlobal ?? prismaClientSingleton()

export default prisma

if (process.env.NODE_ENV !== 'production') globalThis.prismaGlobal = prisma

Agora vejam o como é um Singleton de verdade que implementei em um projeto que estou trabalhando:

import { PrismaClient } from "@prisma/client";

export class PrismaClientSingleton {
  protected static instance: PrismaClient;

  public static getInstance() {
    if (!PrismaClientSingleton.instance) {
      PrismaClientSingleton.instance = new PrismaClient();
    }

    return PrismaClientSingleton.instance;
  }
}

Vocês podem conferir sobre Singleton aqui https://refactoring.guru/pt-br/design-patterns/singleton.

A galera do javascript diz que não é bem assim, que estou exagerando. Mas a conclusão que passei a ter é que essa galera nunca programou com organização, estão acostumados a fazer scripts e gambiarra, e desconhecem algo melhor estruturado. E como meu caminho foi de vir algo mais estruturado, para algo mais caótico deu ruim.

Eu programo typescript, Next.js, Vue.js e o que mais surgir pela demanda da empresa que trabalho, mas não é prazeroso codar nada feito em javascript. É tudo muito penoso.

Eu não odeio nenhuma linguagem de programação (exceto Java por trauma), pois cada uma delas é ótima em resolver problemas especificos, e sinceramente, javascript tem potencial para ser a melhor, mas infelizmente javascript sofre desse mal.

Carregando publicação patrocinada...