Ricerca nel sito web

Claude vs. ChatGPT vs. Gemini: li ho testati su una vera sfida di programmazione e uno ha dominato


Probabilmente hai visto il meme in cui un ragazzo apre tutti i chatbot AI più popolari in diverse schede del browser, fornisce loro lo stesso prompt di programmazione, controlla l'output di ciascuno e poi copia quello migliore. Per un momento, ho pensato di fare lo stesso esperimento. Così, ho scelto tre delle AI più popolari e ho dato loro lo stesso problema da risolvere. Ecco come si è comportato ciascuno.

Scegliere un problema adatto e i criteri di valutazione

Non troppo facile, non troppo difficile, trovare quel dolce punto medio

Per questo test, ho fatto un brainstorming su che tipo di sfida di programmazione potessi scegliere. Non volevo scegliere qualcosa come "trovare duplicati in una lista" perché la maggior parte delle IA lo affronterebbe nello stesso modo. Non volevo nemmeno provare un problema in stile LeetCode perché sarebbe stato troppo complicato per molti.

Inoltre, volevo anche testare con qualcosa di riconoscibile dalla maggior parte delle persone, che avesse una sorta di funzionalità nel mondo reale e che non avesse una risposta definita. In particolare, il fatto di non avere una risposta definita lo rende più interessante poiché potrei osservare il livello di pensiero e creatività di ciascuna IA.

Con questo, il problema su cui ho finalmente deciso è stato "controllo della forza della password." Di solito li vedi in azione quando ti registri a un servizio. Quando crei una password, il sistema spesso ti mostra quanto è forte la tua password e cosa devi fare per renderla più sicura.

Posso usare questo programma per testare quanto bene ogni IA progetta le soluzioni, il loro stile di programmazione, se seguono le migliori pratiche, la facilità d'uso e se le soluzioni sono standard industriali. I punteggi saranno basati su questi criteri.

Progettare il prompt

Osservare quanta guida ogni chatbot necessita per raggiungere la sua soluzione migliore

Matt Klein/DALL-E 3/How-To Geek

Con il problema della sfida risolto, è ora di pensare alle tecniche di prompting. Per mantenere le cose eque, darò a ChatGPT, Gemini e Claude lo stesso primo prompt. La loro prima risposta sarà il fattore decisivo più importante per il punteggio. Dopo il primo prompt, potrei dare alcuni prompt di follow-up, come spiegare la soluzione, gestire i casi limite, rifattorizzare il codice, ecc., a seconda della loro risposta.

Ecco il primo prompt:

Write a Python function that checks the strength of a password and labels it as Weak, Medium, or Strong.

Explain your logic clearly for a beginner.

L'ho mantenuto abbastanza breve e semplice. Questo serve a vedere quanto lo strumento AI può pensare da solo senza che io dia istruzioni esplicite.

ChatGPT

Codice pulito, spiegazione nella media

Per la sfida, ho usato la versione gratuita normale di ChatGPT sul web. Il modello utilizzato era GPT 5.2. Ecco la soluzione che ho ricevuto:

import re

def check_password_strength(password):
    length = len(password)
    
    # Conditions
    has_lower = re.search(r"[a-z]", password)
    has_upper = re.search(r"[A-Z]", password)
    has_digit = re.search(r"[0-9]", password)
    has_special = re.search(r"[!@#$%^&*(),.?\":{}|<>]", password)
    
    score = 0
    
    # Scoring rules
    if length >= 8:
        score += 1
    if has_lower:
        score += 1
    if has_upper:
        score += 1
    if has_digit:
        score += 1
    if has_special:
        score += 1
    
    # Strength levels
    if score <= 2:
        return "Weak"
    elif score == 3 or score == 4:
        return "Medium"
    else:
        return "Strong"

ChatGPT ha usato il modulo re di Python per la ricerca di caratteri, il che è interessante. Per un livello principiante, però, mi aspettavo che venisse utilizzata la logica generale di Python invece delle espressioni regolari. ChatGPT ha chiesto alla fine della sua risposta se volevo una versione che usasse il Python di base invece delle regex. Per il resto, il codice sembra davvero pulito e comprensibile, anche per un principiante.

I commenti aggiunti al codice sono basilari, non spiegano cosa stia facendo. Si limitano a descrivere la sezione. La spiegazione fornita da ChatGPT dopo la sezione di codice era buona. Ha analizzato sezione per sezione, spiegando cosa faceva ogni parte. Ma non era eccellente.





Infine, la soluzione è stata mantenuta breve fornendo la funzione Python che avevo richiesto. Non si tratta di un programma completo che richiede input, fornisce feedback sulla password (come un numero mancante) o addirittura stampa qualche messaggio, rendendolo un po' meno user-friendly e tutt'altro che codice di livello produttivo. L'unica altra cosa che ChatGPT ha fornito sono state alcune righe di test:

print(check_password_strength("abc"))          # Weak
print(check_password_strength("abc12345"))     # Medium
print(check_password_strength("Abc@12345"))    # Strong

Gemelli

Sistema debole, codice ed spiegazione adatti ai principianti

Per i Gemelli, ho scelto la versione web gratuita con il modello Gemini 3 Fast. Ecco la soluzione di Gemini:

def check_password_strength(password):
    # Initialize our score
    score = 0
    length = len(password)
    
    # 1. Check Length
    if length >= 8:
        score += 1
        
    # 2. Check for Uppercase letters
    has_upper = any(char.isupper() for char in password)
    if has_upper:
        score += 1
        
    # 3. Check for Numbers
    has_digit = any(char.isdigit() for char in password)
    if has_digit:
        score += 1

    # Final Labeling Logic
    if length < 5:
        return "Very Weak (Too short!)"
    
    if score == 3 and length >= 10:
        return "Strong"
    elif score >= 2:
        return "Medium"
    else:
        return "Weak"

# Testing the function
print(f"'12345': {check_password_strength('12345')}")
print(f"'Password123': {check_password_strength('Password123')}")
print(f"'qwerty': {check_password_strength('qwerty')}")

Gemini ha optato per un approccio Pythonic invece di usare le regex, utilizzando espressioni generatore, metodi integrati e la funzione any(). I commenti nel codice sono più descrittivi, spiegando cosa accade in ogni sezione. Anche la sezione di spiegazione dopo il codice è stata un buon miglioramento. Ha spiegato chiaramente ogni sezione e persino ogni riga.

Tuttavia, a differenza del codice di ChatGPT, è meno pulito. Sarebbe apparso meglio se i controlli fossero stati raggruppati insieme e le condizioni di punteggio fossero state raggruppate insieme. Ma Gemini ha messo il controllo e il punteggio correlato insieme, rendendo il codice meno leggibile.

Il problema più grande con il codice di Gemini è il suo sistema di valutazione. Non c'è alcun controllo per le lettere minuscole, nessun controllo per i caratteri speciali, rendendo il programma inadatto all'uso reale. Anche una password debole sarà mostrata come forte in questo sistema.

Claude

Il chiaro vincitore con un margine enorme

Arrivando al nostro ultimo concorrente, Claude. Per questo, ho usato la versione web gratuita, selezionando il modello Sonnet 4.6. Ecco il risultato:

import re

def check_password_strength(password):
    """
    Checks the strength of a password and returns a label:
    'Weak', 'Medium', or 'Strong'.
    """
    score = 0
    feedback = []

    # --- Rule 1: Length ---
    # Longer passwords are exponentially harder to crack.
    if len(password) >= 12:
        score += 2          # Big bonus for long passwords
    elif len(password) >= 8:
        score += 1          # Minimum acceptable length
    else:
        feedback.append("Use at least 8 characters.")

    # --- Rule 2: Uppercase letters (A-Z) ---
    # Mixing cases increases the number of possible combinations.
    if re.search(r'[A-Z]', password):
        score += 1
    else:
        feedback.append("Add at least one uppercase letter.")

    # --- Rule 3: Lowercase letters (a-z) ---
    if re.search(r'[a-z]', password):
        score += 1
    else:
        feedback.append("Add at least one lowercase letter.")

    # --- Rule 4: Digits (0-9) ---
    if re.search(r'[0-9]', password):
        score += 1
    else:
        feedback.append("Add at least one number.")

    # --- Rule 5: Special characters ---
    # Symbols dramatically expand the character set an attacker must guess from.
    if re.search(r'[!@#$%^&*(),.?":{}|<>]', password):
        score += 2          # Big bonus — special chars are very effective
    else:
        feedback.append("Add at least one special character (e.g. !, @, #).")

    # --- Scoring ---
    # Max possible score = 7 (2+1+1+1+2)
    if score >= 6:
        label = "Strong 💪"
    elif score >= 4:
        label = "Medium ⚠️"
    else:
        label = "Weak ❌"

    return label, score, feedback


# ── Demo ──────────────────────────────────────────────────────────────────────
test_passwords = [
    "abc", # Too short, nothing good
    "password123",            # Common, no symbols, no uppercase
    "Hello@2024",             # Good mix, decent length
    "X!9kP#mQ2$vL",          # Long, all character types
]

for pwd in test_passwords:
    label, score, tips = check_password_strength(pwd)
    print(f"\nPassword : {pwd}")
    print(f"Strength : {label}  (score: {score}/7)")
    if tips:
        print("Tips     :", " | ".join(tips))

Fin dall'inizio, il codice sembra professionale. Claude ha anche usato le espressioni regolari per i controlli. Ha un sistema di punteggio ben studiato in atto.

Ha iniziato la funzione con una docstring che spiega cosa fa, il che è molto comune nella programmazione reale. I commenti aggiunti sono descrittivi, rendendo il codice stesso autoesplicativo. Anche se non andassi alla sezione di spiegazione, saprei comunque cosa sta facendo il codice qui. Tuttavia, devo dire che i commenti hanno reso il codice meno pulito.

Per il sistema di punteggio, Claude ha coperto tutti gli scenari comuni, proprio come ChatGPT. Una differenza distinta è il punto bonus di Claude per le password lunghe e l'aggiunta di caratteri speciali, perché rendono la tua password molto più sicura. Ha anche aggiunto una sezione demo per testare le password con diverse robustezze per tua comodità.

Tuttavia, ciò che rende la soluzione di Claude la più elegante è la parte feedback. Per ogni verifica, se la tua password non la supera, Claude utilizza una lista di feedback per aggiungere suggerimenti su ciò che devi fare. Onestamente, me lo aspettavo dagli altri due bot IA, ma ne sono rimasto deluso.

Per essere giusti, comunque, la sezione delle spiegazioni di Claude era un po' debole rispetto a Gemini e ChatGPT. Si concentrava più sul spiegare il sistema e come funziona che sul spiegare il codice stesso. Tuttavia, i commenti sono piuttosto utili, rendendo sufficiente la spiegazione, guadagnando così a Claude la vittoria in questa sfida.


Non tutte le intelligenze artificiali hanno le stesse capacità di programmazione

Questo è stato un esperimento divertente che ha messo in evidenza come ogni bot AI abbia compreso la sfida di programmazione, l'abbia elaborata e abbia implementato la soluzione. Tutti i loro approcci avevano aspetti positivi e negativi. Questo fa davvero riflettere sul futuro dell'AI e della programmazione.

Articoli correlati