paint-brush
Programadores de treinamento GPT-3 para o presente (e o futuro)por@mcsee
3,325 leituras
3,325 leituras

Programadores de treinamento GPT-3 para o presente (e o futuro)

por Maximiliano Contieri2022/06/27
Read on Terminal Reader
Read this story w/o Javascript

Muito longo; Para ler

O mercado atual procura programadores para empilhar tijolos usando linguagens da moda. Esses profissionais são treinados em ferramentas específicas que possuem ciclos de vida muito curtos e depois se tornam obsoletas. Em 2021 já existem inúmeras alternativas à inteligência artificial e ao aprendizado de máquina, capazes de realizar programação de baixo nível e tarefas algorítmicas. Devemos focar na formação desses conceitos para que os profissionais possam facilmente migrar de uma tecnologia para outra tecnologia (também acidental e, portanto, rapidamente obsoleta). A ameaça da inteligência artificial ainda é a mesma das profissões automatizáveis e obsoletas.

People Mentioned

Mention Thumbnail

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Programadores de treinamento GPT-3 para o presente (e o futuro)
Maximiliano Contieri HackerNoon profile picture

Escrevi um artigo em espanhol e pedi a "outra pessoa" para reescrevê-lo


No ano passado, escrevi um artigo em espanhol sobre o futuro dos programadores.


TL;DR: Em vez de traduzir manualmente meu artigo, decidi reescrevê-lo completamente com GPT-3 .


Da mesma forma, o The Guardian perguntou ao GPT-3 quando estava em beta privado.


Quando pedi para traduzir o artigo, decidiu que o título não era bom o suficiente.

Então mudou para presente E futuro

😱Assustador, não é?


Vamos continuar.


Portanto, este é o artigo original reescrito pelo GPT-3:


O papel

// Traduza isso para o inglês e converta-o em um artigo técnico:

Resumo

O mercado atual procura programadores para empilhar tijolos (1) usando suas linguagens da moda. Esses profissionais são treinados em ferramentas específicas que possuem ciclos de vida muito curtos e depois se tornam obsoletas.


Atualmente existem alternativas para realizar desenvolvimentos computacionais utilizando pessoas inteligentes, capazes de tomar suas próprias decisões e participar do processo criativo.


Os programadores do futuro deverão ser excelentes e declarativos (2). Profissionais que conhecem algoritmos e complexidade e que sabem fazer

Introdução

A maioria dos desenvolvedores no mundo está fazendo alterações em sistemas antigos ou precisa usar bibliotecas ou estruturas preexistentes complexas sobre as quais eles têm pouco controle e poucas oportunidades de modificar. (3)


Na indústria de software atual, é muito improvável encontrar a necessidade de desenvolver do zero, com uma página completamente em branco.


A expectativa de vida específica de um programador envelhece junto com a linguagem da moda. Esse tempo costuma ser inferior a uma década, por isso a indústria descarta os profissionais como obsoletos antes dos dez anos de formação. (4)


Nas últimas décadas, estiveram na moda como supostas balas de prata (5), linguagens como Visual Basic, C++, Java, Php, Perl, Javascript, Ruby, Python e GoLang.

Alguns deles já estão deixando de ser usados, deixando seu lugar para novas modas. (6)


Os conceitos gerais (que Frederick Brooks chama de essenciais (7)) são melhor absorvidos em nosso primeiro estágio acadêmico. Devemos focar na formação desses conceitos para que os profissionais possam facilmente migrar de uma tecnologia (que Brooks chama de acidental) para outra tecnologia (também acidental e, portanto, rapidamente obsoleta).

A ameaça

Em 2021 já existem inúmeras alternativas à inteligência artificial e aprendizado de máquina, capazes de realizar programação de baixo nível e tarefas algorítmicas (8) (9).

Máquinas virtuais modernas (aquelas que interpretam a linguagem de alto nível em que programamos e que existem, por exemplo, em navegadores da web) otimizam o código para nós. (10)


À medida que a tecnologia avança, os programadores de baixo nível não serão mais necessários da mesma forma que ninguém procura bibliotecários hoje (11). Semelhante ao que acontece com outras profissões automatizáveis ​​e obsoletas. (12)


Nossa profissão ainda se baseia em ensinar programação imperativa de baixo nível, como se estivéssemos enfrentando os problemas dos anos 1960 ou 1970, quando o hardware especializado eram os cartões perfurados e as máquinas de fita aberta.


Educamos nossos alunos para realizar otimizações algorítmicas absurdas e obsoletas, muito próximas da linguagem das máquinas e muito distantes da modelagem de entidades do problema que estamos representando em nossa solução computacional.


Formamos profissionais para entender como um computador funciona e se rebaixar a falar em sua linguagem, formando modelos mentais de baixo nível e tentando raciocinar da forma algorítmica com que uma máquina de Turing processa.


Porém, hoje podemos desenvolver modelos semânticos com várias camadas de abstração acima conforme nos aproximamos dos modelos mentais declarativos nos afastamos ao mesmo tempo das abstrações computáveis ​​das máquinas. As linguagens de programação mais declarativas nos permitem raciocinar e inferir regras sobre nossos modelos. Contra essa tendência, nossos alunos escrevem suas instruções com base em uns e zeros.


A lei de Moore (14) nos fala sobre a velocidade de mudança do hardware e seu crescimento exponencial no poder de processamento. No que diz respeito ao software, crescemos linearmente limitados pelas realidades de muitas décadas atrás e pela inércia dos treinadores. Em analogia com a teoria econômica malthusiana (15), precisamos alcançar a curva do hardware para poder liberar todo o nosso potencial antes que as máquinas o façam por nós.


A falta de abstração e compreensão da realidade é sintoma de uma mentalidade inercial, baseada nas restrições de tempo dos processadores e armazenamento dos anos 60 e 70. Essas restrições estão limitadas hoje a domínios muito específicos e não são representativas dos problemas que temos que resolver hoje como engenheiros de software na maioria de nossos trabalhos. (16)

A alternativa

Precisamos formar generalistas, mas não teóricos. Pessoas que entendem os fundamentos da engenharia de software e podem se adaptar a implementações acidentais baseadas em ferramentas atuais, mas também futuras que ainda não conhecemos hoje.


Conceitos como design de software, modelos de ciclo de vida, trabalho em equipe e construção de uma teoria compartilhada (17), integração contínua e implantação ou arquitetura são muito mais importantes do que aprender a minimizar o uso da CPU, usar o React, o framework Vue ou a biblioteca Keta .


"É muito difícil fazer previsões, principalmente sobre o futuro". Essa frase, atribuída ao grande Niels Bohr, nos diz que devemos ter cuidado ao tentar antecipar o futuro.

Parafraseando o Prêmio Turing de 2004 (18) Alan Key, disse: "A melhor maneira de prever o futuro é inventá-lo".


Não sabemos ao certo qual será o caminho da automação de máquinas, mas podemos prever que a parte mais criativa e de engenharia de nossa profissão deve ser um dos últimos bastiões a cair antes da automação.


A próxima geração de desenvolvedores de software terá que concentrar suas habilidades em design, modelagem do mundo real e criação de abstrações que evoluem junto com o domínio do problema para evitar a construção de software obsoleto e legado (19).


Esta abordagem estratégica não se limita apenas ao desenvolvimento de carreiras. Na ciência de dados existem problemas semelhantes: cientistas de dados focados em otimizar algoritmos existentes em vez de formar profissionais generalistas, capazes de entender os problemas acadêmicos e comerciais de nosso país com uma bateria de soluções e bons critérios para determinar qual escolher em cada situação. Eles devem ser treinados para modelar o problema real e avaliar diferentes soluções possíveis.


Os profissionais de ciência de dados possuem uma variedade incrível de ferramentas para ajustar seus modelos. Ainda estamos longe de encontrar o segundo "superalgoritmo" (20) capaz de resolver problemas específicos com uma solução genérica. Nossos futuros profissionais têm o único computador de propósito geral que pode resolver razoavelmente vários problemas específicos: Suas mentes brilhantes.


Nossa responsabilidade é alimentar e estimular esses cérebros com problemas reais e não com soluções de brinquedo que os computadores resolvem (já em 2020) com muito mais eficiência.


Paradoxalmente, desperdiçar nossos cérebros pedindo que eles façam otimizações de baixo nível para máquinas é a pior maneira de otimizar nosso recurso mais caro.


Historicamente, temos privilegiado o desenvolvimento de ferramentas muito específicas e teóricas. Isso é muito comum e desejável na ciência porque os avanços teóricos geralmente precedem implementações e usos concretos por décadas.


No entanto, no desenvolvimento de software, as descobertas e descobertas são encontradas principalmente no setor privado antes da academia. Nossos profissionais devem ser treinados em metodologia e conceitos acima de tecnologias e linguagens acidentais da moda. Isso gera tensão entre o mercado que quer “implementadores especialistas em uma ferramenta” para descartá-los quando cumprir seu ciclo de moda de 5 ou 10 anos.


Nossos profissionais não devem ser descartáveis ​​ou recicláveis. Devemos treiná-los em técnicas e eles devem manter-se constantemente atualizados, como acontece em outras profissões como medicina, física ou biotecnologia.

O que precisamos ensinar?

Além de habilidades "soft" como construção e trabalho em equipe (uma vez que o software surge de uma atividade coletiva) (17), devemos ensinar técnicas de design e prototipagem para validar nossas soluções de alto nível.


Quanto ao software, é imperativo ensinar desenho de soluções, focando no comportamento dos nossos modelos e, parafraseando Donald Knuth (21), o autor histórico da maioria dos algoritmos que usamos hoje, evitando otimizações prematuras porque queremos jogar um jogo que as máquinas dominam muito melhor do que nós.

A oportunidade

A formação de talentos é uma opção acessível para qualquer país com bom nível acadêmico, como a Argentina.


Investir na formação de excelentes engenheiros de software é uma decisão estratégica e uma oportunidade de decolagem que já foi explorada por muitos outros países como Estônia, Irlanda, Israel e Índia. A Fundação Sadosky está atualmente trabalhando nessa direção. (22)


Na Argentina, temos excelentes professores, bom nível de inglês, fuso horário imbatível para dialogar com EUA e Europa e uma cultura compatível com os países mais desenvolvidos. Precisamos priorizar as tecnologias da informação e, dentro delas, formar engenheiros inteligentes e declarativos em vez de programadores mecanizados e otimizadores de baixo nível.

O que devemos ensinar aos nossos engenheiros?

Nossos profissionais devem ter conhecimentos básicos de programação, algoritmos, complexidade e banco de dados.


Acima de tudo, devem aprender a fazer designs baseados em modelos de integração contínua e implantação contínua, com testes automatizados, utilizando técnicas ágeis como o Test-Driven Development. (23)


O software produzido deve ser declarativo e baseado no comportamento desejado (e especificado nos testes funcionais automatizados); devemos parar de pensar no paradigma reinante dos anos 60 e 70, baseado em tipos de dados e manipulações de arquivos e strings, para focar em modelos de alto nível que acompanham a simulação de qualquer aspecto do mundo real que queremos representar para resolver um problema determinado problema. (24)


As técnicas de design baseadas no comportamento são agnósticas em relação à tecnologia acidental da moda e isso permite que um engenheiro formado com esses conceitos há 30 anos seja capaz de fazer desenvolvimentos concretos ainda hoje.


Infelizmente, tal situação não é replicada por programadores que dominam alguma linguagem da moda, que praticamente não tem utilidade e que os faz não encontrar boas opções no mercado de trabalho. O paradoxo é que um comércio com pleno emprego descarta esses profissionais por não terem conseguido se adaptar. (25)


A mudança, atualmente, é ainda mais vertiginosa. As tecnologias duram muito menos e a obsolescência nos persegue, a menos que sejamos inteligentes e amplos e tenhamos o treinamento apropriado.

Trabalho futuro

Este é um artigo de opinião. Como trabalho futuro para sustentar a presente tese, devemos realizar um estudo quantitativo incluindo dados sobre rotatividade de funcionários (25), tempo médio em cada função de acordo com a idade e estudos concluídos, etc.

Para isso, devemos usar técnicas relacionadas às ciências sociais sob uma abordagem multidisciplinar.

Conclusões

O futuro já chegou. Não temos muita ideia de como será o trabalho de um programador daqui a 5 ou 10 anos, mas temos fortes indícios de que não estará relacionado a escrever algoritmos baseados em estruturas de dados. Devemos formar profissionais que entendam rapidamente um problema da vida real e saibam construir simuladores com saltos conceituais muito pequenos, para que possam evoluir junto com os problemas que estamos resolvendo hoje.

Agradecimentos

Parte das idéias deste artigo nasceu do trabalho docente no curso de Engenharia de Software no curso de Ciência da Computação da Faculdade de Ciências Exatas da Universidade de Buenos Aires.

  1. GoLangName
  2. programação declarativa
  3. Código legado
  4. Programadores obsoletos
  5. Sem bala de prata
  6. idiomas da moda
  7. Não há bala de prata
  8. Codificador Profundo
  9. Codificação Aumentada
  10. Processar Máquinas Virtuais
  11. Bibliotecários obsoletos
  12. Futuro do trabalho na Argentina
  13. máquina de Turing
  14. Lei de Moore
  15. Modelo de crescimento malthusiano
  16. Software empresarial
  17. construção de teoria
  18. Prêmio Turing
  19. software herdado
  20. IA geral
  21. Knuth - A arte da programação de computação
  22. Fundação Sadosky
  23. Desenvolvimento orientado a testes
  24. Pensamento Objeto
  25. línguas mortas
  26. rotatividade de programadores

A tradução é precisa e bonita.


Eu verifiquei com o aplicativo Grammarly e Hemmingway e encontrei apenas alguns erros gramaticais.


Como um exemplo:

Trabajo Futuro (espanhol para trabalhos futuros)

Este é um artigo de opinião. Como trabalho futuro para apoyar la presente tese debe realizar un trabajo cuantitativo incluindo cifras de rotación de empleados (25), time promedio en cada trabajo según la edad y los estudios realizados etc. multidisciplinar.



Traduz em GPT-3 como:


Este é um artigo de opinião. Como trabalho futuro para sustentar a presente tese, devemos realizar um estudo quantitativo incluindo dados sobre rotatividade de funcionários (25), tempo médio em cada trabalho de acordo com a idade e estudos realizados etc. Para isso, devemos usar técnicas relacionadas às ciências sociais sob uma perspectiva multidisciplinar.



Enquanto o Google Translate rende:


Trabalho futuro

Este é um artigo de opinião. Como trabalho futuro para sustentar esta tese, devemos realizar um trabalho quantitativo incluindo números de rotatividade de funcionários (25), tempo médio em cada trabalho de acordo com a idade e estudos realizados, etc. Para isso devemos usar técnicas relacionadas às ciências sociais sob um abordagem multidisciplinar.

Calibração do modelo

Usei o modelo text-davinci-002 com temperatura 0 (aleatoriedade) e comprimento máximo 2000 tokens

Parecer GPT-3

Qual é a sua opinião sobre este artigo?


Acho que este artigo apresenta alguns pontos válidos sobre o futuro da programação e a necessidade de os programadores se adaptarem às mudanças. Concordo que a indústria está caminhando para soluções mais automatizadas e que isso acabará levando a uma diminuição da necessidade de programadores. No entanto, acho que sempre haverá a necessidade de programadores capazes de entender e resolver problemas complexos.


😱(Assustador de novo!!)

Meta Conclusão

Definitivamente, continuarei usando o GPT-3 para escrever artigos técnicos para melhorá-los.