Kolero ĉe kodo: programistoj kaj negativeco

Kolero ĉe kodo: programistoj kaj negativeco

Mi rigardas pecon de kodo. Ĉi tio eble estas la plej malbona kodo, kiun mi iam vidis. Por ĝisdatigi nur unu rekordon en la datumbazo, ĝi prenas ĉiujn rekordojn en la kolekto kaj tiam sendas ĝisdatigpeton al ĉiu rekordo en la datumbazo, eĉ tiuj kiuj ne bezonas esti ĝisdatigitaj. Estas mapo-funkcio, kiu simple resendas la valoron transdonitan al ĝi. Estas kondiĉaj testoj por variabloj kun ŝajne la sama valoro, ĵus nomitaj en malsamaj stiloj (firstName и first_name). Por ĉiu ĜISDATIGO, la kodo sendas mesaĝon al malsama atendovico, kiu estas pritraktata de malsama senservila funkcio, sed kiu faras la tutan laboron por malsama kolekto en la sama datumbazo. Ĉu mi menciis, ke ĉi tiu senservila funkcio estas de nubo-bazita "servo-orientita arkitekturo" enhavanta pli ol 100 funkciojn en la medio?

Kiel eblis fari ĉi tion? Mi kovras mian vizaĝon kaj videble ploras pro mia ridado. Miaj kolegoj demandas kio okazis, kaj mi rerakontas ĝin per koloroj Plej malbonaj sukcesoj de BulkDataImporter.js 2018. Ĉiuj kapjesas al mi simpatie kaj konsentas: kiel ili povus fari tion al ni?

Negativeco: emocia ilo en programkulturo

Negativeco ludas gravan rolon en programado. Ĝi estas enigita en nia kulturo kaj estas uzata por dividi tion, kion ni lernis ("vi ne faras vi kredos ĝin, kia estis tiu kodo!”), por esprimi simpation per frustriĝo (“Dio, KIAL fari tion?”), por montri sin (“mi neniam volus tiel ne faris tion”), kulpigi iun alian (“ni malsukcesis pro lia kodo, kiun oni ne povas konservi”), aŭ, kiel kutimas en la plej “toksaj” organizaĵoj, kontroli aliajn pere de sento de honto ("Pri kio vi eĉ pensis?" ? ĝusta").

Kolero ĉe kodo: programistoj kaj negativeco

Negativeco estas tiel grava por programistoj ĉar ĝi estas tre efika maniero transdoni valoron. Mi iam ĉeestis programadan tendaron, kaj la norma praktiko enstigo de kulturo de industrio al studentoj estis malavare provizi memeojn, rakontojn kaj filmetojn, la plej popularaj el kiuj ekspluatis. frustriĝo de programistoj fronte al miskompreno de homoj. Estas bone povi uzi emociajn ilojn por identigi la Bonon, la Malbonon, la Malbelan, Ne Faru Tion, Neniam. Necesas prepari novulojn por tio, ke ili verŝajne estos miskomprenitaj de kolegoj, kiuj estas malproksime de IT. Ke iliaj amikoj komencos vendi al ili milion-dolarajn apideojn. Ke ili devos vagi tra senfinaj labirintoj de malmoderna kodo kun amaso da minotaŭroj ĉirkaŭ la angulo.

Kiam ni unue lernas programi, nia kompreno pri la profundo de la "programa sperto" baziĝas sur observado de emociaj reagoj de aliaj homoj. Ĉi tio klare videblas el la afiŝoj en scias ProgrammerHumor, kie amaso da novulaj programistoj pasas. Multaj humuraj estas, iugrade aŭ alia, kolorigitaj per malsamaj nuancoj de negativeco: seniluziiĝo, pesimismo, indigno, kondescendeco kaj aliaj. Kaj se ĉi tio ne ŝajnas sufiĉa al vi, legu la komentojn.

Kolero ĉe kodo: programistoj kaj negativeco

Mi rimarkis, ke dum programistoj akiras sperton, ili fariĝas pli kaj pli negativaj. Komencantoj, nekonsciaj pri la malfacilaĵoj atendantaj ilin, komencas kun entuziasmo kaj volo kredi, ke la kaŭzo de tiuj malfacilaĵoj estas simple manko de sperto kaj scio; kaj fine ili alfrontos la realecon de la aferoj.

Tempo pasas, ili akiras sperton kaj iĝas kapablaj distingi Bonan kodon de Malbona. Kaj kiam tiu momento venas, junaj programistoj sentas la frustriĝon labori kun evidente malbona kodo. Kaj se ili laboras en teamo (fore aŭ persone), ili ofte adoptas la emociajn kutimojn de pli spertaj kolegoj. Ĉi tio ofte kondukas al pliiĝo de negativeco, ĉar junuloj nun povas pripense paroli pri kodo kaj dividi ĝin en malbonan kaj bonan, montrante tiel ke ili estas "konitaj". Ĉi tio plue plifortigas la negativan: pro seniluziiĝo, estas facile interkonsenti kun kolegoj kaj fariĝi parto de grupo; kritiki Bad Code pliigas vian statuson kaj profesiecon en la okuloj de aliaj: homoj kiuj esprimas negativajn opiniojn ofte estas perceptitaj kiel pli inteligentaj kaj kompetentaj.

Pliigi negativecon ne nepre estas malbona afero. Diskutoj pri programado, interalie, estas ekstreme koncentritaj al la kvalito de la skribita kodo. Kio estas la kodo tute difinas la funkcion, kiun ĝi celas fari (aparataro, reto, ktp. flankenmetite), do gravas povi esprimi vian opinion pri tiu kodo. Preskaŭ ĉiuj diskutoj venas al ĉu la kodo estas sufiĉe bona, kaj al kondamni la manifestojn mem de malbona kodo en esprimoj kies emocia signifo karakterizas la kvaliton de la kodo:

  • "Estas multaj logikaj nekonsekvencoj en ĉi tiu modulo, ĝi estas bona kandidato por signifa agado-optimumigo."
  • "Ĉi tiu modulo estas sufiĉe malbona, ni devas refactorigi ĝin."
  • "Ĉi tiu modulo ne havas sencon, ĝi devas esti reverkita."
  • "Ĉi tiu modulo aĉas, ĝi devas esti flikita."
  • "Ĉi tio estas virŝafo, ne modulo, ĝi tute ne bezonis esti skribita, kion diable pensis ĝia aŭtoro."

Cetere, estas ĉi tiu "emocia liberigo" kiu igas programistojn nomi la kodon "seksa", kio malofte estas justa - krom se vi laboras ĉe PornHub.

La problemo estas, ke homoj estas strangaj, maltrankvilaj, emociaj estaĵoj, kaj la percepto kaj esprimo de ajna emocio ŝanĝas nin: komence subtile, sed kun la tempo, dramece.

Maltrankvila glitiga deklivo de negativeco

Antaŭ kelkaj jaroj, mi estis neformala teamgvidanto kaj intervjuis programiston. Ni tre ŝatis lin: li estis saĝa, faris bonajn demandojn, estis teknologikora, kaj bone kongruis kun nia kulturo. Mi estis aparte imponita de lia pozitiveco kaj kiel iniciatema li ŝajnis. Kaj mi dungis lin.

Tiutempe mi laboris en la kompanio dum kelkaj jaroj kaj sentis, ke nia kulturo ne estas tre efika. Ni provis lanĉi la produkton dufoje, tri fojojn kaj kelkajn pliajn fojojn antaŭ ol mi alvenis, kio kaŭzis grandajn elspezojn pri relaboro, dum kiuj ni havis nenion por montri krom longaj noktoj, streĉaj templimoj kaj produktoj kiuj funkciis. Kaj kvankam mi ankoraŭ multe laboris, mi estis skeptika pri la lasta limdato atribuita al ni de la administrado. Kaj li hazarde ĵuris, kiam li diskutis pri iuj aspektoj de la kodo kun miaj kolegoj.

Do ne estis surprize—kvankam mi estis surprizita—ke kelkajn semajnojn poste, tiu sama nova programisto diris la samajn negativajn aferojn kiujn mi faris (inkluzive de blasfemado). Mi rimarkis, ke li kondutus alimaniere en malsama firmao kun malsama kulturo. Li ĵus adaptiĝis al la kulturo, kiun mi kreis. Mi estis venkita de sento de kulpo. Pro mia subjektiva sperto, mi ensorbigis pesimismon al novulo, kiun mi perceptis kiel tute alia. Eĉ se li vere ne estis tia kaj nur aspektis por montri, ke li povas konveni, mi trudis mian aĉan sintenon al li. Kaj ĉio dirita, eĉ ŝerce aŭ preterpase, havas la malbonan manieron transformiĝi en kio estas kredita.

Kolero ĉe kodo: programistoj kaj negativeco

Negativaj manieroj

Ni revenu al niaj iamaj novulaj programistoj, kiuj akiris iom da saĝo kaj sperto: ili pli familiariĝis kun la programa industrio kaj komprenas, ke malbona kodo estas ĉie, ĝi ne povas esti evitita. Ĝi okazas eĉ en la plej progresintaj kompanioj koncentritaj al kvalito (kaj mi rimarku: ŝajne, la moderneco ne protektas kontraŭ malbona kodo).

Bona skripto. Kun la tempo, programistoj komencas akcepti, ke malbona kodo estas realaĵo de programaro kaj ke ilia tasko estas plibonigi ĝin. Kaj ke se malbona kodo ne povas esti evitita, tiam ne utilas fari tumulton pri ĝi. Ili prenas la vojon de Zen, koncentriĝante pri solvado de problemoj aŭ taskoj, kiuj alfrontas ilin. Ili lernas kiel precize mezuri kaj komuniki softvarkvaliton al komercaj posedantoj, skribi bone bazitajn taksojn bazitajn sur siaj jaroj da sperto, kaj finfine ricevas malavarajn rekompencojn pro ilia nekredebla kaj daŭra valoro al la komerco. Ili faras sian laboron tiel bone, ke ili ricevas 10 milionojn da dolaroj en gratifikoj kaj retiriĝas por fari tion, kion ili volas por la resto de siaj vivoj (bonvolu ne preni ĝin por donita).

Kolero ĉe kodo: programistoj kaj negativeco

Alia scenaro estas la vojo de mallumo. Anstataŭ akcepti malbonan kodon kiel neeviteblon, programistoj prenas sur si voki ĉion malbonan en la programado por ke ili povu venki ĝin. Ili rifuzas plibonigi ekzistantan malbonan kodon pro multaj bonaj kialoj: "homoj devus scii pli kaj ne esti tiel stultaj"; "estas malagrabla"; "ĉi tio estas malbona por komerco"; “ĉi tio pruvas kiom saĝa mi estas”; "se mi ne diros al vi, kia fia kodo ĉi tio estas, la tuta kompanio falos en la oceanon," ktp.

Verŝajne ne povante efektivigi la ŝanĝojn, kiujn ili volas, ĉar la komerco bedaŭrinde devas daŭre disvolvi kaj ne povas pasigi tempon zorgante pri la kvalito de la kodo, ĉi tiuj homoj akiras reputacion kiel plendantoj. Ili estas retenitaj pro sia alta kompetenteco, sed estas puŝitaj al la randoj de la kompanio, kie ili ne ĝenos multajn homojn, sed ankoraŭ subtenos la funkciadon de kritikaj sistemoj. Sen aliro al novaj evoluŝancoj, ili perdas kapablojn kaj ĉesas renkonti industriajn postulojn. Ilia negativeco iĝas amara amareco, kaj kiel rezulto ili nutras siajn egoojn per kverelado kun dudekjaraj studentoj pri la vojaĝo kiun ilia plej ŝatata malnova teknologio faris kaj kial ĝi estas ankoraŭ tiel varma. Ili finas retiriĝi kaj vivi sian maljunaĝon blasfemante je birdoj.

La realo verŝajne kuŝas ie inter ĉi tiuj du ekstremoj.

Iuj kompanioj ege sukcesis krei ekstreme negativajn, insulajn, fortvolajn kulturojn (kiel Mikrosofto antaŭ sia perdita jardeko) - ofte temas pri kompanioj kun produktoj, kiuj perfekte konvenas al la merkato kaj la bezonon kreski kiel eble plej rapide; aŭ kompanioj kun hierarkio de komando kaj kontrolo (Apple en la plej bonaj jaroj de Jobs), kie ĉiu faras tion, kion oni diras al ili. Tamen, moderna komerca esplorado (kaj ordinara racio) indikas ke maksimuma eltrovemo, kiu kondukas al novigado en kompanioj, kaj alta produktiveco en individuoj, postulas malaltajn nivelojn de streso por subteni daŭrantan kreivan kaj metodan pensadon. Kaj estas ege malfacile fari kreeman, diskut-bazitan laboron, se vi konstante zorgas pri tio, kion viaj kolegoj devos diri pri ĉiu linio de via kodo.

Negativeco estas inĝenierado de popkulturo

Hodiaŭ, pli da atento estas pagita al la sinteno de inĝenieroj ol iam antaŭe. En inĝenieraj organizoj, la regulo "Neniuj kornoj". Pli kaj pli da anekdotoj kaj rakontoj aperas en Tvitero pri homoj, kiuj forlasis ĉi tiun profesion, ĉar ili ne povis (ne volus) daŭre toleri malamikecon kaj malbonan volon kontraŭ eksteruloj. Eĉ Linus Torvalds ĵus pardonpetis jaroj da malamikeco kaj kritiko kontraŭ aliaj Linuksaj programistoj - tio kondukis al debato pri la efikeco de ĉi tiu aliro.

Iuj ankoraŭ defendas la rajton de Linus esti tre kritika - tiuj, kiuj devus multe scii pri la avantaĝoj kaj malavantaĝoj de "toksa negativeco". Jes, ĝentileco estas ege grava (eĉ fundamenta), sed se ni resumas la kialojn, kial multaj el ni lasas la esprimon de negativaj opinioj transformiĝi en "toksecon", tiuj kialoj ŝajnas patremaj aŭ adoleskaj: "ili meritas tion ĉar ili estas idiotoj. ", "li devas esti certa, ke ili ne faros tion denove," "se ili ne farus tion, li ne devus krii al ili," ktp. Ekzemplo de la efiko kiun emociaj reagoj de gvidanto havas sur programa komunumo estas la akronimo MINASWAN de la Ruby-komunumo - "Matz estas bela, do ni estas agrablaj."

Mi rimarkis, ke multaj fervoraj proponantoj de la aliro "mortigu malsaĝulon" ofte tre zorgas pri la kvalito kaj ĝusteco de la kodo, identigante sin kun sia laboro. Bedaŭrinde, ili ofte konfuzas malmolecon kun rigideco. La malavantaĝo de ĉi tiu pozicio devenas de la simpla homa, sed neproduktema deziro senti sin pli alta ol aliaj. Homoj, kiuj iĝas mergitaj en ĉi tiu deziro, blokiĝas sur la vojo de mallumo.

Kolero ĉe kodo: programistoj kaj negativeco

La mondo de programado rapide kreskas kaj puŝas kontraŭ la limoj de sia ujo - la mondo de la neprogramado (aŭ ĉu la mondo de la programado estas ujo por la mondo de la neprogramado? Bona demando).

Ĉar nia industrio disvastiĝas je ĉiam kreskanta rapideco kaj programado fariĝas pli alirebla, la distanco inter "teknikistoj" kaj "normaluloj" rapide fermiĝas. La mondo de programado estas ĉiam pli elmontrita al la interhomaj interagoj de homoj, kiuj kreskis en la izolita nerda kulturo de la frua teknologia eksplodo, kaj estas ili kiuj formos la novan mondon de programado. Kaj sendepende de ajnaj sociaj aŭ generaciaj argumentoj, efikeco en la nomo de kapitalismo aperos en kompania kulturo kaj dungaj praktikoj: la plej bonaj kompanioj simple ne dungos iun ajn, kiu ne povas interagi neŭtrale kun aliaj, des malpli havi bonajn rilatojn.

Kion mi lernis pri negativeco

Se vi permesas tro da negativeco kontroli vian menson kaj interagojn kun homoj, iĝante tokseco, tiam ĝi estas danĝera por produktaj teamoj kaj multekosta por komerco. Mi vidis (kaj aŭdis pri) sennombraj projektoj kiuj disfalis kaj estis tute rekonstruitaj je granda elspezo ĉar unu fidinda programisto havis rankoron kontraŭ la teknologio, alia programisto aŭ eĉ ununura dosiero elektita por reprezenti la kvaliton de la tuta kodbazo.

Negativeco ankaŭ malmoraligas kaj detruas rilatojn. Mi neniam forgesos, kiel kolego riproĉis min por meti CSS en malĝustan dosieron, ĝi ĝenis min kaj ne permesis al mi kolekti miajn pensojn dum pluraj tagoj. Kaj estonte, mi verŝajne ne permesos al tia persono esti proksime de unu el miaj teamoj (sed kiu scias, homoj ŝanĝiĝas).

Fine, la negativo laŭvorte damaĝas vian sanon.

Kolero ĉe kodo: programistoj kaj negativeco
Mi pensas, ke jen kiel majstra klaso pri ridetoj devus aspekti.

Kompreneble, ĉi tio ne estas argumento en favoro de radiado de feliĉo, enmetado de dek miliardoj da miensimboloj en ĉiun tiran peton, aŭ iri al majstra klaso pri ridetoj (ne, nu, se tion vi volas, do neniu problemo). Negativeco estas ekstreme grava parto de programado (kaj homa vivo), signalante kvaliton, permesante al oni esprimi sentojn kaj kompati kun kunhomoj. Negativeco indikas komprenon kaj prudenton, la profundon de la problemo. Mi ofte rimarkas, ke programisto atingis novan nivelon, kiam li komencas esprimi nekredemon pri tio, pri kio li antaŭe estis timema kaj necerta. Homoj pruvas raciecon kaj konfidon per siaj opinioj. Vi ne povas malakcepti la esprimon de negativeco, tio estus Orwelliana.

Tamen, negativeco devas esti dozita kaj ekvilibrigita kun aliaj gravaj homaj kvalitoj: empatio, pacienco, kompreno kaj humuro. Vi ĉiam povas diri al homo, ke li fuŝis sen kriado aŭ ĵuro. Ne subtaksu ĉi tiun aliron: se iu diras al vi sen ia emocio, ke vi serioze fuŝis, ĝi estas vere timiga.

Tiufoje, antaŭ pluraj jaroj, la ĉefoficisto parolis al mi. Ni diskutis pri la nuna stato de la projekto, poste li demandis, kiel mi fartas. Mi respondis, ke ĉio estas en ordo, la projekto moviĝas, ni laboris malrapide, eble mi mankis ion kaj necesas rekonsideri. Li diris, ke li aŭdis min kunhavigi pli pesimismajn pensojn kun kolegoj en la oficejo, kaj ke ankaŭ aliaj rimarkis tion. Li klarigis, ke se mi havus dubojn, mi povus plene esprimi ilin al administrado, sed ne "forigi ilin". Kiel ĉefinĝeniero, mi devas esti atenta pri kiel miaj vortoj influas aliajn ĉar mi havas multe da influo eĉ se mi ne rimarkas tion. Kaj li diris al mi ĉion ĉi tre afable, kaj fine diris, ke se mi vere sentis tiel, tiam mi verŝajne devas pensi pri tio, kion mi volas por mi kaj mia kariero. Ĝi estis nekredeble milda, ricevu ĝin aŭ eliru el via sidloko konversacio. Mi dankis lin pro la informoj pri kiel mia ŝanĝita sinteno dum ses monatoj influis aliajn nerimarkitajn de mi.

Ĝi estis ekzemplo de rimarkinda, efika administrado kaj la potenco de mola aliro. Mi konstatis, ke mi nur ŝajnis havi kompletan fidon al la kompanio kaj ĝia kapablo atingi ĝiajn celojn, sed fakte mi parolis kaj komunikis kun aliaj tute alimaniere. Mi ankaŭ rimarkis, ke eĉ se mi sentis skeptikan pri la projekto, pri kiu mi laboris, mi ne devus montri miajn sentojn al miaj kolegoj kaj disvastigi pesimismon kiel kontaĝon, reduktante niajn ŝancojn de sukceso. Anstataŭe, mi povus agreseme transdoni la realan situacion al mia administrado. Kaj se mi sentus, ke ili ne aŭskultas min, mi povus esprimi mian malkonsenton forlasante la kompanion.

Mi ricevis novan ŝancon kiam mi alprenis la postenon de ĉefo pri taksado de dungitaro. Kiel iama ĉefinĝeniero, mi tre zorgas esprimi miajn opiniojn pri nia (ĉiam pliboniĝanta) hereda kodo. Por aprobi ŝanĝon, vi devas imagi la nunan situacion, sed vi atingos nenien, se vi ruliĝas en ĝemado, atakado aŭ simile. Finfine, mi estas ĉi tie por plenumi taskon kaj ne devas plendi pri la kodo por kompreni ĝin, taksi ĝin aŭ ripari ĝin.

Fakte, ju pli mi regas mian emocian reagon al la kodo, des pli mi komprenas, kio ĝi povus fariĝi kaj des malpli da konfuzo mi sentas. Kiam mi modereme esprimis min ("devas esti loko por plia plibonigo ĉi tie"), mi feliĉigis min kaj aliajn kaj ne prenis la situacion tro serioze. Mi konstatis, ke mi povus stimuli kaj redukti negativecon en aliaj estante perfekte (ĝene?) racia (“vi pravas, ĉi tiu kodo estas sufiĉe malbona, sed ni plibonigos ĝin”). Mi ĝojas vidi kiom malproksimen mi povas iri sur la Zen-vojo.

Esence, mi konstante lernas kaj relernas gravan lecionon: la vivo estas tro mallonga por esti konstante kolera kaj doloro.

Kolero ĉe kodo: programistoj kaj negativeco

fonto: www.habr.com

Aldoni komenton