Executando verificação de segurança...
8
cyp
2 min de leitura ·

❌ Lista do que não pode fazer em programação

Bem-vindo ao mundo de programação!

Especialistas de vários cursos de programação, YouTube e devs sêniores de React JS organizaram em seu conselho o que não se deve fazer em seu código de jeito nenhum.

Essas leis foram escritas pelos vendedores de curso e especialistas em framework Javascript, então não ouse em questionar.

❌ Usar for-loop

❌ em hipótese alguma deve-se usar for
for (const item of items) {
    foo(item);
}

✅ considerar usar:
items.map(foo);
items.reduce();
items.forEach();
recursão
compreensão de lista
geradores

❌ Usar o else

❌ em hipótese alguma deve-se usar if-else
if (foo) {
    bar();
} else {
    daz();
}

✅ considerar usar early return:
if (foo) {
    bar();
    return;
}

daz();

❌ While é mais rápido que for

❌ não
for (var n = 0; n < 10; n++) {
    foo(n);
}

✅ sim
var n = 0;
while (n < 10) {
    foo(n);
    n++;
}

❌ Não reinvente a roda, já existe algo pronto para oq vc quer

❌ ilegível
if (number % 2 == 0) {
    // número é par
}

✅ sim
npm install --save is-even

var isEven = require('is-even');

if (isEven(number)) {
    // número é par
}

❌ Não escreva funções. Escreva arrow-functions.

❌ ruim
function faz_isso() {
    ...
}

✅ lindo
const faz_isso = () => {
    ...
}

❌ Programar é ruim. Use a ChatGPT ao invés disso

❌ pensa demais, gasta tempo e fica triste
const funcao_muito_complicada = () => {
    // ???
}

✅ compatível com o mundo moderno
const funcao_muito_complicada = () => {
    // ei chatgpt, escreva essa função aqui pra mim. depois disso sobe o commit
    // com --force na master
}

Em breve darei mais dicas de programação tetra-avançada. Caso queira acrescentar com mais itens, fique a vontade para comentar. Obrigado até então!

Carregando publicação patrocinada...
12

Só pra aprofundar um pouco cada item (que para quem ainda não percebeu, são todos irônicos), e complementar o que já foi dito em outros comentários:

for vs map/reduce/forEach/etc

De fato tenho visto muitos "cursos" e influencers que adoram propagar o uso de map, reduce e forEach pra tudo, e ignoram completamente o bom e velho for. Assim como há os que dizem pra nunca usar. Eu diria, como sempre, que depende. Cada um tem seus prós e contras e casos de uso em que é mais adequado (aliás, esta regra vale para todos os itens, e de forma mais geral, para praticamente tudo em computação).

Um ponto importante sobre map, reduce e forEach é que estes recebem como argumento um callback (uma função, que será executada para cada elemento do array). Ou seja, se o array tem N elementos, o callback será chamado N vezes. E chamadas de função têm o seu custo. Pode não ser significante se forem poucos arrays pequenos, mas não é zero.

Neste post eu faço um comparativo entre reduce e for, usando um array bem grande, e a diferença é clara: reduce foi bem mais lento. Mas para arrays menores a diferença será irrisória, então como sempre depende de cada caso.

Sobre os demais: map serve para fazer algo com os elementos do array, e sempre retorna outro array com os resultados (mesmo que vc não use, ele é criado e retornado). Então se não precisa deste array com os resultados, não deveria usar map (embora "funcione", é um uso torto). Talvez um forEach fosse mais adequado, embora ele não possa ser interrompido com break (neste caso um for simples é o mais adequado, para não ter que fazer essas gambiarras).

Ou seja, cada caso é um caso. Nem oito nem oitenta, entenda o que cada opção faz, seus prós e contras, e escolha a mais adequada para cada situação (e essa dica não se restringe a este item, vale pra tudo na nossa área).

if/else vs early return

Mais um caso de "depende", de entender o que cada um faz, saber os prós e contras, e escolher o mais adequado para cada caso. Além de saber os casos em que tanto faz e passa a ser gosto pessoal (é importante reconhecer isso também, pra não confundir preferências com verdades absolutas).

Teve um post recente sobre early return, e também tem outros mais antigos (esse e esse). De fato é uma técnica que pode ser útil em muitos casos, mas como sempre, não é a bala de prata que sempre deve ser usada pra tudo.

Eu pessoalmente não gosto desses artigos que propagam uma técnica como sendo "a verdade", que deve ser usado "sempre" sem exceções. Muitas vezes eles usam como exemplos somente os casos em que ela é a melhor opção, mas esquecem de mencionar os casos em que ela atrapalha. Daí a quantidade de artigos sensacionalistas do tipo "Não use else". Use sim, sempre que fizer sentido.

for vs while

Dizer que um é mais rápido que outro chega a ser piada, na maioria das vezes não fará diferença significativa.

Pra variar, é mais um caso de saber as características de cada um. Muitas vezes tanto faz usar um ou outro, mas tem alguns casos em que faz diferença. Tem uma boa explicação aqui, mas seguem alguns exemplos abaixo (todos em JavaScript).

No while vc pode controlar quando o incremento ocorre:

var i = 0;
while (i < 10) {
    // executa algo
    if (alguma_condição) {
        // o incremento não será executado, no for seria
        continue;
    }
    i++;
}

E vc pode inclusive ter incrementos diferentes dependendo de cada caso:

var i = 0;
while (i < 100) {
    // executa algo
    if (alguma_condição) {
        i += 3;
    } else if (outra_condição) {
        i += 15;
    } else {
        i++;
    }
}

Com for seria bem mais complicado...


No for vc pode inicializar e incrementar mais de uma variável:

for (var i = 0, j = 20; i < 10; i++, j++) {
    // faz algo
}

Ok, no while também daria pra fazer algo do tipo:

var i = 0, j = 20;
while (i < 10) {
    // faz algo
    i++, j++; // incrementa na mesma linha
}

Mas não fica tão "limpo" e idiomático, na minha opinião.

E o while costuma ser mais adequado quando vc não precisa de alguma(s) das 3 etapas do for:

// extrai todos os dígitos de uma string
var regex = /[0-9]/g;
var texto = 'a1b2c3d4';
var match;
while ((match = regex.exec(texto)) !== null) {
    console.log(match[0]);
}

Até dá pra fazer um for equivalente:

var regex = /[0-9]/g;
var texto = 'a1b2c3d4';
var match;
for (; (match = regex.exec(texto)) !== null; ) {
    console.log(match[0]);
}

Afinal, todas as 3 seções do for são opcionais, então basta omitir duas delas. Mas não fica tão "limpo" quando um while, na minha opinião.

Enfim, esses deveriam ser os motivos para optar por um ou outro (novamente, é sobre saber as características de cada um e escolher o mais adequado para cada caso, inclusive sabendo os casos em que tanto faz). Não tem nada a ver com um deles ser "mais rápido".

isEven

Esta é claramente uma crítica aos pacotes inúteis do npm, como o is-even pra ver se um número é par. Pior, este pacote depende de outro igualmente inútil: o is-odd pra ver se o número é ímpar. Sério, olha o código do is-even:

var isOdd = require('is-odd');

module.exports = function isEven(i) {
  return !isOdd(i);
};

E o is-odd, por sua vez, tem outra dependência: o pacote is-number, para ver se o valor informado é um número. Três pacotes só pra ver se um número é par...

Nem tudo precisa de um pacote/lib/dependência. Operações simples como ver se um número é par podem ser feitas diretamente, sem firulas. Coisas triviais não deveriam precisar disso, inclusive essa mania de criar dependências pra tudo resultou no famoso caso do leftpad.

function vs arrow function

Tenho notado em muitos projetos uma certa preferência por arrow function, a tal ponto que - pelo menos é a impressão que tenho - muita gente parece achar que elas são "O Jeito Certo™", ou a única opção existente.

Mas existem diferenças entre function e arrow function, explicadas em detalhes aqui e aqui.

Novamente, mais um caso de saber as diferenças, os prós e contras de cada um, e escolher conforme a necessidade (além de saber as situações em que tanto faz, e estar ciente que nesses casos usou por preferência pessoal).

ChatGPT

Já tem trocentos posts aqui e internet afora sobre o assunto. Pra resumir, acho que é uma ferramenta que deve ser usada com ressalvas (como qualquer outra). Tenho um post com links que explicam em detalhes como ele funciona, e porque ele deve ser tratado como um estagiário burro porém esforçado e confiante, e que vc não deve acreditar cegamente em tudo que ele diz (sempre confira o código que ele te dá).

3
2

Pior é que, tirando a hiperbole, é verdade. Isso é uma das coisas que mais reclamo. As pessoas estão treinando o erro, ensinando ele, e até exigindo que os outros façam o mesmo. Ontem mesmo me envolvi em uma discussão em outra plataforma, que foi uma insanidade, 3 ou 4 pessoas sabia o qie estavam dizendo, e o resto fazendo afirmações, que até mesmo se voccê não entender nada do assunto, só usando a lógica em cima do que dizem, vcê que está errado. É trágico.

Eu acho que se a pessoa tiver justificativa técnica, ok, mas para isso não tem (pelo menos no uso mostrado acima). Fico sempre apresentarem para eu mudar de ideia.

Eu não sou contra gosto. No máximo, mau gosto :D

0
4

Para quem não entendeu, ele está falando das boas práticas que dizem por aí, ele não está afirmando que é isso, pelo contrário, está mostrando que tem muitos casos para usar o que dizem para não usar (de fato alguma pessoa não entendeu o tom da postagem, teve vários negativos, ou acha que deve fazer as cosias que ela critica, mas sem ter um comentário, jamaos saberemos o que ela pensa ou se sabe o que está dizendo).

  1. Hoje se prega muito estilo funcional, especialmente em JS (que parece o foco dos exemplos), que não é uma linguagem funcional. Ainda que isso possa ser útil em alguns casos, deixar mais elegante ou curto (coisas diferentes), tem muitos casos que geram problemas (experimente precisar usar exceções no processamento da coleção) e pode até ficar mais confuso. Nem estou entrando no mérito de sempre ser mais lento. Quase todo mundo usa por modinha e não por necessidade. Isso diz muito sobre as pessoas.

  2. De fato um early return pode ser bem útil. Mas tem casos que sequer é possível. Em muitas situações o else é a úncia forma viável, então, até por consistência, não deve ter medo dele. Tem que usar o que fizer sentido, e para isso precisamos dominar tudo o que está acontecendo ali, entender a semântica do código.

  3. Experimenta colocar um continueno while e no for, tipo fazer uma brincadeira de "1, 2, 3, pin". Com semânticas difernetes não faz sentido se limitar a um ou outro. Em boa parte das stiações, em quase todas as linguagens, for e while tem performance iguais, tendo apenas alguns casos que dá uma diferência pequena, quando o que está fazendo permite usar adequadamente o outro.

  4. Nem vou falar nada, se alguém não enxergar o quanto isso é energúmeno, não vou perder meu tempo.

  5. Outra modinha. Peça para a pessoa explciar porque prefere usar a função "anônima". Eu não domino JS, mas já falei com algumas coisas. Se não mudou nada. Tem zero vantagems fazer o segundo, mesmo que a moda diga o contrário, embora talvez não tenha desvantagens, além de ser mais longo, além de indicar semântica errada. É claro que tem casos que faz sentido a função ser anônima, aí ninguém questiona, quase sempre não precisa ser declarada assim, nunca em escopo global.

  6. Também não vou comentar, quem quer cair nesse conto da carochinha, merece.

Programar exige entendimento de muitas cosias. A crítica geral aqui é sobre fazer sem pensar, sem questionar, sem aprender com profundidade, e só seguir receitas de bolo inventadas e popularizadas por quem não entende o que é programar, em alguns casos até criou por hoax ou para gerar engajamento, e que sai do controle. Tudo tem contexto para usar, até as cosias ruins, desde que se tenha cuidado e capacidade de avaliar bem.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

3

isEven

Realmente se considerarmos as boas práticas, sempre é bom dar uma olhada no que já existe publico na rede e realemnte exite muita coisa boa.

Mas o exemplo do isEven, foi sacanagem... criar uma dependência no seu projeto em uma operação que faz a mesma coisa, mas só pq esta em um pacote deve ser usado? Acho que não.
Entendi o exemplo e volto a dizer que vale verificar o que já tem pronto.

Mas sempre deve ser levado em consideração a dependência que se cria no projeto ao fazer isso e medir e ponderar e relevência e riscos.

Mas no mais, show de bola.

3

O mais triste é que não para por ai kkkk. Isso ainda é o de menos... Já vi gente vendendo curso de React jurando que usar Construtures é mais prático que simplesmente criar uma função que retorna um componente. Já vi gente dizendo para não aprender css e pular pro Bootstrap. Já vi casos onde pessoas incitam iniciantes a aplicarem para vagas de pleno mesmo não sabendo: "tenta a sorte, vai que pega" KKKKKKKKKK

3

"Legal! Acabei de aprender React e Tailwind. Estou pronto pro mercado!"

Legal, então você sabe fazer um seletor CSS, né?

"O que é CSS?"

3

O pior de tudo que vejo muito esse tipo de coisa acocntecer. A pessoa "sabe" usar uma tecnologia, técnica, conceito, mas não entende quase nada dela, nem mesmo sobre o nome. Acontece até com pessoas "experientes". É trágico. Muita gente me aacha chato porque me importo com os nomes corretos das coisas. Elas não percebem o valor que isso tem, o quanto afeta o seu modo de pensar. A tal da atitude que eu sempre falo.

2

Vejo isso se repetir muito em desenvolvedores web em relação ao protocolo HTTP e TCP. Não sabem como funciona, o que é e quais suas diferenças para demais versões. As vezes falta o conceito também.

1

Lembro de um colega não conseguir estilizar os "templates" do Bootstrap. Não sabia nada de CSS.

Quem realmente quer entrar no mercado de trabalho agora, focando nos fundamentos, simplesmente aprendendo de verdade, já vai estar disparado na frente de muitos "Desenvolvedores Web Júniors" por aí.

1

nossa... esse da vaga foi fd...

resumindo: estao aplicando um pensamento abrasileirado de pessoas que estao buscando um emprego comum, de quem esta estudando algo pra um setor comum (adminsitraçao, economia, etc) e ate de quem esta trabalhando em um emprego comum (ou geral tambem serve), no setor de tecnologia...

tudo bem, o setor de tecnologia nao é algo taaao diferente assim. Mas é uma area muito sensível. Igual medicina.

digo sensivel pelo fato de hoje em dia nossas informações, finanças e integridade pessoal e profissional estao integradas a rede. Entao deve-se ter a mesma expertise de um medico pra gerenciar tudo isso de forma confiavel e segura.

1

Claro que não para por aí, ele só postou alguns exemplos. Se parasse, até estava ótimo.

Uma coisa que eu penso sobre essa coisa das vagas, eu tenho duas visões antagônicas. Uma é que você não deve abusar, e por isso não deve tentar vagas que não são pra você. Por isso eu falo que estão sumindo vagas para júnior porque todo mundo que se candiata as esss vagas são aprendizes e não júniores. Ao mesmo tempo há abusos do outro lado. Então, porque não tentar? E se der sorte?

Eu nunca fiz isso explicitamente, até porque no meu tempo de procurarvagas era um pouco diferente. Mas semrpe pediram muito mais do que eu sabia. Eu nunca perdi uma vaga pela avaliação técnica. Eu sempre era o mais qualificado, mesmo que eu não tivesse boa parte do que pediram no anúncio. Claro que eu não me candidatava para vagas que não eram para mim, até porque eu seria infeliz nelas, todas eu tinha um objetivo.

Então uma pessoa com um mínimo de noção deve se canditar em quaqluer lugar que faça sentido. Quem não tem noção, não. O problemas que essas pessos não sabem que elas não tem noção :)

3

Pra mim, existem três coisas que fazem toda a diferença no desenvolvimento de um sistema ou aplicação (e isso deveria ser uma regra geral).

1 - O simples funciona (tanto no codigo quanto na logica;

2 - Eleve a complexidade logica e sintática do código de acordo com o grau de complexidade do projeto;

3 - Sempre que possivel, use a sintaxe fde fundamento da linguagem. Quando a sintaxe prólogo da linguagem apresentar muitos ruidos logicos, repetiçao de código e poluiçao visual no arquivo, é hora de considerarmos o uso de algo que faz o mesmo trabalho, mas de forma simples em termos sintáticos (e aqui tambem podemos encaixar o ponto 2). Entao, podemos considerar usar essas outras sintaxes: expressoes lambdas, API stream, por ai vai.

Inventar moda nao vai levar ninguem a nada.
É mais facil apertar um parafuso usando uma chave de fenda do que com uma chave inglesa ou de griffe.

Voce pode saber o que cada ferramenta faz, mas o que importa nao é somente isso. É tambem saber quando usar cada uma dessas ferramentas.

ArrayList ou lists em Java nao podem ser aplicados em todo caso.
Existem casos que um grande armazenamento de arrays faz sentido, e arrayslists sao otimos em recuperar e armazenar esses dados das arrays para ediçao. Ou, se alguem julgar o contrario, tambem pode usar dessa forma, de acordo com o que o projeto requer.

Voce ter vergonha de usar um for, enhanced for, if-then-else, ternarios... so mostra que voce esta renunciando ao conhecimento base da linguagem, que podem te salvar ate em situações de alta complexidade.

É lamentável ver que existem pessoas que nao sabem de nada influenciando outras pessoas que passam a nao saber de nada, e ver ambos os tipos de pessoas bostejando inverdades e contradições pela internet.

Toda ferramenta é essencial. E toda linguagem de programaçao é uma ferramenta. Isso engloba ate a sintaxe, a logica, etc.

O ChatGPT, uma IA criada com ferramentas (limguagens) por outras pessoas, deve ser usado, tambem, como uma ferramenta, uma soluçao frente a ambiguidades que surgem em nossa vida durante nossos estudos ou outros setores que temos duvidas. Mas as pessoas sao burras. Usam uma tecnologia criada por humanos pra substituir elas mesmas.

As pessoas precisam parar de pensar que a maquina é superior. Na verdade, um ser humano criou a maquina e sua inteligência. Sem o fator humano, isso nunca seria possivel. Seguindo essa logica, vemos que esses tipos de pessoas sao burras. E sao esses mesmos tipos que se declaram programadores e desenvolvedores meio mundo à fora, e que posteriormente sao contratadas achando que vai ganhar 10 mil por mes usando ChatGPT pra fazer tudo + essas regrinhas que voce citou, e quando ve a verdade, chora e fala que "a escravização deve acabar".

Novamente, Lamentavel...

1

Não sei se eu entendi o que você disse. Mas você interetou o texto original? Leu os outros comentários. Pra mim o OP foi claro, mesmo que não tenha sido para todos, o seu texto nem tanto, eu entendi boa parte, mas não entendi para onde está direcionada crítica.

2

Ola amigo, perdao ter deixado um pouco subentendido. Eu escrevo pelo celular, ai fica meio ruim modular minhas palavras.

vou tentar explicar melhor:

Aqueles 3 pontos que falei la em cima foi como se fosse o que funcionasse na maioria (se nao todos) dos casos de desenvolvimento. O que o nosso amigo postou claramente foi uma ironia.
Mas esse 3 pontos que falei aparentemente vao contra o que esses "influenciadores", "programadores", "vendedores de curso" empregam por ai.
Tipo, acaba que um sistema desenvolvido 100% de acordo com a lista que nosso amigo passou (e usando so isso), fica insustentável

Acaba por minimizar a eficiencia de programar algo que funcione e vira uma escovaçao de bits.

Depois eu falei o que eu acho sobre voce aprender como funciona uma ferramenta, mas nao saber como e quando usar essa ferramenta pra pessoas que se enquadram na mentalidade da lista do amigo ai.

Assim, claro que esse topico de aprender usar uma coisa e saber quando aplicar o que aprendeu é muito relativo.
Alguns aprendem como funciona a ferramenta, mas pendem a saber quando e onde usar o que aprendeu.
Outros ja sao diferentes: demoram a aprender o funcionamento, mas tem uma noção lógica de quando, onde e como aplicar.
e tem quem equilibra os 2 (o que é essencial).

Se voce foca e persiste com afinco sobre aquilo que voce esta aprendendo, voce consegue ser a pessoa equilibrada (mesmo que nao pareça ou demore, mas consegue).

Mas uma pessoa que sonha com a promessa de ganhar muito por mes fazendo basicamente nada, usando programação somente do estilo da lista, ou ate mesmo influenciadores que ensinam algo faltando (porque ta certo o ensinamento da lista, errado ta a forma como ela incentiva o desuso da sintaxe e logica fundamental da linguagem), acabam por ser conscientes sobre como uma ferramemta funciona, mas sao inconscientes sobre onde, quando e como usar aquela ferramenta (saber ate sabe, mas fica porco igual essa lista).

Pessoas assim falarem que é porco voce usar um for ou if-else ao inves de outra coisa é meio feio. Deve ser porque os fundamentos de uma linguagem acompanham o iniciante por toda sua trajetória, ai querem empregar uma coisa "diferente" e "nao tao utilizada" a pessoas que nao querem usar "coisas de iniciantes".

É triste que essa lista seja uma verdade no nosso mundo atual.

a parte do ChatGPT que eu falei foi uma crítica àqueles que caem no conto da carochinha de que "as IAs vao tomar o mundo e que vao exterminar os humanos ou fazer-nos de escravos".
Usam isso tambem pra comparar a inferioridade da inteligência humana frente a IAs que nos mesmos criamos kkkk cara...
mais inteligente que uma IA que se mostra mais inteligente que uma pessoa sao os devs que criaram ela. Caramba! como pode a mente humana criar algo tao grande, que supera a nos mesmos? isso é algo fantastico e que devemos ficar felizes por atingir esse feito, porque isso pode ser usado para nos orientar, nos fornecer valiosos insights sobre algumas coisas de nossos estudos ou curiosidades, etc.

ChatGPT tem sido meu instrutor na minha jornada de aprendizado Java. Exercicios, explicaçoes razoaveis ou coisas assim que eu nao entendo tao bem ou que nao tenho tanta criatividade pra pensar em fazer (como ideias de exercicios de fixaçao) eu peço a ele.

Mas as pessoas normalmente evitam pensar por esse caminho. Acham mais facil aderir de vez a uma tecnologia como forma de dinheiro gratuito, apenas substituindo nossa força de trabalho intelectual por um cerebro de maquina. E a exploraçao da IA por esse caminho so vai fazer a lista que nosso amigo postou aqui ficar cada vez mais abrangente (e talvez ate maior).

Desculpe se eu deixei de explicar algo ou expliquei meio embolado kkkkk as vezes me perco em alguns assuntos e nao sou taaao bom com palavras. Mas meu raciocinio quer dizer algo mais ou menos disso.

Boa tarde e um grande abraço ❤️

2

Demorei um pouquinho pra perceber a ironia, quando chegou no is-even que me toquei, kkkkkkkkk. O mais impressionante é a quantidade do pessoal que acreditou nos comentários.

1

Quando eu cursava graduação na PUCPR pra ser bacharel em análise de sistemas, no meu primeiro ano aprendi java I e JavaScript para web(básico) e não tinha essas novidades de hj em dia... Então a gente usava o bom e velho for, do-while, while, for com lista(simular o foreach), if, if-else, switch-case... E tudo rodava ok... Mas eram outros tempos kkk
Hoje a turma não se preocupa muito com memória RAM, nem com processador... O foco é se roda ou não.
Mas faz tempo, muito tempo que não uso meu computador pra desenvolver sistemas, apps mobile...