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

[PROIBIDO PARA SENIORS] - Porque você deve sempre questionar o ChatGPT, e porque juniors certamente terão dificuldades em fazer isso

Vamos imaginar um exemplo louco, aqui: eu tenho um conjunto com X palavras, organizadas aleatoriamente, e quero organiza-las como se fosse um jogo de dominó, onde a última letra de uma palavra precisa ser idêntica à primeira letra da palavra seguinte, como no exemplo abaixo:

>>> ESTADO - OVO - ORGANIZAR - RAQUETE - ELUCIDAR - REVÉS - SANTOS - SUBIDA - AMORA - ...

Pedi ao ChatGPT para criar um código em Python que realize essa organização. A resposta foi essa:

import random

def organizar_palavras(banco_palavras):
    palavra_inicial = random.choice(banco_palavras)
    banco_palavras.remove(palavra_inicial)
    resultado = [palavra_inicial]

    while banco_palavras:
        ultima_letra = resultado[-1][-1]
        proxima_palavra = None

        for palavra in banco_palavras:
            if palavra[0] == ultima_letra:
                proxima_palavra = palavra
                break

        if proxima_palavra:
            resultado.append(proxima_palavra)
            banco_palavras.remove(proxima_palavra)
        else:
            break

    return resultado

Se você estudou Análise de Algoritmos, já deve ter percebido qual é o problema. Para localizar a próxima palavra na ordenação, os nossos dois laços percorrem o conjunto todo!
Se o nosso conjunto tem 10 palavras, são 100 iterações; para 100 palavras, 10.000 iterações; para 10.000 palavras...

Entendeu? O negócio escala exponencialmente. E isso é horrível em termos de processamento. Imaginem só 100 mil usuarios acessando a nossa aplicação ao mesmo tempo? Não basta pedir pro tiozinho da infra escalar máquina. A pergunta é: "vai sair do bolso de quem?" 🤡

Então perguntei ao ChatGPT se não haveria uma solução mais econômica (a.k.a. com menor complexidade) para este problema. Só então o Gepeto propos algo melhor:

#Gepeto: "Sim, podemos melhorar a complexidade de tempo 
#utilizando um grafo direcionado para representar as conexões 
#entre as palavras. Dessa forma, podemos usar uma busca em 
#profundidade (DFS) para encontrar uma ordem válida. 
#A complexidade de tempo será O(n), onde n é o número de palavras.
#Aqui está uma implementação usando esse conceito:"

from collections import defaultdict

def construir_grafo(banco_palavras):
    grafo = defaultdict(list)

    for palavra in banco_palavras:
        grafo[palavra[0]].append(palavra)

    return grafo

def busca_em_profundidade(grafo, palavra, visitados, resultado):
    resultado.append(palavra)
    visitados.add(palavra)

    for proxima_palavra in grafo[palavra[-1]]:
        if proxima_palavra not in visitados:
            busca_em_profundidade(grafo, proxima_palavra, visitados, resultado)

def organizar_palavras(banco_palavras):
    grafo = construir_grafo(banco_palavras)
    resultado = []

    for palavra in banco_palavras:
        visitados = set()
        busca_em_profundidade(grafo, palavra, visitados, resultado)

        if len(resultado) == len(banco_palavras):
            return resultado

    return None

Ou seja

Por mais que LLMs sejam boas geradoras de código, ainda é necessário conhecimento por parte de quem utiliza a ferramenta, ou os resultados podem ser catastróficos. Ou então você sempre estará refem da máxima: "você não sabe o que você não sabe". Afinal, como você vai questionar a complexidade do código se você sequer sabe da existência disso?

Reforço aqui a necessidade em mergulharmos na teoria: engenharia, arquitetura, como funcionam as linguagens, VMs, compiladores... Só assim teremos condições de utilizar essas novas ferramentas e extrair o melhor delas.

DICAS DE ESTUDO RELACIONADAS AO TEXTO

  • Análise de algoritmos
  • Teoria dos grafos
  • Busca em profundidade

SOBRE O "PROIBIDO PARA SENIORS"

O objetivo dessa série é trazer assuntos que já são de domínio de quem já tem mais experiência na área, mas que ainda podem ser pouco claro aos iniciantes. Conto com o feedback de seniores e juniores. Mas que os seniors lembrem: aqui é proibido para vocês! :)

Carregando publicação patrocinada...
1

Muito bom, exceto pelo fato que elas não são bos geradores de código, sõs só geradores de código. è uma enorme coincidência quando o código é bom.

Você tenteou fazer ele melhorar? EU já fiz uns experimentos, tem cosias que é questão de prompt bom, o que dá para questionar porque o trabaljo pode ser tão grande que não compensa o uso, tem caso que não tem jeito, ele errará sempre.

O melhor é a conclusão que o ChatGPT ajudar´sêniores e prejudicará muito júniores, em duas frentes, tirarão seus empregos porque em algum momento porque a máquina fará melhor, e porque quando a máquina não fizer melhor, ele usará assim memso e entregará algo ruim, e vai negligenciar ainda mais seu desenvolvimento para ser sênior.

"Mas é fácil escalar, só botar mais máquinas". Eu sei disso porque estou vendo muita gente fazer isso, adotando microsserviços por causa disso. "É bem mais fácil que reduzir a complexidade do algoritmo que a pessoa "escolheu"".

Eu sou Junior. Posso provar, quer ver meu documento? :)

Espero ter ajudado. Em geral estou à disposição na plataforma (sem abusos :D)


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).

2

Todo mundo é júnior de alguém, não é mesmo? hehhe

E eu confesso não ter muita paciência para LLMs. As poucas vezes que insisti, elas mais me atrapalharam do que ajudaram (mas aí pode ser porque eu não soube usar, ne... Tô longe de ser senior...)

3

Eu sou Junior mesmo. Nem todo mundo é como eu sou :D

A questão disso que falou é justamente o assunto da postagem original. Só um júnior vê valor amplo em LLM. Ele tem algum valor se souber usar, mas não tanto assim.

É semelhante a alguns frameworks (não todos). O valor existe para quem não sabe programar.

Quando a pessoa vai cominhando para a senioridade ela começa ser atrapalhada por essas facilidades. Mas se não atrapalhar, ela saberá. O júnior não sabe, usa e se atrapalha.

E não tem muito o que fazer. Conscientizar ajuda, mas a gente sabe que a maioria não vai ouvir. É como falar para não dirigir bêbado, a pessoa já não vai ligar muito, mas se estiver bêbado, menos ainda. Algumas pessoas não são júniores, são júniores bêbados. Aqui nem tem tanto, mas tem lugar que você vê muito isso.

1
0
0