Jeza na kodo: programerji in negativnost

Jeza na kodo: programerji in negativnost

Gledam delček kode. To je morda najslabša koda, kar sem jih kdaj videl. Če želite posodobiti samo en zapis v zbirki podatkov, pridobi vse zapise v zbirki in nato pošlje zahtevo za posodobitev vsakemu zapisu v zbirki podatkov, tudi tistim, ki jih ni treba posodobiti. Obstaja funkcija zemljevida, ki preprosto vrne vrednost, ki ji je bila posredovana. Obstajajo pogojni testi za spremenljivke z navidezno enako vrednostjo, le poimenovane v različnih stilih (firstName и first_name). Za vsako POSODOBITEV koda pošlje sporočilo v drugo čakalno vrsto, ki jo obravnava druga funkcija brez strežnika, vendar opravi vse delo za drugo zbirko v isti bazi podatkov. Ali sem omenil, da je ta funkcija brez strežnika iz »storitveno usmerjene arhitekture«, ki temelji na oblaku in vsebuje več kot 100 funkcij v okolju?

Kako je bilo to sploh mogoče narediti? Pokrijem si obraz in vidno vpijem skozi smeh. Kolegi sprašujejo, kaj se je zgodilo, jaz pa v barvah pripovedujem Najslabši zadetki BulkDataImporter.js 2018. Vsi mi sočutno prikimavajo in se strinjajo: kako so nam lahko to storili?

Negativnost: čustveno orodje v programerski kulturi

Negativnost igra pomembno vlogo pri programiranju. Vgrajen je v našo kulturo in se uporablja za deljenje tega, kar smo se naučili (»ti ne boš verjel, kakšna je bila ta koda!«), izraziti sočutje skozi frustracijo (»Bog, ZAKAJ bi to naredil?«), razkazovati se (»Nikoli ne bi Tako tega ni storil«), krivdo zvaliti na nekoga drugega (»smo uspeli zaradi njegove kode, ki jo je nemogoče vzdrževati«) ali, kot je običajno v najbolj »strupenih« organizacijah, nadzorovati druge prek občutek sramu (»O čem si sploh razmišljal?« ? pravilno«).

Jeza na kodo: programerji in negativnost

Negativnost je za programerje tako pomembna, ker je zelo učinkovit način za izražanje vrednosti. Nekoč sem se udeležil tabora programiranja in standardna praksa privzgajanja kulture industrije študentom je bila velikodušna ponudba memov, zgodb in videoposnetkov, med katerimi so bili najbolj priljubljeni izkoriščeni razočaranje programerjev, ko se soočajo z nerazumevanjem ljudi. Dobro je, če lahko uporabljamo čustvena orodja za prepoznavanje Dobrega, Slabega, Grdega, Ne delaj tega, Sploh nikoli. Novince je treba pripraviti na dejstvo, da jih bodo kolegi, ki so daleč od informatike, verjetno napačno razumeli. Da jim bodo prijatelji začeli prodajati milijonske ideje za aplikacije. Da bodo morali tavati po neskončnih labirintih zastarele kode s kopico minotavrov za vogalom.

Ko se prvič naučimo programirati, naše razumevanje globine »izkušnje programiranja« temelji na opazovanju čustvenih reakcij drugih ljudi. To je jasno razvidno iz objav v sabe ProgramerHumor, kjer se druži veliko programerjev začetnikov. Številne humoristične so tako ali drugače obarvane z različnimi odtenki negativnosti: razočaranje, pesimizem, ogorčenje, prizanesljivost in drugo. In če se vam to ne zdi dovolj, preberite komentarje.

Jeza na kodo: programerji in negativnost

Opazil sem, da ko programerji pridobivajo izkušnje, postajajo vedno bolj negativni. Začetniki, ki se ne zavedajo težav, ki jih čakajo, začnejo z navdušenjem in pripravljenostjo verjeti, da je vzrok teh težav enostavno pomanjkanje izkušenj in znanja; in na koncu se bodo soočili z realnostjo stvari.

Čas teče, pridobivajo izkušnje in postanejo sposobni razlikovati dobro kodo od slabe. In ko pride ta trenutek, mladi programerji občutijo frustracijo dela z očitno slabo kodo. In če delajo v timu (na daljavo ali osebno), pogosto prevzamejo čustvene navade izkušenejših kolegov. To pogosto vodi v porast negativnosti, saj lahko mladi sedaj premišljeno govorijo o kodi in jo delijo na slabo in dobro ter s tem pokažejo, da se »vedo«. To dodatno krepi negativno: zaradi razočaranja se zlahka razumeš s sodelavci in postaneš del skupine; kritiziranje Bad Code poveča vaš status in profesionalnost v očeh drugih: ljudje, ki izražajo negativna mnenja, so pogosto dojeti kot bolj inteligentni in kompetentni.

Povečanje negativnosti ni nujno slaba stvar. Razprave o programiranju so med drugim izjemno osredotočene na kakovost napisane kode. Kaj je koda, v celoti opredeljuje funkcijo, ki naj bi jo opravljala (strojna oprema, omrežje itd. na stran), zato je pomembno, da lahko izrazite svoje mnenje o tej kodi. Skoraj vse razprave se spuščajo do tega, ali je koda dovolj dobra, in do obsojanja samih manifestov slabe kode v izrazih, katerih čustvena konotacija označuje kakovost kode:

  • "V tem modulu je veliko logičnih nedoslednosti, zato je dober kandidat za znatno optimizacijo delovanja."
  • "Ta modul je precej slab, moramo ga predelati."
  • "Ta modul nima smisla, treba ga je prepisati."
  • "Ta modul je zanič, treba ga je popraviti."
  • "To je kos ovna, ne modul, sploh ga ni bilo treba napisati, kaj za vraga si je njegov avtor mislil."

Mimogrede, zaradi te "čustvene sprostitve" razvijalci kodo imenujejo "seksi", kar je le redko pravično - razen če delate na PornHubu.

Težava je v tem, da smo ljudje čudna, nemirna, čustvena bitja in nas dojemanje in izražanje katerega koli čustva spremeni: sprva subtilno, sčasoma pa dramatično.

Težavno spolzko pobočje negativnosti

Pred nekaj leti sem bil neformalni vodja ekipe in sem intervjuval razvijalca. Zelo nam je bil všeč: bil je pameten, postavljal je dobra vprašanja, bil je tehnično podkovan in se je dobro ujemal z našo kulturo. Posebej me je navdušila njegova pozitivnost in podjeten videz. In sem ga najel.

Takrat sem že nekaj let delal v podjetju in čutil sem, da naša kultura ni preveč učinkovita. Produkt smo poskušali lansirati dvakrat, trikrat in še nekajkrat, preden sem prišel, kar je povzročilo velike stroške predelav, med katerimi razen dolgih noči, tesnih rokov in izdelkov, ki so delovali, nismo imeli kaj pokazati. In čeprav sem še vedno trdo delal, sem bil skeptičen do zadnjega roka, ki nam ga je določilo vodstvo. In mimogrede je preklinjal, ko je z mojimi kolegi razpravljal o nekaterih vidikih kodeksa.

Zato ni bilo presenetljivo – čeprav sem bil presenečen –, da je nekaj tednov kasneje isti novi razvijalec rekel iste negativne stvari, kot sem jih jaz (vključno z psovkami). Spoznal sem, da bi se v drugačni družbi z drugačno kulturo obnašal drugače. Samo prilagodil se je kulturi, ki sem jo ustvaril. Prevzel me je občutek krivde. Zaradi svoje subjektivne izkušnje sem novincu vlival pesimizem, ki sem ga dojemal kot popolnoma drugačnega. Tudi če v resnici ni bil tak in se je samo prikazoval, da bi pokazal, da se zna vklopiti, sem mu vsilila svoj usrani odnos. In vse, kar je povedano, tudi v šali ali mimogrede, se na slab način spremeni v tisto, kar se verjame.

Jeza na kodo: programerji in negativnost

Negativni načini

Vrnimo se k našim nekdanjim programerjem novincem, ki so pridobili malo modrosti in izkušenj: bolje so se seznanili s programersko industrijo in razumejo, da je slaba koda povsod, da se ji ni mogoče izogniti. Pojavlja se tudi v najnaprednejših podjetjih, ki se osredotočajo na kakovost (in naj pripomnim: očitno sodobnost ne ščiti pred slabo kodo).

Dober scenarij. Sčasoma razvijalci začnejo sprejemati, da je slaba koda realnost programske opreme in da je njihova naloga, da jo izboljšajo. In če se slabi kodi ni mogoče izogniti, potem nima smisla vznemirjati okoli nje. Ubirajo pot zena in se osredotočajo na reševanje problemov ali nalog, s katerimi se srečujejo. Naučijo se natančno izmeriti in posredovati kakovost programske opreme lastnikom podjetij, napisati dobro utemeljene ocene na podlagi svojih dolgoletnih izkušenj in na koncu prejmejo velikodušne nagrade za svojo neverjetno in stalno vrednost za podjetje. Svoje delo opravljajo tako dobro, da dobijo 10 milijonov dolarjev bonusov in se upokojijo, da delajo, kar hočejo, do konca življenja (prosim, ne jemljite tega za samoumevno).

Jeza na kodo: programerji in negativnost

Drugi scenarij je pot teme. Namesto da bi sprejeli slabo kodo kot neizogibnost, se razvijalci zavzamejo za to, da razkrijejo vse slabo v svetu programiranja, da bi to lahko premagali. Zavračajo izboljšanje obstoječe slabe kode iz številnih dobrih razlogov: »ljudje bi morali vedeti več in ne biti tako neumni«; "neprijetno je"; »to je slabo za posel«; "to dokazuje, kako pameten sem"; "če vam ne povem, kakšna zanič koda je to, bo celotno podjetje padlo v ocean," in tako naprej.

Ti ljudje zagotovo ne morejo izvesti želenih sprememb, ker se mora podjetje žal še naprej razvijati in ne morejo skrbeti za kakovost kode, zato pridobijo sloves pritožnikov. Ohranjajo jih zaradi visoke kompetence, a jih odrivajo na obrobje podjetja, kjer marsikoga ne bodo motili, bodo pa vseeno podpirali delovanje kritičnih sistemov. Brez dostopa do novih razvojnih priložnosti izgubijo veščine in prenehajo izpolnjevati zahteve industrije. Njihova negativnost se sprevrže v grenko zagrenjenost in posledično hranijo svoj ego s prepiranjem z dvajsetletnimi študenti o poti, ki jo je opravila njihova najljubša stara tehnologija in zakaj je še vedno tako vroča. Na koncu se upokojijo in svojo starost doživijo ob priseganju na ptice.

Realnost je verjetno nekje vmes med tema dvema skrajnostma.

Nekatera podjetja so bila izjemno uspešna pri ustvarjanju skrajno negativnih, izoliranih kultur močne volje (kot Microsoft pred izgubljeno desetletje) - pogosto so to podjetja z izdelki, ki popolnoma ustrezajo trgu in potrebi po čim hitrejši rasti; ali podjetja s hierarhijo poveljevanja in nadzora (Apple v najboljših letih Jobsa), kjer vsak dela, kar mu rečejo. Vendar pa sodobne poslovne raziskave (in zdrav razum) kažejo, da maksimalna iznajdljivost, ki vodi v inovativnost v podjetjih, in visoka produktivnost pri posameznikih, zahteva nizko raven stresa za podporo nenehnega ustvarjalnega in metodičnega razmišljanja. In zelo težko je opravljati ustvarjalno delo, ki temelji na razpravah, če vas nenehno skrbi, kaj bodo vaši kolegi rekli o vsaki vrstici vaše kode.

Negativnost je inženiring pop kulture

Danes se odnosu inženirjev posveča več pozornosti kot kdaj koli prej. V inženirskih organizacijah velja pravilo "Brez rogov". Na twitterju se pojavlja vse več anekdot in zgodb o ljudeh, ki so ta poklic zapustili, ker niso mogli (ne bi hoteli) še naprej prenašati sovražnosti in slabe volje do tujcev. Celo Linus Torvalds pred kratkim opravičil leta sovražnosti in kritike do drugih razvijalcev Linuxa - to je privedlo do razprave o učinkovitosti tega pristopa.

Nekateri še vedno zagovarjajo Linusovo pravico, da je zelo kritičen – tisti, ki bi morali vedeti veliko o prednostih in slabostih »strupene negativnosti«. Da, vljudnost je izjemno pomembna (celo temeljna), a če povzamemo razloge, zakaj mnogi med nami dopuščamo, da se izražanje negativnih mnenj sprevrže v »strupenost«, se ti razlogi zdijo očetovski ali pubertetniški: »to si zaslužijo, ker so idioti. «, »mora biti prepričan, da tega ne bodo več storili«, »če tega ne bi storili, mu ne bi bilo treba kričati nanje« ipd. Primer vpliva, ki ga imajo čustvene reakcije vodje na programersko skupnost, je akronim skupnosti Ruby MINASWAN - "Matz je prijazen, torej smo prijazni."

Opazil sem, da številni goreči zagovorniki pristopa "ubij norca" pogosto zelo skrbijo za kakovost in pravilnost kode in se identificirajo s svojim delom. Na žalost pogosto zamenjujejo trdoto s togostjo. Slabost tega položaja izvira iz preproste človeške, a neproduktivne želje po občutku večvrednosti od drugih. Ljudje, ki se potopijo v to željo, obtičijo na poti teme.

Jeza na kodo: programerji in negativnost

Svet programiranja hitro raste in se potiska čez meje svojega vsebnika - sveta neprogramiranja (ali je svet programiranja vsebnik za svet neprogramiranja? Dobro vprašanje).

Ker se naša industrija vedno hitreje širi in programiranje postaja bolj dostopno, se razdalja med »tehniki« in »normalnimi« hitro zmanjšuje. Svet programiranja je vedno bolj izpostavljen medosebnim interakcijam ljudi, ki so odraščali v izolirani piflarski kulturi zgodnjega tehnološkega razcveta, in prav oni bodo oblikovali nov svet programiranja. In ne glede na kakršne koli družbene ali generacijske argumente se bo učinkovitost v imenu kapitalizma pokazala v kulturi podjetij in praksah zaposlovanja: najboljša podjetja preprosto ne bodo zaposlila nikogar, ki ne more nevtralno komunicirati z drugimi, kaj šele imeti dobrih odnosov.

Kaj sem se naučil o negativnosti

Če dovolite, da preveč negativnosti nadzoruje vaš um in interakcije z ljudmi ter se spremeni v strupenost, potem je to nevarno za produktne ekipe in drago za podjetja. Videl sem (in slišal za) nešteto projektov, ki so razpadli in bili v celoti obnovljeni z velikimi stroški, ker je imel zaupanja vreden razvijalec zamero do tehnologije, drugega razvijalca ali celo ene same datoteke, ki je bila izbrana za predstavljanje kakovosti celotne kodne baze.

Negativnost tudi demoralizira in uničuje odnose. Nikoli ne bom pozabil, kako me je kolega grajal, ker sem dal CSS v napačno datoteko, to me je razburilo in mi ni dalo, da bi zbral misli nekaj dni. In v prihodnosti je malo verjetno, da bi takšni osebi dovolil, da bi bila blizu ene od mojih ekip (a kdo ve, ljudje se spreminjajo).

Končno negativno dobesedno škoduje zdravju.

Jeza na kodo: programerji in negativnost
Mislim, da bi tako moral izgledati mojstrski tečaj o nasmehih.

Seveda to ni argument v prid žarenju od sreče, vstavljanju desetih milijard emotikonov v vsako zahtevo po vleku ali obiskovanju mojstrskega tečaja o nasmehih (ne, no, če si to želite, potem ni problema). Negativnost je izjemno pomemben del programiranja (in človeškega življenja), signalizira kvaliteto, omogoča izražanje čustev in sočustvovanje s soljudmi. Negativnost kaže na vpogled in preudarnost, globino problema. Pogosto opazim, da je razvijalec dosegel novo raven, ko začne izražati nezaupanje v tisto, o čemer je bil prej sramežljiv in negotov. Ljudje s svojimi mnenji izkazujejo razumnost in samozavest. Ne morete zavreči izraza negativnosti, to bi bilo orwellovsko.

Negativnost pa je treba odmeriti in uravnotežiti z drugimi pomembnimi človeškimi lastnostmi: empatijo, potrpežljivostjo, razumevanjem in humorjem. Osebi lahko vedno poveš, da je zajebal, ne da bi vpil ali preklinjal. Ne podcenjujte tega pristopa: če vam nekdo brez čustev pove, da ste resno zamočili, je to res strašljivo.

Takrat, pred nekaj leti, je generalni direktor govoril z menoj. Pogovarjala sva se o trenutnem statusu projekta, nato pa me je vprašal, kako se počutim. Odgovoril sem, da je vse v redu, projekt se premika, delamo počasi, mogoče sem kaj spregledal in je treba razmisliti. Rekel je, da me je slišal bolj pesimistične misli deliti s kolegi v pisarni in da so to opazili tudi drugi. Pojasnil je, da če imam dvome, jih lahko v celoti izrazim vodstvu, ne pa jih "odpravim". Kot vodilni inženir moram biti pozoren na to, kako moje besede vplivajo na druge, ker imam velik vpliv, čeprav se tega ne zavedam. In vse to mi je zelo prijazno povedal, na koncu pa rekel, da če se res tako počutim, potem moram verjetno razmisliti, kaj si želim zase in za svojo kariero. To je bil neverjetno nežen pogovor, ki je potekal po načelu "dobi-ali-vstani s svojega sedeža". Zahvalil sem se mu za informacijo o tem, kako moj spremenjeni odnos v šestih mesecih vpliva na druge, ne da bi jih jaz opazil.

Bil je primer izjemnega, učinkovitega vodenja in moči mehkega pristopa. Spoznal sem, da le na videz popolnoma verjamem v podjetje in njegovo sposobnost doseganja ciljev, v resnici pa sem govoril in komuniciral z drugimi na povsem drugačen način. Spoznal sem tudi, da tudi če sem skeptičen glede projekta, na katerem delam, svojih čustev ne bi smel pokazati svojim kolegom in širiti pesimizma kot okužbo, kar bi zmanjšalo naše možnosti za uspeh. Namesto tega bi lahko svojemu vodstvu agresivno posredoval resnično situacijo. In če bi čutil, da me ne poslušajo, bi svoje nestrinjanje lahko izrazil tako, da bi zapustil podjetje.

Novo priložnost sem dobil, ko sem prevzel mesto vodje ocenjevanja kadrov. Kot nekdanji glavni inženir sem zelo previden pri izražanju svojega mnenja o naši (vedno boljši) podedovani kodi. Če želite odobriti spremembo, si morate predstavljati trenutno situacijo, vendar ne boste prišli nikamor, če se boste utopili v stokanju, napadanju in podobno. Konec koncev sem tukaj, da dokončam nalogo in se ne bi smel pritoževati nad kodo, da bi jo razumel, ovrednotil ali popravil.

Pravzaprav bolj ko nadzorujem svojo čustveno reakcijo na kodo, bolj razumem, kaj bi lahko postala, in manj zmede se počutim. Ko sem se izrazila zadržano (»tu mora biti prostor za nadaljnje izboljšave«), sem osrečevala sebe in druge in situacije nisem jemala preveč resno. Spoznal sem, da lahko spodbudim in zmanjšam negativnost pri drugih, če sem popolnoma (nadležno?) razumen (»imate prav, ta koda je precej slaba, vendar jo bomo izboljšali«). Vesel sem, ko vidim, kako daleč lahko grem na poti zena.

V bistvu se nenehno učim in ponovno učim pomembno lekcijo: življenje je prekratko, da bi bil nenehno jezen in v bolečini.

Jeza na kodo: programerji in negativnost

Vir: www.habr.com

Dodaj komentar