Scopri come esprimere al meglio le tue idee e i tuoi suggerimenti
Ciao 👋 Sei qui perché qualcuno ti ha indirizzato a questo post in risposta a un'idea che hai suggerito su come migliorare Exercism? Prima che il nostro team investa tempo a esplorare la tua idea, spera che tu legga questo testo e valuti se la tua idea potrebbe essere già stata presa in considerazione e quali insidie potrebbe nascondere. Se aggiungi queste considerazioni e le possibili insidie al tuo suggerimento, e ti chiedi perché la tua idea potrebbe non essere stata già messa in pratica, è probabile che otterrai una risposta più rapida e più positiva.
La recinzione di Chesterton è un'idea ispirata a una citazione dal libro del 1929 dello scrittore G.K. Chesterton, The Thing. È diventata famosa perché è stata citata da John F. Kennedy. Questa è la citazione originale:
In un caso del genere esiste una certa istituzione o legge; diciamo, per semplicità, una recinzione o un cancello eretti attraverso una strada. Il riformatore più moderno si avvicina allegramente e dice: «Non vedo l'utilità di questo; togliamolo di mezzo». Al che il riformatore più intelligente farà bene a rispondere: «Se non ne vedi l'utilità, di certo non ti lascerò toglierlo di mezzo. Vai via e rifletti. Poi, quando potrai tornare e dirmi che ne vedi l'utilità, potrò permetterti di distruggerlo».
L'idea della recinzione di Chesterton è che se non capisci perché qualcosa è lì, probabilmente non capisci nemmeno perché dovrebbe essere rimosso. Allo stesso modo, se non capisci perché qualcosa non è lì, probabilmente non capisci perché è stato lasciato fuori.
Una regola semplice da ricordare è: «Non rimuovere una recinzione finché non sai perché è stata messa lì in primo luogo.»
Su Exercism siamo fortunati: tantissime persone si uniscono alla nostra comunità continuamente e pubblicano i loro pensieri e le loro idee. Molte di queste idee sono nuove, innovative, entusiasmanti e sbloccano il nostro modo di pensare. Quindi, se hai un'idea o un suggerimento, siamo felici di accoglierlo!
Tuttavia, spesso le persone pubblicano idee di cui si è già discusso molte volte. Rispondere a queste idee, riesaminare o giustificare di nuovo le nostre decisioni può prosciugare le energie del nostro team. Questo articolo vuole aiutare a proteggere quel tempo e quelle energie.
Exercism è stato progettato, ingegnerizzato e costruito da migliaia di persone di grande talento. È un prodotto estremamente ragionato: le cose ci sono perché sono state progettate per esserci, e spesso altre cose sono lasciate fuori perché sono state progettate per essere lasciate fuori. Quasi tutto su Exercism è stato dibattuto, discusso e riprogettato molte volte.
Quindi, prima di pubblicare la tua idea, chiediti se potremmo averla già presa in considerazione e perché potremmo aver fatto le cose diversamente da come stai suggerendo. E ricorda: più la tua idea sembra ovvia, più è probabile che sia già stata discussa e dibattuta molte volte. Quindi, quando la presenti, presentala insieme alle possibili avvertenze e insidie. Se hai l'istinto di dire «perché non semplicemente ...», allora rientra quasi certamente in questa categoria.
Non avere mai paura di pubblicare, ma per favore rifletti bene prima!
Una frustrazione comune è che gli studenti inviano ai mentori codice che non supera i test. Un suggerimento altrettanto comune è: «Perché non eseguire automaticamente i test nella CLI prima che qualcuno invii il proprio codice?» Sembra un'ottima idea: la CLI può semplicemente chiamare un comando per eseguire i test e impedire allo studente di inviare se i test non passano.
Allora, prima di tutto: cosa significa «semplicemente chiamare un comando per eseguire i test»? Significa scrivere uno script per ciascuno dei 52 linguaggi su Exercism in grado di eseguire i test e controllare il risultato. È un po' di lavoro, ma fattibile.
Ma significa anche scrivere quello script in modo che funzioni su Windows, MacOSX e Linux, in tutte le versioni e configurazioni possibili. È una quantità di lavoro enorme (se non illimitata).
«Perché deve essere ogni configurazione?» potresti chiedere.
Beh, perché stai attivamente bloccando qualcuno dall'usare Exercism a meno che non riesca a eseguire questo script.
Questo significa anche che non può mai fallire.
Se per qualche motivo lo script non parte, lo studente è completamente bloccato.
Un bug in uno di quei 52*3*n script significa che uno studente non può più usare il track su quel sistema operativo.
Come faresti a testarlo?
Non puoi.
Ma, dirai, si potrebbe semplicemente aggiungere un flag --skip-tests.
È un buon suggerimento, ma ci riporta al punto di partenza: le persone possono scegliere di saltare i test quando vogliono.
Solo che ora ci troviamo in una situazione in cui è marginalmente meno probabile che vengano inviati test falliti, quindi i mentori se lo aspettano meno, il che rende più spiazzante e confuso quando i test sono effettivamente falliti.
«Ma le persone, in genere, non lo farebbero», potresti obiettare. Vero, per alcuni linguaggi in cui eseguire i test richiede 0,5s. Ma per i linguaggi in cui eseguire i test richiede 20s, dover aspettare altri 20s per inviare è incredibilmente frustrante per gli studenti, quindi saltare i test finali diventerebbe la norma.
Indipendentemente da dove finirà questa conversazione, è chiaro che qui c'è molta più complessità di quanto sembri a prima vista. Ci sono sfide tecniche da considerare, problemi di flusso di lavoro a cui pensare e la consapevolezza che i track sono diversi al punto che qualcosa di rapido e semplice per uno è doloroso per un altro.
Quindi, invece di proporre il suggerimento «perché non eseguire i test prima dell'invio», facciamoci una domanda: «Perché le persone pubblicano soluzioni che non superano i test?» E allora le cose si fanno interessanti. La risposta generale è che sono bloccati o confusi. E hanno bisogno di aiuto. Il che significa che inviare test falliti è un'euristica davvero importante per i mentori: indica che questo studente ha bisogno di aiuto. Sì, è frustrante perché i mentori non sanno subito se il codice è «corretto» o no. Tuttavia, possono scaricare il codice ed eseguirlo per verificarlo (cosa che la maggior parte dei mentori fa sulle soluzioni non banali) e poi sapere con certezza al 100% se è corretto o no. E gli studenti bloccati che hanno bisogno di aiuto non finiscono ancora più bloccati, bisognosi di ancora più aiuto, ma arrivano a un mentore che può vedere e suggerire correzioni più rapidamente.
Nota: stiamo in realtà risolvendo questo problema eseguendo i test lato server: un'impresa grande e costosa, ma che vale lo sforzo per l'esperienza migliorata degli studenti e, cosa cruciale, per far risparmiare tempo ed energie ai nostri mentori.
Tre cose: