Steven
Steven5 min. skaitymo

Rami programinė įranga: kaip pašalinome mirgantį jungiklį ir išmokėme pokalbį pasakyti, kokiu režimu jis veikia

Du nedideli GeekBye leidimai, be jokių pagrindinių funkcijų — tik nustatymų jungiklis, kuris nustojo mirgėti, ir pokalbio asistentas, kuris pagaliau pasako, ar atsakė susitikimo režimu, ar kodavimo režimu. Štai kiek iš tikrųjų kainuoja „rami programinė įranga“ — po vieną smulkmeną.

Produktas
Dizainas
Inžinerija
GeekBye leidimai
Rami programinė įranga: kaip pašalinome mirgantį jungiklį ir išmokėme pokalbį pasakyti, kokiu režimu jis veikia

Ne kiekvienas leidimas yra karo istorija. Kai kurie tėra sąrašas smulkių, beveik nematomų dalykų, kurie tyliai buvo netvarkoje — tokių, kurie nieko nesugriauna, bet padaro, kad programa atrodo šiek tiek nepatikima, šiek tiek nervinga, šiek tiek ne tavo. GeekBye v2.0.3 ir v2.0.5 buvo būtent tokie. Jokių naujų funkcijų. Tik ramybė.

„Rami programinė įranga“ skamba kaip nuotaika. Iš tikrųjų tai krūva konkrečių sprendimų. Štai trys iš jų.

Jungiklis, kuris niekaip neapsispręsdavo

Buvo nustatymų jungiklis — tas, kuris valdo garso atkūrimą — kuris mirgėdavo, kai jį paspausdavai. Įjungi, ir sekundės dalį jis rodydavo įjungta, tada šokteldavo atgal į išjungta, ir tik tada nusistovėdavo. Menkas vizualinis trūkčiojimas, bet akis jį pagauna, ir tai skamba taip: programa nežino, ką daro.

Priežastis yra klasikinės sąsajos lenktynės, vadinamos optimistiniu atnaujinimu. Kai paspaudi jungiklį, programa turi du pasirinkimus: laukti, kol nustatymas iš tikrųjų išsisaugos, ir tada atnaujinti jungiklį (teisinga, bet atrodo vangu), arba persijungti iškart ir išsaugoti fone (atrodo momentiška). GeekBye darė antrąjį — persijungdavo iškart — bet taip pat iš naujo perskaitydavo išsaugotą reikšmę, kai ji grįždavo. Taigi seka buvo tokia: tu paspaudi, jungiklis optimistiškai persijungia į įjungtą, po akimirkos atkeliauja tikroji išsaugota reikšmė, ir vienam kadrui abi nesutampa, o jungiklis pastebimai šokteli.

Sprendimas — padaryti, kad optimistinė reikšmė ir patvirtinta reikšmė švariai sutaptų: jungiklis įsipareigoja tai būsenai, kurią pasirinkai, ir nustoja savęs klausinėti, kai išsaugojimas patvirtinamas. Šalia to v2.0.3 atliko nedėkingą teksto peržiūrą: garso atkūrimo aprašymas buvo sutrumpintas, kad derėtų su gretimomis eilutėmis, o nustatymų formuluotės buvo sužmogintos. Nė vienas iš šių dalykų nėra funkcija. Bet visa tai yra skirtumas tarp nustatymų skydelio, kuris atrodo suręstas, ir tokio, kuris atrodo kruopščiai apgalvotas.

Apžvalga, kuri neišeidavo

Naujo vartotojo apžvalgos naudingos lygiai vieną kartą. Problema yra būtent tas vienintelis kartas: kai jau ją matei, įvadinis sluoksnis, kurio negali atmesti, virsta betvarke, signalizuojančia ši programa mano, kad tu vis dar naujokas. v2.0.3 pataisė abu galus — produkto apžvalgą dabar galima paslėpti, o jei tikrai nori ją grąžinti, yra mygtukas Pakartoti apžvalgą. Parodyk ją, kai ji padeda, pasitrauk iš kelio, kai nepadeda, ir leisk vartotojui iškviesti ją savomis sąlygomis. Pagarba tam, kad vartotojas nebėra naujokas, yra sava maža ramybės forma.

Asistentas, kuris nepasakydavo, kaip jis mąsto

Štai tas, kuris iš tikrųjų buvo svarbus, ir jis susijęs su gilesne problema, kurią jau kurį laiką vijomės.

GeekBye asistentas atsako skirtingai priklausomai nuo konteksto. Susitikime „ką manai apie tai?“ turėtų sulaukti pokalbio, susitikimo kontekstą suvokiančio atsakymo. Kodavimo sesijoje tie patys žodžiai turėtų sulaukti techninio. Todėl serveris paleidžia klausimą per tinkamą rėmą — pavadinkim jį susitikimo režimu arba kodavimo režimu — ir šis rėmas iš tikrųjų pakeičia gaunamą atsakymą.

Bėda: programa niekada nepasakydavo, kuris režimas atsakė. Taigi kai asistentas duodavo koduoto skonio atsakymą į pokalbio klausimą — arba atsakydavo į kodo klausimą taip, tarsi tu tiesiog šnekučiuotum — atrodydavo, kad dirbtinis intelektas tiesiog klysta. Jis neklydo; jis buvo kitu režimu, o tu neturėjai jokio būdo to pamatyti. Paslėpta būsena vertė teisingą elgesį atrodyti sugedusiu. (Pati režimo logika yra didesnis darbas — orkestruotojas, kuris nusprendžia, kaip atsakyti į ne kodo klausimus kodavimo sesijos metu — bet nieko iš to tau nėra iš ko, jei negali pamatyti jo priimto sprendimo.)

v2.0.5 pridėjo į pokalbį tik skaitymui skirtą režimo ženkliuką: mažą etiketę, rodančią, ar asistentas atsakė susitikimo režimu, ar kodavimo režimu. Tik skaitymui — čia visa esmė — tai ne valdiklis, kurį nustatai, o langas į sprendimą, kurį sistema jau priėmė. Nustoji spėlioti, kodėl atsakymas atrodo ne toks; gali pamatyti rėmą, iš kurio jis atėjo.

Detalė, dėl kurios ženkliukas tampa sąžiningas

Štai inžinerinis sprendimas, kurį verta perduoti toliau, nes būtent tokie dalykai atskiria prilipdytą indikatorių nuo patikimo.

Režimo informacija ateina iš serverio kaip srautinio atsakymo dalis — mažas mode kadras serverio siunčiamų įvykių sraute. Bet senesnis klientas, atsiradęs iki šios funkcijos, nežinotų, kas yra mode kadras; geriausiu atveju jis jį ignoruoja, blogiausiu — atvaizduoja kažką iškraipyto. Todėl klientas paskelbia savo gebėjimą: jis nusiunčia užklausos antraštę, sakančią aš moku parodyti režimo ženkliuką, ir serveris mode kadrą siunčia tik tiems klientams, kurie ją atsiuntė. Seni klientai niekada negauna signalo, su kuriuo nesusidorotų; nauji klientai gauna būtent tą kadrą, kurio prašė.

Tai vienos antraštės rankos paspaudimas, ir tai yra skirtumas tarp „pridėjome funkciją“ ir „pridėjome funkciją nieko nesulaužydami tiems, kas dar neatsinaujino.“ Ta pati peržiūra sugriežtino likusį elgesį: ženkliukas išsivalo pats atstačius nustatymus ir kai pasikeičia pokalbio kontekstas (pasenusi režimo etiketė yra sava maža melagystė), ir jis rodomas tik pokalbio rodinyje, kur jam ir vieta.

Ko mus išmokė du „be funkcijų“ leidimai

  1. Trūkčiojimas yra pasitikėjimo signalas. Mirgantis jungiklis, šokinėjantis perjungiklis, etiketė, kuri užsilaiko kadru per ilgai — nė vienas iš jų nėra klaida gedimo prasme, bet kiekvienas jų sušnabžda ši programa ne visai valdo situaciją. Ramybė yra tų šnabždesių nebuvimas, ir jos užsitarnauji po vieną lenktynių sąlygą.
  2. Paslėptas režimas verčia teisingą elgesį atrodyti klaida. Asistentas darė teisingą dalyką ir buvo dėl to kaltinamas — vien todėl, kad vartotojas negalėjo pamatyti rėmo. Kai tavo sistema priima nematomą sprendimą, kuris pakeičia rezultatą, parodyk tą sprendimą — tik skaitymui skirtas ženkliukas dažnai yra visas sprendimas.
  3. Naujos funkcijos turėtų būti nematomos klientams, kurie negali jomis pasinaudoti. Gebėjimo antraštės rankos paspaudimas reiškia, kad režimo signalas pasiekia tik tuos klientus, kurie gali jį atvaizduoti. Atgalinis suderinamumas nėra vėliau prilipdytas versijos patikrinimas; tai klientas, sakantis, ką supranta, ir serveris, gerbiantis atsakymą.

Tai leidimai, apie kuriuos niekas nerašo pakeitimų žurnalo antraščių, ir jie yra didelė dalis priežasties, kodėl GeekBye v2 jaučiasi būtent taip. Apie leidimą, ant kurio ši ramybė buvo pastatyta, žr. ko iš tikrųjų reikia antrai versijai (v2.0.0). Apie kartu su juo atliktą patikimumo darbą — diena, kai mūsų programa pati sau surengė DDoS ataką (v2.0.1) ir kodėl jūsų AI užrašų programa nustoja įrašinėti susitikimo viduryje (v2.0.9).