LLM-Driven Programming: Ah, sério?
Por mais que eu gostaria de ser, não sou um acadêmico de ciência da computação. De jeito nenhum.
Eu tomei um caminho diferente embora.
Há 25 anos, passo grande parte dos meus dias lendo, escrevendo, alterando e depurando programas de computador. Nesse período, me formei técnico em Processamento de Dados, fiz um curso de graduação em Ciência da Computação por mais de 3 anos (antes de desistir no 4º ano, mais ou menos um semestre antes da formatura) e depois acabei cursando uma pós-graduação em Data Science & Big Data, depois de obter um bacharelado em Nutrição.
Nesses últimos 25 anos, pode apostar que li uma boa quantidade de livros, artigos, blogs e outros enfeites, em um esforço honesto para me educar. Ainda assim, sinto-me tão subeducado para oferecer opiniões fora do meu campo de especialização ⎼ ou seja, arquitetar sistemas de software para a Internet.
É por isso que sempre procuro pessoas que sabem mais do que eu. Para não me envergonhar de graça na Internet. Pode não ser legal, mas é intelectualmente honesto. Eu vou levar.
LLM Hype
Ultimamente tem havido um hype sobre o assunto de LLM (grandes modelos de linguagem, por exemplo, GPT-3 ), especialmente ChatGPT . Você deve estar vivendo sob uma rocha para não ter ouvido falar disso. Essa coisa está em todo lugar. As pessoas estão enlouquecendo suas mentes sobre isso. Alguns amando, alguns odiando e tudo mais, eu acho.
Aqui estou.
Embora eu tenha uma pós-graduação na área de ciência de dados, estou longe de ser um especialista em LLM. Longe. Nem mesmo à vista dos olhos humanos. Portanto, meus pensamentos sobre isso são baseados em minhas observações ao longo dos anos e em uma boa parte da experiência do mundo real como engenheiro de software. Leve-o com um grão de sal.
O que eu penso sobre isso?
Acho que pode ser uma ferramenta útil na caixa de ferramentas do programador. Tenha-o lá, como você tem no Google e no Stack Overflow. É isso. Simples assim.
Quero dizer, deixe-me elaborar um pouco mais sobre essa afirmação.
Quando comecei a programar, tive que comprar livros e revistas ou pegá-los emprestados de escolas e bibliotecas públicas; além disso, eu tinha um bom amigo no trabalho que me ensinou muito sobre o Clipper , e foi isso. Então descobri os fóruns de discussão on-line (por exemplo, GUJ ). E então eu conheci e participei de reuniões de grupos de usuários (ex. SouJava ). E então foi Stack Overflow, GitHub e a infinidade de conteúdo técnico que existe em toda a Internet ⎼ você sabe do que estou falando, apenas pesquise no Google o que quer que seja sobre a linguagem de programação mais esotérica e pronto.
Essas coisas não eram mutuamente excludentes, elas se somavam umas às outras, como os tijolos de um prédio. Ou devo dizer um arranha-céu? Vai saber.
De qualquer forma, acho que o que estou tentando dizer é que, embora eu seja capaz de pesquisar qualquer coisa no Stack Overflow (ou melhor, no Google e depois apontar e clicar), ler blogs, assistir a todos os tipos de palestras interessantes no YouTube , e assim por diante, ainda compro livros e os leio. Uma coisa não exclui a outra.
A mesma coisa se aplica às ferramentas LLM.
Seja um programador que prioriza a educação
Gostaria de fazer uma observação aqui: acredito firmemente na educação de “qualidade”. E com isso quero dizer frequentar cursos universitários formais e ler livros “carnais”.
Eu sei que não é uma opinião popular hoje em dia, com todos os bootcamps, cursos rápidos em vídeo e nano conteúdos sendo fortemente anunciados por aí, como se fossem a penicilina do século 21, mas honestamente eu não poderia me importar menos. Solidificar o conhecimento que passa no teste do tempo exige uma educação forte. Portanto, não se apresse, faça o trabalho duro, supere o tutorial rápido e eduque-se.
Lembre-se de que, com apenas um conhecimento superficial, você pode nem conseguir discernir se uma resposta do Stack Overflow está certa ou errada; e se está certo, e se funciona como esperado, por que funciona. E neste caso, o que você faria se não funcionasse? Tentativa e erro ad nauseam , certo? O que nos leva a um fato indiscutível.
Ninguém gosta daquele cara / garota no escritório que faz perguntas o tempo todo e quer que cada informação seja mastigada para engoli-la sem ter que suar a camisa. Eu certamente não.
Deixe-me dizer a você: a programação baseada em copiar e colar já existe há muito tempo , pelo menos desde que pudemos encontrar soluções candidatas para a maioria dos problemas de computação que pesquisamos na Internet. Isso não é novidade. As pessoas têm feito isso há muito tempo. Muito mais após o advento do software de código aberto e poderosos mecanismos de busca. E não há nada de errado em copiar e colar código da Internet. Nada. Bem, pelo menos até que isso aconteça.
Afinal, podemos copiar e colar pequenos trechos de código aqui e ali, exemplos de uso de APIs com as quais não estamos muito familiarizados, ou que ainda não usamos, ou que estamos começando rapidamente. Todos nós já fizemos isso e ainda faremos. (Regex? Cron? Sim, eu sinto você.) No entanto, se não tivermos uma base sólida em programação e design de software, se não dedicarmos nosso tempo para entender o que estamos fazendo, acabaremos em um frustrante ciclo de tentativa e erro. Pior do que isso, vamos acabar introduzindo bugs difíceis de encontrar, problemas de desempenho e vulnerabilidades de segurança em nosso software ⎼ que, aliás, na maioria das vezes nem é nosso software, mas o software de nossos empregadores. Pense nisso por um segundo.
Há muito mais no desenvolvimento de software do que escrever uma consulta SQL, construir um endpoint de API, chamar um serviço remoto de um aplicativo móvel ou codificar uma pesquisa em profundidade. Uma solução de software completa é feita de muito mais do que isso. A engenharia de software, como um campo, é o que está preocupado com isso. Portanto, meu ponto aqui é: se você não sabe o que perguntar, que tipo de resposta acha que obterá? E você será capaz de discernir a resposta certa para o seu caso particular?
Quando você lê as respostas no Stack Overflow, é melhor ter certeza do que está procurando, para ser razoavelmente assertivo ⎼ há muito conteúdo indesejado por aí também, lembre-se; e não vêm com rótulo de “lixo”. Então você deve levar em consideração todo o contexto da pergunta original e as respostas fornecidas, pulando o lixo aqui e ali, antes de tomar a decisão de copiar e colar algum trecho de código como está ou escrever sua própria solução com base no construído conhecimento ⎼ por exemplo, o problema específico que você está tentando resolver possui seus casos extremos particulares. E isso mesmo, mais e mais, irá agregar conhecimento a você.
Vê para onde estamos indo? Veja o meu ponto aqui? Viu como o ChatGPT pode ser uma armadilha? Você pergunta, você obtém uma resposta. Uma resposta tão confiante que, se você não tem um conhecimento amplo e sólido de programação, compra uma porcaria absoluta de cavalo sem saber. Eu vi muito disso com amigos no Twitter e outros enfeites. Mesmo com algoritmos amplamente conhecidos.
Como tal, esse “muito mais” é o que devemos nos preocupar (além do básico) e é o que devemos focar (desde que tenhamos o básico em vigor). O que nos leva a outro fato impiedoso.
Não sabemos o que não sabemos. E a única coisa que podemos fazer sobre isso é adquirir novos conhecimentos, de novo e de novo ⎼ amplo primeiro, profundidade depois.
Dessa forma, esperamos saber o que estamos procurando e ter pelo menos uma ideia da resposta quando a encontrarmos.
- O conhecimento amplo nos dá uma direção para ir em busca de respostas;
- O conhecimento profundo nos ajuda a discernir entre as respostas encontradas.
OK. Legal. Mas como nós fazemos isso?
Para ampliar seu conhecimento sobre o que há por aí para saber, acho que os blogs e os vídeos do YouTube são ótimos. São conteúdos curtos que você pode consumir diariamente sem suar a camisa. Mas para um conhecimento profundo e sólido , na minha opinião (N=1), nada melhor do que a leitura de livros e documentos oficiais. E se puder, se ainda não o fez, consiga uma vaga (física ou online) em um curso universitário (graduação ou pós-graduação conforme o caso).
Novamente, não é uma opinião popular. Mas eu não sou popular, então quem se importa?
Entra nas ferramentas LLM
No entanto, tenho várias opiniões impopulares, acho que esta vai acertar em cheio: o LLM pode ser uma ferramenta incrível para ajudá-lo a obter conhecimento sólido. Como é isso? Eu vou te dizer como.
Comece perguntando ao ChatGPT o que você precisa saber sobre, digamos, desenvolvimento de aplicativos móveis. Em seguida, peça tutoriais curtos e vídeos do YouTube para obter uma visão geral. Em seguida, peça livros e palestras altamente recomendados sobre o assunto. Porque, no final das contas, você quer ler vários artigos profundos, de diferentes autores, com diferentes pontos de vista, para obter uma compreensão sólida do assunto que está estudando.
Isso é para uma coisa. Outra coisa que pode ser útil é quando você está lendo um livro e fica preso por falta de conhecimento de um determinado assunto obrigatório. Peça ao ChatGPT para resumir o referido assunto para você, assim você terá uma base antes de prosseguir. A mesma coisa que você faria com o Google, lendo uma ou duas fontes, mas rápido e direto ao ponto. Porém, depois, vá em frente e aprofunde-se no referido assunto se for algo importante para o assunto geral que você está estudando. Não há problema em fazer isso.
E ainda outra circunstância que pode ser muito útil é que, enquanto você está desenvolvendo um aplicativo de software para um determinado domínio, não está muito familiarizado com todos os meandros. Eu vi isso outro dia e achei bastante inteligente.
Digamos que você vai desenvolver um aplicativo móvel de fitness, porque gosta de fitness e está super entusiasmado com a ideia de ajudar as pessoas a ficarem saudáveis e tudo mais. OK. Mas você não conhece todos os aplicativos que existem por aí, e seus recursos mais amados, e como eles são monetizados, etc. Essas são perguntas muito objetivas. Então você pode fazer essas perguntas ao ChatGPT para começar rapidamente. Você pergunta sobre os requisitos do aplicativo. Você pede, por exemplo, que escreva o e-mail de boas-vindas que enviará aos novos assinantes do seu incrível aplicativo de fitness, porque você não é muito bom nisso. Certo. O que agora? Se você entendeu o que falei até aqui, já tem uma boa noção do que deve fazer a seguir. Você melhora, você faz melhor, você coloca seu molho especial. Em outras palavras, quebrar a inércia, que é indiscutivelmente a coisa mais importante neste caso, então torne-o particularmente especial ⎼ caso contrário, tudo o que você terá são coisas genéricas para vender. Não é legal, eu acho.
Se você obtiver acesso ao GitHub Copilot e não for prejudicial usá-lo em seu trabalho, poderá solicitar que ele forneça fragmentos de código, como um método para analisar um arquivo, um caso de teste repetitivo ou outros enfeites. Você sabe, aquela coisa chata que você tem que fazer de vez em quando e não pode ser totalmente evitada com um design de código adequado e bibliotecas inteligentes. Nada de errado com isso. Você não ganha pontos extras por não fazer isso ⎼ contanto que não haja nenhuma política em vigor onde você trabalha.
Pode haver muitos outros aplicativos semelhantes, lembre-se. Pense sobre isso.
Oh espere. Pensei no maior benefício que isso poderia nos trazer: Sabe aqueles caras que gostam de postar em fóruns pedindo soluções para os trabalhos escolares? Tipo, você sabe, você lê a pergunta e é quase a declaração de atribuição literal. Você provavelmente já viu isso antes. Sim, agora eles podem pedir isso ao ChatGPT e nos deixar em paz. Todo mundo está feliz com isso.
O LLM substituirá os programadores humanos?
Não, eu não penso assim. Eu sou muito cético sobre “X vai substituir os programadores humanos” . Desde que comecei a programar em 1997, já ouvi falar bastante sobre modismos como esse.
Provavelmente mudará a maneira como aprendemos a programar, como superamos bloqueios quando ficamos presos durante a programação, como lidamos com coisas chatas, mas nos substitua, homo sapiens, por mais do que CRUDs e aplicativos mundanos amplamente conhecidos, não, eu sou muito cético quanto a isso. Eu posso estar errado embora.
E saiba, finalmente, este artigo fecha o círculo com o que me motivou a escrevê-lo.
Ontem tive o prazer de tropeçar em um artigo incrível de Amy J. Ko , que foi uma verdadeira alegria de ler. Primeiro porque concordo com quase tudo que ela escreveu lá. Segundo, porque ao contrário de mim, ela é acadêmica e acompanha esse assunto há mais de uma década. Então ela definitivamente tem uma ou duas coisas para colaborar em toda essa discussão sem se envergonhar.
Portanto, faça um favor a si mesmo, corte o hype e leia estes artigos excelentes para obter uma melhor noção do tópico de diferentes pontos de vista:
- Grandes modelos de linguagem mudarão a programação... um pouco
- Grandes modelos de linguagem mudarão a programação... muito
Não há TLDR; lá. Leve o seu tempo, aproveite o passeio.
Agora, para terminar este longo artigo com uma coisa engraçada: eu costumava ver as pessoas tirando sarro dos acadêmicos o tempo todo, dizendo como a academia está longe do desenvolvimento de software do mundo real e, de repente, as pessoas ficam surpresas e enlouquecidas com uma coisa trazida à vida diretamente da pesquisa acadêmica. Que grande ironia. Que época boa para ser um acadêmico.
Enfim, até a próxima, pessoal.
Tenha cuidado com o hype.
⛧ Veja também em leandrosilva.com.br . Há muito mais lá.





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)