Johtojen välissä: Haastattelu avoimen lähdekoodin kehittäjän Sindre Sorhusin kanssa

Sindre kadriruokaravintolassa Bangkokissa

Tässä haastatteluni Sindre Sorhus, tuottava avoimen lähdekoodin kehittäjä, joka asuu Thaimaassa.

Kerro meille vähän lapsuudestasi ja missä olet kasvanut.

Olen kasvanut esikaupunkialueella Oslon ulkopuolella Norjassa. Kun olin pieni, olin todella kiinnostunut Legosista. Joka vuosi saan Legosin syntymäpäivää ja joulua varten. Legos herätti todella kiinnostukseni rakentaa asioita jo varhain. Yhdessä vaiheessa huoneeseeni oli rakennettu valtava Lego-kaupunki ja se käytti melkein koko huoneen.

Rakennus lapsena Legosin kanssa

Kuinka pääset ohjelmointiin?

Seitsemänvuotiaana perheeni sai ensimmäisen Windows 95 -tietokoneemme. Pelasin aiemmin Map Blaster -nimistä peliä, jossa hahmo hyppäsi ympäri ratkaistakseen matematiikkaongelmat. Muutamaa vuotta myöhemmin saimme vihdoin Internet-yhteyden ja se muutti kaiken puolestani. Vietin paljon aikaa kirjoittamalla vieraskirjoihin muiden ihmisten verkkosivuille ja kerätä gifiä. Eräänä päivänä minua kiinnosti verkkosivuston toiminta ja löysin selaimessa Näytä lähde -painikkeen.

Sindre tarkisti kotitietokoneessa Microsoft Outlook Expressiä

Se oli mielessä puhaltava löytö minulle. Voin vain napsauttaa hiiren kakkospainikkeella, tarkastella lähdettä ja sitten nähdä, kuinka kaikki tehtiin. En ymmärtänyt aluksi paljoakaan, mutta kun katsoin samaa asiaa uudestaan ​​ja uudestaan, aloin ymmärtää, miten se toimi. Näin aloitin ohjelmointimatkani.

Tein ensimmäisen verkkosivustoni kymmenvuotiaana. Se oli tutkittuaan lähdettä muutaman vuoden ajan. Siinä oli kaikenlaisia ​​värejä, tähtikuvioinen tausta, animoitu median taustamusiikilla - se oli yksi niistä kosketuksista, joita kaikki olivat tuolloin verkkosivuillaan. Käytin Microsoft FrontPagea.

Kerran kyllästyin, joten luin tuhansia sisäkkäisiä hakemistoja isäni tietokoneelle ja se lopulta kaatui tietokoneelle. Isäni piti muotoilla tietokone uudelleen; hän oli vaikuttunut ja ärsynyt samalla. Näin menetin ensimmäisen verkkosivustoni.

Myöhemmin kouluvuonna pääsin Flash-peleihin ja katselimme paljon Flash-elokuvia koulujen tauon aikana. Olin utelias kuinka ne tehtiin, mutta lähdepainiketta ei ollut koskaan. Joten purkasin swiff-tiedostot, mikä oli helppoa, koska niitä ei häivytetty. Se antoi minulle jälleen mahdollisuuden oppia muiden ihmisten työstä. Aloin muokata muiden ihmisten pelejä ja punani kaikki merkit, tein uusia vihollisia, lisäsin ennätyksiä. Oli ylpeä hetki, kun tajusin, että muut voivat todella pelata peliä, jonka olin liimattu yhteen.

Vietit viisi vuotta armeijassa eturintaman kehittäjänä ja valokuvaajana. Millainen verkkokehitys oli tuolloin?

Sindre armeijassa

Valmistuttuaani lukiosta minut otettiin palvelukseen suoraan Norjan armeijaan. Pääsin mediayksikköön, jossa vietin suurimman osan ajastaan ​​toimistossa työskentelemällä intranetissä. Iltaisin ei ollut paljon tekemistä, koska asimme kasarmissa, joten päätin rakentaa tavaraa. Mutta suurin osa kokemuksestani oli kopioinut ja liittänyt muiden ihmisten PHP: tä ja JavaScriptiä, enkä tiennyt ymmärtää kuinka he toimivat. Eräänä päivänä kompasin Pythonin ja Djangon päälle. Siinä oli mahtava dokumentaatio ja oppaat, joita PHP: llä ei koskaan ollut. Luin oppaita joka päivä ja aloin rakentaa asioita töissä.

Näin varsinainen koodaukseni alkoi. Asevelvollisuuden jälkeen suunnittelin matkustaa ennen yliopistoa. Mutta sain työpaikan armeijan yksiköltä nimeltä Kyberpuolustusyksikkö. Se oli kiehtovaa, joten otin tarjouksen ja vietin 5 vuotta siellä.

Sovellus, jonka Sindre teki armeijassa

Kuinka olit yhteydessä TodoMVC: hen ja Yeomaniin?

Aloitin GitHubin käytön vuoden 2011 aikana, mutta enimmäkseen kuluttajana. Menisin ympäri, katsellen erilaisia ​​repoja ja tähtien niitä, koska ne näyttivät hauskaa. Korjasin joitain kirjoitusvirheitä README.md-tiedostoihin, mutta siitä oli kyse.

Eräänä päivänä kompastuin TodoMVC: hen, joka auttaa sinua valitsemaan JavaScript-kehyksen. Se oli todella mahtava idea, vaikka jälkikäteen tarvitsemme paljon edistyneempiä sovelluksia suorituskykytestauksen ja kehysominaisuuksien ongelmien ratkaisemiseksi. Ensimmäinen asia, jonka muistan TodoMVC: stä, oli, että sillä oli mukava logo. Se näyttää erittäin pinnalliselta, mutta se sai minut aloittamaan.

TodoMVC-logo

Pidin logosta niin paljon, että päätin katsoa hiukan enemmän. Huomasin, että heillä ei oikeastaan ​​ollut jQuery-sovellusta, joten päätin luoda sen. Esitin vetämispyynnön viikonloppuna ja sain vastauksen Addy Osmanilta, joka on projektin ylläpitäjä. Hän yhdisti PR: n nopeasti, mikä oli erittäin mukava kokemus minun kaltaiselleni aloittelijalle. Minusta tuntui hyvältä, että sovellukseni oli nyt sisällytetty tähän todella suosittuun projektiin. Tein tämän muutaman viikon ajan, ja Addy lisäsi minut projektiin, joka oli todella siisti.

Tämä kiinnosti minua avoimesta lähteestä. Ennen tätä olin vain passiivinen asiakas, mutta TodoMVC: n kanssa sain maistaa ylläpitää suurta projektia, joka oli paljon työtä. Mutta olen oppinut paljon siitä kokemuksesta.

Muutamaa kuukautta myöhemmin Addy siirtyi Google-palvelukseen. Hänen ensimmäinen projekti Googlessa oli Yeoman, telineiden työkalu moderneille verkkosovelluksille. Koska työskentelimme niin hyvin yhdessä TodoMVC: n kanssa, joten hän päätti kutsua minut ulkoiseksi avustajaksi.

Yeoman-logo

Alkuperäinen tavoitteemme Yeomanin kanssa oli luoda joukko työkaluja, joita kaikki voivat käyttää loistavien verkkosovellusten luomiseen. Emme sitten ymmärtäneet, että kaikkien ongelmia on mahdoton ratkaista yhdellä työkalulla, koska verkossa on aivan liian monta käyttötapaa. Yeomanista tuli suosittu kokoonpano, jonka monet kehittäjät loivat generaattoreita laajentaakseen Yeomania omaan käyttötarkoitukseensa sopiviksi.

Historia toistuu myös, jos tarkastellaan Luo React-sovellusta tai Webpackia. Joku alkaa tehdä tätä tuotetta, jonka on tarkoitus ratkaista yksi ongelma, mutta koska jokaisella on erilaisia ​​tarpeita, ongelmia syntyy. Kun huomaat, että tämä työkalu ei kata kaikkea, lisäät kokoonpanon. Tärkeintä on tasapainoinen lähestymistapa. Sinun on sanottava “ei” ja sinun on tiedettävä milloin sanoa “ei”. Saatat pettyä joihinkin käyttäjiin, koska heillä on hämäriä käyttötapoja. Se on työkalujen tekemisen vaikea osa, ja se on vielä vaikeampaa avoimen lähdekoodin projekteissa, koska palautetta on niin paljon.

Miksi olet intohimoinen avoimen lähdekoodin suhteen?

Rakastan avointa lähdekoodia ja mielestäni se palaa selaimen Näytä lähde -painikkeeseen. Mielestäni avoin lähdekoodi on tehokkain tapa rakentaa ohjelmistoja, koska sen avulla voimme rakentaa toistensa työn päälle. Jokainen hyötyy, jos joku ratkaisee vaikean ongelman. Avoimen lähdekoodin avulla voin työskennellä uskomattomien ihmisten kanssa ympäri maailmaa, joiden kanssa en olisi koskaan pystynyt työskentelemään muuten. Saamme työskennellä meille tärkeiden asioiden parissa ja keskittyä yhteisön tarpeisiin sen sijaan, että keskitymme tulojen tuottamiseen.

Paul Irishilla on hieno video YouTubessa otsikolla “Kymmenen asiaa, jotka olen oppinut jQuery-lähteestä”. Juuri tämä kiinnosti minua lukemaan jQuery-lähdekoodia. Paul Irish oli oikeassa, opit paljon tekemällä mitä tahansa, mitä haluat oppia tekemään.

Entä avoimen lähdekoodin kestävyys?

Se on ehdottomasti konfliktin kohta, josta olen viime aikoina ajatellut paljon. Olen tehnyt avoimen lähdekoodin kokopäiväistä nyt noin kolme vuotta. En ansaitse rahaa, mutta olisi kiva tehdä tämä kokopäiväinen palkattu työ. Evan You on Vue.js, joka on loistava esimerkki siitä, kuinka avoimen lähdekoodin kestävyys voi toimia. Hän loi kehyksen, jota kaikki halusivat, ja sitä ovat käyttäneet monet harvat yritykset. Muilla yrityksillä ja yksityishenkilöillä on kannustimia investoida hänen projektiinsa, koska se on hyödyllinen tuotannossa. Tärkeintä on tehdä projektistasi luotettava. En henkilökohtaisesti usko, että yksityishenkilöiden panos riittää projektin ylläpitämiseen.

Olen ajatellut Open Collective -sovelluksen käyttöä, jotta voimme kerätä rahaa osallistujien ja tapahtumakampanjoiden palkitsemiseen. Webpack on tehnyt siellä hienoa työtä. Olin itse asiassa tätä vastaan ​​pitkään, koska olin huolissani siitä, että meillä oli odotuksia tehdä ei-toivottuja muutoksia aina, kun joku laittaa rahaa projektiin. Yleensä, jos yritys sijoittaa projektiin, he haluavat työn priorisoida ja asiat korjata nopeasti.

Asun tällä hetkellä Thaimaassa ja luulen että olisin hyvin alle 1500 dollarilla.

Sinulla on yli 1000 npm-paketteja. Kuinka pysyt niin tuottavana?

Se on väärinkäsitys. Ihmiset näkevät numero 1000 paketin ja luulevat olevansa hulluin tuottava, mutta he eivät ymmärrä, että suurin osa näistä paketeista on pieniä ja modulaarisia. Ne ovat melko paljon tehty, kun ne julkaistaan. Tykkään verrata ohjelmointia rakentamiseen Legon kanssa: Luon paljon Lego-tiiliä, jotka voidaan koota suurempien rakenteiden rakentamiseksi. Käytän niitä muiden pakettien kanssa ennen julkaisemista varmistaakseni, että ne ratkaisevat ongelmani. Siksi myös käyttäjät eivät lähettäisi paljon ominaisuuspyyntöjä, koska ne ovat niin pieniä. Jos he tarvitsevat jotain enemmän, he voivat vain rakentaa uuden moduulin. 90% ajastani käytetään 10 suurimpaan projektiini.

Mikä on yksi neuvo, jonka voit antaa uusille OSS-avustajille, kun on tekemisissä vaativien ja myrkyllisten ihmisten kanssa?

Olen tehnyt avointa lähdekoodia jo kuusi vuotta, joten olen kehittänyt paksun ihon. En usko, että mikään häiritse minua enää, koska haluan ajatella, että olen kokenut kaiken. Puhun monille aloittelijoille, jotka kokevat jonkin verran myrkyllisyyttä ja lopettavat. Avoimen lähdekoodin oletetaan olevan hauskaa tekemäsi asia, ei stressin syy elämässäsi.

Neuvoni uusille kehittäjille on, että sinun ei pitäisi antaa Internetin tuntemattomien vaikuttaa negatiivisesti mielialaan tai asemaan. Se ei ole sen arvoista. Jos sinulla on mahdollisuus kävellä pois, ota se - käytä tilauspainiketta. Avoimen lähdekoodin ylläpitäjien on muistettava, että käyttäjät eivät maksa asiakkaita. Tarjoamme heille jotain ilmaiseksi, omalla vapaa-ajallamme.

Myrkyllisten ihmisten kanssa sinun on oltava aina isompi henkilö. Se kuulostaa väärin, mutta yritän tappaa heidät ystävällisyydellä. Jotenkin se on toiminut minulle monien vuosien ajan. Esimerkiksi, jos joku on ärsyttävää, yritän olla tilanteessa yhtä avoin ja kiltti. Varmistan, ettei koskaan ole sarkastiikkaa tai puhu heille. Pellot ruokkivat häirintääsi ja keskusteluasi, joten kun niitä ei ole, he jättävät sinut rauhaan.

Käytän mykistysvaihtoehtoa missä tahansa, etenkin Twitterissä. On hyvä huomata, kun joku rajoittuu myrkylliseen, ja on paljon parempi sulkea ääni ja äänentoisto pois tarpeettomien konfliktien sijaan.

Suunnittelit joitain logoja omille moduuleillesi, ne ovat mahtavia. Kuinka opit suunnittelusta?

XO-projekti

Aloitin seuraamalla online-oppaita tehdäksesi hienoja efektejä. Käytin ennen Adobe Illustratoria, mutta nyt Sketchiä.

Minusta on todella hauskaa suunnitella, ja mielestäni useamman ohjelmoijan pitäisi kokeilla sitä. Tuntien ohjelmoinnin jälkeen on hienoa pitää tauko tehdä luovaa työtä eri tavalla.

Se hyödyttää myös projektejani luomalla logoja, koska se antaa projektille enemmän persoonallisuutta. Kun kirjoitat repon GitHubissa, saat yleensä samat tekstipohjaiset asiat: otsikon, jonkin johdannon ja README.md. On mukavaa mausteta sitä jollain grafiikalla. Osoittautuu, että ihmiset käyttävät projektia todennäköisemmin, jos logo on. Esimerkiksi Ukrainasta peräisin oleva kehittäjä Vadim Demedes lähetti tämän vetämispyynnön heti AVA: n julkaisun jälkeen. Myöhemmin Vadimista tuli AVA-tiimin jäsen. Hän kertoi kiinnostuksensa AVA: sta sen mukavan logon takia.

Sindren suunnittelema AVA-projektin logo

Mikä sai sinut muuttamaan Thaimaahan? Kerro meille, miltä tyypillinen päivä näyttää sinulle.

En tiennyt tosi paljon Thaimaasta. Kun työskentelin pakollisessa armeijan palveluksessa, aioin matkustaa. Sain tarjouksen ja päädyin oleskelemaan vielä neljä vuotta. Menin vain virtauksen mukana, koska elämä tapahtuu.

Eräänä päivänä valmistellessani puhelinhaastattelua Googlen kanssa päätin vain, että jos aion koskaan matkustaa, se olisi nyt, muuten sitä ei tapahdu koskaan. Joten peruin haastattelun ja lähetin eroamiseni töissä seuraavana päivänä. Ostin yhdensuuntaisen lipun Thaimaahan ja siinä se oli.

Tein reppupakkauksia puoli vuotta Kaakkois-Aasiassa, ja siellä tapasin tyttöystäväni. Asutin lopulta Thaimaan, koska se oli suosikkini. Rakastan sen rikas kulttuuria, ystävällisiä paikallisia ja ruokaa. Olen asunut Thaimaassa kaksi vuotta.

Työskentelen paikallisista kahviloista kolme päivää viikossa, koska olen tuottavampi, kun minulla on ihmisiä. Muutoin yhdeksästä kuuteen teen paljon avoimen lähdekoodin koodausta ja ylläpitoa, toisinaan sivuprojektejani. Useimpana päivänä saan yli 20 korjauspyyntöä ja tonnia ongelmia. Illalla vietän aikaa tyttöystäväni Im kanssa; me molemmat rakastamme mausteista kaduruokaa yömarkkinoilla. Joskus päivystyspuhelut ja joudun takaisin tietokoneen eteen myöhään illalla.

Sindre ja hänen tyttöystävänsä Im Koh Makissa, Thaimaassa

En oppinut thai-kieltä, koska vaikka osaan ohjelmointikieliä hyvin, puhuttu kieli on paljon vaikeampaa kuin mikään ohjelmointikieli ja thai on erityisen kovaa. Toisaalta tyttöystäväni puhuu sujuvasti thai, venäjä, englanti ja melko hyvää ruotsia. Haluan jossain vaiheessa oppia thaimaa ja muita kieliä, mutta minua ei painoteta aikaa.

Mikä motivoi sinua aloittamaan AVA-projektin?

Käytin Mochaa paljon, koska tein paljon moduuleja, jotka piti testata. En ollut todella tyytyväinen sen toimintaan. Mocha injektoi joitain globaaleja esineitä, mutta niitä ei ole määritelty missään. Koska tein sen Node.js: ssä, minulla oli paljon async-sovellusliittymiä eikä se ollut kovin kätevää tehdä Mochan kanssa.

Halusin jotain yksinkertaisempaa ja optimoidumpaa käyttö tapaukselleni. Joten eräänä viikonloppuna päätin työskennellä sen parissa ja sunnuntai-iltana julkaissin AVA: n version 0.0.1 version npm. Vaikka JavaScript on yksisäikeinen, IO Node.js: ssä voi tapahtua rinnakkain sen asynk-luonteen vuoksi. AVA hyödyntää tätä ja suorittaa testit samanaikaisesti, mikä on erityisen hyödyllistä IO-raskastesteissä. Lisäksi testitiedostot ajetaan rinnakkain erillisinä prosesseina, mikä mahdollistaa entistä paremman suorituskyvyn ja eristetyn ympäristön jokaiselle testitiedostolle.

AVA-projekti

Koska minulla ei ollut aikaa korjata virheitä ja halusin käyttää sitä vain omiin projekteihini, se oli yksityinen. Puolitoista vuoden kuluttua tein vihdoin AVA: lle logon, siivoin repon, kirjoitin paljon dokumentaatiota. Sitten julkaisin projektin.

Suurin osa käyttäjistä vaikuttaa olevan erittäin onnellinen AVA: sta, koska saamme positiivisia tweettejä projektista jatkuvasti. He todella pitävät siitä, kuinka yksinkertainen syntaksi on ja kuinka helppo on aloittaa. Tein vain raapia oman kutinani, mutta osoittautuu, että muilla ihmisillä oli sama ongelma ja he pitivät ratkaisusta.

Vietän nykyään enemmän aikaa projektin hallintaan, koska uusia viitteitä on niin paljon ja viikkopyyntöjä on joka viikko, mikä jättää minulle vähän aikaa koodaukseen.

Miksi päätit aloittaa macOS-kehityksen?

Suoritin vähän Objective-C-ohjelmointia, mutta minulla ei ollut hienoa kokemusta. Tämän vuoden tammikuussa sain idean Mac-sovelluksesta, ja minulla oli jonkin verran vapaa-aikaa, joten hyppäsin suoraan Swiftiin. Näin opin yleensä uusia asioita. Se on hyvin spontaania. Aloitan halua valmistaa tuote, sitten selvittää, mitä taitoja tarvitsen tuotteen valmistamiseen, sitten opin ne. Idea tulee ennen suunnittelua.

Swift on aluksi paljon vaikeampi oppia kuin JavaScript, mutta Swift loistaa, koska se on voimakkaasti kirjoitettu. Kun käännät, on paljon epätodennäköisempi kaatua, jos käytät lisävarusteita oikein. Ainoa asia, josta en pitänyt Swiftistä, on, että joudut silti joskus toimimaan vuorovaikutuksessa C: n vanhojen sovellusliittymien kanssa.

Lungo-projektin logo

Kirjoitin muutamia tuottavuus- ja apuohjelmasovelluksia. Lungo on kirjoittamani valikkorivisovellus, jonka löydät App Store -sivulta. Toinen kirjoittamasi on akun ilmaisin.

Mikä on ensi vuoden suunnitelmasi? Suunnitteletko mennä kokopäiväisesti tai harkitset muita tapoja tulla taloudellisesti kestäväksi?

Olen asunut säästöistä viimeiset kolme vuotta ja tehnyt avoimen lähdekoodin ohjelmistoja. Aasiassa on paljon helpompaa, mutta se ei kestä ikuisesti. Ihannetapauksessa haluaisin tehdä avoimen lähdekoodin taloudellisesti kestävällä tavalla, mutta se on vaikeaa, joten teen todennäköisesti urakoitsijoita ensi vuonna.

Olen kokeillut muutamia erilaisia ​​asioita. Yksi asia, jonka tein, on kysyä tukea GitHub README.md-tiedostosta. En kutsuisi sitä mainokseksi, vaan pikemminkin pieneksi banneriksi. Annoin vähän rahaa, mutta se ei kaukana pysty ylläpitämään minua.

Voisin kokeilla Patreonia.

Mitä on asioita, joita haluat parantaa JavaScript-ekosysteemissä?

Mielestäni JavaScript-ekosysteemi on jo hieno, mutta meillä on vielä paljon virikkeitä työskennellä asioiden selaimen puolella. Tällä jättiläisellä rakennuskomentosarjalla on niin paljon projekteja vain yksinkertaisen sovelluksen saamiseksi, siksi rakastan Node.js.

Selainten ongelma on, että ne ovat erittäin monimutkaisia. Sinulla on verkko, jota ajatella, sinun on optimoitava sekä koon että suorituskyvyn suhteen, sinulla on paljon erilaisia ​​käyttötapoja, runkovaihtoehtoja, joista valita. Kaikki yrittävät yksinkertaistaa sitä, mutta sitten päädyt liian mielipiteelliseksi, lisäät kokoonpanon, mutta kattilalevyä on liikaa. En näe helppoa tietä eteenpäin, ellet korjaa todellista alustaa sen sijaan, että luisit sen päälle paljon ratkaisuja. Yksi asia, jonka mielestäni parantaa tilannetta, on, kun saamme lopulta moduulit selaimeen. Et siis tarvitse rakennusvaihetta kaikkeen.

Miksi JavaScriptin kehittäjät ovat pakkomielle yksisarvisista?

Koko poni-liike alkoi Django-yhteisöstä. Kun aloit kysyä haluamiasi ominaisuuksia, kehittäjät sanoivat: "Haluan nopeamman HTTP-parserin" tai "Haluan ORM: n, joka vain toimii." Eräänä päivänä yksi Djangon postitusluettelon ydinajista vastasi yhteen ominaisuuspyynnöistä. "ei, sinulla ei voi olla ponia!" Koko yksisarvinen liike alkoi ominaisuuden pyynnön kieltämisestä.

Siellä on jopa verkkosivusto, joka on omistettu rakastetulle ponille.

Django, maagisen voiman omaavien ponien verkkoverkko.

En muista tarkalleen kuinka se levisi JavaScript-yhteisöön. Se oli yksi niistä asioista, jotka vain tapahtuivat yksinään. Jotakin yhtä hauskaa ja typerää kuin yksisarviset auttavat minua työskentelemään ohjelmoinnin ja käyttöjärjestelmien kautta ja nostamaan moraalia. Sama pätee typerälle gifille.

ESPN.com meni taianomaiseksi Konami-koodilla. (lähde: http://kotaku.com/5230185/the-konami-code-makes-espncom-magical)Sindren verkkosivustoSindren kannettavan tietokoneen aloitusnäyttö

Alun perin postitin tämän haastattelun Between the Wires -haastattelusarjasta, joka sisälsi rakennuttajien ja suunnittelijoiden tuotteita.

Tämä projekti on mahdollista sponsoroimalla frontendmasters.com, egghead.io, Microsoft Edge ja Google Developers.