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

Meu relato, sobre programação e Sindrome do Impostor

Hoje eu pensei em criar algo em BackEnd com NodeJS, então pensei, pq não uma API já que hoje em dia e tão requisitada.
criei uma api simples, com as rotas e o servidor tudo no mesmo arquivo.

Criei minha logica conforme eu estudei e aprendi:

const cpf = '09584479938'

function LimparCPF(cpf){
    return cpf.split('').slice(0,9)
}


function etapaUm(){
    let n_acumulador = 10
    let soma = []

    let cpf_limpo = LimparCPF(cpf)
    for(let i = 0; i < 9;i++){
        let calc = cpf_limpo[i] * n_acumulador
        soma.push(calc)
        n_acumulador -= 1
    }

    let resultado = soma.reduce((ac,numero)=> ac + numero)
    let J = resultado % 11
    
    if(J < 2){
        return 0
    }else{
        return 11 - J
    }
    
}


function etapaDois(){
    let n_acumulador = 11
    let soma = []

    let cpf_limpo = LimparCPF(cpf).concat(etapaUm())
    for(let i = 0; i < 10;i++){
        let calc = cpf_limpo[i] * n_acumulador
        soma.push(calc)
        n_acumulador -= 1
    }

    let resultado = soma.reduce((ac,numero)=> ac + numero)
    let K = resultado % 11
    
    if(K < 2){
        return 0
    }else{
        return 11 - K
    }
}

function Final(){
    let Cpf_verificador = LimparCPF(cpf).concat(String(etapaUm())).concat(String(etapaDois()))
    let data = Cpf_verificador.join('')

    if(cpf === data){
        console.log('cpf valido')
    }else{
        console.log('Cpf invalido')
    }


    
}

Final()

Ai como uma pessoa curiosa e quer sempre melhorar, eu fui e pedi ajuda ao chat gpt, a me indicar melhorias, e fui melhorando o codigo, sem delegar nada a ele, somente alterando conforme as ideias que ela me passava. Até ai tudo bem criei o codigo comentando a cada linha oque tava fazendo, para quando eu rever esse codigo etender :

const express = require('express');
const app = express();


app.use(express.json());

function obterNumerosCPF(cpf) { // Função onde eu Pego o cpf e tiro os 9 primeiros digitos
    return cpf.replace(/\D/g, '').split('').slice(0, 9).map(Number); // faz a limpeza de letras e caracteres e deixa somente os numeros, no .split, faz a separação de numero por array, e slice seleciona os 9 primeiros numeros
}

function calcularDigito(cpfArray, multiplicadorInicial) { // Aqui os indices são o cpf da função acima, e o multiplicador conforme a etapa do calculo
    let resultado = cpfArray.reduce((acumulador, numero, index) => {
        return acumulador + numero * (multiplicadorInicial - index);
    }, 0);
    return resultado % 11 < 2 ? 0 : 11 - (resultado % 11); // if ternarion onde se o resultado for menor que < 2 (0 ou 1) ele retorna 0, : se não pega o Resultado do resto da divisão e diminui por 11
}

function validarCPF(cpf) { // função que roda todo o calculo 
    let cpfNumeros = obterNumerosCPF(cpf); // aqui ele pega o cpf da função obterNumerosCPF() e torna uma variavel
    let primeiroDigito = calcularDigito(cpfNumeros, 10); // aqui executa a primeira ação do calculo que seria 9 digitos, Multiplicando cada numero do cpf da esqueda para direitoa  por 10,9,8,7,6,5,4,3,2 
    let segundoDigito = calcularDigito([...cpfNumeros, primeiroDigito], 11);// aqui e a segunda etapa, onde adiciona o numero verificador do calculo anterior
    
    let cpfCompleto = [...cpfNumeros, primeiroDigito, segundoDigito].join(''); // aqui Junta todo o cpf com os verificadores do primeiroDigito e do segundoDigito
    return cpf.replace(/\D/g, '') === cpfCompleto; // e retorna o cpf completo comparando com o cpf inicial.
}


app.get('/validar/:cpf', (req, res) => {
    const { cpf } = req.params;
    const valido = validarCPF(cpf);
    res.json({ cpf, valido });
});


app.post('/validar', (req, res) => {
    const { cpf } = req.body;
    if (!cpf) return res.status(400).json({ erro: 'CPF não informado' });

    const valido = validarCPF(cpf);
    res.json({ cpf, valido });
});

// Inicia o servidor
const PORT = 3000;
app.listen(PORT, () => console.log(`API rodando em http://localhost:${PORT}`));

e Agora vem a Sindrome, como eu fui pedindo ajuda, sinto que não fui eu quem fiz... como se eu pedisse para ela,Prompt: Crie para mim uma api para validar o cpf e blabla

OBS: eu etendi melhor alguns conceitos, como o .reduce((acumulador,numero,index)) por exemplo eu não sabia que o reduce podia se por um index...

Repositorio
Api Hospedado no Render

voces tambem se sentem assim quando utilizam a IA para te ajudar?

Carregando publicação patrocinada...
2

boa noite, sr.

não me sinto "assim".
por meio da ferramenta, consigo ser mais ágil (do dicionário) do que aqueles que ainda têm algum estigma.

o uso de IA na programação ainda tem muitos estigmas, como um tabu.

é mais razoável pensar em não utilizar uma ferramenta como uma muleta eterna, no entanto, também é muito razoável cogitar em extrair o melhor usufruto da ferramenta a fim de não ficar obsoleto.
então, higienize-se contra comentários opinativos desconstrutivos.

a partir do uso dessa ferramenta, oq o sr conseguiu extrair de conhecimento?

se tentasse fazer o mesmo código sozinho, daqui a 3 anos, o sr acha que demoraria quantos minutos?

na tua fase inicial, o sr acha importante utilizar a ferramenta? pq?

é mais importante para o sr a produtividade ou o aprendizado, dentro do teu contexto atual?

o gpt não tem livre arbítrio. sem a tarefa q o sr empregou a ele, ele conseguiria produzir o mesmo código?

qual foi a tua participação na confecção desse código?

o código resolve algum problema?

não busquei ser terapêutico, mas dialético. há muitas nuances envolvidas. nenhuma das desconstrutivas envolvem teu sucesso, e o mundo já está mudando. sempre haverá diferentes opiniões absolutas divergentes. no final, é necessário cultivar holisticamente amplas visões e pensamentos críticos sobre esse tema subjetivo acerca de uma geração textual puramente estocástica para resolver problemas determinísticos...

reflita.

1

Meus 2 cents:

Voce pegou o codigo gerado pelo gepeto e conseguiu entender ? Conseguiria fazer um outro projeto semelhante usando as novas possibilidades que ele mostrou ?

Se sim, deixe o medo de lado e o gepeto fez a funcao dele: servir como um tutor sempre disponivel e paciente, pronto para te ajudar - e voce aprendeu e agora faz coisas melhores.

Se nao aprendeu nada, so olhou para o codigo confuso e pensando "que diabos ele quer dizer com isso" - entao estude mais e use menos o gepeto.

Eh so isso - nao precisa ficar tao encucado: antigamente os devs consultavam livros e alfarrabios para buscar iluminacao, indo em bibliotecas empoeiradas. Hoje voce tem uma bibliotecaria habilidosa e gentil que te entrega o livro na mao, ja aberto na pagina que voce precisa - nao sei porque tanta gente estressa com isso.

1

então, quando começei a logica do projeto, eu pensei em usar o reduce, porem eu não conseguia encaixar o reduce da forma certa, faltava sempre algo para diminuir o valor inicial, e eu não sabia desse Index, acredito que outro projeto que eu fizer saberei usar ele, pois não copiei o codigo, eu peguei as ideias que ele me passou para melhorias, sem codigo, e contrui. um passo a passo com os comentarios conforme eu fui etendendo o negocio. Inclusive depois de postado, fiz um Module.exports da função e uma pasta Api. para melhorar modificação dos codigos, Como eu nunca trabalhei na area, eu nunca sei se isso e suficiente, se isso e bom, se to no caminho certo... Mas Obrigado pelo comentario amigo, me ajudou e muito na a chegar em uma conclusão e e para de me sabotar.

1

Meus 2 cents expandidos:

SANITIZACAO DE DADOS

Nao tem relacao direta com a questao de uso do gepeto - mas vamos la:

Lembre-se que toda funcao publica ou que recebe dados de origem nao confiavel (p.ex. uma private interna recebendo uma linha da importacao de arquivo CSV) deve primeiro fazer a SANITIZACAO, o que neste caso significa, verificar para cada parametro/dado se o tipo esta correto, tamanho, livre de caracteres especiais ou coisas do genero - que poderiam levar a um exploit (p.ex. estouro de ponteiro, injecao de SQL e por ai vai).

Como teu codigo que eh exposto via API, isso eh especialmente sensivel.

1

Desencana. Esse código foi criado por um programador mais experiente que tu, e depois que ele comitou no github, o gepeto "absorveu" a técnica. Apenas imagine que você usou um bot pra pegar a melhor solução no stackoverflow pra não perder tempo com Google e Ctrl-C/Ctrl-V.

Eu tenho usado o copilot no vs-code, e a experiência faz lembrar um pouco o pair-programming. Tem hora que ele sugere código ou comentário que me espanta, parece que leu minha mente. Mas não me preocupo com síndrome do impostor, porque sei o suficiente pra criticar o código gerado.

To usando pra aprender e melhorar minha fluência em Go. Mas não tenho dúvidas: no futuro próximo, nesse pair-programming, nós seremos o carinha sentado ao lado, que não usa o teclado e sô acompanha no monitor...

1

Acredito que sou um pouco da parte do desencana, quando você vai por exemplo usar uma biblioteca externa você se sente menos programador, use a inteligencia artificial para estudar e fica na paz.

Entenda que ela é uma aliada e não uma concorrente acredito que a AI ajuda muito a galera a ganhar repertório, afinal não é todo dia que um programador Senior senta do teu lado e dedica a te ensinar. Então aproveita.

1

Eu acho que você utilizou o ChatGPT de uma forma bastante eficiente. Você não pediu a resposta diretamente. Você utilizou ele com o objetivo de aprender. Esta postura que você teve, nomeada "síndrome do impostor", eu entendo como sendo uma postura de humildade que, normalmente, as pessoas que detêm maior conhecimento possuem. Quem sabe muito sempre acha que sabe pouco.