Herregud, Google, jag ville inte blogga igen. Jag har sÄ mycket att göra. Att blogga krÀver tid, energi och kreativitet som jag skulle kunna anvÀnda till nÄgot nyttigt: mina böcker, , mitt spel och sÄ vidare. Men du har gjort mig tillrÀckligt arg, sÄ jag mÄste skriva detta.
SÄ lÄt oss avsluta detta.
Jag börjar med en liten, men lÀrorik historia frÄn de dagar dÄ jag just hade börjat jobba pÄ Google. Jag vet att jag har sagt mycket dÄligt om Google pÄ sistone, men det frustrerar mig nÀr mitt egna företag regelbundet fattar dÄliga affÀrsbeslut. Samtidigt mÄste man ge dem kredit: Googles interna infrastruktur Àr verkligen extraordinÀr, man kan tryggt hÀvda att det idag inte finns nÄgot bÀttre. Googles grundare var mycket bÀttre ingenjörer Àn jag nÄgonsin kommer att bli, och denna historia bekrÀftar just det.
Först lite bakgrund: Google har en datalagringsteknik som kallas . Det var en fantastisk teknisk prestation, en av de första (om inte den första) âoĂ€ndligt skalbaraâ lagringslösningarna för nyckel-vĂ€rde-par (key-value store, K/V): i praktiken, början pĂ„ NoSQL. Idag klarar sig Bigtable fortfarande bra i en ganska mĂ€ttad K/V-lagringsmarknad, men vid den tiden (2005) var det otroligt imponerande.
En rolig detalj med Bigtable Àr att de hade interna kontrollplaneobjekt (som en del av implementeringen) kallade tablet-servrar, med stora index, och vid nÄgot tillfÀlle blev de en flaskhals nÀr systemet skulle skalas. Ingenjörerna pÄ Bigtable funderade pÄ hur man skulle uppnÄ skalbarhet och insÄg plötsligt att de kunde ersÀtta tablet-servrar med andra Bigtable-lagringar. SÄ Bigtable Àr en del av Bigtable-implementationen. Dessa lagringar finns pÄ alla nivÄer.
En annan intressant detalj Àr att Bigtable blev populÀra och allestÀdes nÀrvarande inom Google under en tid, och varje team hade sitt eget lagringsutrymme. SÄ pÄ ett av fredagsmötena frÄgade Larry Page nonchalant: "Varför har vi mer Àn en Bigtable? Varför nöja oss med bara en?" Teoretiskt sett skulle en enda lagring rÀcka för alla Googles lagringsbehov. SjÀlvklart övergick de aldrig till bara en av praktiska skÀl relaterade till utveckling (t.ex. konsekvenserna av ett potentiellt fel), men teorin var intressant. Ett lagringsutrymme för hela universum (förresten, vet nÄgon om Amazon gjorde sÄ med sin Sable?)
Hur som helst, hÀr Àr min historia.
Vid den tiden hade jag arbetat pÄ Google i lite mer Àn tvÄ Är, och en dag fick jag ett e-postmeddelande frÄn ingenjörsteamet för Bigtable med ungefÀr följande innehÄll:
KĂ€ra Steve,
HÀlsningar frÄn Bigtable-teamet. Vi vill informera dig om att ni i datacentret [datacenterets namn] anvÀnder en mycket, mycket gammal binÀrfil av Bigtable. Den hÀr versionen stöds inte lÀngre, och vi vill hjÀlpa er att uppgradera till den senaste versionen.
LÄt oss veta om ni kan schemalÀgga lite tid för att arbeta tillsammans med det hÀr problemet.
Allt gott,
Bigtable-teamet
PÄ Google fÄr man mycket e-post, sÄ vid första ögonkastet lÀste jag det ungefÀr sÄ hÀr:
KĂ€ra mottagare,
HÀlsningar frÄn nÄgot team. Vi vill informera er om att bla-bla-bla-bla-bla. Bla-bla-bla-bla-bla-bla, och bla-bla-bla omedelbart.
LÄt oss veta om ni kan schemalÀgga en del av er dyrbara tid för bla-bla-bla.
Allt gott,
NÄgot team
Jag höll nÀstan pÄ att radera det direkt, men i medvetandets grÀns kÀnde jag en tryckande, molande kÀnsla av att det hÀr inte riktigt kÀndes som ett formellt brev, Àven om det uppenbarligenvar klart att de hade fel adressat eftersom jag inte anvÀnde Bigtable.
Men det var konstigt.
Resten av dagen tÀnkte jag vÀxelvis pÄ arbetet och vilken typ av hajkött jag skulle prova i mikro-köket, dÀr Ätminstone tre var tillrÀckligt nÀra för att trÀffa med ett vÀlriktat kexkast frÄn min plats, men tanken pÄ brevet lÀmnade mig med en vÀxande kÀnsla av lÀtt oro.
De namngav tydligt mitt namn. Och brevet skickades till min e-postadress, inte nÄgon annans, och det Àr inte cc: eller bcc:. Tonen Àr mycket personlig och tydlig. Kan det vara ett misstag?
Till slut tog nyfikenheten över och jag gick för att titta pÄ Borg-konsolen i datacentret som de nÀmnde.
Och sjÀlvklart hade jag ett BigTable-lager under min kontroll. Vad? Jag tittade pÄ dess innehÄll, och - tja! Det var frÄn Codelab-inkubatorn dÀr jag satt den första veckan av mitt arbete pÄ Google i juni 2005. Codelab fick dig att köra Bigtable för att du skulle mata in vissa vÀrden, och jag verkar inte ha stÀngt lagret efter det. Det fungerade fortfarande, trots att det hade gÄtt mer Àn tvÄ Är.
Det finns nÄgra anmÀrkningsvÀrda aspekter av denna historia. För det första var Bigtables funktion sÄ obetydlig i Googles perspektiv att det tog tvÄ Är innan nÄgon mÀrkte det överflödiga lagret, och det berodde endast pÄ att binÀrversionen var förÄldrad. Som jÀmförelse övervÀgde jag nÄgon gÄng att anvÀnda för mitt online-spel. Vid den tiden kostade tjÀnsten cirka 16 000 dollar om Äret för ett tomt Bigtable i GCP. Jag sÀger inte att de lurar dig, men enligt min personliga Äsikt Àr det mycket pengar för en helt vÀrdelös databas.
En annan anmÀrkningsvÀrd aspekt Àr att lagret fortfarande fungerade tvÄ Är senare. WTF? Datacentraler kommer och gÄr; de upplever avbrott, de genomgÄr planerat underhÄll, de förÀndras hela tiden. HÄrdvara uppgraderas, switchar byts ut, allt förbÀttras stÀndigt. Hur i helvete lyckades de hÄlla min applikation igÄng i tvÄ Är med alla dessa förÀndringar? Det kan tyckas vara en blygsam prestation 2020, men mellan 2005 och 2007 var det ganska imponerande.
Och den mest fantastiska aspekten Àr att ett utomstÄende ingenjörsteam i en annan delstat kontaktar mig, Àgaren av en nÀstan tom Bigtable-instans, som har noll trafik under de senaste tvÄ Ären - och erbjuder sin hjÀlp för att uppdatera den.
Jag tackade dem, tog bort lagret, och livet fortsatte som vanligt. Men tretton Är senare tÀnker jag fortfarande pÄ det brevet. För ibland fÄr jag liknande brev frÄn Google Cloud. De ser ut sÄ hÀr:
KÀra Google Cloud-anvÀndare,
Vi pÄminner om att vi stoppar tjÀnsten [viktig tjÀnst som du anvÀnder] frÄn och med augusti 2020, efter vilket du inte lÀngre kommer att kunna uppdatera dina instanser. Vi rekommenderar att du uppgraderar till den senaste versionen som för nÀrvarande Àr i betatest, som saknar dokumentation och migrationsvÀg, och som Àr förÄldrad med vÄr vÀnliga hjÀlp.
Vi strÀvar efter att denna förÀndring ska pÄverka alla anvÀndare av Google Cloud-plattformen sÄ lite som möjligt.
BÀsta vÀnner för alltid,
Google Cloud-plattformen
Men jag lÀser nÀstan aldrig sÄdana hÀr mejl, för det som faktiskt stÄr i dem Àr följande:
KĂ€ra mottagare,
Dra Ät helvete. Dra Ät helvete, dra Ät helvete, dra Ät helvete. Sluta med allt du gör, för det spelar ingen roll. Det som betyder nÄgot Àr vÄr tid. Vi lÀgger tid och pengar pÄ att underhÄlla vÄrt skrÀp, och vi Àr trötta pÄ det, sÄ vi kommer inte att stödja det lÀngre. SÄ slÀpp dina förbenade planer och börja grÀva i vÄr skrÀp-dokumentation, dÀr du tigger om rester pÄ forum, och förresten Àr vÄrt nya skrÀp helt annorlunda Àn det gamla skrÀpet, för vi har förstört designen ganska mycket, hehe, men det Àr ditt problem, inte vÄrt.
Vi fortsÀtter att arbeta för att dina utvecklingar ska bli obrukbara inom ett Är.
VÀnligen gÄ till helvete,
Google Cloud-plattformen
Och saken Àr att jag fÄr sÄdana hÀr mejl ungefÀr en gÄng i mÄnaden. Det hÀnder sÄ ofta och sÄ regelbundet att de oundvikligen stöter bort mig frÄn GCP till motstÄndarlÀgret mot moln. Jag vill inte lÀngre vara beroende av deras proprietÀra lösningar, för det Àr faktiskt mycket lÀttare för en devops att underhÄlla ett system med öppen kÀllkod pÄ en ren virtuell maskin Àn att försöka hÀnga med Google i deras politik att stÀnga ner "förÄldrade" produkter.
Innan jag ÄtervÀnder till Google Cloud, för jag Àr inte ens nÀra Han slutade inte kritisera dem, lÄt oss titta pÄ företagets arbete inom nÄgra andra omrÄden. Googles ingenjörer Àr stolta över sin mjukvaruutvecklingsdisciplin, och det Àr faktiskt detta som skapar problem. Stolthet Àr en fÀlla för de oförsiktiga; den har fÄtt mÄnga anstÀllda pÄ Google att tro att deras beslut alltid Àr rÀtt och att riktighet (enligt nÄgot oklart och diffust kriterium) Àr viktigare Àn att bry sig om kunderna.
Jag kommer att ge nÄgra slumpmÀssiga exempel frÄn andra stora projekt utanför Google, men jag hoppas att ni kommer att se detta mönster överallt. Det handlar om följande: bakÄtkompatibilitet upprÀtthÄller hÄllbarhet och relevans för system under decennier.
BakÄtkompatibilitet Àr en designmÄl för alla framgÄngsrika system avsedda för öppen anvÀndning, det vill sÀga implementerade med öppen kÀllkod och/eller i enlighet med öppna standarder. Jag kÀnner att jag sÀger nÄgot för uppenbart, nÄgot som fÄr alla att kÀnna sig obekvÀma, men sÄ Àr det inte. Det Àr en politisk frÄga, dÀrför behövs exempel.
Det första systemet jag vÀljer, det Àldsta: GNU Emacs, Àr en slags hybrid mellan Notepad i Windows, operativsystemets kÀrna och den Internationella rymdstationen. Det Àr lite svÄrt att förklara, men i korthet Àr Emacs en plattform som skapades 1976 (ja, nÀstan fem decennier sedan) för programmering, för att öka din produktivitet, men som döljer sig som en textredigerare.
Jag anvÀnder Emacs varje dag. Ja, jag anvÀnder ocksÄ IntelliJ varje dag; det har redan förvandlats till en kraftfull verktygsplattform. Men att skriva tillÀgg för IntelliJ Àr en mycket mer ambitiös och komplex uppgift Àn att skriva tillÀgg för Emacs. Och Ànnu viktigare, allt som skrivs för Emacs bevaras för alltid..
Jag anvÀnder fortfarande programvaran jag skrev för Emacs redan 1995. Och jag Àr sÀker pÄ att nÄgon anvÀnder moduler skrivna för Emacs frÄn mitten av 80-talet, om inte tidigare. DÄ och dÄ kan de behöva smÄ justeringar, men detta Àr verkligen ganska sÀllsynt. Jag vet inget av det jag nÄgonsin har skrivit för Emacs (och jag har skrivit mycket) som skulle behöva omstruktureras.
I Emacs finns det en funktion som heter make-obsolete för förÄldrade entiteter. Emacs terminologi för grundlÀggande datorkoncept (till exempel vad ett "fönster" Àr) avviker ofta frÄn branschkonventioner, eftersom Emacs introducerade dem för lÀnge sedan. Detta Àr en typisk fara för dem som kom före sin tid: alla era termer Àr felaktiga. Men det finns faktiskt ett begrepp för förÄldring i Emacs, vilket de kallar obsolescence.
Men i Emacs vÀrld verkar det finnas en annan arbetsdefinition. En annan grundlÀggande filosofi, om ni vill.
I Emacs vÀrld (och i mÄnga andra omrÄden som vi kommer att tÀcka nedan) betyder status för förÄldrade API:er huvudsakligen: "Du bör verkligen inte anvÀnda denna metod, för Àven om den fungerar, lider den av olika brister som vi kommer att lista hÀr. Men i slutÀndan Àr det ditt val."
I Google vĂ€rld betyder status för en förĂ„ldrad produkt: "Vi bryter vĂ„ra Ă„taganden gentemot dig." Det Ă€r faktiskt sant. Det Ă€r vad det i stort sett innebĂ€r. Det betyder att de kommer att tvinga dig att regelbundet utföra en del arbete, kanske mycket arbete, som straff för att du trott pĂ„ deras : Vi har den bĂ€sta programvaran. Den snabbaste! Du följer bara instruktionerna, kör din applikation eller tjĂ€nst, och sedan â bam, efter ett Ă„r eller tvĂ„ fungerar den inte lĂ€ngre.
Det Àr som att sÀlja en begagnad bil som garanterat gÄr sönder efter 1500 km.
Det hÀr Àr tvÄ helt olika filosofiska definitioner av "förÄldring". Googles definition luktar . Jag tror inte att detta Àr som faktiskt planerad förÄldring i samma mening som hos Apple. Men Google planerar definitivt att krossa dina program, pÄ ett omvÀnt sÀtt. Jag vet detta, eftersom jag har arbetat dÀr som programmeringsingenjör i mer Àn 12 Är. De har vaga interna riktlinjer om i vilken utstrÀckning man bör upprÀtthÄlla bakÄtkompatibilitet, men i slutÀndan beror det pÄ varje enskilt team eller avdelning. Det finns inga riktlinjer pÄ företags- eller ingenjörsnivÄ, och den djÀrvaste rekommendationen nÀr det gÀller förÄldringscykler Àr "försök att ge kunderna 6-12 mÄnader pÄ sig att uppgradera innan du krossar hela deras system".
Problemet Àr mycket mer allvarligt Àn vad de tror, och det kommer att kvarstÄ i mÄnga Är framöver, eftersom kundservice inte ingÄr i deras DNA. LÀs mer om detta nedan.
Just nu tÀnker jag göra ett djÀrvt pÄstÄende att Emacs framgÄng till stor del beror pÄ just det faktum att de tar bakÄtkompatibilitet pÄ sÄ stort allvar. Det Àr egentligen vad vÄrt argument handlar om. FramgÄngsrika, lÄnglivade öppna system Àr skyldiga sin framgÄng till mikrosamhÀllen som har funnits i flera decennier kring tillÀgg/plugins. Det Àr sjÀlva ekosystemet. Jag har redan diskuterat essensen av plattformar och hur viktiga de Àr, samt att Google under hela sin företagsverksamhet aldrig har förstÄtt vad som krÀvs för att skapa en framgÄngsrik öppen plattform, förutom Android eller Chrome.
Egentligen bör jag kort nÀmna Android, eftersom du förmodligen har tÀnkt pÄ det.
För det första, Android Àr inte Google. De har nÀstan inget gemensamt. Android Àr ett företag som köptes av Google i juli 2005, och företaget har fÄtt arbeta mer eller mindre autonomt och har i stor utstrÀckning förblivit opÄverkat under Ären. Android Àr en beryktad teknisk stack och en lika beryktad krÄnglig organisation. Som en Googler uttryckte det, "man kan bara inte gÄ in i Android".
I en av mina tidigare artiklar har jag redan pratat om hur dÄliga vissa av de tidiga designbesluten för Android var. Det var en dÄlig tid nÀr jag skrev den artikeln, de sysslade med att rulla ut skrÀpet som kallades "öppna applikationer", vilka nu (överraskning!) , och jag beklagar om du varit tillrÀckligt dum för att lyssna pÄ Google och flytta ditt innehÄll till dessa öppna applikationer.
Men hÀr finns en skillnad, en betydande skillnad, som handlar om att mÀnniskorna bakom Android verkligen förstÄr hur viktiga plattformar Àr; de gör allt de kan för att hÄlla gamla Android-appar fungerande. Deras anstrÀngningar att bevara bakÄtkompatibiliteten Àr sÄ extrema att Àven jag, under min korta tid inom Android-avdelningen för nÄgra Är sedan, upptÀckte att jag försökte övertyga dem att slÀppa stödet för nÄgra av de Àldsta enheterna och API:erna (jag hade fel, liksom i mÄnga andra avseenden bÄde dÄ och nu. FörlÄt, Android-fantaster! Nu nÀr jag har varit i Indonesien förstÄr jag varför de Àr viktiga).
MÀnniskorna bakom Android upprÀtthÄller bakÄtkompatibilitet till nÀstan osannolika nivÄer, vilket resulterar i en enorm mÀngd teknisk skuld i deras system och verktygskedjor. Gud, ni skulle se vissa galna saker de mÄste göra i sitt byggsystem, allt i syfte att sÀkerstÀlla kompatibilitet.
DÀrför tilldelar jag Android det ÄtrÄvÀrda priset "Du Àr inte Google". De vill verkligen inte bli som Google, som inte kan skapa hÄllbara plattformar, medan Android kÀnner till, vet hur man gör det. Och dÀrför agerar Google klokt pÄ ett sÀtt: de lÄter mÀnniskorna i Android göra saker pÄ sitt sÀtt.
Men Android Instant Apps var en ganska dum idé. Och vet ni varför? För att de krÀvde att skriva om och designa om din app! Som om folk bara skulle ta och skriva om tvÄ miljoner appar. Jag antar att Instant Apps var en idé frÄn nÄgon i Google.
Men hÀr finns en skillnad. BakÄtkompatibilitet medför stora kostnader. Android bÀr sjÀlv den kostnaden, medan Google insisterar pÄ att denna kostnad ska bÀras av du, betalande kunder.
Du kan se Androids engagemang för bakÄtkompatibilitet i dess API:er. NÀr du har fyra eller fem olika delsystem som utför bokstavligen samma sak, Àr det en tydlig indikation pÄ att det hela grundar sig pÄ ett engagemang för bakÄtkompatibilitet. Vad som i plattformsvÀrlden Àr synonymt med engagemang för dina kunder och din marknad.
Google's main problem here is their pride in their engineering hygiene. They dislike having many different ways to accomplish the same thing, especially when old, less desirable methods sit alongside newer, fancier ones. This increases the learning curve for newcomers to the system, adds to the burden of maintaining outdated APIs, slows down the speed of new features, and the cardinal sin is that it looks unappealing. Google is like the Red Queen from Tim Burton's 'Alice in Wonderland':
The Red Queen:
â Alice, do you know what I fear the most?
â The decline of the aristocracy?
â I was worried that I would have ugly grandchildren..
To understand the compromise between beautiful and practical, letâs look at the third successful platform (after Emacs and Android) and see how it functions: Java itself.
Java has a lot of outdated APIs. Obsolescence is very popular among Java programmers, even more so than in most programming languages. In Java itself, the core language and libraries are constantly undergoing API obsolescence.
If we take just one of the thousands of examples, is deemed obsolete. It has been considered obsolete since the release of Java 1.2 in December 1998. It has been 22 years since it became obsolete.
But my actual production code still kills threads every day.. Is that good? Absolutely! I mean, sure, if I were to rewrite the code today, I would implement it differently. But the code for my game, which has brought joy to hundreds of thousands over the last two decades, was written using the thread-closing feature that hangs too long, and I have never had to change it.. I know my system better than anyone, I literally have 25 years of experience working with it in production, and I can confidently say: in my case, closing these specific worker threads is completely harmless.. Thereâs no need to waste time and effort rewriting this code, and praise be to Larry Ellison (probably), that Oracle hasn't forced me to rewrite it.
Oracle likely understands platforms too. Who knows?
Bevis kan hittas i alla viktiga Java API:er, som Àr genomtrÀngda av förÄldrade meddelanden, likt linjerna av glaciÀr i en ravin. I Java Swing-biblioteket kan man lÀtt hitta fem eller sex olika navigationshanterare för tangentbord (KeyboardFocusManager). Det Àr faktiskt svÄrt att hitta en Java API som inte Àr förÄldrad. Men de fungerar fortfarande! Jag tror att Java-teamet verkligen kommer att ta bort API:er endast om grÀnssnittet orsakar en pÄtaglig sÀkerhetsrisk.
HĂ€r Ă€r saken, grabbar: vi mjukvaruutvecklare Ă€r alla mycket upptagna, och i varje omrĂ„de av programvara stĂ€lls vi inför konkurrerande alternativ. Vid varje given tidpunkt övervĂ€ger programmerare i sprĂ„k X sprĂ„k Y som en potentiell ersĂ€ttning. Ă h, ni tror mig inte? Vill ni nĂ€mna Swift? Att alla migrerar till Swift och ingen avviker frĂ„n det, eller hur? Wow, vad lite ni vet. Företag börjar rĂ€kna kostnaderna för dubbla mobila utvecklingsteam (iOS och Android) â och de börjar förstĂ„ att dessa plattformsövergripande utvecklingssystem med lustiga namn, som Flutter och React Native, faktiskt fungerar, och att de kan halvera storleken pĂ„ sina mobila team eller Ă„ andra sidan göra dem dubbelt sĂ„ produktiva. Riktiga pengar stĂ„r pĂ„ spel. Ja, det finns kompromisser, men Ă„ andra sidan, pengarna.
Anta hypotetiskt att Apple för dumt tog exempel av Guido van Rossum och meddelade att Swift 6.0 inte Àr bakÄtkompatibelt med Swift 5.0, pÄ ett sÀtt som Python 3 Àr inkompatibelt med Python 2.
Jag kanske berĂ€ttade den hĂ€r historien för tio Ă„r sedan, men för femton Ă„r sedan Ă„kte jag till OâReillys Foo Camp med Guido, satt i ett tĂ€lt med Paul Graham och en massa stora fiskar. Vi satt i den kvĂ€vande hettan och vĂ€ntade pĂ„ att Larry Page skulle flyga in med sin privata helikopter, medan Guido monotont mumlade om "Python 3000", som han kallade det för det antal Ă„r det skulle ta för alla att migrera dit. Vi frĂ„gade honom hela tiden varför han bröt kompatibiliteten, och han svarade: âUnicodeâ. Och vi frĂ„gade, om vi mĂ„ste skriva om vĂ„r kod, vilka andra fördelar skulle vi se? Och han svarade âYoooooooooooooouuuuuuuniiiiiiicoooooooodeâ.
Om du installerar Google Cloud Platform SDK (âgcloudâ), kommer du att fĂ„ följande meddelande:
KĂ€ra mottagare,
Vi vill pÄminna er om att stödet för Python 2 har upphört, sÄ nu Àr det dags att gÄ vidare.
⊠och sÄ vidare. Livets cykel.
Men saken Àr den att varje utvecklare har ett val. Och om man tvingar dem att skriva om koden tillrÀckligt ofta, kan de börja övervÀga andra andra alternativ. De Àr inte era fÄngar, oavsett hur mycket ni skulle vilja. De Àr era gÀster. Python Àr fortfarande ett mycket populÀrt programmeringssprÄk, men herregud, Python 3(000) har stÀllt till med sÄdan oreda bland sina samhÀllen och sina anvÀndare att konsekvenserna inte har kunnat rÀttas till pÄ femton Är.
Hur mÄnga Python-program har skrivits om till Go (eller Ruby, eller nÄgot annat alternativ) pÄ grund av denna bristande bakÄtkompatibilitet? Hur mycket ny mjukvara har skrivits pÄ nÄgot annat Àn Python, trots att det kunde ha varit skrivet i Python, om Guido inte hade brÀnt hela byn? Det Àr svÄrt att sÀga, men Python har uppenbarligen lidit. Det Àr en stor oreda, och alla förlorar.
SÄ, lÄt oss anta att Apple tar ett exempel frÄn Guido och bryter kompatibiliteten. Vad tror ni hÀnder dÄ? Tja, kanske 80-90% av utvecklarna kommer att skriva om sin mjukvara, om de kan. Med andra ord, 10-20% av anvÀndarbasen gÄr automatiskt till nÄgot konkurrerande sprÄk, som Flutter.
Gör detta nÄgra gÄnger sÄ förlorar ni hÀlften av er anvÀndarbas. Precis som inom sport, sÄ betyder nuvarande form ocksÄ allt.Den som förlorar hÀlften av sina anvÀndare pÄ fem Är kommer att anses vara en stor misslyckad person. Ni mÄste hÀnga med i svÀngarna i plattformsvÀrlden. Men precis hÀr kommer avstÄndet frÄn att stödja gamla versioner med tiden att bli er undergÄng. För varje gÄng ni gör er av med en del av utvecklarna, (a) förlorar ni dem för alltid eftersom de Àr irriterade över att ni bryter kontraktet, och (b) ger ni dem till era konkurrenter.
Ironiskt nog hjĂ€lpte jag ocksĂ„ Google att bli en sĂ„dan primadonna som ignorerar bakĂ„tkompatibilitet nĂ€r jag skapade Grok, ett analys- och förstĂ„elsessystem för kĂ€llkod som underlĂ€ttar automatisering och verktyg i basen av sjĂ€lva koden â liknande en IDE, men hĂ€r lagrar en molntjĂ€nst materialiserade vyer av alla miljarder rader kĂ€llkod frĂ„n Google i ett stort datalager.
Grok har försett Googlarna med en kraftfull grund för att utföra automatiserad refaktorering över hela kodbasen (bokstavligen hela Google). Systemet berÀknar inte bara dina uppÄtgÄende beroenden (som du Àr beroende av) utan ocksÄ nedÄtgÄende (som Àr beroende av dig), sÄ att nÀr du Àndrar API:et vet du alla som du bryter! PÄ sÄ sÀtt kan du vid Àndringar kontrollera att varje anvÀndare av ditt API har uppdaterat till den nya versionen, och i verkligheten kan du ofta helt automatisera processen med hjÀlp av verktyget Rosie som de har skrivit.
Detta gör att Googles kodbas internt Àr nÀstan övermÀnskligt "ren", eftersom dessa robotar rör sig runt i huset och automatiskt stÀdar upp om de har omdöpt SomeDespicablyLongFunctionName till SomeDespicablyLongMethodName, eftersom nÄgon har bestÀmt att detta Àr ett fult barnbarn som behöver avlivas.
Och, Àrligt talat, det fungerar ganska bra för Google⊠internt. Jag menar, ja, Go-communityt pÄ Google skrattar verkligen vÀnligt Ät Java-communityt pÄ Google pÄ grund av deras vana att stÀndigt refaktorera. Om du startar om nÄgot N gÄnger betyder det att du inte bara förstörde det N-1 gÄnger, utan efter ett tag blir det helt klart att du antagligen har förstört det Àven i N:e försöket. Men, överlag, hÄller de sig över denna oro och hÄller koden "ren".
Problemen börjar nÀr de försöker pÄtvinga en sÄdan attityd pÄ sina molnkunder och anvÀndare av andra API:er.
Jag har gett dig en kort introduktion till Emacs, Android och Java; lÄt oss titta pÄ den senaste framgÄngsrika och lÄnglivade plattformen: webben. Kan du förestÀlla dig hur mÄnga iterationer HTTP har gÄtt igenom sedan 1995, nÀr vi anvÀnde blinkande taggar och "Under utveckling"-ikoner pÄ webbsidor.
Men det fungerar fortfarande! Och de sidorna fungerar fortfarande! Ja, killar, webblÀsare Àr vÀrldens mÀstare i bakÄtkompatibilitet. Chrome Àr ett annat exempel pÄ en sÀllsynt Google-plattform som har huvuden skruvade pÄ rÀtt sÀtt, och, som du redan gissat, fungerar Chrome effektivt som ett isolerat företag separat frÄn resten av Google.
Jag vill ocksĂ„ tacka vĂ„ra vĂ€nner bland operativsystemutvecklarna: Windows, Linux, INTE APPLE VARFĂR APPLE, FreeBSD och sĂ„ vidare, för att de har gjort ett sĂ„ stort arbete med bakĂ„tkompatibilitet pĂ„ sina framgĂ„ngsrika plattformar (Apple fĂ„r högst en trea minus, eftersom de stĂ€ndigt bryter allt utan nĂ„gon respektabel anledning, men pĂ„ nĂ„got sĂ€tt klarar sig gemenskapen med detta i varje release, och fortfarande Ă€r behĂ„llarna med OS X inte helt förĂ„ldrade... Ă€n).
Men vÀnta, sÀger du. JÀmför vi inte Àpplen med apelsiner - fristÄende programvarusystem pÄ en maskin, som Emacs/JDK/Android/Chrome, med fler-server-system och API:er, som i molntjÀnster?
Tja, jag skrev om detta igÄr pÄ Twitter, men i stil med Larry Wall (skaparen av programmeringssprÄket Perl - anm. red.) enligt principen "sopigt/bluff" letade jag efter ordet deprecated pÄ utvecklarwebbplatserna för Google och Amazon. Och Àven om AWS har hundratals gÄnger fler tjÀnsteerbjudanden Àn GCP, nÀmner Googles utvecklardokumentation förÄldring ungefÀr sju gÄnger oftare.
Om nÄgon frÄn Google lÀser detta, sÄ Àr de sÀkert redo att dra diagram och visa i Donald Trump-stil, att de faktiskt gör allt rÀtt, och att jag inte borde göra orÀttvisa jÀmförelser, som "antalet omnÀmnanden av ordet deprecated i förhÄllande till antalet tjÀnster".
Men efter sÄ mÄnga Är förblir Google Cloud fortfarande tjÀnst nummer 3 (jag har fortfarande inte skrivit en artikel om det misslyckade försöket att bli nummer 2), men om man ska tro insider, finns det vissa farhÄgor att de snart kan falla till nummer 4.
Jag har inga starka argument för att "bevisa" mitt pÄstÄende. Det enda jag har Àr fÀrgglada exempel som jag har samlat under 30 Ärs arbete som utvecklare. Jag har redan nÀmnt den djupt filosofiska naturen av detta problem; pÄ ett sÀtt Àr det politiserat i utvecklarsamhÀllena. Vissa anser att skaparna av plattformar bör ta ansvar för kompatibiliteten, medan andra anser att det Àr upp till anvÀndare (utvecklarna sjÀlva). Antingen eller. Och Àr det inte verkligen en politisk frÄga nÀr vi bestÀmmer vem som ska bÀra kostnaderna för gemensamma problem?
SÄ det hÀr Àr politik. Och det kommer sÀkert att bli upprörda svar pÄ min presentation.
Hur anvÀndare Som anvÀndare av Googles molnplattform, samt en AWS-anvÀndare under tvÄ Är (nÀr jag arbetade pÄ företaget Grab), kan jag sÀga att det finns en enorm skillnad mellan Amazon och Googles filosofier nÀr det kommer till prioriteringar. Jag Àr inte aktivt involverad i utvecklingen pÄ AWS, sÄ jag vet inte riktigt hur ofta de tar bort gamla API:er. Men jag har en misstanke om att detta inte sker lika ofta som pÄ Google. Och jag Àr helt övertygad om att denna kÀlla till stÀndiga konflikter och besvikelser inom GCP Àr en av de största faktorerna som hindrar plattformens utveckling.
Jag vet att jag inte angav specifika exempel pĂ„ GCP-system vars stöd har upphört. Jag kan sĂ€ga att i stort sett allt jag har anvĂ€nt, frĂ„n nĂ€tverk (frĂ„n de Ă€ldsta till VPC) till lagringslösningar (Cloud SQL v1-v2), Firebase (nu Firestore med helt annan API), App Engine (lĂ„t oss inte ens börja), molnslutpunkter Cloud Endpoint och till⊠jag vet inte â absolut allt detta tvingade mig att skriva om koden max var 2-3 Ă„r, och de har aldrig automatiserat migreringen för dig, och ofta . Det Ă€r som om det Ă€r meningen.
Och varje gÄng jag tittar pÄ AWS frÄgar jag mig sjÀlv, vad sjutton gör jag fortfarande pÄ GCP. De verkar uppenbarligen inte behöva kunder. De behöver köpare. FörstÄr du skillnaden? LÄt mig förklara.
Google Cloud har , dÀr mÀnniskor erbjuder sina programlösningar, och för att undvika effekten av en tom restaurang behövde de fylla den med vissa erbjudanden, sÄ de skrev kontrakt med företaget Bitnami för att skapa en uppsÀttning lösningar som kan implementeras "med ett klick", eller sÄ mÄste jag sjÀlv skriva "lösningar", eftersom dessa inte gör ett dugg. De existerar bara som checkpunkter, som marknadsföringsfyllnad, och Google har aldrig brytt sig om huruvida nÄgot av verktygen faktiskt fungerar. Jag kÀnner produktchefer som har varit i förarsÀtet, och jag kan försÀkra dig att dessa personer inte bryr sig.
LÄt oss ta ett exempel pÄ en implementeringslösning som pÄstÄs vara "med ett klick" . Jag Àr sÄ trött pÄ tricksen med Google Cloud SQL, sÄ jag började övervÀga att skapa min egen Percona-kluster som alternativ. Och den hÀr gÄngen verkade Google ha gjort nÄgot bra, de var ute efter att spara mig lite tid och anstrÀngning med ett knapptryck!
Bra, lÄt oss gÄ. Vi gÄr till lÀnken och klickar pÄ den hÀr knappen. VÀlj 'Ja' för att acceptera alla standardinstÀllningar och skapa en kluster i ditt Google-molnprojekt. Ha ha, det fungerar inte. Inget av det hÀr skit fungerar. Verktyget har aldrig testats och har börjat ruttna frÄn första minuten, och det skulle inte förvÄna mig om mer Àn hÀlften av "lösningarna" för att implementera med ett klick (nu förstÄr vi varför det Àr inom citat) inte fungerar. verkligen inte fungerar. Det Àr helt och hÄllet en hopplös mörker, dit man inte borde gÄ.
Men Google uppmanar dig att anvÀnda dem. De vill att du ska köpa. För dem Àr det en transaktion. De vill inte ha nÄgot stöda. Det Àr inte en del av Googles DNA. Ja, ingenjörerna stödjer varandra, vilket bevisas av min historia med Bigtable. Men i produkter och tjÀnster för vanliga mÀnniskor har de alltid varit obarmhÀrtiga i , som inte möter lönsamhetskraven, Àven om den har miljontals anvÀndare.
Och det hÀr utgör ett verkligt problem för GCP, för den hÀr DNA:n ligger bakom alla molnerbjudanden. De strÀvar inte efter att stödja nÄgot; det Àr vÀlkÀnt att de vÀgrar att vara vÀrd för (som en hanterad tjÀnst) nÄgon tredjepartsprogramvara sÄ lÀnge, tills AWS gör detsamma och bygger upp en framgÄngsrik verksamhet runt det, och nÀr kunderna bokstavligen krÀver detsamma. Men det krÀvs en anstrÀngning för att fÄ Google att stödja nÄgot.
Denna brist pÄ supportkultur, i kombination med princippet 'lÄt oss förstöra för att göra det snyggare', alienerar utvecklarna frÄn dem.
Och det Àr inte bra om du vill bygga en lÄnglivad plattform.
Google, vakna, helvetet. Nu Àr det Är 2020. Du förlorar fortfarande. Det Àr dags att se djupt i spegeln och svara pÄ om du verkligen vill vara kvar i molnverksamheten.
Om du vill vara kvar, sÄ sluta förstöra allt.Killarna, ni Àr rika. Vi utvecklare Àr inte det. SÄ nÀr det kommer till vem som ska ta pÄ sig bördan av kompatibilitet, mÄste ni ta det ansvaret. Inte vi.
För det finns Ätminstone tre riktigt bra moln kvar. De lockar till sig.
Och nu gÄr jag vidare för att fixa alla mina trasiga system. Suck.
Tills nÀsta gÄng!
P. S. En uppdatering efter att ha lÀst nÄgra diskussioner kring denna artikel (diskussionerna Àr fantastiska, förresten). Stödet för Firebase har inte upphört, och det finns inga planer som jag kÀnner till. Men de har en irriterande strömningsfel som gör att Java-klienten stannar i App Engine. En av deras ingenjörer hjÀlpte mig att hantera detta problem, nÀr jag arbetade pÄ Google, men de har aldrig verkligen ÄtgÀrdat buggen, sÄ jag har en trÄkig workaround, jag mÄste starta om GAE-applikationen varje dag. Och sÄ har det varit i fyra Är nu! Nu har de Firestore. Det kommer att krÀvas mycket arbete för att migrera till det, eftersom det Àr ett helt annat system, och Firebase-felet kommer aldrig att ÄtgÀrdas. Vad kan man dra för slutsats? Du kan fÄ hjÀlp, om du arbetar pÄ ett företag. Kanske Àr jag den enda som anvÀnder Firebase pÄ GAE, eftersom jag registrerar mindre Àn 100 nycklar i en 100% inhemsk applikation, och den slutar fungera varannan dag pÄ grund av den kÀnda buggen. Vad kan man sÀga, annat Àn att anvÀnda det pÄ egen risk. Jag gÄr över till Redis.
Jag har ocksÄ sett att vissa mer erfarna anvÀndare av AWS har sagt att AWS vanligtvis aldrig avslutar stödet för nÄgra tjÀnster, och SimpleDB Àr ett utmÀrkt exempel. Mina antaganden, att AWS inte har samma problem med att avsluta support som Google, verkar stÀmma.
Dessutom har jag lagt mÀrke till att Googles App Engine-team för 20 dagar sedan bröt vÀrdningen av ett kritiskt Go-bibliotek, vilket stÀngde av GAE-applikationen frÄn en av de frÀmsta Go-utvecklarna. Verkligen, det blev dumt.
Slutligen har jag hört att googlarna redan diskuterar detta och i stort sett Àr överens med mig (Àlskar er, grabbar!). Men det verkar som om de anser att problemet Àr olösbart, eftersom det aldrig har funnits en riktig struktur för incitament i Googles kultur. Jag tror att det skulle vara bra att ta lite tid för att diskutera den helt fantastiska erfarenheten av att arbeta med AWS-ingenjörer nÀr jag arbetade pÄ företaget Grab. Kanske i framtiden, hoppas jag!
Och ja, Är 2005 hade de faktiskt olika typer av hajkött pÄ den stora svenska buffén i byggnad 43, och jag gillade mest köttet frÄn hammerhajar. Men till 2006 hade Larry och Sergey blivit av med alla ohÀlsosamma snacks. SÄ under historien om Bigtable 2007 fanns det verkligen inga hajar kvar, och jag lurade er elakt.
NÀr jag tittade pÄ den molnbaserade Bigtable för fyra Är sedan (plus minus), var kostnaden just sÄ. Det verkar som om det har minskat lite nu, men det Àr fortfarande förskrÀckligt mycket för ett tomt datalager, sÀrskilt med tanke pÄ att min första historia visar hur ovÀsentlig en tom stor tabell Àr i deras skala.
Jag ber om ursÀkt för att jag förolÀmpade Apple-gemenskapen och för att jag inte sa nÄgot positivt om Microsoft och sÄ vidare. Ni har alla rÀtt, jag uppskattar verkligen alla diskussioner som denna artikel har vÀckt! Men ibland behöver man skaka om lite för att fÄ igÄng diskussionen, förstÄr ni?
Tack för att du lÀste.
Uppdatering 2, 19.08.2020. Stripe !
Uppdatering 3, 31.08.2020. Jag blev kontaktad av en ingenjör pĂ„ Google i Cloud Marketplace, som visade sig vara en gammal vĂ€n. Han ville ta reda pĂ„ varför C2D inte fungerade, och till slut kom vi fram till att orsaken var att jag skapade mitt nĂ€tverk för flera Ă„r sedan, och C2D fungerar inte i förĂ„ldrade nĂ€tverk pĂ„ grund av den saknade subnetparameter i deras mallar. Jag tror att potentiella GCP-anvĂ€ndare bör se till att de har tillrĂ€ckligt med bekanta ingenjörer pĂ„ GoogleâŠ
KĂ€lla: habr.com
