Come (non) fare delle domande tecniche
Luca PateraQuando lavori su cose riguardanti l’informatica, presto o tardi ti ritroverai ad un punto dove la tua conoscenza non è sufficiente per un risolvere un determinato tipo di problema o chiederai un aiuto a qualcun altro che ha molta più esperienza di te per risparmiare un sacco di tempo nel risolverlo.
È naturale, non devi vergognarti. La conoscenza non è una cosa che appare all’improvviso. La si costruisce sulla conoscenza delle altre persone. Solo quando avrai letto cosa le altre persone hanno trovato, o chiesto cosa altre persone conoscono, solo allora costruirai la tua conoscenza.
Questo articolo parlerà di come fare delle domande tecniche, se sei bloccato su un problema che non riesci a risolvere. Ci focalizzeremo su come fare domande riguardo lo sviluppo di bot, ma si può applicare lo stesso discorso su qualsiasi altro tipo di domande tecniche. Tutto quello che leggerai qui, è basato su un video di YouTube del canale LiveOverflow riguardo lo stesso argomento che tratteremo.
Vi lasciamo un’interessante citazione dal suo video:
Se vuoi qualcosa da me o da qualcun altro, per favore mettiti di impegno.
Perché se non lo farai, non otterrai la risposta che ti aspetterai di ricevere.
Fornisci sempre più informazioni possibili
Quando ti imbatti in un problema, assicurati di raccogliere più informazioni possibili e di fornirle a chi stai chiedendo aiuto. Se hai creato un programma e va in crash, fornisci almeno le seguenti informazioni:
1. Che linguaggio di programmazione stai utilizzando
2. Quale framework/libreria stai usando (più alcune informazioni sul sistema)
3. Qual è l’esatto messaggio di errore
4. Cosa ti aspetti che il programma debba fare e cosa fa effettivamente
5. Cosa hai fatto per provare a risolverlo (ed eventuali fallimenti)
6. La parte di codice che non funziona
Quando non fornisci abbastanza informazioni, è veramente difficile provare a capire qual è l’esatto problema e come risolverlo. Dire “il mio codice non funziona” o “come invio un messaggio” non aiuta nessuno, nemmeno te stesso. La persona a cui stai chiedendo, alla fine, ti risponderà con tante altre domande.
Prova a localizzare o circoscrivere il problema
Gli errori possono accadere in qualsiasi parte del codice in cui interagiscono le persone con un computer. Quindi assicurati di aver percorso molte vie alla risoluzione del problema (esempio: inserire differenti dati di test) prima di fare una domanda.
Confronta queste due domande:
Perché quando provo ad inviare un messaggio, l’utente non lo riceve?
vs
Perché quando provo ad inviare un messaggio (contenente delle emoji) utilizzando il framework python-telegram-bot, il messaggio non viene inviato e non ricevo nessun errore dall’API?
Con quest’ultimo messaggio è possibile identificare con esattezza dove si trova il problema. Riguarda le emoji e l’invio dei messaggi. Un utente esperto potrà dirti che è un bug dell’API o qualche strano bug nel tuo codice o framework. Il primo messaggio, invece, non fornisce nessuna informazione su dove possa trovarsi esattamente il problema, il che porta altri utenti a controllare il codice più volte o farti tante altre domande prima di ottenere una risposta esauriente.

Sii preciso
Cerca di spiegare tutto nel modo più preciso e nel minor numero di messaggi possibile. Anche in questo caso non otterrai nessun beneficio scrivendo decine di messaggi con informazioni extra che hai scoperto durante il debug. Fornisci fin da subito tutte le informazioni e inseriscile in un unico messaggio ben formattato.
Esempi di pessime domande
Il bot non funziona e i messaggi non mi arrivano.
Nessuna informazione sul linguaggio di programmazione usato, framework, sistema e/o se è un problema di rete, codice, API.
Ho un problema: il mio bot funziona quando lo uso in privato ma non funziona quando lo aggiungo in un gruppo… come posso risolvere?
Questa domanda contiene almeno una vaga idea di dove localizzare il problema. Prima di tutto, i bot per Telegram hanno bisogno di essere “abilitati” per essere aggiunti in un gruppo, come seconda cosa il bot può ricevere messaggi solo se lo si manda come risposta ad un altro messaggio del bot stesso o con il suo username al suo interno. Quindi eseguire un debug può essere molto veloce per alcuni e molto lento per altri, quando c’è qualcosa di diverso (esempio: con il codice).
Esempi di buone domande
Ottengo l’errore ‘HTTP 400 USER_INVALID_ID’ quando chiamo il metodo getChatMember per alcuni utenti che hanno già interagito con il bot in passato. Qualcuno sa perché il bot si sia “dimenticato” di un utente?
L’utente fornisce l’errore che riceve, il metodo che richiama e anche che lo ha testato con alcuni user_id che il bot ha già visto/contattato in passato. Questo restringe il campo del problema ad una piccola parte di possibili soluzioni.
Sto usando python come linguaggio di programmazione insieme al framework python-telegram-bot-framework, su un VPS di un importante Hosting Provider con una buona connessione ad Internet. Quando provo a mandare molti messaggi insieme (esempio: 3) molto velocemente in una chat, il bot invia il primo messaggio istantaneamente e gli altri con un po’ di ritardo. Qualcuno sa perché ciò accade?
Questo utente fornisce informazioni su: 1) linguaggio di programmazione, 2) framework e 3) hosting. Come lettore potrai capire che sia molto improbabile che si tratti di un problema di rete. Inoltre, il framework è molto supportato e il linguaggio di programmazione è molto stabile. Il problema può essere immediatamente associato ai limiti per spam (perché non è consentito inviare più di un messaggio in una chat al secondo). Una domanda, una risposta, nessun tempo di attesa infinito e tutti sono contenti.
Spero sia stato capace di fornirvi qualche informazione su come fare delle domande (tecniche). Se tutti seguissero queste regole, i problemi verrebbero risolti molto più velocemente.