CienÄ«jamais Google Cloud, nesaderÄ«ba ar atpakaļejoÅ”u spēku jÅ«s nogalina.

SasodÄ«ts Google, es negribēju atkal rakstÄ«t emuāru. Man ir tik daudz darāmā. Emuāru rakstÄ«Å”ana prasa laiku, enerÄ£iju un radoÅ”umu, ko es varētu lietderÄ«gi izmantot: manas grāmatas, MÅ«zika, mana spēle un tā tālāk. Bet tu mani esi pietiekami nokaitinājis, ka man tas ir jāraksta.

Tātad, pieņemsim to galā.

Ä»aujiet man sākt ar Ä«su, bet pamācoÅ”u stāstu no brīža, kad sāku strādāt Google. Es zinu, ka pēdējā laikā esmu teicis daudz sliktu vārdu par Google, taču mani apbēdina, kad mans uzņēmums regulāri pieņem nekompetentus biznesa lēmumus. Tajā paŔā laikā mums tas ir jāpieŔķir: Google iekŔējā infrastruktÅ«ra ir patieŔām ārkārtēja, var droÅ”i teikt, ka Å”odien nav nekā labāka. Google dibinātāji bija daudz labāki inženieri nekā es jebkad bÅ«Å”u, un Å”is stāsts tikai apstiprina Å”o faktu.

Pirmkārt, neliels priekÅ”vēsture: Google ir datu uzglabāŔanas tehnoloÄ£ija, ko sauc Lielgalds. Tas bija ievērojams tehniskais sasniegums, viens no pirmajiem (ja ne pirmais) ā€œbezgalÄ«gi mērogojamoā€ atslēgu vērtÄ«bu krātuvi (K/V): bÅ«tÄ«bā NoSQL sākums. MÅ«sdienās Bigtable joprojām labi klājas diezgan pārpildÄ«tajā K/V krātuvē, taču tajā laikā (2005. gadā) tas bija pārsteidzoÅ”i forÅ”s.

Viena smieklÄ«ga lieta Bigtable ir tāda, ka viņiem bija iekŔējie vadÄ«bas plaknes objekti (kā daļa no ievieÅ”anas), ko sauc par planÅ”etdatoru serveriem, ar lieliem indeksiem, un kādā brÄ«dÄ« tie kļuva par vājo vietu sistēmas mērogoÅ”anas laikā. Bigtable inženieri prātoja, kā ieviest mērogojamÄ«bu, un pēkŔņi saprata, ka planÅ”etdatoru serverus var aizstāt ar citu Bigtable krātuvi. Tātad Bigtable ir daļa no Bigtable ievieÅ”anas. Å Ä«s noliktavas ir visos lÄ«meņos.

Vēl viena interesanta detaļa ir tāda, ka kādu laiku Bigtable kļuva populārs un visuresoÅ”s Google tÄ«klā, un katrai komandai bija savs repozitorijs. Tāpēc vienā no piektdienas sanāksmēm Lerijs Peidžs nejauÅ”i jautāja: ā€œKāpēc mums ir vairāk nekā viens Bigtable? Kāpēc ne tikai vienu?ā€ Teorētiski ar vienu krātuvi vajadzētu pietikt visām Google krātuves vajadzÄ«bām. Protams, viņi nekad neizmantoja tikai vienu praktisku attÄ«stÄ«bas iemeslu dēļ (piemēram, iespējamās neveiksmes sekas), taču teorija bija interesanta. Viena krātuve visam Visumam (Starp citu, vai kāds zina, vai Amazon to izdarÄ«ja ar savu Sable?)

Jebkurā gadījumā, lūk, mans stāsts.

Tajā laikā es strādāju Google tikai nedaudz vairāk nekā divus gadus, un kādu dienu es saņēmu e-pasta ziņojumu no Bigtable inženieru komandas, kas bija apmēram Ŕāds:

Dārgais Stīv!

Sveiki no Bigtable komandas. Vēlamies jÅ«s informēt, ka vietnē [datu centra nosaukums] jÅ«s izmantojat ļoti, ļoti vecu Bigtable bināro failu. Å Ä« versija vairs netiek atbalstÄ«ta, un mēs vēlamies jums palÄ«dzēt veikt jaunināŔanu uz jaunāko versiju.

Lūdzu, dariet man zināmu, ja varat ieplānot laiku, lai kopīgi strādātu pie Ŕī jautājuma.

Visu to labāko,
Bigtable komanda

Google tīklā jūs saņemat daudz pasta, tāpēc no pirmā acu uzmetiena es izlasīju kaut ko līdzīgu:

Cienījamais saņēmēj!

Sveiki no kādas komandas. Mēs vēlamies paziņot, ka bla bla bla bla. Bla bla bla bla bla bla, un bla bla bla tūlīt.

Lūdzu, dariet mums zināmu, ja varat ieplānot kādu no sava dārgā laika bla-bla-bla.

Visu to labāko,
Kaut kāda pavēle

Es to gandrÄ«z uzreiz izdzēsu, bet apziņas malā sajutu sāpÄ«gu, kaitinoÅ”u sajÅ«tu, ka ne Ä«sti izskatās pēc oficiālas vēstules acÄ«mredzami, ka adresāts kļūdÄ«jies, jo neizmantoju Bigtable.

Bet tas bija dīvaini.

AtlikuÅ”o dienas daļu pamÄ«Å”us pavadÄ«ju, domājot par darbu un kādu haizivs gaļu izmēģināt mikrovirtuvē, no kurām vismaz trÄ«s bija pietiekami tuvu, lai ar mērÄ·tiecÄ«gu biskvÄ«ta metienu trāpÄ«tu no manas vietas, bet doma par rakstÄ«Å”anu nekad nav atstājusi mani ar pieaugoÅ”u vieglas trauksmes sajÅ«tu.

Viņi skaidri pateica manu vārdu. Un e-pasts tika nosūtīts uz manu, nevis kāda cita e-pasta adresi, un tas nav cc: vai bcc:. Tonis ir ļoti personisks un skaidrs. Varbūt tā ir kāda kļūda?

Beidzot ziņkārība mani pārņēma, un es devos apskatīt Borg konsoli viņu pieminētajā datu centrā.

Un, protams, es pārvaldÄ«ju BigTable krātuvi. Es atvainojos, ko? Es paskatÄ«jos uz tā saturu, un oho! Tas bija no Codelab inkubatora, kurā es sēdēju savā pirmajā nedēļā Google 2005. gada jÅ«nijā. Codelab piespieda jÅ«s palaist Bigtable, lai tur ierakstÄ«tu dažas vērtÄ«bas, un pēc tam es acÄ«mredzot nekad neaizvēru krātuvi. Tas joprojām darbojās, lai gan bija pagājuÅ”i vairāk nekā divi gadi.

Å im stāstam ir vairāki ievērÄ«bas cienÄ«gi aspekti. Pirmkārt, Bigtable darbs bija tik nenozÄ«mÄ«gs Google mērogā, ka tikai divus gadus vēlāk kāds pamanÄ«ja papildu krātuvi, un tikai tāpēc, ka binārā versija bija novecojusi. SalÄ«dzinājumam es kādreiz apsvēru iespēju izmantot Bigtable pakalpojumā Google Cloud manai tieÅ”saistes spēlei. Tolaik Å”is pakalpojums maksāja aptuveni 16 000 USD gadā. tukÅ”s Bigtable uz GSP. Es nesaku, ka viņi jÅ«s krāpj, bet, manuprāt, tā ir liela nauda par tukÅ”u, sasodÄ«tu datubāzi.

Vēl viens ievērÄ«bas cienÄ«gs aspekts ir uzglabāŔana joprojām strādā pēc diviem gadiem. WTF? Datu centri nāk un iet; tie piedzÄ«vo pārtraukumus, tiem tiek veikta plānveida apkope, tie visu laiku mainās. Tiek atjaunināta aparatÅ«ra, nomainÄ«ti slēdži, viss tiek pastāvÄ«gi uzlabots. Kā pie velna viņi spēja uzturēt manu programmu divus gadus ar visām Ŕīm izmaiņām? Tas var Ŕķist pieticÄ«gs sasniegums 2020. gadā, bet 2005.-2007. gadā tas bija diezgan iespaidÄ«gs.

Un pats brÄ«niŔķīgākais aspekts ir tas, ka pie manis, nelielas, gandrÄ«z tukÅ”as Bigtable eksemplāra Ä«paÅ”nieka, vērÅ”as ārēja inženieru komanda kādā citā Å”tatā. nulles satiksme pēdējo divu gadu laikā ā€“ un piedāvājam palÄ«dzÄ«bu, lai to atjauninātu.

Es pateicos viņiem, izdzēsu krātuvi, un dzÄ«ve ritēja kā parasti. Bet pēc trÄ«spadsmit gadiem es joprojām domāju par Å”o vēstuli. Jo dažreiz es saņemu lÄ«dzÄ«gus e-pasta ziņojumus no Google Cloud. Tie izskatās Ŕādi:

Cien. Google mākoņa lietotāj!

Atgādinām, ka no 2020. gada augusta mēs pārtrauksim pakalpojumu [jÅ«su izmantotais pamatpakalpojums], un pēc tam jÅ«s nevarēsit jaunināt savas instances. Mēs iesakām veikt jaunināŔanu uz jaunāko versiju, kas tiek testēta beta versijā, kurai nav dokumentācijas, nav migrācijas ceļa un kas ir iepriekÅ” novecojusi, izmantojot mÅ«su laipno palÄ«dzÄ«bu.

Mēs esam apņēmuÅ”ies nodroÅ”ināt, lai Ŕīs izmaiņas minimāli ietekmētu visus Google Cloud platformas lietotājus.

Labākie draugi uz mūžu,
Google mākoņa platforma

Bet es gandrÄ«z nekad nelasu Ŕādas vēstules, jo patiesÄ«bā tās saka:

Cienījamais saņēmēj!

Ej ellē. Bāc, bāc, bāc. Atmet visu, ko dari, jo tam nav nozÄ«mes. SvarÄ«gs ir mÅ«su laiks. Mēs tērējam laiku un naudu, lai uzturētu savu sÅ«du, un mums tas ir apnicis, tāpēc mēs to vairs neatbalstÄ«sim. Tāpēc atmetiet savus plānus un sāciet rakņāties pa mÅ«su sÅ«dÄ«go dokumentāciju, lÅ«gt lūžņus forumos, un, starp citu, mÅ«su jaunais sÅ«ds ir pilnÄ«gi atŔķirÄ«gs no vecajiem sÅ«diem, jo ā€‹ā€‹mēs Å”o dizainu diezgan slikti sabojājām, heh, bet tas ir jÅ«su problēma, nevis mÅ«su.

Mēs turpinām pielikt pūles, lai visas jūsu izstrādātās izstrādes viena gada laikā kļūtu nelietojamas.

Lūdzu, bāc
Google mākoņa platforma

Un fakts ir tāds, ka es saņemu Ŕādas vēstules apmēram reizi mēnesÄ«. Tas notiek tik bieži un tik pastāvÄ«gi, ka neizbēgami atgrÅ«da es no GCP uz pretmākoņu nometni. Es vairs nepiekrÄ«tu bÅ«t atkarÄ«gam no viņu patentētajām izstrādēm, jo ā€‹ā€‹patiesÄ«bā devops ir vieglāk uzturēt atvērtā pirmkoda sistēmu tukŔā virtuālajā maŔīnā, nekā mēģināt sekot lÄ«dzi Google politikai par ā€œnovecojuÅ”oā€ produktu slēgÅ”anu.

Pirms es atgriežos pakalpojumā Google Cloud, jo es pat ne tuvu nav darīts, kritizējot tos, paskatīsimies uz uzņēmuma darbību dažās citās jomās. Google inženieri lepojas ar savu programmatūras inženierijas disciplīnu, un tas patiesībā rada problēmas. Lepnums ir slazds nepiesardzīgajiem, un tas daudziem Google darbiniekiem ir licis domāt, ka viņu lēmumi vienmēr ir pareizi un ka būt pareiziem (pēc kādas neskaidras neskaidras definīcijas) ir svarīgāk nekā rūpēties par klientiem.

Es sniegÅ”u dažus nejauÅ”us piemērus no citiem lieliem projektiem ārpus Google, bet es ceru, ka jÅ«s redzat Å”o modeli visur. Tas ir Ŕādi: atgriezeniskā saderÄ«ba nodroÅ”ina sistēmas dzÄ«vÄ«bu un atjaunināŔanu gadu desmitiem.

Atgriezeniskā savietojamÄ«ba ir visu veiksmÄ«go sistēmu projektÄ“Å”anas mērÄ·is atvērts izmantoÅ”ana, tas ir, ieviesta ar atvērtā pirmkoda kodu un/vai atvērtiem standartiem. Man Ŕķiet, ka es saku kaut ko pārāk acÄ«mredzamu, ka visiem ir pat neērti, bet nē. Tas ir politisks jautājums, tāpēc ir vajadzÄ«gi piemēri.

Pirmā sistēma, ko es izvēlÄ“Å”os, ir vecākā: GNU Emacs, kas ir sava veida hibrÄ«ds starp Windows Notepad, OS kodolu un Starptautisko kosmosa staciju. To ir nedaudz grÅ«ti izskaidrot, bet Ä«sumā Emacs ir platforma, kas tika izveidota 1976. gadā (jā, gandrÄ«z pirms pusgadsimta) programmÄ“Å”anai, lai padarÄ«tu jÅ«s produktÄ«vākus, taču maskējas par teksta redaktoru.

Es izmantoju Emacs katru dienu. Jā, es arÄ« izmantoju IntelliJ katru dienu, tā pati par sevi ir izaugusi par jaudÄ«gu instrumentu platformu. Taču IntelliJ paplaÅ”inājumu rakstÄ«Å”ana ir daudz vērienÄ«gāks un sarežģītāks uzdevums nekā Emacs paplaÅ”inājumu rakstÄ«Å”ana. Un vēl svarÄ«gāk, viss Emacs rakstÄ«tais tiek saglabāts uz visiem laikiem.

Es joprojām izmantoju programmatÅ«ru, ko rakstÄ«ju Emacs 1995. gadā. Un esmu pārliecināts, ka kāds izmanto Emacs rakstÄ«tus moduļus 80. gadu vidÅ«, ja ne agrāk. Ik pa laikam tie var bÅ«t nedaudz jāpielāgo, taču tas patieŔām notiek diezgan reti. Es nezinu neko, ko es jebkad bÅ«tu rakstÄ«jis Emacs (un esmu rakstÄ«jis daudz), kam bÅ«tu nepiecieÅ”ama atkārtota arhitektÅ«ra.

Emacs novecojuŔām entÄ«tijām ir funkcija make-obsolete. Emacs terminoloÄ£ija datora pamatjēdzieniem (piemēram, kas ir "logs") bieži atŔķiras no nozares konvencijām, jo ā€‹ā€‹Emacs tos ieviesa jau sen. Tās ir tipiskas briesmas tiem, kas apsteidz savu laiku: visi jÅ«su noteikumi ir nepareizi. Taču uzņēmumam Emacs ir nolietojuma jēdziens, ko viņu žargonā sauc novecoÅ”anās.

Bet Emacs pasaulē, Ŕķiet, ir atŔķirÄ«ga darba definÄ«cija. Ja vēlaties, cita pamatā esoŔā filozofija.

Emacs pasaulē (un daudzās citās jomās, par kurām mēs runāsim tālāk) novecojis API statuss bÅ«tÄ«bā nozÄ«mē: "Jums tieŔām nevajadzētu izmantot Å”o pieeju, jo, kamēr tā darbojas, tai ir dažādi trÅ«kumi, kurus mēs saraksts Å”eit. Bet galu galā tā ir jÅ«su izvēle."

Google pasaulē bÅ«t novecojuÅ”am nozÄ«mē: "Mēs pārkāpjam savas saistÄ«bas pret jums." Tā ir patiesÄ«ba. Tas ir tas, ko tas bÅ«tÄ«bā nozÄ«mē. Tas nozÄ«mē, ka viņi jÅ«s piespiedÄ«s regulāri darÄ«t kādu darbu, iespējams, daudz darba, kā sodu par ticÄ«bu viņiem krāsaina reklāma: Mums ir labākā programmatÅ«ra. Ātrākais! JÅ«s darāt visu saskaņā ar instrukcijām, palaižat savu aplikāciju vai pakalpojumu, un tad bam, pēc gada vai diviem tas saplÄ«st.

Tas ir kā pārdot lietotu auto, kas pēc 1500 km noteikti salūzīs.

Å Ä«s ir divas pilnÄ«gi atŔķirÄ«gas ā€œnovecoÅ”anāsā€ filozofiskas definÄ«cijas. Google smaržas definÄ«cija plānotā novecoÅ”ana. Es tam neticu patiesÄ«bā plānotā novecoÅ”ana tādā paŔā nozÄ«mē kā Apple. Taču Google noteikti plāno pārtraukt jÅ«su programmas apļveida ceļā. Es to zinu, jo strādāju tur par programmatÅ«ras inženieri vairāk nekā 12 gadus. Viņiem ir neskaidras iekŔējās vadlÄ«nijas par to, cik lielā mērā ir jāievēro atgriezeniskā saderÄ«ba, taču galu galā tas ir katras atseviŔķas komandas vai pakalpojuma ziņā. Nav uzņēmuma vai inženierzinātņu lÄ«meņa ieteikumu, un drosmÄ«gākais ieteikums attiecÄ«bā uz novecoÅ”anas cikliem ir ā€œmēģiniet dot klientiem 6ā€“12 mēneÅ”us, lai veiktu jaunināŔanu, pirms tiek sabojāta visa sistēmaā€.

Problēma ir daudz lielāka, nekā viņi domā, un tā turpināsies gadiem ilgi, jo klientu apkalpoÅ”ana nav viņu DNS. Vairāk par to zemāk.

Å ajā brÄ«dÄ« es teikÅ”u drosmÄ«gu paziņojumu, ka Emacs ir veiksmÄ«gs lielā mērā un vienmērÄ«gi bÅ«tÄ«bā jo viņi ļoti nopietni uztver atpakaļejoÅ”u saderÄ«bu. PatiesÄ«bā Ŕī ir mÅ«su raksta tēze. VeiksmÄ«gas, ilgstoÅ”as ā€‹ā€‹atvērtas sistēmas ir parādā savus panākumus mikrokopienām, kas ir dzÄ«vojuÅ”as ap tām gadu desmitiem paplaÅ”inājumi/spraudņi. Å Ä« ir ekosistēma. Es jau runāju par platformu bÅ«tÄ«bu un to nozÄ«mi, kā arÄ« to, kā Google visā uzņēmuma vēsturē nekad nav sapratis, kas ir nepiecieÅ”ams, lai izveidotu veiksmÄ«gu atvērto platformu ārpus Android vai Chrome.

Patiesībā man vajadzētu īsi pieminēt Android, jo jūs, iespējams, par to domājat.

Pirmkārt, Android nav Google. Viņiem nav gandrÄ«z nekā kopÄ«ga vienam ar otru. Android ir uzņēmums, ko Google iegādājās 2005. gada jÅ«lijā, uzņēmumam tika atļauts darboties vairāk vai mazāk autonomi, un tas pēdējos gados ir palicis gandrÄ«z neskarts. Android ir bēdÄ«gi slavena tehnoloÄ£iju kaudze un tikpat bēdÄ«gi slavena, durstÄ«ga organizācija. Kā teica kāds Google darbinieks: "JÅ«s nevarat vienkārÅ”i pieteikties Android ierÄ«cē."

IepriekŔējā rakstā es apspriedu, cik slikti bija daži Android agrÄ«nie dizaina lēmumi. Velns, kad es rakstÄ«ju Å”o rakstu, viņi izlaida muļķības, ko sauc par "tÅ«lÄ«tējām lietotnēm", kuras tagad ir (pārsteigums!) novecojis, un es jÅ«tu lÄ«dzi, ja bijāt pietiekami stulbs, lai klausÄ«tos Google un pārvietotu savu saturu uz Ŕīm tÅ«lÄ«tējajām lietotnēm.

Bet Å”eit ir atŔķirÄ«ba, bÅ«tiska atŔķirÄ«ba, proti, Android cilvēki patieŔām saprot, cik svarÄ«gas ir platformas, viņi cenÅ”as visu iespējamo, lai vecās Android lietotnes darbotos. PatiesÄ«bā viņu centieni saglabāt atpakaļejoÅ”u saderÄ«bu ir tik ekstrēmi, ka pat es, pirms dažiem gadiem savā Ä«sajā darbā Android nodaļā, mēģināju pārliecināt viņus pārtraukt atbalstu dažām no vecākajām ierÄ«cēm un API (es kļūdÄ«jos , kā tas bija daudzās citās pagātnē un tagadnē. Atvainojiet, Android puiÅ”i! Tagad, kad esmu bijis Indonēzijā, es saprotu, kāpēc mums tie ir vajadzÄ«gi).

Android lietotāji nospiež atpakaļejoÅ”u saderÄ«bu lÄ«dz gandrÄ«z neiedomājamām galējÄ«bām, savās sistēmās un rÄ«ku ķēdēs sakrājot milzÄ«gu daudzumu mantoto tehnisko parādu. Ak dievs, jums vajadzētu redzēt dažas no trakajām lietām, kas viņiem ir jādara savā bÅ«vÄ“Å”anas sistēmā, un tas viss saderÄ«bas vārdā.

Par to es pieŔķiru Android kāroto balvu "You're Not Google". Viņi ļoti nevēlas kļūt par Google, kas neprot izveidot izturÄ«gas platformas, bet gan par Android zina, kā to izdarÄ«t. Un tāpēc Google ir ļoti gudrs vienā aspektā: ļauj cilvēkiem darÄ«t lietas savā veidā operētājsistēmā Android.

Tomēr tÅ«lÄ«tējās lietotnes Android ierÄ«cēm bija diezgan muļķīga ideja. Un vai jÅ«s zināt, kāpēc? Jo viņi prasÄ«ja pārrakstÄ«t un pārveidot savu pieteikumu! It kā cilvēki vienkārÅ”i pārrakstÄ«s divus miljonus pieteikumu. Es domāju, ka tÅ«lÄ«tējās lietotnes bija Google darbinieka ideja.

Bet ir atŔķirÄ«ba. Atgriezeniskā saderÄ«ba ir par augstām izmaksām. Android pati uzņemas Å”o izmaksu nastu, savukārt Google uzstāj, ka Ŕī nasta ir jāuzņemas tu esi, maksājoÅ”s klients.

JÅ«s varat redzēt Android apņemÅ”anos nodroÅ”ināt atpakaļejoÅ”u saderÄ«bu tās API. Ja jums ir četras vai piecas dažādas apakÅ”sistēmas, kas burtiski veic vienu un to paÅ”u, tā ir droÅ”a zÄ«me, ka pamatā ir apņemÅ”anās nodroÅ”ināt atpakaļejoÅ”u saderÄ«bu. Kas platformu pasaulē ir sinonÄ«ms saistÄ«bā ar jÅ«su klientiem un jÅ«su tirgu.

Google galvenā problēma Å”eit ir lepnums par savu inženiertehnisko higiēnu. Viņiem nepatÄ«k, ja ir daudz dažādu veidu, kā darÄ«t vienu un to paÅ”u, un vecie, mazāk vēlamie veidi atrodas blakus jaunajiem, iekārotākajiem veidiem. Tas palielina mācÄ«Å”anās lÄ«kni tiem, kuri sākuÅ”i izmantot sistēmu, palielina mantoto API uzturÄ“Å”anas slogu, palēnina jauno funkciju ātrumu, un galvenais grēks ir tas, ka tas nav glÄ«ts. Google ā€” kā lēdija Askota no Tima Bērtona filmas Alise BrÄ«numzemē:

Lēdija Askota:
- Alise, vai tu zini, no kā es visvairāk baidos?
ā€“ Aristokrātijas pagrimums?
- Es baidījos, ka man būs neglītie mazbērni.

Lai saprastu kompromisu starp skaisto un praktisko, apskatÄ«sim treÅ”o veiksmÄ«go platformu (pēc Emacs un Android) un redzēsim, kā tā darbojas: paÅ”u Java.

Javai ir daudz novecojuÅ”u API. NovecoÅ”ana ir ļoti populāra Java programmētāju vidÅ«, pat populārāka nekā lielākajā daļā programmÄ“Å”anas valodu. Pati Java, pamatvaloda un bibliotēkas pastāvÄ«gi nolieto API.

Lai ņemtu tikai vienu no tÅ«kstoÅ”iem piemēru, aizvērÅ”anas pavedieni uzskatÄ«ts par novecojuÅ”u. KopÅ” Java 1.2 izlaiÅ”anas 1998. gada decembrÄ« tas ir novecojis. Ir pagājuÅ”i 22 gadi, kopÅ” Ŕī darbÄ«ba tika pārtraukta.

Bet mans faktiskais kods ražoÅ”anā joprojām nogalina pavedienus katru dienu. Vai jÅ«s tieŔām domājat, ka tas ir labi? PilnÄ«gi noteikti! Es domāju, protams, ja es Å”odien pārrakstÄ«tu kodu, es to ieviestu savādāk. Taču manas spēles kods, kas pēdējo divu desmitgažu laikā ir iepriecinājis simtiem tÅ«kstoÅ”u cilvēku, ir rakstÄ«ts ar funkciju, lai aizvērtu pavedienus, kas karājas pārāk ilgi, un es nekad nav bijis jāmaina. Es pārzinu savu sistēmu labāk nekā jebkurÅ” cits, man ir burtiski 25 gadu pieredze darbā ar to ražoÅ”anā, un varu droÅ”i teikt: manā gadÄ«jumā Å”o konkrēto darbinieku pavedienu aizvērÅ”ana ir pilnÄ«ga. nekaitÄ«gs. Nav vērts tērēt laiku un pÅ«les, lai pārrakstÄ«tu Å”o kodu, un paldies Lerijam Elisonam (iespējams), ka Oracle nepiespieda mani to pārrakstÄ«t.

Oracle droŔi vien saprot arī platformas. Kas to lai zina.

PierādÄ«jumus var atrast visās galvenajās Java API, kas ir novecojuÅ”as, piemēram, ledāja lÄ«nijas kanjonā. Java Swing bibliotēkā varat viegli atrast piecus vai seÅ”us dažādus tastatÅ«ras navigācijas pārvaldniekus (KeyboardFocusManager). PatiesÄ«bā ir grÅ«ti atrast Java API, kas nav novecojusi. Bet viņi joprojām strādā! Es domāju, ka Java komanda patieŔām noņems API tikai tad, ja saskarne rada acÄ«mredzamas droŔības problēmas.

LÅ«k, cilvēki: mēs, programmatÅ«ras izstrādātāji, esam ļoti aizņemti, un katrā programmatÅ«ras jomā mēs saskaramies ar konkurējoŔām alternatÄ«vām. Jebkurā laikā programmētāji valodā X apsver valodu Y kā iespējamu aizstājēju. Ak, tu man netici? Vai vēlaties to saukt par Swift? Piemēram, visi migrē uz Swift, un neviens to nepamet, vai ne? Oho, cik maz tu zini. Uzņēmumi rēķina izmaksas par divām mobilo ierīču izstrādes komandām (iOS un Android) ā€” un viņi sāk saprast, ka Ŕīs starpplatformu izstrādes sistēmas ar smieklÄ«giem nosaukumiem, piemēram, Flutter un React Native, faktiski darbojas un var tikt izmantotas, lai samazinātu savu mobilās komandas divreiz vai, gluži otrādi, padara tās divreiz produktÄ«vākas. Uz spēles ir likta reāla nauda. Jā, ir kompromisi, bet, no otras puses, nauda.

Pieņemsim hipotētiski, ka Apple muļķīgi paņēma Gvido van Rosuma norādījumu un paziņoja, ka Swift 6.0 nav saderīgs ar Swift 5.0, līdzīgi kā Python 3 nav saderīgs ar Python 2.

Es droÅ”i vien stāstÄ«ju Å”o stāstu pirms kādiem desmit gadiem, bet pirms kādiem piecpadsmit gadiem es devos uz O'Reilly's Foo Camp kopā ar Gvido, sēdēju teltÄ« ar Polu Grehemu un kaudzi lielu kadru. Mēs sēdējām svelmainā karstumā un gaidÄ«jām, kad Lerijs Peidžs izlidos ar savu personÄ«go helikopteru, kamēr Gvido dronēja aptuveni ā€œPython 3000ā€, ko viņŔ nosauca pēc gadu skaita, kas bÅ«tu vajadzÄ«gs, lai visi tur migrētu. Mēs viņam pastāvÄ«gi jautājām, kāpēc viņŔ pārkāpj saderÄ«bu, un viņŔ atbildēja: "Unicode." Un mēs jautājām, ja mums bÅ«tu jāpārraksta savs kods, kādus citus ieguvumus mēs redzētu? Un viņŔ atbildēja: "JÅ«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«Å«."

Ja instalējat Google Cloud Platform SDK (ā€œgcloudā€), saņemsit Ŕādu paziņojumu:

Cienījamais saņēmēj!

Mēs vēlamies jums atgādināt, ka Python 2 atbalsts ir novecojis, tāpēc bāc

ā€¦ un tā tālāk. DzÄ«ves cikls.

Bet bÅ«tÄ«ba ir tāda, ka katram izstrādātājam ir izvēle. Un, ja jÅ«s piespiedÄ«sit viņus pietiekami bieži pārrakstÄ«t kodu, viņi varētu padomāt cits iespējas. Viņi nav jÅ«su Ä·Ä«lnieki, lai arÄ« kā jÅ«s tos vēlētos. Viņi ir jÅ«su viesi. Python joprojām ir ļoti populāra programmÄ“Å”anas valoda, bet sasodÄ«ts, Python 3(000) radÄ«ja tādu bardaku sevÄ«, savās kopienās un savu kopienu lietotāju vidÅ«, ka sekas nav noskaidrotas jau piecpadsmit gadus.

Cik Python programmas ir pārrakstÄ«tas programmā Go (vai Ruby, vai kādā citā alternatÄ«vā) Ŕīs atgriezeniskās nesaderÄ«bas dēļ? Cik daudz jaunas programmatÅ«ras ir rakstÄ«ts kaut kas cits, nevis Python, lai gan tas varētu bÅ«t rakstÄ«ts pitonā, ja Gvido nebÅ«tu nodedzinājis visu ciemu? GrÅ«ti pateikt, bet Python nepārprotami ir cietis. Tas ir milzÄ«gs haoss, un visi zaudē.

Pieņemsim, ka Apple izmanto Gvido un pārtrauc saderÄ«bu. Kā jÅ«s domājat, kas notiks tālāk? Nu, varbÅ«t 80-90% izstrādātāju, ja iespējams, pārrakstÄ«s savu programmatÅ«ru. Citiem vārdiem sakot, 10ā€“20% lietotāju automātiski izmanto kādu konkurējoÅ”u valodu, piemēram, Flutter.

Dariet to vairākas reizes, un jÅ«s zaudēsiet pusi no savas lietotāju bāzes. Tāpat kā sportā, arÄ« programmÄ“Å”anas pasaulē aktuālajai formai ir nozÄ«me. Š²ŃŃ‘. Ikviens, kurÅ” piecu gadu laikā zaudēs pusi no lietotājiem, tiks uzskatÄ«ts par lielu tauku zaudētāju. Jums ir jābÅ«t modernam platformu pasaulē. Bet Å”eit jÅ«s laika gaitā sabojāt vecāku versiju neatbalstÄ«Å”ana. Jo katru reizi, kad atbrÄ«vojaties no dažiem izstrādātājiem, jÅ«s (a) tos zaudējat uz visiem laikiem, jo ā€‹ā€‹viņi ir dusmÄ«gi uz jums par lÄ«guma lauÅ”anu, un (b) atdodat tos saviem konkurentiem.

Ironiskā kārtā es arÄ« palÄ«dzēju Google kļūt par tādu primadonnu, kas ignorē atpakaļejoÅ”u saderÄ«bu, kad es izveidoju Grok ā€” avota koda analÄ«zes un izpratnes sistēmu, kas ļauj viegli automatizēt un instrumentēt paÅ”u kodu ā€” lÄ«dzÄ«gi kā IDE, taču Å”eit tiek saglabāts mākoņpakalpojums. materializēja visu miljardu Google pirmkoda rindu attēlojumus lielā datu noliktavā.

Groks nodroÅ”ināja Google darbiniekiem jaudÄ«gu ietvaru automatizētas pārveidoÅ”anas veikÅ”anai visā viņu kodu bāzē (burtiski visā Google). Sistēma aprēķina ne tikai jÅ«su iepriekŔējās atkarÄ«bas (no kurām jÅ«s esat atkarÄ«ga), bet arÄ« lejupejoÅ”a (kas ir jÅ«su ziņā), tāpēc, mainot API, jÅ«s zināt visus, kurus pārkāpjat! Tādā veidā, veicot izmaiņas, varat pārbaudÄ«t, vai katrs jÅ«su API patērētājs ir atjauninājis jauno versiju, un patiesÄ«bā, bieži vien ar viņu rakstÄ«to Rosie rÄ«ku, jÅ«s varat pilnÄ«bā automatizēt procesu.

Tas ļauj Google kodu bāzei bÅ«t iekŔēji gandrÄ«z pārdabiski tÄ«rai, jo Å”ie robotizētie kalpi skraida pa māju un automātiski visu iztÄ«ra, ja viņi pārdēvēja SomeDespicablyLongFunctionName par SomeDespicablyLongMethodName, jo kāds nolēma, ka tas ir neglÄ«ts mazbērns un viņu vajag iemidzināt.

Un, atklāti sakot, tas diezgan labi darbojas Google... iekŔēji. Es domāju, jā, Google Go kopienai ir patÄ«kami smiekli ar Java kopienu Google, jo viņiem ir ieradums nepārtraukti pārveidot. Ja kaut ko restartējat N reizes, tas nozÄ«mē, ka jÅ«s to ne tikai pieskrÅ«vējāt N-1 reizi, bet pēc kāda laika kļūst diezgan skaidrs, ka jÅ«s, iespējams, to izskrÅ«vējāt arÄ« N reizes mēģinājumā. Bet kopumā viņi paliek pāri Å”ai kņadai un uztur kodu ā€œtÄ«ruā€.

Problēma sākas, kad viņi mēģina uzspiest Å”o attieksmi saviem mākoņa klientiem un citu API lietotājiem.

Esmu jÅ«s nedaudz iepazÄ«stinājis ar Emacs, Android un Java; apskatÄ«sim jaunāko veiksmÄ«go un ilgmūžīgo platformu: paÅ”u tÄ«mekli. Vai varat iedomāties, cik HTTP atkārtojumu ir izgājis kopÅ” 1995. gada, kad izmantojām mirgojoÅ”us tagus? un ikonas "Tiek bÅ«vēta" tÄ«mekļa lapās.

Bet tas joprojām darbojas! Un Ŕīs lapas joprojām darbojas! Jā, puiÅ”i, pārlÅ«kprogrammas ir pasaules čempioni atgriezeniskās saderÄ«bas ziņā. Chrome ir vēl viens piemērs retajai Google platformai, kurai ir pareizi pieskrÅ«vētas galvas, un, kā jau varēja nojaust, Chrome faktiski darbojas kā smilÅ”kastes uzņēmums, kas ir noŔķirts no pārējās Google.

Es arÄ« vēlos pateikties mÅ«su draugiem operētājsistēmu izstrādātājiem: Windows, Linux, NOT APPLE FUCK YOU APPLE, FreeBSD u.c. par tik lielisko darbu, lai nodroÅ”inātu atpakaļsaderÄ«bu savās veiksmÄ«gajās platformās (Apple labākajā gadÄ«jumā iegÅ«st C mÄ«nuss ir tas, ka viņi visu laiku sabojā visu bez pamatota iemesla, bet kaut kā sabiedrÄ«ba to apiet ar katru izlaidumu, un OS X konteineri joprojām nav pilnÄ«bā novecojuÅ”i... vēl).

Bet pagaidiet, jÅ«s sakāt. Vai mēs nesalÄ«dzinām ābolus ar apelsÄ«niem ā€” atseviŔķas programmatÅ«ras sistēmas vienā datorā, piemēram, Emacs/JDK/Android/Chrome, salÄ«dzinot ar vairāku serveru sistēmām un API, piemēram, mākoņpakalpojumiem?

Nu par Å”o es vakar tvÄ«toju, bet Lerija Vola stilā (programmÄ“Å”anas valodas Perl veidotājs - apm.) pēc principa "sÅ«c/nosaka" uzmeklēju vārdu novecojis Google un Amazon izstrādātāju vietnēs. Un, lai gan AWS ir simtiem reižu vairāk pakalpojumu piedāvājumu nekā GCP, Google izstrādātāju dokumentācijā novecoÅ”ana minēta apmēram septiņas reizes biežāk.

Ja kāds Google darbinieks to lasa, viņŔ, iespējams, ir gatavs izvilkt Donalda Trampa stila diagrammas, kas parāda, ka patiesÄ«bā visu dara pareizi un ka es nedrÄ«kstu veikt negodÄ«gus salÄ«dzinājumus, piemēram, "vārda novecojis pieminÄ“Å”anas gadÄ«jumu skaits pret pakalpojumu skaits" "

Bet pēc visiem Å”iem gadiem Google Cloud joprojām ir pakalpojums Nr. 3 (es nekad neesmu rakstÄ«jis rakstu par neveiksmÄ«go mēģinājumu kļūt par Nr. 2), taču, ja ticēt iekŔējām personām, pastāv zināmas bažas, kas drÄ«zumā varētu nokrist. Nr.4.

Man nav nekādu pārliecinoÅ”u argumentu, lai "pierādÄ«tu" savu tēzi. Man ir tikai krāsaini piemēri, ko esmu uzkrājis vairāk nekā 30 gadu laikā kā izstrādātājs. Es jau minēju Ŕīs problēmas dziļi filozofisko raksturu; dažos veidos tas ir politizēts izstrādātāju kopienās. Daži tam tic radÄ«tāji platformām ir jārÅ«pējas par saderÄ«bu, savukārt citi uzskata, ka tas rada bažas lietotājiem (paÅ”i izstrādātāji). Viens no diviem. PatieŔām, vai tas nav politisks jautājums, kad mēs izlemjam, kam jāsedz kopējo problēmu izmaksas?

Tātad Ŕī ir politika. Un droŔi vien uz manu runu būs dusmīgas atbildes.

Kā lietotājs Google Cloud Platform un kā AWS lietotājs divus gadus (strādājot Grab), varu teikt, ka starp Amazon un Google filozofijām ir milzÄ«ga atŔķirÄ«ba attiecÄ«bā uz prioritātēm. Es aktÄ«vi neattÄ«stu AWS, tāpēc nezinu, cik bieži viņi noņem vecās API. Taču pastāv aizdomas, ka tas nenotiek ne tuvu tik bieži kā Google. Un es patiesi uzskatu, ka Å”is pastāvÄ«go strÄ«du un neapmierinātÄ«bas avots GSP ir viens no lielākajiem faktoriem, kas kavē platformas attÄ«stÄ«bu.

Es zinu, ka es nenosaucu konkrētus GCP sistēmu piemērus, kas vairs netiek atbalstÄ«ti. Varu teikt, ka gandrÄ«z viss, ko esmu izmantojis, sākot no tÄ«kliem (no vecākā lÄ«dz VPC) lÄ«dz krātuvei (Cloud SQL v1-v2), Firebase (tagad Firestore ar pavisam citu API), App Engine (pat nesāksim) , mākoņa galapunkti Cloud Endpoint un lÄ«dz... Es nezinu - pilnÄ«gi visu Å”o piespieda jÅ«s pārrakstÄ«t kodu pēc maksimums 2-3 gadiem, un viņi nekad nav automatizējuÅ”i migrāciju jÅ«su vietā un bieži vispār nebija dokumentēta migrācijas ceļa. It kā tā tam vajadzēja bÅ«t.

Un katru reizi, kad skatos uz AWS, es sev jautāju, kāpēc, ellē, es joprojām izmantoju GCP. Viņiem acÄ«mredzami nav vajadzÄ«gi klienti. Viņiem vajag pircēji. Vai jÅ«s saprotat atŔķirÄ«bu? Ä»auj man paskaidrot.

Google Cloud ir Tirgus, kur cilvēki piedāvā savus programmatÅ«ras risinājumus, un, lai izvairÄ«tos no tukÅ”a restorāna efekta, viņiem tas bija jāaizpilda ar dažiem priekÅ”likumiem, tāpēc viņi noslēdza lÄ«gumu ar uzņēmumu Bitnami, lai izveidotu virkni risinājumu, kas tiek izvietoti ar vienu klikŔķi vai vajadzētu Es pats to rakstu ā€œrisinājumusā€, jo tie neatrisina neko nolādētu. Tie vienkārÅ”i pastāv kā izvēles rÅ«tiņas, kā mārketinga pildviela, un Google nekad nav rÅ«pējies par to, vai kāds no rÄ«kiem patieŔām darbojas. Es pazÄ«stu produktu vadÄ«tājus, kuri ir sēdējuÅ”i vadÄ«tāja vietā, un varu jums apliecināt, ka Å”iem cilvēkiem ir vienalga.

Ņemiet, piemēram, it kā ā€œviena klikŔķaā€ izvietoÅ”anas risinājumu. Perkona. Es biju lÄ«dz nāvei slims no Google Cloud SQL slepkavÄ«bām, tāpēc sāku meklēt iespēju izveidot savu Percona klasteru kā alternatÄ«vu. Un Å”oreiz Ŕķita, ka Google ir paveicis labu darbu, viņi man ietaupÄ«s laiku un pÅ«les, nospiežot pogu!

Nu lieliski, ejam. Sekosim saitei un noklikŔķiniet uz Ŕīs pogas. Atlasiet ā€œJāā€, lai piekristu visiem noklusējuma iestatÄ«jumiem un izvietotu kopu savā Google mākoņprojektā. Haha, tas nedarbojas. Nekas no Ŕīm muļķībām nedarbojas. RÄ«ks nekad netika pārbaudÄ«ts un tas sāka pÅ«t jau no pirmās minÅ«tes, un mani nepārsteigtu, ja vairāk nekā puse no "risinājumiem" ir izvietoÅ”ana ar vienu klikŔķi (tagad mēs saprotam, kāpēc pēdiņas) vispār nestrādā. Å Ä« ir absolÅ«ti bezcerÄ«ga tumsa, kurā labāk neieiet.

Bet Google ir taisnÄ«ba mudina lai jÅ«s tos izmantotu. Viņi vēlas, lai tu to darÄ«tu nopirka. Viņiem tas ir darÄ«jums. Viņi neko negrib atbalstu. Tā nav daļa no Google DNS. Jā, inženieri atbalsta viens otru, par ko liecina mans stāsts ar Bigtable. Bet parastajiem cilvēkiem paredzētajos produktos un pakalpojumos viņi vienmēr bija nežēlÄ«gi iekŔā jebkura pakalpojuma slēgÅ”ana, kas neatbilst rentabilitātes latiņai, pat ja tam ir miljoniem lietotāju.

Un tas ir Ä«sts izaicinājums GCP, jo tas ir DNS, kas slēpjas aiz visiem mākoņu piedāvājumiem. Viņi nemēģina neko atbalstÄ«t; Ir labi zināms, ka viņi atsakās mitināt (kā pārvaldÄ«tu pakalpojumu) jebkādu treŔās puses programmatÅ«ru lÄ«dz, lÄ«dz brÄ«dim, kad AWS dara to paÅ”u un ap to izveido veiksmÄ«gu biznesu un kad klienti burtiski pieprasa to paÅ”u. Tomēr ir jāpieliek pÅ«les, lai Google kaut ko atbalstÄ«tu.

Å is atbalsta kultÅ«ras trÅ«kums kopā ar mentalitāti ā€œizjauksim, lai padarÄ«tu to skaistākuā€ atsveÅ”ina izstrādātājus.

Un tas nav labi, ja vēlaties izveidot ilgmūžīgu platformu.

Google, mosties, sasodÄ«ts. Tagad ir 2020. gads. JÅ«s joprojām zaudējat. Ir pienācis laiks rÅ«pÄ«gi paskatÄ«ties spogulÄ« un atbildēt, vai tieŔām vēlaties palikt mākoņbiznesā.

Ja gribi palikt, tad beidz visu lauzt. PuiÅ”i, jÅ«s esat bagāti. Mēs, izstrādātāji, nē. Tātad, kad runa ir par to, kurÅ” uzņemsies saderÄ«bas nastu, jums tas ir jāuzņemas uz sevi. Ne mums.

Jo ir vēl vismaz trÄ«s tieŔām labi mākoņi. Viņi aicina.

Un tagad es pārieÅ”u pie visu savu bojāto sistēmu laboÅ”anas. Eh.

Līdz nākamajai reizei!

PS Atjauniniet, izlasot dažas diskusijas par Å”o rakstu (diskusijas ir lieliskas, btw). Firebase atbalsts nav pārtraukts, un man nav zināmi plāni. Tomēr viņiem ir nepatÄ«kama straumÄ“Å”anas kļūda, kuras dēļ Java klients apstāties programmā App Engine. Viens no viņu inženieriem man palÄ«dzēja atrisināt Å”o problēmu, kad strādāju Google, taču viņi nekad nav izlabojuÅ”i kļūdu, tāpēc man ir slikts risinājums, proti, katru dienu ir jārestartē GAE lietotne. Un tā tas ir četrus gadus! Viņiem tagad ir Firestore. Pāreja uz to prasÄ«s daudz darba, jo tā ir pilnÄ«gi cita sistēma, un Firebase kļūda nekad netiks novērsta. Kādu secinājumu var izdarÄ«t? JÅ«s varat saņemt palÄ«dzÄ«bu ja strādājat uzņēmumā. Iespējams, es esmu vienÄ«gais, kurÅ” izmanto Firebase GAE, jo 100% vietējā lietotnē reÄ£istrēju mazāk nekā 100 atslēgas, un tā pārstāj darboties ik pēc pāris dienām zināmas kļūdas dēļ. Ko es varu teikt, izņemot to, ka izmantojiet to uz savu risku. Es pāreju uz Redisu.

Esmu arÄ« redzējis, ka daži pieredzējuŔāki AWS lietotāji saka, ka AWS parasti nekad nebeidz atbalstÄ«t nevienu pakalpojumu, un SimpleDB ir lielisks piemērs. Mani pieņēmumi, ka AWS nav tādas paÅ”as atbalsta slimÄ«bas kā Google, Ŕķiet pamatoti.

Turklāt es pamanÄ«ju, ka pirms 20 dienām Google App Engine komanda pārtrauca svarÄ«gas Go bibliotēkas mitināŔanu, slēdzot GAE lietojumprogrammu no viena no galvenajiem Go izstrādātājiem. Tas tieŔām bija stulbi.

Visbeidzot, esmu dzirdējis, ka Google darbinieki jau apspriež Å”o jautājumu un kopumā piekrÄ«t man (mÄ«lu jÅ«s, puiÅ”i!). Taču Ŕķiet, ka viņi domā, ka problēma ir neatrisināma, jo Google kultÅ«rai nekad nav bijusi pareizā stimulu struktÅ«ra. Es domāju, ka bÅ«tu labi veltÄ«t kādu laiku, lai apspriestu absolÅ«ti pārsteidzoÅ”o pieredzi, ko guvu, strādājot ar AWS inženieriem, strādājot Grab. Es ceru, ka kādreiz nākotnē!

Un jā, 2005. gadā viņiem bija dažāda veida haizivju gaļa milzÄ«gajā bufetē 43. ēkā, un mana iecienÄ«tākā bija āmurhaizivs gaļa. Tomēr lÄ«dz 2006. gadam Lerijs un Sergejs atbrÄ«vojās no visām neveselÄ«gajām uzkodām. Tātad Bigtable stāsta laikā 2007. gadā haizivis tieŔām nebija, un es jÅ«s maldināju.

Kad pirms četriem gadiem skatÄ«jos uz mākonis Bigtable (dod vai ņem), Å”eit bija izmaksas. Å Ä·iet, ka tagad tas ir nedaudz samazinājies, taču tas joprojām ir Å”ausmÄ«gi daudz tukÅ”ai datu noliktavai, jo Ä«paÅ”i tāpēc, ka mans pirmais stāsts parāda, cik tukÅ”a liela tabula ir nenozÄ«mÄ«ga to mērogā.

Atvainojiet, ka aizvainoju Apple kopienu un neko labu nepateicu par Microsoft utt. Jums viss ir kārtÄ«bā, es ļoti novērtēju visas Ŕī raksta radÄ«tās diskusijas! Bet dažreiz, lai sāktu diskusiju, ir nedaudz jāceļ viļņi, vai zināt?

Paldies, ka izlasījāt.

Atjauninājums 2, 19.08.2020. Svītra pareizi atjaunina API!

Atjauninājums 3, 31.08.2020. Ar mani sazinājās Google inženieris pakalpojumā Cloud Marketplace, kurÅ” izrādÄ«jās mans sens draugs. ViņŔ gribēja noskaidrot, kāpēc C2D nedarbojas, un mēs galu galā sapratām, ka tas ir tāpēc, ka es savu tÄ«klu biju izveidojis pirms gadiem, un C2D nedarbojās mantotajos tÄ«klos, jo to veidnēs trÅ«ka apakÅ”tÄ«kla parametra. Es domāju, ka potenciālajiem GSP lietotājiem vislabāk ir pārliecināties, ka viņi zina pietiekami daudz Google inženieru...

Avots: www.habr.com