Ljutnja na kod: programeri i negativnost

Ljutnja na kod: programeri i negativnost

Gledam dio koda. Ovo je možda najgori kod koji sam ikada vidio. Da ažurira samo jedan zapis u bazi podataka, preuzima sve zapise u kolekciji, a zatim šalje zahtjev za ažuriranje svakom zapisu u bazi podataka, čak i onima koje ne treba ažurirati. Postoji funkcija mape koja jednostavno vraća vrijednost koja joj je proslijeđena. Postoje uslovni testovi za varijable sa naizgled istom vrednošću, samo imenovane u različitim stilovima (firstName и first_name). Za svako UPDATE, kod šalje poruku drugom redu čekanja, kojim upravlja druga funkcija bez servera, ali koja obavlja sav posao za drugu kolekciju u istoj bazi podataka. Jesam li spomenuo da je ova funkcija bez servera iz "uslužno orijentirane arhitekture" koja sadrži preko 100 funkcija u okruženju?

Kako je to uopšte bilo moguće uraditi? Pokrijem lice i vidno jecam kroz smeh. Kolege pitaju šta se desilo, a ja to prepričavam u bojama Najgori hitovi BulkDataImporter.js 2018. Svi mi saosećajno klimaju glavom i slažu se: kako su to mogli da nam urade?

Negativnost: emocionalno sredstvo u kulturi programera

Negativnost igra važnu ulogu u programiranju. To je ugrađeno u našu kulturu i koristi se za dijeljenje onoga što smo naučili („vi ne vjerovat ćeš, kakav je bio taj kod!”), izraziti saučešće kroz frustraciju („Bože, ZAŠTO to učiniti?”), pokazati se („Nikada ne bih tako nije”), da okrive nekog drugog („propali smo zbog njegovog kodeksa, koji je nemoguće održati“), ili, kako je uobičajeno u „najtoksičnijim“ organizacijama, upravljati drugima kroz osjećaj sramota („O čemu si uopšte razmišljao?“? tačno“).

Ljutnja na kod: programeri i negativnost

Negativnost je toliko važna programerima jer je vrlo efikasan način prenošenja vrijednosti. Jednom sam pohađao programski kamp i standardna praksa usađivanja kulture industrije studentima bila je velikodušno snabdevanje memovima, pričama i video zapisima, od kojih su najpopularniji eksploatisani frustracija programera kada se suoče sa nerazumevanjem ljudi. Dobro je moći koristiti emocionalne alate za identifikaciju dobrih, loših, ružnih, ne čini to, nikad. Novopridošlice je potrebno pripremiti na činjenicu da će vjerovatno biti pogrešno shvaćeni od kolega koji su daleko od IT-a. Da će im prijatelji početi prodavati milionske ideje za aplikacije. Da će morati lutati kroz beskrajne lavirinte zastarjele šifre sa gomilom minotaura iza ugla.

Kada prvi put naučimo programirati, naše razumijevanje dubine “programskog iskustva” zasniva se na posmatranju emocionalnih reakcija drugih ljudi. To se jasno vidi iz postova u sabe ProgrammerHumor, gdje se druži mnogo programera početnika. Mnogi duhoviti su, u jednoj ili drugoj mjeri, obojeni različitim nijansama negativnosti: razočaranjem, pesimizmom, ogorčenjem, snishodljivošću i drugim. A ako vam se ovo ne čini dovoljno, pročitajte komentare.

Ljutnja na kod: programeri i negativnost

Primijetio sam da kako programeri stiču iskustvo, postaju sve negativniji. Početnici, nesvesni poteškoća koje ih očekuju, počinju sa entuzijazmom i spremnošću da veruju da je uzrok ovih poteškoća jednostavno nedostatak iskustva i znanja; i na kraju će se suočiti sa stvarnošću stvari.

Vrijeme prolazi, oni stiču iskustvo i postaju sposobni razlikovati dobar kod od lošeg. A kada dođe taj trenutak, mladi programeri osjećaju frustraciju rada sa očigledno lošim kodom. A ako rade u timu (na daljinu ili lično), često usvajaju emocionalne navike iskusnijih kolega. To često dovodi do porasta negativnosti, jer mladi ljudi sada mogu promišljeno razgovarati o kodu i podijeliti ga na loše i dobro, pokazujući na taj način da su „upoznati“. Ovo dodatno pojačava negativno: zbog razočaranja, lako je slagati se s kolegama i postati dio grupe; kritiziranje Lošeg koda povećava vaš status i profesionalizam u očima drugih: ljudi koji izražavaju negativna mišljenja često se percipiraju kao inteligentniji i kompetentniji.

Povećanje negativnosti nije nužno loša stvar. Diskusije o programiranju, između ostalog, izuzetno su fokusirane na kvalitetu napisanog koda. Ono što je kod u potpunosti definira funkciju za koju je namijenjen (na stranu hardver, umrežavanje, itd.), tako da je važno da možete izraziti svoje mišljenje o tom kodu. Gotovo sve rasprave svode se na to da li je kod dovoljno dobar, i na osudu samih manifestacija lošeg koda u terminima čija emocionalna konotacija karakteriše kvalitet koda:

  • "Postoji puno logičkih nedosljednosti u ovom modulu, on je dobar kandidat za značajnu optimizaciju performansi."
  • “Ovaj modul je prilično loš, moramo ga refaktorirati.”
  • "Ovaj modul nema smisla, treba ga ponovo napisati."
  • “Ovaj modul je loš, treba ga zakrpiti.”
  • “Ovo je komad ovna, a ne modul, nije ga uopšte trebalo pisati, šta je dovraga mislio njegov autor.”

Usput, upravo ovo "emocionalno izdanje" tjera programere da zovu kod "seksi", što je rijetko pošteno - osim ako ne radite u PornHubu.

Problem je u tome što su ljudi čudna, nemirna, emotivna stvorenja, a percepcija i izražavanje bilo koje emocije nas mijenja: isprva suptilno, ali s vremenom, dramatično.

Problematična klizava padina negativnosti

Prije nekoliko godina bio sam neformalni vođa tima i intervjuirao programera. Zaista nam se dopao: bio je pametan, postavljao je dobra pitanja, bio je tehnički podkovan i dobro se uklapao u našu kulturu. Posebno me impresionirala njegova pozitivnost i koliko je djelovao preduzimljivo. I unajmio sam ga.

U to vrijeme radio sam u kompaniji nekoliko godina i osjećao sam da naša kultura nije baš efikasna. Pokušali smo dva puta, tri puta i još par puta lansirati proizvod prije mog dolaska, što je dovelo do velikih troškova za preradu, tokom koje nismo imali ništa za pokazati osim dugih noći, kratkih rokova i proizvoda koji su radili. I iako sam i dalje vredno radio, bio sam skeptičan u pogledu posljednjeg roka koji nam je odredila uprava. I ležerno je opsovao kada je sa mojim kolegama razgovarao o nekim aspektima kodeksa.

Stoga nije bilo iznenađujuće – iako sam bio iznenađen – da je nekoliko sedmica kasnije taj isti novi programer rekao iste negativne stvari kao i ja (uključujući psovke). Shvatio sam da bi se drugačije ponašao u drugoj kompaniji sa drugačijom kulturom. Samo se prilagodio kulturi koju sam stvorio. Obuzeo me je osećaj krivice. Zbog svog subjektivnog iskustva, usadio sam pesimizam u pridošlicu koju sam doživljavao kao potpuno drugačiju. Čak i ako on zaista nije bio takav i samo je izgledao da pokaže da može da se uklopi, nametnula sam mu svoj usrani stav. A sve rečeno, čak i u šali ili usputno, ima loš način da se pretvori u ono u šta se vjeruje.

Ljutnja na kod: programeri i negativnost

Negativni načini

Vratimo se našim bivšim programerima početnicima, koji su stekli malo mudrosti i iskustva: bolje su se upoznali sa programskom industrijom i shvatili da je loš kod posvuda, da se ne može izbjeći. Javlja se čak iu najnaprednijim kompanijama fokusiranim na kvalitet (i da napomenem: očigledno, modernost ne štiti od lošeg koda).

Dobar scenario. Vremenom, programeri počinju da prihvataju da je loš kod stvarnost softvera i da je njihov posao da ga poboljšaju. I da ako se loš kod ne može izbjeći, onda nema smisla praviti galamu oko toga. Oni idu putem zena, fokusirajući se na rješavanje problema ili zadataka s kojima se suočavaju. Oni uče kako precizno izmjeriti i prenijeti kvalitet softvera vlasnicima preduzeća, napišu dobro utemeljene procjene zasnovane na njihovom dugogodišnjem iskustvu i na kraju primaju velikodušne nagrade za svoju nevjerovatnu i stalnu vrijednost za poslovanje. Toliko dobro rade svoj posao da dobijaju 10 miliona dolara bonusa i odlaze u penziju da rade ono što žele do kraja života (molim vas, nemojte to uzimati zdravo za gotovo).

Ljutnja na kod: programeri i negativnost

Drugi scenario je put tame. Umjesto da prihvate loš kod kao neizbježnost, programeri preuzimaju na sebe da prozivaju sve loše u svijetu programiranja kako bi to mogli prevazići. Odbijaju da poboljšaju postojeći loš kod iz mnogo dobrih razloga: „ljudi treba da znaju više i da ne budu tako glupi“; "neprijatno je"; „ovo je loše za posao“; “ovo dokazuje koliko sam pametan”; “Ako vam ne kažem kakav je ovo loš kod, cijela kompanija će pasti u okean” i tako dalje.

Sigurno u nemogućnosti da implementiraju promjene koje žele jer se posao nažalost mora nastaviti razvijati i ne može trošiti vrijeme na brigu o kvalitetu koda, ovi ljudi stječu reputaciju žalitelja. Oni su zadržani zbog svoje visoke kompetencije, ali su gurnuti na margine kompanije, gdje neće smetati mnogim ljudima, ali će i dalje podržavati rad kritičnih sistema. Bez pristupa novim razvojnim mogućnostima, oni gube vještine i prestaju ispunjavati zahtjeve industrije. Njihova negativnost se pretvara u gorku gorčinu, a kao rezultat toga oni hrane svoj ego svađajući se sa dvadesetogodišnjim studentima o putu kojim je krenula njihova omiljena stara tehnologija i zašto je još uvijek tako vruća. Na kraju odlaze u penziju i dožive starost psujući ptice.

Realnost se vjerovatno nalazi negdje između ove dvije krajnosti.

Neke kompanije su bile izuzetno uspješne u stvaranju ekstremno negativnih, izoliranih kultura jake volje (poput Microsofta prije njega izgubljenu deceniju) - često su to kompanije sa proizvodima koji se savršeno uklapaju u tržište i potrebu da rastu što je brže moguće; ili kompanije sa hijerarhijom komandovanja i kontrole (Apple u najboljim godinama poslova), gde svako radi šta mu se kaže. Međutim, moderna poslovna istraživanja (i zdrav razum) sugeriraju da maksimalna domišljatost, koja vodi do inovativnosti u kompanijama i visoke produktivnosti kod pojedinaca, zahtijeva nizak nivo stresa kako bi se podržalo kontinuirano kreativno i metodično razmišljanje. I izuzetno je teško raditi kreativan posao zasnovan na diskusiji ako se stalno brinete šta će vaše kolege imati da kažu o svakoj liniji vašeg koda.

Negativnost je inženjering pop kulture

Danas se više pažnje poklanja stavu inženjera nego ikada ranije. U inženjerskim organizacijama važi pravilo „Nema rogova". Na Twitteru se pojavljuje sve više anegdota i priča o ljudima koji su napustili ovu profesiju jer nisu mogli (ne) da nastave da trpe neprijateljstvo i zlu volju prema strancima. Čak i Linus Torvalds nedavno se izvinio godine neprijateljstva i kritike prema drugim Linux programerima - to je dovelo do debate o efikasnosti ovog pristupa.

Neki još uvijek brane Linusovo pravo da bude vrlo kritičan - oni koji bi trebali znati mnogo o prednostima i nedostacima "toksične negativnosti". Da, uljudnost je izuzetno važna (čak i fundamentalna), ali ako sumiramo razloge zašto mnogi od nas dopuštaju da se izražavanje negativnih mišljenja pretvori u "toksičnost", ovi razlozi izgledaju paternalistički ili adolescentski: "oni to zaslužuju jer su idioti ", "mora biti siguran da to više neće ponoviti", "da to nisu uradili, ne bi morao da viče na njih" i tako dalje. Primer uticaja koje emocionalne reakcije vođe imaju na programersku zajednicu je skraćenica Ruby zajednice MINASWAN - "Matz je fin pa smo mi fini."

Primijetio sam da mnogi vatreni zagovornici pristupa "ubij budalu" često veoma brinu o kvaliteti i ispravnosti koda, identificirajući se sa svojim radom. Nažalost, često brkaju tvrdoću sa krutošću. Nedostatak ove pozicije proizlazi iz jednostavne ljudske, ali neproduktivne želje da se osjeća superiorno u odnosu na druge. Ljudi koji postanu uronjeni u ovu želju zaglave se na putu tame.

Ljutnja na kod: programeri i negativnost

Svijet programiranja ubrzano raste i gura se prema granicama svog kontejnera - svijeta ne-programiranja (ili je svijet programiranja kontejner za svijet ne-programiranja? Dobro pitanje).

Kako se naša industrija širi sve većim tempom i programiranje postaje pristupačnije, distanca između „tehničara“ i „normalnih“ se brzo smanjuje. Svijet programiranja sve je više izložen međuljudskim interakcijama ljudi koji su odrasli u izolovanoj štreberskoj kulturi ranog tehnološkog procvata, i oni su ti koji će oblikovati novi svijet programiranja. I bez obzira na bilo kakve društvene ili generacijske argumente, efikasnost u ime kapitalizma će se pokazati u kulturi kompanije i praksi zapošljavanja: najbolje kompanije jednostavno neće zaposliti nikoga ko ne može neutralno komunicirati s drugima, a kamoli imati dobre odnose.

Šta sam naučio o negativnosti

Ako dozvolite da previše negativnosti kontrolira vaš um i interakcije s ljudima, pretvarajući se u toksičnost, onda je to opasno za proizvodne timove i skupo za posao. Vidio sam (i čuo za) bezbroj projekata koji su se raspali i potpuno rekonstruisali uz velike troškove jer je jedan programer od povjerenja imao ljutnju na tehnologiju, drugi programer, ili čak jednu datoteku odabranu da predstavlja kvalitet cjelokupne baze koda.

Negativnost takođe demorališe i uništava odnose. Nikada neću zaboraviti kako me je kolega prekorio što sam CSS stavio u pogrešan fajl, uznemirilo me i nije mi dalo da se saberem nekoliko dana. I u budućnosti, teško da ću dozvoliti takvoj osobi da bude u blizini nekog od mojih timova (ali ko zna, ljudi se mijenjaju).

Konačno, negativno bukvalno šteti vašem zdravlju.

Ljutnja na kod: programeri i negativnost
Mislim da bi ovako trebala izgledati majstorska klasa o osmijehu.

Naravno, ovo nije argument u korist blistanja od sreće, umetanja deset milijardi emotikona u svaki pull request ili odlaska na majstorsku klasu o osmijehu (ne, pa, ako je to ono što želite, onda nema sumnje). Negativnost je izuzetno važan dio programiranja (i ljudskog života), signalizirajući kvalitet, omogućavajući čovjeku da izrazi osjećaje i saosjeća s drugim ljudima. Negativnost ukazuje na uvid i razboritost, dubinu problema. Često primjećujem da je programer dostigao novi nivo kada počne da izražava nevjericu u ono u što je ranije bio stidljiv i nesiguran. Ljudi svojim mišljenjima pokazuju razumnost i samopouzdanje. Ne možete odbaciti izraz negativnosti, to bi bilo orvelovski.

Međutim, negativnost treba dozirati i uravnotežiti s drugim važnim ljudskim kvalitetima: empatijom, strpljenjem, razumijevanjem i humorom. Uvek možete reći osobi da je zeznuo stvar bez vike ili psovanja. Nemojte podcijeniti ovaj pristup: ako vam neko bez ikakvih emocija kaže da ste ozbiljno zabrljali, to je zaista zastrašujuće.

Tog puta, prije nekoliko godina, generalni direktor je razgovarao sa mnom. Razgovarali smo o trenutnom statusu projekta, a zatim je pitao kako se osjećam. Odgovorio sam da je sve u redu, projekat se kreće, radili smo sporo, možda sam nešto propustio i da se treba preispitati. Rekao je da me je čuo kako s kolegama u kancelariji dijelim pesimističnija razmišljanja, a da su i drugi to primijetili. Objasnio je da ako sumnjam, mogu ih u potpunosti iznijeti menadžmentu, ali ne i da ih „uklonim“. Kao vodeći inženjer, moram da vodim računa o tome kako moje reči utiču na druge jer imam veliki uticaj čak i ako to ne shvatam. I sve mi je to rekao vrlo ljubazno, i na kraju rekao da ako se zaista tako osjećam, onda vjerovatno moram razmisliti šta želim za sebe i svoju karijeru. Bio je to nevjerovatno nježan razgovor "uzmi ili siđi sa svog mjesta". Zahvalio sam mu se na informaciji o tome kako je moj promijenjen stav tokom šest mjeseci utjecao na druge koje nisam primijetio.

Bio je to primjer izvanrednog, efektivnog upravljanja i snage mekog pristupa. Shvatio sam da samo naizgled potpuno verujem u kompaniju i njenu sposobnost da ostvari svoje ciljeve, ali u stvarnosti sam razgovarao i komunicirao sa drugima na potpuno drugačiji način. Također sam shvatio da čak i ako se osjećam skeptično prema projektu na kojem radim, ne bih trebao pokazivati ​​svoja osjećanja svojim kolegama i širiti pesimizam kao zarazu, smanjujući naše šanse za uspjeh. Umjesto toga, mogao sam agresivno prenijeti stvarnu situaciju svom menadžmentu. A ako sam osjetio da me ne slušaju, svoje neslaganje bih mogao izraziti napuštanjem kompanije.

Dobio sam novu priliku kada sam preuzeo poziciju šefa kadrovske procjene. Kao bivši glavni inženjer, veoma sam pažljiv u izražavanju mišljenja o našem (sve boljem) naslijeđenom kodu. Da biste odobrili promjenu, morate zamisliti trenutnu situaciju, ali nećete stići nigdje ako se udubite u stenjanje, napade i slično. Na kraju krajeva, ovdje sam da završim zadatak i ne trebam se žaliti na kod kako bih ga razumio, procijenio ili popravio.

Zapravo, što više kontrolišem svoju emocionalnu reakciju na kod, to više razumijem šta bi to moglo postati i osjećam manje zbunjenosti. Kada sam se suzdržano izražavao („ovdje mora biti prostora za dalje poboljšanje“), usrećio sam sebe i druge i nisam previše ozbiljno shvaćao situaciju. Shvatio sam da mogu stimulisati i smanjiti negativnost kod drugih ako budem savršeno (iritantno?) razuman (“u pravu si, ovaj kod je prilično loš, ali mi ćemo ga poboljšati”). Drago mi je da vidim koliko daleko mogu ići na zen putu.

U suštini, stalno učim i iznova učim važnu lekciju: život je prekratak da bismo bili stalno ljuti i u bolu.

Ljutnja na kod: programeri i negativnost

izvor: www.habr.com

Dodajte komentar