Between the Wires: un'intervista con lo sviluppatore open source Sindre Sorhus

Sindre al ristorante di cibo di strada a Bangkok

Ecco la mia intervista Sindre Sorhus, un prolifico sviluppatore open source che vive in Tailandia.

Raccontaci un po 'della tua infanzia e di dove sei cresciuto.

Sono cresciuto in una periferia fuori Oslo, in Norvegia. Quando ero piccolo, ero davvero interessato a Legos. Ogni anno ricevo Lego per il compleanno e il Natale. Legos ha davvero suscitato i miei interessi nella costruzione delle cose all'inizio. A un certo punto, avevo una grande città di Lego costruita nella mia stanza e occupava quasi l'intera stanza.

Costruire con Legos da bambino

Come sei arrivato alla programmazione?

Quando avevo sette anni, la mia famiglia ottenne il nostro primo computer con Windows 95. Giocavo a un gioco chiamato Map Blaster in cui il personaggio saltò in giro per risolvere i problemi di matematica. Qualche anno dopo finalmente ottenemmo l'accesso a Internet e tutto cambiò per me. Ho trascorso molto tempo a scrivere nei libri degli ospiti sulle pagine web di altre persone e a raccogliere gif. Un giorno, mi sono incuriosito il funzionamento del sito Web e ho scoperto il pulsante "Visualizza sorgente" nel browser.

Su un computer di famiglia, Sindre stava controllando Microsoft Outlook Express

È stata una scoperta strabiliante per me. Potrei semplicemente fare clic con il tasto destro, visualizzare la fonte e quindi ho potuto vedere come è stato fatto tutto. All'inizio non capivo molto, ma mentre guardavo più volte la stessa cosa ho iniziato a capire come funzionava. È così che ho iniziato il mio viaggio di programmazione.

Ho realizzato il mio primo sito Web quando avevo dieci anni. Fu dopo aver esaminato la fonte per alcuni anni. Aveva tutti i tipi di colori, uno sfondo a stelle, animato con musica di sottofondo multimediale - era uno di quei tocchi che tutti avevano sui loro siti Web allora. Ho usato Microsoft FrontPage.

Una volta, ero annoiato, quindi ho creato migliaia di directory nidificate sul computer di mio padre e alla fine il computer si è bloccato. Mio padre ha dovuto riformattare il computer; era impressionato e infastidito allo stesso tempo. È stato anche così che ho perso il mio primo sito web.

Più tardi durante il mio anno scolastico, mi sono appassionato ai giochi Flash e abbiamo guardato molti film Flash durante le pause scolastiche. Ero curioso di sapere come sono stati realizzati, ma non c'è mai stato alcun pulsante sorgente. Quindi ho decompilato i file swiff, è stato facile perché non sono stati offuscati. Questo, ancora una volta, mi ha dato l'opportunità di imparare dal lavoro di altre persone. Ho iniziato a modificare i giochi di altre persone e ho ridefinito tutti i personaggi, fatto nuovi nemici, aggiunto punteggi più alti. È stato un momento orgoglioso quando ho capito che gli altri potevano effettivamente giocare a un gioco che avevo incollato insieme.

Hai trascorso cinque anni nell'esercito come sviluppatore front-end e fotografo. Com'era lo sviluppo web in quel momento?

Sindre in campo militare

Dopo la laurea, sono stato arruolato direttamente in campo militare in Norvegia. Sono entrato nell'unità multimediale dove ho trascorso la maggior parte del mio tempo in ufficio a lavorare sull'intranet. La sera non c'era molto da fare perché vivevamo in caserma, così ho deciso di costruire cose. Ma la maggior parte della mia esperienza è stata copiare e incollare PHP e JavaScript di altre persone e non ho capito bene come funzionassero. Un giorno, mi sono imbattuto in Python e Django, aveva un'ottima documentazione e tutorial che PHP non aveva mai avuto. Leggevo tutorial ogni giorno e iniziavo a costruire cose sul lavoro.

È così che è iniziata la mia vera programmazione. Dopo la coscrizione, avevo programmato di viaggiare prima del college. Ma ho ricevuto un'offerta di lavoro da un'unità militare chiamata Cyber ​​Defense Unit. È stato affascinante, quindi ho accettato l'offerta e ho finito per passare 5 anni lì.

L'app che Sindre ha realizzato nell'esercito

Come sei stato coinvolto in TodoMVC e Yeoman?

Ho iniziato a utilizzare GitHub intorno al 2011, ma principalmente come consumatore. Vorrei andare in giro, guardando diversi repository e interpretandoli perché sembravano divertenti. Ho risolto alcuni errori di battitura nei file README.md ma questo era tutto.

Un giorno mi sono imbattuto in TodoMVC che ti aiuta a selezionare un framework JavaScript. È stata un'idea davvero fantastica, anche se a ben vedere abbiamo bisogno di applicazioni molto più avanzate per risolvere effettivamente i problemi di test delle prestazioni e capacità del framework. La prima cosa che mi sono ricordato di TodoMVC era che aveva un bel logo. Sembra molto superficiale, ma è quello che mi ha fatto iniziare.

Logo TodoMVC

Mi è piaciuto così tanto il logo che ho deciso di guardarmi un po 'di più. Ho notato che in realtà non avevano un'applicazione jQuery, quindi ho deciso di crearne una. Ho inviato una richiesta pull durante il fine settimana e ho ricevuto una risposta da Addy Osmani, che è il responsabile del progetto. Ha unito rapidamente la mia PR, che è stata un'esperienza super bella per un principiante come me. Mi sentivo bene che la mia app fosse ora inclusa in questo progetto molto popolare. L'ho fatto per alcune settimane e Addy mi ha aggiunto al progetto che è stato davvero bello.

Questo mi ha davvero interessato all'open source. Prima di questo, ero solo un consumatore passivo, ma con TodoMVC ho avuto il gusto di mantenere un grande progetto che richiedeva molto lavoro. Ma ho imparato molto da quell'esperienza.

Alcuni mesi dopo, Addy è andato a lavorare per Google. Il suo primo progetto su Google è stato Yeoman, uno strumento di impalcatura per le app web moderne. Perché abbiamo lavorato così bene insieme su TodoMVC, quindi ha deciso di invitarmi come collaboratore esterno.

Logo Yeoman

Il nostro obiettivo iniziale con Yeoman era creare un set di strumenti che tutti possano usare per creare fantastiche app web. Ciò che non ci siamo resi conto è che è impossibile risolvere il problema di tutti in uno strumento perché sul Web ci sono troppi casi d'uso. Yeoman è diventato una configurazione popolare che molti sviluppatori hanno creato generatori per estendere Yeoman che si adatta ai loro casi d'uso.

La cronologia si ripete anche se si guarda Crea app React o Webpack. Qualcuno inizia a realizzare questo prodotto che dovrebbe risolvere un problema, ma poiché ognuno ha esigenze diverse, sorgono problemi. Quando ti rendi conto che questo strumento non può coprire tutto, aggiungi la configurazione. La chiave è avere un approccio equilibrato. Devi dire "No" e devi sapere quando dire "no". Potresti deludere alcuni utenti perché hanno casi d'uso oscuri. Questa è la parte difficile della creazione di strumenti ed è ancora più difficile nei progetti open source perché c'è così tanto feedback.

Perché sei appassionato di open source?

Adoro l'open source e penso che risale al pulsante "Visualizza sorgente" nel browser. A mio avviso, l'open source è il modo più efficace per creare software perché ci consente di basarci sul lavoro reciproco. Tutti ne traggono beneficio se una persona risolve un problema difficile. L'open source mi permette di lavorare con persone incredibili da tutto il mondo con le quali non avrei mai potuto lavorare diversamente. Lavoriamo su ciò che conta per noi e ci concentriamo su ciò che è necessario per la comunità invece di concentrarci sulla generazione di entrate.

Paul Irish ha un bellissimo video su YouTube intitolato "Dieci cose che ho imparato dalla fonte jQuery". Questo è ciò che mi ha interessato a leggere il codice sorgente di jQuery. Paul Irish aveva ragione, impari molto facendo effettivamente qualunque cosa tu voglia imparare come fare.

Che ne dici di sostenibilità open source?

Questo è sicuramente un punto di conflitto a cui ho pensato molto recentemente. Ho fatto open source a tempo pieno per circa tre anni. Non guadagno soldi, ma sarebbe bello farlo a tempo pieno come lavoro retribuito. Vue.js di Evan È un ottimo esempio di come può funzionare la sostenibilità open source. Ha creato un framework che tutti volevano ed è stato utilizzato da un bel po 'di aziende. Altre aziende e privati ​​hanno incentivi a investire nel suo progetto perché è utile nella produzione. La chiave è rendere affidabile il tuo progetto. Personalmente non credo che i contributi degli individui siano sufficienti per sostenere un progetto.

Ho pensato di utilizzare Open Collective in modo da poter raccogliere denaro per premiare i collaboratori e le promozioni degli eventi. Webpack ha fatto un ottimo lavoro lì. In realtà sono stato contro questo per molto tempo, perché ero preoccupato che ci fossero aspettative per noi di apportare modifiche indesiderate ogni volta che qualcuno mettesse soldi per il progetto. Di solito, se un'azienda investe in un progetto, desidera che il lavoro abbia la priorità e che i problemi vengano risolti rapidamente.

Attualmente vivo in Tailandia e penso che starei bene con meno di 1500 dollari.

Hai pacchetti di oltre 1000 npm. Come fai a rimanere così produttivo?

Questo è un malinteso. Le persone vedono i pacchetti numero 1000 e pensano che io sia follemente produttivo, ma ciò che non capiscono è che la maggior parte di quei pacchetti sono piccoli e modulari. Hanno praticamente finito quando vengono pubblicati. Mi piace confrontare la programmazione con l'edilizia con Lego: creo molti mattoncini Lego che possono essere assemblati per costruire costruzioni più grandi. Li uso con altri pacchetti prima della pubblicazione per assicurarmi che risolvano i miei problemi. Questo è anche il motivo per cui gli utenti non invieranno molte richieste di funzionalità perché sono così piccole. Se hanno bisogno di qualcosa in più, possono semplicemente creare un altro modulo. Il 90% del mio tempo è dedicato ai miei 10 progetti più grandi.

Qual è un consiglio che puoi dare ai nuovi collaboratori di OSS quando hanno a che fare con persone esigenti e tossiche?

Faccio open source da sei anni, quindi ho sviluppato una pelle spessa. Non penso che nulla mi preoccupi più perché mi piace pensare di aver provato tutto. Parlo con molti principianti che sperimentano tossicità e poi smettono. L'open source dovrebbe essere una cosa divertente che fai, non una causa di stress nella tua vita.

Il mio consiglio ai nuovi sviluppatori è di non lasciare che gli estranei su Internet influenzino negativamente il tuo umore o il tuo desiderio. Non ne vale la pena. Se hai la possibilità di andartene, prendilo - utilizza il pulsante di annullamento dell'iscrizione. I manutentori open source devono ricordare che gli utenti non pagano i clienti. Stiamo fornendo loro qualcosa gratuitamente, nel nostro tempo libero.

Con le persone tossiche, devi essere sempre la persona più grande. Sembra sbagliato, ma quello che cerco di fare è ucciderli con gentilezza. In qualche modo ha funzionato per me per molti anni. Ad esempio, se qualcuno è fastidioso, cercherò di essere il più aperto e gentile con la situazione. Mi assicuro di non essere mai sarcastico o di parlare con loro. I troll si nutrono del tuo fastidio e del tuo discorso, quindi quando non c'è, ti lasceranno in pace.

Uso l'opzione di muting ovunque sia fornita, specialmente su Twitter. È bello rendersi conto proprio quando qualcuno è al limite della tossicità, ed è molto meglio semplicemente chiudere quella voce e immettere invece di causare conflitti inutili.

Hai progettato alcuni loghi per i tuoi moduli, sono fantastici. Come hai imparato il design?

Progetto XO

Ho iniziato seguendo i tutorial online per creare fantastici effetti. Usavo Adobe Illustrator, ma ora uso Sketch.

È davvero divertente per me progettare e penso che più programmatori dovrebbero provarlo. Dopo aver programmato per ore, è bello fare una pausa per fare un po 'di lavoro creativo in modo diverso.

Inoltre, avvantaggia i miei progetti creando loghi, perché conferisce al progetto più personalità. Di solito, quando si inserisce un repository su GitHub, si ottengono le stesse cose basate sul testo: un'intestazione, alcune introduzioni e README.md. È bello ravvivare con un po 'di grafica. Si scopre che le persone hanno maggiori probabilità di usare il progetto se c'è un logo. Ad esempio, Vadim Demedes, uno sviluppatore ucraino, ha inviato questa richiesta pull subito dopo il rilascio di AVA. Vadim divenne in seguito un membro del team AVA. Mi ha detto che si è interessato ad AVA per il suo bel logo.

Logo del progetto AVA disegnato da Sindre

Cosa ti ha spinto a trasferirti in Tailandia? Dicci com'è una giornata tipo per te.

Non sapevo davvero molto della Tailandia. Quando ho lavorato nel servizio militare obbligatorio, ho programmato di viaggiare. Ho ricevuto un'offerta e ho finito per rimanere per altri quattro anni. Sono appena andato con il flusso, perché la vita accade.

Un giorno, mentre stavo preparando un'intervista telefonica con Google, ho appena deciso che se avessi mai intenzione di viaggiare, sarebbe ora, altrimenti non sarebbe mai successo. Così ho annullato l'intervista e presentato le dimissioni al lavoro il giorno dopo. Ho comprato un biglietto di sola andata per la Thailandia e basta.

Ho fatto zaino in spalla per mezzo anno nel sud est asiatico, ed è lì che ho incontrato la mia ragazza. Alla fine mi sono trasferito in Tailandia perché era il mio preferito. Adoro la sua ricca cultura, i locali amichevoli e il cibo. Vivo in Thailandia da due anni ormai.

Lavoro dai bar locali tre giorni alla settimana perché sono più produttivo quando ho persone intorno a me. Altrimenti, dalle nove alle sei faccio un sacco di programmazione e manutenzione open source, a volte i miei progetti secondari. Nella maggior parte dei giorni ricevo più di 20 richieste pull e tonnellate di problemi da risolvere. La sera trascorro del tempo con la mia ragazza Im; entrambi amiamo il cibo di strada piccante nei mercati notturni. A volte le chiamate di servizio e mi ritrovo di fronte al computer a tarda notte.

Sindre e la sua ragazza sono a Koh Mak, in Thailandia

Non ho imparato la lingua tailandese perché mentre sono bravo a programmare le lingue, la lingua parlata è molto più difficile di qualsiasi linguaggio di programmazione e il tailandese è particolarmente difficile. La mia ragazza, invece, parla correntemente tailandese, russo, inglese e abbastanza bene in svedese. Ad un certo punto, voglio imparare il tailandese e altre lingue, ma non ho poco tempo a disposizione.

Cosa ti ha motivato ad avviare il progetto AVA?

Stavo usando molto Mocha perché ho creato molti moduli che dovevano essere testati. Non ero molto contento di come funzionasse. La moka inietta alcuni oggetti globali ma non sono definiti da nessuna parte. Dato che lo stavo facendo in Node.js, avevo molte API asincrone e non era molto conveniente avere a che fare con Mocha.

Volevo qualcosa di più semplice e più ottimizzato per il mio caso d'uso. Così un fine settimana, ho deciso di lavorarci su e, domenica sera, ho pubblicato la versione 0.0.1 per AVA su npm. Anche se JavaScript è a thread singolo, l'IO in Node.js può avvenire in parallelo a causa della sua natura asincrona. AVA ne approfitta ed esegue i test contemporaneamente, il che è particolarmente vantaggioso per i test pesanti IO. Inoltre, i file di test vengono eseguiti in parallelo come processi separati, il che consente prestazioni potenzialmente ancora migliori e un ambiente isolato per ogni file di test.

Progetto AVA

Poiché non avevo tempo per correggere i bug e volevo solo usarlo nei miei progetti, era privato. Dopo un anno e mezzo, ho finalmente realizzato un logo per AVA, ho ripulito il repository, ho scritto molta documentazione. Quindi, ho pubblicato il progetto.

La maggior parte degli utenti sembra molto contenta di AVA perché riceviamo continuamente tweet positivi sul progetto. A loro piace davvero quanto sia semplice la sintassi e quanto sia facile iniziare. Ho appena fatto per graffiare il mio prurito, ma risulta che altre persone hanno avuto lo stesso problema e mi è piaciuta la mia soluzione.

Al giorno d'oggi, dedico più tempo alla gestione del progetto perché ci sono così tanti nuovi problemi e ogni settimana inviamo richieste, il che mi lascia pochissimo tempo per programmare.

Perché hai deciso di entrare nello sviluppo di macOS?

Ho fatto un po 'di programmazione Objective-C ma non ho avuto una grande esperienza. Questo gennaio ho avuto un'idea per un'applicazione Mac e ho avuto un po 'di tempo libero, quindi sono passato subito a Swift. È così che di solito imparo cose nuove. È molto spontaneo. Comincio con il desiderio di creare un prodotto, poi capisco quali competenze ho bisogno per realizzare quel prodotto e poi li imparo. L'idea viene prima della pianificazione.

Swift è molto più difficile da imparare inizialmente di JavaScript, ma Swift brilla perché è fortemente tipizzato. Durante la compilazione, è molto più improbabile che si blocchi in modo anomalo se si utilizzano correttamente gli optionals. L'unica cosa che non mi è piaciuta di Swift è che a volte devi ancora interagire con le vecchie API in C.

Logo del progetto Lungo

Ho scritto alcune app di produttività e utilità. Lungo è un'app della barra dei menu che ho scritto e la trovi sull'App Store. L'altro che ho scritto è l'indicatore della batteria.

Qual è il tuo piano per il prossimo anno? Stai pensando di andare a tempo pieno o prendere in considerazione altri modi per diventare finanziariamente sostenibile?

Ho vissuto risparmi negli ultimi tre anni e facendo software open source. È molto più facile in Asia ma non dura per sempre. Idealmente, vorrei fare open source in modo finanziariamente sostenibile, ma questo è difficile, quindi probabilmente farò qualche contratto l'anno prossimo.

Ho provato alcune cose diverse. Una cosa che ho fatto è chiedere supporto nel file README.md di GitHub. Non lo definirei un annuncio ma piuttosto un piccolo banner. Ho fatto un po 'di soldi, ma è ben lungi dall'essere in grado di sostenermi.

Potrei provare Patreon.

Quali sono alcune delle cose che desideri migliorare nell'ecosistema JavaScript?

A mio avviso, l'ecosistema JavaScript è già eccezionale, ma abbiamo ancora molte stranezze da aggirare sul lato browser. Ci sono così tanti progetti con questo gigantesco script di build solo per ottenere una semplice app là fuori, ecco perché amo Node.js.

Il problema con i browser è che sono molto complessi. Hai la rete a cui pensare, devi ottimizzare sia per dimensioni che per prestazioni, hai molti casi d'uso diversi, framework tra cui scegliere. Tutti cercano di semplificarlo, ma poi finisci per essere troppo supponente, quindi aggiungi la configurazione ma c'è troppa caldaia. Non vedo un percorso semplice a meno che tu non risolva la piattaforma reale invece di creare molte soluzioni su di essa. Una cosa che penso migliorerà la situazione è quando finalmente avremo i moduli nel browser. Quindi potrebbe non essere necessario un passaggio di costruzione per tutto.

Perché gli sviluppatori JavaScript sono ossessionati dagli unicorni?

L'intero movimento dei pony è iniziato con la comunità Django in realtà. Quando hai iniziato a chiedere le funzionalità che desideri, gli sviluppatori direbbero "Voglio un parser HTTP più veloce" o "Voglio un ORM che funzioni semplicemente". Un giorno uno dei principali sviluppatori della mailing list di Django ha risposto a una delle richieste di funzionalità con "no, non puoi avere un pony!" L'intero movimento dell'unicorno è iniziato con quella negazione della richiesta di funzione.

C'è anche un sito web dedicato all'adorabile pony.

Django, il framework web per pony con poteri magici.

Non ricordo esattamente come si è diffuso alla comunità JavaScript. Era una di quelle cose che sono successe da sole. Avere qualcosa di divertente e sciocco come gli unicorni mi aiuta a lavorare attraverso la programmazione e l'OSS e aumenta il mio morale. Lo stesso vale per le gif sciocche.

ESPN.com è diventato magico con il codice Konami. (fonte: http://kotaku.com/5230185/the-konami-code-makes-espncom-magical)Il sito web di SindreLa schermata iniziale del laptop Sindre

Originariamente ho pubblicato questa intervista su Between the Wires, una serie di interviste con coloro che stanno costruendo prodotti per sviluppatori e designer.

Questo progetto è reso possibile con sponsorizzazioni da frontendmasters.com, egghead.io, Microsoft Edge e Google Developers.