Ohjelmointi äänellä: koodi, review ja commitit

”Ohjelmointi äänellä” kuulostaa yleensä klovneerukselta. Vuoden 2017 video, jossa kehittäjä huutaa ”open paren if foo equals equals null close paren” – on meemi, ei työnkulku. Itsekin ajattelin pitkään, että tämä idea on kuollut.
Commander Flow muutti näkemystäni. Ei siksi, että se olisi lisännyt jonkin maagisen ”koodin sanelun” tilan. Vaan siksi, että koodi ei ole vain koodia. Koodi on commitit, tiketit, code-review’t, dokumentaatio, kommentit, nimet, chatit kollegoiden kanssa. Ja kaikki tämä koodin ympärillä – nyt äänellä.
Missä ääni todella muuttaa kehittäjän elämää
Yleisin ääniopaationi on commit-viestit. Asetan kursorin kohtaan git commit -m "...", painan näppäintä, sanon jotain kuten ”korjasin race conditionin pipelinen peruutuksessa, peruutamme tokenin oikein pikanäppäimen toistuvalla painalluksella”, ja terminaaliin tulee valmis viesti conventional commits -tyyliin, koska määrittelin säännöt kerran äänellä – ja ne jäivät muistiin.
PR-kuvaukset ovat lähes samanlaisia, vain pidempiä. Avaan GitHub-PR-pohjan, sanelen kuten selittäisin junnulle – mitä muuttuu, miksi, mitä emme kosketa, miten testata. Muutamassa sekunnissa saan siistin markdownin otsikoilla ## Context, ## Changes, ## Test plan. Ennen tähän meni viitisen minuuttia, nyt – sekunteja.
Tärkein, mikä minulle muuttui, ovat code-review -kommentit. Aiemmin laiskistuin kirjoittaa kunnollisia review’ta: liikaa kirjoittamista jonkin sellaisen takia, mitä luetaan ja unohdetaan. Nyt maalaan rivin, sanelen ajatuksen äänellä, saan selkeän viimeistellyn kommentin kirjaimellisesti parissa sekunnissa. Reviewt pitenivät ja muuttuivat selvästi hyödyllisemmiksi, ja tiimi näkee sen.
Erikseen — dokumentaatio. Ammatin tuskaisin osa. Sanelen docstringin kuten selittäisin kollegalle, ja Commander Flow muotoilee sen XML-doc-, TSDoc- tai markdown-tyyliin – projektin kielen mukaan. Dokumentaatio lakkasi olemasta vero, jota maksan koodin ohella.
”En kirjoita koodia äänellä. Kirjoitan kaiken koodin ympärillä äänellä. Ja tajusin, että se on puolet työstäni.”
Code-comments -tila: erillinen asia, jota rakastan
Siksi sanon vain ääneen ”jätä se koodin kommenttina” – ja Commander Flow:
- Ei kosketa latinalaisia tunnisteita (variable names, class names)
- Säilyttää termit (kubectl, async/await, useEffect, OAuth) alkuperäisessä asussa
- Ei lisää ”ylimääräisiä” kohteliaita ilmauksia (eihän kukaan kirjoita ”arvoisat lukijat” koodikommenteissa)
- Toimii oikein, kun yhdessä kommentissa on molemmat aakkostot:
// tarkistetaan, että Subscription.IsActive ennen BillingService.Refresh -kutsua
Tämä kuulostaa pikkujutulta. Mutta ilman tuota äänivihjettä ensimmäiset alfa-buildit toisinaan ”jalostivat” teknisen kommenttini muotoon ”tarkastakaamme, onko liiketoimintaolio nimeltä ’Subscription’ tilassa ’Active’”.
Termisanasto — aliarvioitu ominaisuus
Lisään PolishOptions.Dictionaryyn omat termit ja lyhenteet. Minulla siellä on:
kubectl,helm,argocd,fluxIDictionary,IAsyncEnumerable,Span<T>ConfigureAwait(false)(kokonaisuutena, fraasina – ettei kielimalli kirjoita uudelleen)- Yrityksen lyhenteet, sisäisten palvelujen nimet
Tämän jälkeen kielimalli lakkaa ”parantamasta” spesifejä termejä jättäen ne juuri niin kuin nimesin.
Skenaario, joka vakuuttaa minut joka päivä
10:30, olen IDE:ssä, vieressä tiimin chat, vieressä Linear tiketillä. Pidän pikanäppäintä ja sanon:
”Vein retry-logiikan erilliseen RetryPolicy-luokkaan eksponentiaalisella backoffilla, lisäsin testit, tarkista lisäksi tiketin sequence diagram ennen mergeämistä”
Tämä menee Lineariin tiketin kommenttina. Seuraavaksi – Alt+Tab Slackiin, sama pikanäppäin:
”tiimi, työnsin PR:n review’hin, ei estävä mutta toivottavasti tänään”
Slack-tyyliin, pienillä kirjaimilla, ilman ”arvoisat kollegat”. Sitten – takaisin IDE:hen.
Kolme toimintoa kolmessa sovelluksessa, kaikki äänellä, ei sormia.
Missä kompastuin
Välimerkit koodissa, joka jää sanelujen väliin. Kun sanelen lohkon ”tämä funktio palauttaa Task<bool>”, kielimalli ”ajattelee” joskus, että Task<bool> on HTML:ää ja yrittää eskeipata sitä. Ratkaistu lisäämällä termi sanastoon, mutta alkuun yllätti.
Pikanäppäinristiriidat IDE:n kanssa. IDE:lläni on omat pikanäppäimet. Commander Flow’n pikanäppäintä piti vaihtaa pari kertaa, ettei se konfliktoisi. Nyt se on Caps Lockissa – mukavimmassa ja vähiten käytetyssä näppäimessä. Pieni epämukavuus, ratkesi yhdellä klikkauksella asetuksissa.
Raskaimmat tilat voivat ”miettiä” hieman hitaammin IDE:ssä. Sähköpostille ylimääräiset millisekunnit eivät tunnu. Koodikommentille ”tässä ja nyt” – tuntuvat. Vaihdoin keskitilaan työkannettavalle ja jätin tehokkaimman tilan pöytäkoneelle erillisellä näytönohjaimella. Viive katosi.
Mitä ymmärsin äänestä ohjelmoinnin käyttöliittymänä
Ääni ei korvaa näppäimistöä IDE:ssä. Se täydentää sitä siellä, missä näppäimistö oli huonoin työkalu. Kirjoittaa if (x != null && y != null) – näppäimistö. Selittää, miksi tämä tarkistus on tässä – ääni.
Näiden kahden tehtävän välillä on kognitiivisen kuormituksen kuilu, eivätkä ne ”ratkea” yhtä lailla kirjoittamalla. Lakkasin pakottamasta itseäni kirjoittamaan jälkimmäistä tehtävätyyppiä. Helpotti.
Mitä otin tästä suhteesta
Ohjelmointi äänellä ei ole ”koodin sanelua”. Se on muutos siinä, mitä tarkalleen teet äänellä. Logiikan kirjoitat käsin, kaiken inhimillisen logiikan ympärillä – äänellä.
Kymmenessä vuodessa ammatissa en ole löytänyt mukavampaa suhdetta.
Kokeile itse
Lataa Commander Flow ja pidä Caps Lockia pohjassa missä tahansa sovelluksessa. Tunnistus toimii paikallisesti, ilman pilveä — ilmainen kokeilu mukana.


