9 Maneiras que A. I. e ChatGPT podem te ajudar no desenvolvimento de software

9 Maneiras que A. I. e ChatGPT podem te ajudar no desenvolvimento de software
Photo by Andy Kelly / Unsplash

É fato que as Artificial Intelligences (ou A. I., como chamaremos aqui) vieram para ficar e cada dia conquistam mais e mais espaço em todo o mundo. É fato também que muitos que trabalham diretamente com tecnologia estão tendo pesadelos à noite por enxergarem na A. I. uma ameaça aos seus empregos.

Afinal, as A. I. vão substituir os programadores? É verdade que ainda não temos a dimensão de todos os impactos da A. I. na sociedade, porém, eu acredito que com certeza, longe de ser uma ameaça, veio para te ajudar, Dev! E é por isso que, neste artigo, quero mostrar como ela pode ser uma ferramenta poderosa nas suas mãos e como você pode se beneficiar dela para melhorar muito o seu dia a dia. Talvez,  A. I. seja aquilo que você sempre sonhou.

Vamos dar maior foco ao famoso ChatGPT, que tem aparecido cada vez em escalas maiores nas discussões públicas. Desenvolvido pela OpenAI, empresa referência nos estudos e desenvolvimento de A. I., o ChatGPT é um modelo treinado para interagir de maneira conversasional. Em outras palavras, você pode fazer as mais diversas perguntas, sobre os mais diferentes assuntos e, em questão de segundos, receber uma resposta, quase sempre acertada. Você já deve ter interagido com ChatBots anteriormente e talvez a sua experiência nem foi a mais agradável, pois o ChatBot não soube te entender tão bem. Porém, quando se fala do ChatGPT, se fala de A. I. de outra dimensão.

Imagine falar com alguém que já tenha lido todos os livros já escritos, tenha decorado todos os mapas deste planeta, tenha lido quase todos os artigos científicos e trabalhos acadêmicos públicos, esteja a par das notícias de todos os jornais e revistas do mundo e tenha o código fonte e documentação de todas as tecnologias disponibilizadas publicamente? Pois bem, eis o ChatGPT. E o melhor: está à sua disposição para te responder personalizadamente em poucos segundos!

Pesquisando a respeito, encontrei uma publicação maravilhosa do Santiago Valdarrama, que tem atuado neste campo de A. I. por anos. Na publicação, Santiago mostrou algumas maneiras que o ChatGPT pode aumentar 100x mais o poder de desenvolvedores quando estão programando. Decidi verificar se era tudo isso mesmo e, sinceramente, me surpreendi com o resultado. Espero que você também. É claro, não deixe também de acompanhar a publicação do Santiago clicando aqui.

Agora, vamos ao que interessa. O ChatGPT pode:

1. Explicar um código que você não está entendendo

Se deparou com um código que está com dificuldade de entender? Você não precisa se dar ao trabalho de gastar tanto tempo tentando entendê-lo, simplesmente informe o código ao ChatGPT e peça para ele o explicar.

Quando li sobre, fui bem cético e decidi comprovar se ele saberia mesmo me explicar. Peguei o trecho do seguinte código em React e pedi a explicação:

import { Fragment } from 'react'
import { useSelector } from 'react-redux'

import Counter from './components/Counter'
import Header from './components/Header'
import Auth from './components/Auth'
import UserProfile from './components/UserProfile'

function App() {
  const isAuth = useSelector(state => state.auth.isAuthenticated)

  return (
    <Fragment>
      <Header />
      {!isAuth && <Auth />}
      {isAuth && <UserProfile />}
      <Counter />
    </Fragment>
  );
}

export default App

E olha que incrível a resposta que recebi:

Certo. Mas eu decidi complicar mais e passei um código com uma lógica mais confusa e ele me respondeu corretamente. Veja só:

2. Melhorar um código que você tenha escrito

Você pode pedir para o ChatGPT melhorar um código que você tenha escrito. Aliás, você pode ser ainda mais exigente, dizendo exatamente o atributo que você quer melhorar.

Eu desenvolvi uma função propositalmente verbosa e errada para um jogo de Tower Breakers, que é a seguinte:

function towerBreakers(quantity, height) {
    let winner = {
      player1: false,
      player2: false
    }

    const towers = {}
    for (let i = 1; i <= quantity; i++)
      towers[`tower${i}`] = height
      
    function isDivideBy(number, divisor) {
      return (number % divisor === 0)
    }
    
    function changeWinner({ player1, player2 }) {
        if (!player1 && player2) {
            return { player1: true, player2: false }
        }
        
        return { player1: false, player2: true }
    }
 
    do {
      for (let i = 1; i <= Object.values(towers).length; i++) {
        for (let j = 0; j < towers[`tower${i}`]; j++) {
          const isDivisible = isDivideBy(towers[`tower${i}`], j)
          if (isDivisible) { 
            towers[`tower${i}`] = towers[`tower${i}`] / j
            winner = changeWinner(...winner)
          }
          break
        }
      }
    } while (!winner.player1 && !winner.player2)
    
    if (winner.player1) return 1
    
    return 2
}

Em seguida, eu pedi para que ele me retornasse a função da maneira mais rápida e curta possível. Ele não só me trouxe exatamente o que pedi, como também me deu a explicação da lógica do algoritmo:

3. Traduzir o código para outra linguagem

Está em fase de troca de uma linguagem ou viu uma solução escrita originalmente numa linguagem que você não está utilizando no seu atual projeto? Simplesmente, peça para o ChatGPT traduzir.

Apresentei a seguinte função em Python:

def dynamicArray(n, queries):
    # Write your code here
    seq_list=[[] for i in range(n)]
    lastanswer=0
    result=[]
    #main logic
    for q,x,y in queries:
        if q==1:
            idx=(x^lastanswer)%n
            seq_list[idx].append(y)
        else:
            idx=(x^lastanswer)%n
            v=y%len(seq_list[idx])
            lastanswer=seq_list[idx][v]
            result.append(lastanswer)
    return result

Olha só a resposta:


Porém, aqui o ChatGPT, errou. Testei a função e ela não passou nos testes de unidade. Informei isso e pedi para que ele escrevesse outra corretamente. Ele não só polidamente pediu desculpas, como me retornou a função correta e explicou cada mudança:

4. Criar uma versão mais simples do código

Está com um código complexo em mãos e não faz ideia de como o tornar mais simples? Peça para o ChatGPT te ajudar.

No caso abaixo, eu passei uma função de cifra de césar que eu gostaria de simplificar e o ChatGPT realmente me trouxe um versão menos complexa. Veja como fiz a pergunta:

Confere só a resposta:

5. Escrever casos de testes e os próprios testes

Já falei aqui em outro momento sobre a importância do código de teste. Entretanto, é verdade que imaginar todos os cenários possíveis pode ser desafiador. Deseja então ter um horizonte maior sobre o que testar? Peça para o ChatGPT.

Pedi que me mostrasse os possíveis testes para a função de cifra de César que apresentei no item anterior e olha que resposta maneira ele me deu:

Ainda não satisfeito, eu pedi para o ChatGPT me escrever o teste de unidade de ao menos um dos cenários que ele me listou. Veja só a resposta:

Aqui, já deve ter ficado claro o quanto o ChatGPT pode ser útil para QAs em diversos momentos, como por exemplo escrever o cenários que comporão o documento para aplicação do BDD.

6. Escrever uma versão alternativa do código

Já teve aquela preocupação de estar escrevendo o melhor código? Já quis, por exemplo, ter uma versão alternativa para um código que você escreveu para fazer uma comparação e talvez até uma refatoração? Pois bem, você pedir isso ao ChatGPT.

Pedi o seguinte no chat:

Olha só a resposta dele:

7. Escrever a documentação do seu código

Embora seja de uma importância vital, é verdade que a documentação enfastia muitos desenvolvedores. Muitos amam escrever código, mas quando se fala em desenvolvedor a documentação para esse mesmo código ...

Mas, olha só que maneiro: o ChatGPT pode te ajudar a escrever a documentação e minimizar o tempo que você gasta. Fala se não é isso que você sempre sonhou?

Eu peguei o seguinte trecho de código que escrevi para aplicar o Redux em um projeto e pedi para o ChatGPT escrever a documentação do código:

const redux = require('redux')

const counterReducer = (state = { counter: 0 }, action) => {
  if (action.type === 'increment') {
    return {
      counter: state.counter + 1
    }
  }

  if (action.type === 'decrement') {
    return {
      counter: state.counter - 1
    }
  }

  return state
}

const store = redux.createStore(counterReducer)

console.log(store.getState())

const counterSubscriber = () => {
  const latestState = store.getState()
  console.log(latestState)
}

store.subscribe(counterSubscriber)

store.dispatch({ type: 'increment' })
store.dispatch({ type: 'decrement' })

No código acima, dá para notar que apliquei quase todos os principais conceitos do Redux, como a função reducer, o state, action, dispatch, etc. E olha que incrível: ele documentou tudo:

8. Debugar o código e te informar o que está errado

Já passou horas tentando encontrar sem sucesso onde estava o erro em um código? Já foi dormir armagurado e frustrado por não conseguir identificar o erro naquele bendito (ou maldito) projeto? Peça para que o ChatGPT te ajude a encontrar. Um trabalho de horas será feito em segundos.

Eu não quis facilitar a vida dele. Quis ver se ele realmente era capaz de debugar um problema encrencado. Escrevi um código com um problema com a palavra chave this que confunde muitos desenvolvedores.

const matilda = {
  name: 'Matilda',
  year: 2017,
  calcAge: function () {
    console.log(this)
    console.log(2037 - this.year)

    const isMillenial = () => {
      console.log(this)
      console.log(this.year >= 1981 && this.year <= 1996)
    }
    isMillenial()
  },
  greet: () => console.log(`Hey ${this.name}`)
}

matilda.greet()

O problema do código acima é o seguinte: quando chamarmos a função greet, o console vai exibir um valor undefined. E, por quê? No objeto acima, a função greet está escrita como arrow function, tipo de função na qual a palavra this vai ser apontada para o escopo global da função e não para as propriedades do objeto na qual ela se encontra; como no escopo global não existe nenhuma variável name, então, será exibida um valor undefined.

Bem, joguei o problema para o ChatGPT e será que ele conseguiu identificar onde estava o erro?

Confira com seus próprios olhos a resposta:

9. Ajudar na modelagem do teu domínio

Bem, aqui já não estamos mais falando do ChatGPT, mas do HerbsJS, framework que te ajuda a resolver problemas relacionados a complexidade do teu domínio.

O HerbsJS conta com o Herbs Assist, assistente A. I. que, utilizando como base o OpenAI Codex, te ajuda a criar usecases e specs, simplificando assim, muito do seu trabalho, pois basta prover as informações do que você precisa e o Herbs Assist cria para você.

Para usar o Herbs Assist, existem duas condições:

  • Ter o Herbs Cli instalado globalmente em sua máquina (o passo a passo para instalação você encontra clicando aqui);
  • As chaves organizacional e pessoal do OpenAI Codex (clique aqui para gerar sua chave pessoal e aqui para saber como obter a organizacional);

Com as condições acima, basta digitar herbs assist no seu terminal para visualizar um menu de opções perguntando o que você deseja gerar, como na tela abaixo:

No meu exemplo, quis gerar um usecase para uma API disposta a tratar as complexidades de negócio de uma cafeteria. O Herbs Assist perguntou qual era o nome do usecase que eu deseja criar e em seguida em qual grupo ele se encaixava. Como não existia nenhum grupo para o meu novo usecase, ele me deu a opção de criar um novo grupo, como pode ser visto abaixo:

Feito isso, olha que incrível, o Herbs Assist gerou o usecase e arquivo spec para minha API, conforme o solicitado:

A.I. Não Vai te Substituir, Mas ...

Com isso, não quero dizer que você deve colocar todo o seu trabalho nas costas do ChatGPT, Herbs Assist e A.I., mas, sem dúvidas, são ferramentas poderosas para te ajudar em seu dia a dia. O ChatGPT não é infalível. Ele tem suas falhas e limitações e, por isso mesmo, é uma ferramenta. É verdade também que A.I. vão impactar todas as profissões, mas quero te mostrar que o posicionamento correto é o que procurar estudar e inteirar sobre esse assunto para assim o usar em seu favor.

E quero concluir aqui dizendo: A.I. não vão te substituir, mas pessoas que sabem usar vão.