Galit sa code: programmer at negatibiti

Galit sa code: programmer at negatibiti

Nakatingin ako sa isang piraso ng code. Maaaring ito na ang pinakamasamang code na nakita ko. Upang i-update ang isang tala lamang sa database, kinukuha nito ang lahat ng mga tala sa koleksyon at pagkatapos ay nagpapadala ng kahilingan sa pag-update sa bawat tala sa database, kahit na ang mga hindi kailangang i-update. Mayroong function ng mapa na ibinabalik lamang ang halagang ipinasa dito. Mayroong mga kondisyong pagsubok para sa mga variable na may tila parehong halaga, pinangalanan lamang sa iba't ibang mga estilo (firstName и first_name). Para sa bawat UPDATE, ang code ay nagpapadala ng mensahe sa ibang queue, na pinangangasiwaan ng ibang serverless function, ngunit ginagawa ang lahat ng gawain para sa ibang koleksyon sa parehong database. Nabanggit ko ba na ang walang server na function na ito ay mula sa cloud-based na “service-oriented architecture” na naglalaman ng mahigit 100 function sa environment?

Paano naging posible na gawin ito? Tinakpan ko ang mukha ko at kitang-kita ko ang hikbi ko sa aking pagtawa. Tinatanong ng mga kasamahan ko kung ano ang nangyari, at ikinuwento ko ito sa mga kulay Pinakamasamang Hit Ng BulkDataImporter.js 2018. Lahat ay tumango nang may simpatiya sa akin at sumang-ayon: paano nila magagawa ito sa amin?

Negatibiti: isang emosyonal na tool sa kultura ng programmer

Ang negatibiti ay may mahalagang papel sa programming. Ito ay nakapaloob sa ating kultura at ginagamit upang ibahagi ang ating natutunan (“hindi mo maniniwala ka, ano ang kodigo na iyon!”), upang ipahayag ang pakikiramay sa pamamagitan ng pagkabigo (“Diyos, BAKIT gagawin iyon?”), upang ipakita ang sarili (“Hinding-hindi ko kaya hindi”), para sisihin ang ibang tao (“nabigo kami dahil sa kanyang code, na imposibleng mapanatili”), o, gaya ng nakaugalian sa mga pinaka “nakakalason” na organisasyon, na pamahalaan ang iba sa pamamagitan ng pakiramdam ng kahihiyan ("Ano ba ang iniisip mo?" ? tama").

Galit sa code: programmer at negatibiti

Napakahalaga ng negatibiti sa mga programmer dahil ito ay isang napaka-epektibong paraan upang maihatid ang halaga. Minsan ay dumalo ako sa isang programming camp, at ang karaniwang kasanayan ng pagkintal ng kultura ng industriya sa mga mag-aaral ay ang bukas-palad na pagbibigay ng mga meme, kwento, at video, na ang pinakasikat ay pinagsamantalahan. pagkabigo ng mga programmer kapag nahaharap sa hindi pagkakaunawaan ng mga tao. Mabuting makagamit ng mga emosyonal na kasangkapan upang matukoy ang Mabuti, ang Masama, ang Pangit, Huwag Gawin Iyan, Hindi kailanman. Ito ay kinakailangan upang ihanda ang mga bagong dating para sa katotohanan na sila ay malamang na hindi maintindihan ng mga kasamahan na malayo sa IT. Na ang kanilang mga kaibigan ay magsisimulang magbenta sa kanila ng milyong dolyar na mga ideya sa app. Na kailangan nilang gumala sa walang katapusang mga labirint ng lumang code na may isang grupo ng mga minotaur sa paligid.

Noong una tayong natutong magprograma, ang ating pag-unawa sa lalim ng “karanasan sa pagprograma” ay batay sa pagmamasid sa mga emosyonal na reaksyon ng ibang tao. Ito ay malinaw na makikita mula sa mga post sa sabe ProgrammerHumor, kung saan maraming newbie programmer ang tumatambay. Maraming mga nakakatawa, sa isang antas o iba pa, ay may kulay na may iba't ibang mga kakulay ng negatibiti: pagkabigo, pesimismo, galit, pagpapakumbaba at iba pa. At kung ito ay tila hindi sapat sa iyo, basahin ang mga komento.

Galit sa code: programmer at negatibiti

Napansin ko na habang nagkakaroon ng karanasan ang mga programmer, lalo silang nagiging negatibo. Ang mga nagsisimula, na hindi nalalaman ang mga paghihirap na naghihintay sa kanila, ay nagsisimula nang may sigasig at isang pagpayag na maniwala na ang sanhi ng mga paghihirap na ito ay isang kakulangan lamang ng karanasan at kaalaman; at kalaunan ay haharapin nila ang katotohanan ng mga bagay.

Lumipas ang oras, nakakakuha sila ng karanasan at nagagawa nilang makilala ang Good code mula sa Bad. At kapag dumating ang sandaling iyon, nararamdaman ng mga batang programmer ang pagkabigo sa pagtatrabaho na may malinaw na masamang code. At kung nagtatrabaho sila sa isang koponan (malayuan o nang personal), madalas nilang pinagtibay ang emosyonal na mga gawi ng mas may karanasan na mga kasamahan. Ito ay madalas na humahantong sa pagtaas ng negatibiti, dahil ang mga kabataan ay maaari na ngayong makipag-usap nang may pag-iisip tungkol sa code at hatiin ito sa masama at mabuti, sa gayon ay nagpapakita na sila ay "nasa alam." Lalo nitong pinatitibay ang negatibo: dahil sa pagkabigo, madaling makisama sa mga kasamahan at maging bahagi ng isang grupo; ang pagpuna sa Bad Code ay nagpapataas ng iyong katayuan at propesyonalismo sa paningin ng iba: Ang mga taong nagpapahayag ng mga negatibong opinyon ay madalas na itinuturing na mas matalino at may kakayahan.

Ang pagtaas ng negatibiti ay hindi naman isang masamang bagay. Ang mga talakayan ng programming, bukod sa iba pang mga bagay, ay lubos na nakatuon sa kalidad ng nakasulat na code. Ang ganap na kahulugan ng code ay ang function na nilalayon nitong gawin (maliban sa hardware, networking, atbp.), kaya mahalagang maipahayag ang iyong opinyon tungkol sa code na iyon. Halos lahat ng mga talakayan ay bumababa sa kung ang code ay sapat na mabuti, at sa pagkondena sa mismong mga pagpapakita ng masamang code sa mga tuntunin na ang emosyonal na kahulugan ay nagpapakilala sa kalidad ng code:

  • "Maraming hindi pagkakapare-pareho ng lohika sa modyul na ito, ito ay isang magandang kandidato para sa makabuluhang pag-optimize ng pagganap."
  • "Ang module na ito ay medyo masama, kailangan nating i-refactor ito."
  • "Walang saysay ang modyul na ito, kailangan itong muling isulat."
  • "Nakakainis ang module na ito, kailangan itong i-patch."
  • "Ito ay isang piraso ng ram, hindi isang module, hindi ito kailangang isulat sa lahat, kung ano ang iniisip ng may-akda nito."

Siyanga pala, ang "emosyonal na pagpapalabas" na ito ang dahilan kung bakit tinawag ng mga developer ang code na "sexy", na bihirang patas - maliban kung nagtatrabaho ka sa PornHub.

Ang problema ay ang mga tao ay kakaiba, hindi mapakali, emosyonal na mga nilalang, at ang pang-unawa at pagpapahayag ng anumang emosyon ay nagbabago sa atin: sa una ay banayad, ngunit sa paglipas ng panahon, kapansin-pansing.

Isang gusot na madulas na dalisdis ng negatibiti

Ilang taon na ang nakalipas, ako ay isang impormal na pinuno ng koponan at nakapanayam ng isang developer. Talagang nagustuhan namin siya: siya ay matalino, nagtanong ng magagandang tanong, ay tech-savvy, at nababagay sa ating kultura. Lalo akong humanga sa kanyang pagiging positibo at kung gaano siya ka-enterprising. At tinanggap ko siya.

Sa oras na iyon, nagtatrabaho ako sa kumpanya sa loob ng ilang taon at naramdaman kong hindi masyadong epektibo ang aming kultura. Sinubukan naming ilunsad ang produkto nang dalawang beses, tatlong beses at ilang beses pa bago ako dumating, na humantong sa malaking gastos sa muling paggawa, kung saan wala kaming maipakita maliban sa mahabang gabi, masikip na mga deadline at mga produkto na gumana. At bagama't nagsusumikap pa rin ako, nag-aalinlangan ako sa huling deadline na itinalaga sa amin ng management. At bigla siyang nanumpa nang tinatalakay ang ilang aspeto ng code sa aking mga kasamahan.

Kaya't hindi nakakagulat—bagama't nagulat ako—na pagkalipas ng ilang linggo, sinabi ng parehong bagong developer na iyon ang parehong mga negatibong bagay na ginawa ko (kabilang ang pagmumura). Napagtanto ko na iba ang ugali niya sa ibang kumpanya na may ibang kultura. Nakibagay lang siya sa kulturang ginawa ko. Nakaramdam ako ng guilt. Dahil sa aking subjective na karanasan, nagtanim ako ng pesimismo sa isang bagong dating na sa tingin ko ay ganap na naiiba. Kahit na hindi naman talaga siya ganoon at nagmumukha lang para ipakita na kasya siya, pinilit ko ang kakulitan ko sa kanya. At lahat ng sinabi, kahit pabiro o palipasan, ay may masamang paraan ng pagbabalik sa pinaniniwalaan.

Galit sa code: programmer at negatibiti

Mga negatibong paraan

Bumalik tayo sa ating mga dating baguhan na programmer, na nakakuha ng kaunting karunungan at karanasan: mas naging pamilyar sila sa industriya ng programming at nauunawaan na ang masamang code ay nasa lahat ng dako, hindi ito maiiwasan. Ito ay nangyayari kahit na sa mga pinaka-advanced na kumpanya na nakatuon sa kalidad (at hayaan mo akong tandaan: tila, ang modernity ay hindi nagpoprotekta laban sa masamang code).

Magandang script. Sa paglipas ng panahon, nagsisimulang tanggapin ng mga developer na ang masamang code ay isang katotohanan ng software at ang kanilang trabaho ay pahusayin ito. At na kung hindi maiiwasan ang masamang code, walang saysay na gumawa ng kaguluhan tungkol dito. Tinatahak nila ang landas ni Zen, na nakatuon sa paglutas ng mga problema o mga gawaing kinakaharap nila. Natututo sila kung paano tumpak na sukatin at ipaalam ang kalidad ng software sa mga may-ari ng negosyo, magsulat ng mga pagtatantya na may matatag na batayan batay sa kanilang mga taon ng karanasan, at sa huli ay makakatanggap ng mga masaganang gantimpala para sa kanilang hindi kapani-paniwala at patuloy na halaga sa negosyo. Ginagawa nila ang kanilang trabaho nang mahusay na nababayaran sila ng $10 milyon bilang mga bonus at nagretiro upang gawin ang gusto nila sa natitirang bahagi ng kanilang buhay (mangyaring huwag itong balewalain).

Galit sa code: programmer at negatibiti

Ang isa pang senaryo ay ang landas ng kadiliman. Sa halip na tanggapin ang masamang code bilang isang hindi maiiwasan, ang mga developer ay kusang-loob na tawagin ang lahat ng masama sa mundo ng programming upang madaig nila ito. Tumanggi silang pagbutihin ang umiiral na masamang code para sa maraming magagandang dahilan: "dapat malaman ng mga tao ang higit pa at hindi maging hangal"; "ito ay hindi kasiya-siya"; "ito ay masama para sa negosyo"; "ito ay nagpapatunay kung gaano ako katalino"; "Kung hindi ko sasabihin sa iyo kung anong masamang code ito, mahuhulog ang buong kumpanya sa karagatan," at iba pa.

Tiyak na hindi maipatupad ang mga pagbabagong gusto nila dahil ang negosyo sa kasamaang-palad ay dapat na patuloy na umunlad at hindi maaaring gumugol ng oras sa pag-aalala tungkol sa kalidad ng code, ang mga taong ito ay nakakuha ng reputasyon bilang mga nagrereklamo. Ang mga ito ay pinananatili para sa kanilang mataas na kakayahan, ngunit itinulak sa mga margin ng kumpanya, kung saan hindi sila makakainis sa maraming tao, ngunit susuportahan pa rin ang pagpapatakbo ng mga kritikal na sistema. Kung walang access sa mga bagong pagkakataon sa pag-unlad, nawawalan sila ng mga kasanayan at huminto upang matugunan ang mga pangangailangan ng industriya. Ang kanilang negatibiti ay nagiging mapait na kapaitan, at bilang isang resulta ay pinapakain nila ang kanilang mga ego sa pamamagitan ng pakikipagtalo sa dalawampung taong gulang na mga mag-aaral tungkol sa paglalakbay na kanilang paboritong lumang teknolohiya at kung bakit ito ay mainit pa rin. Nagtatapos sila sa pagretiro at nabubuhay sa kanilang katandaan sa pagmumura sa mga ibon.

Ang katotohanan ay malamang na namamalagi sa isang lugar sa pagitan ng dalawang sukdulang ito.

Ang ilang mga kumpanya ay naging lubhang matagumpay sa paglikha ng lubhang negatibo, insular, malakas ang loob na kultura (tulad ng Microsoft bago nito nawalang dekada) - kadalasan ito ay mga kumpanyang may mga produkto na perpektong akma sa merkado at ang pangangailangang lumago nang mabilis hangga't maaari; o mga kumpanyang may hierarchy ng command at control (Apple sa pinakamagagandang taon ng Jobs), kung saan ginagawa ng lahat ang sinabi sa kanila. Gayunpaman, ang modernong pananaliksik sa negosyo (at sentido komun) ay nagmumungkahi na ang pinakamataas na talino sa paglikha, na humahantong sa pagiging makabago sa mga kumpanya, at mataas na produktibo sa mga indibidwal, ay nangangailangan ng mababang antas ng stress upang suportahan ang patuloy na malikhain at pamamaraang pag-iisip. At napakahirap gumawa ng malikhain, gawaing nakabatay sa talakayan kung palagi kang nag-aalala tungkol sa kung ano ang sasabihin ng iyong mga kasamahan tungkol sa bawat linya ng iyong code.

Ang negatibiti ay engineering pop culture

Ngayon, higit na binibigyang pansin ang saloobin ng mga inhinyero kaysa dati. Sa mga organisasyong pang-inhinyero, ang panuntunan "Walang sungay". Parami nang parami ang mga anekdota at kwento na lumalabas sa Twitter tungkol sa mga taong umalis sa propesyon na ito dahil hindi nila (hindi) maaaring magpatuloy sa pagkapoot at masamang kalooban sa mga tagalabas. Kahit si Linus Torvalds kamakailan ay humingi ng tawad taon ng poot at pagpuna sa iba pang mga developer ng Linux - ito ay humantong sa debate tungkol sa pagiging epektibo ng diskarteng ito.

Ipinagtatanggol pa rin ng ilan ang karapatan ni Linus na maging lubhang kritikal - ang mga dapat na maraming alam tungkol sa mga pakinabang at disadvantage ng "nakakalason na negativity". Oo, ang pagkamagalang ay napakahalaga (kahit na pundamental), ngunit kung susumahin natin ang mga dahilan kung bakit marami sa atin ang nagpapahintulot sa pagpapahayag ng mga negatibong opinyon na maging "toxicity", ang mga kadahilanang ito ay tila paternalistic o nagdadalaga: "karapat-dapat sila dahil sila ay mga tanga. ", "dapat makasigurado siya na hindi na nila uulitin," "kung hindi nila ginawa iyon, hindi na niya kailangang sigawan sila," at iba pa. Ang isang halimbawa ng epekto ng emosyonal na mga reaksyon ng isang lider sa isang programming community ay ang acronym ng komunidad ng Ruby na MINASWAN - "Mabait si Matz kaya mabait kami."

Napansin ko na maraming masigasig na tagapagtaguyod ng "kill a fool" na diskarte ang kadalasang nagmamalasakit sa kalidad at kawastuhan ng code, na nagpapakilala sa kanilang sarili sa kanilang trabaho. Sa kasamaang palad, madalas nilang nalilito ang katigasan sa katigasan. Ang kawalan ng posisyong ito ay nagmumula sa simpleng tao, ngunit hindi produktibong pagnanais na makaramdam ng higit sa iba. Ang mga taong nalulubog sa pagnanasang ito ay naipit sa landas ng kadiliman.

Galit sa code: programmer at negatibiti

Ang mundo ng programming ay mabilis na lumalaki at nagtutulak laban sa mga hangganan ng lalagyan nito - ang mundo ng hindi programming (o ang mundo ng programming ay isang lalagyan para sa mundo ng hindi programming? Magandang tanong).

Habang lumalawak ang ating industriya sa patuloy na pagtaas ng bilis at nagiging mas naa-access ang programming, ang distansya sa pagitan ng "techies" at "normals" ay mabilis na nagsasara. Ang mundo ng programming ay lalong nakalantad sa interpersonal na pakikipag-ugnayan ng mga taong lumaki sa nakahiwalay na nerd na kultura ng maagang tech boom, at sila ang humuhubog sa bagong mundo ng programming. At anuman ang anumang panlipunan o generational na mga argumento, ang kahusayan sa pangalan ng kapitalismo ay lalabas sa kultura ng kumpanya at mga kasanayan sa pag-hire: ang pinakamahuhusay na kumpanya ay hindi kukuha ng sinuman na hindi maaaring makipag-ugnayan nang neutral sa iba, lalo pa ang magkaroon ng magandang relasyon.

Ang natutunan ko tungkol sa negativity

Kung pinapayagan mo ang masyadong maraming negatibiti na kontrolin ang iyong isip at mga pakikipag-ugnayan sa mga tao, na nagiging toxicity, kung gayon ito ay mapanganib para sa mga pangkat ng produkto at mahal para sa negosyo. Nakakita na ako (at nakarinig ng) hindi mabilang na mga proyektong nasira at ganap na itinayong muli sa malaking gastos dahil ang isang pinagkakatiwalaang developer ay may sama ng loob laban sa teknolohiya, isa pang developer, o kahit isang file na pinili para kumatawan sa kalidad ng buong codebase .

Ang negatibiti ay nakakasira din ng moralidad at sumisira sa mga relasyon. Hindi ko malilimutan kung paano ako pinagalitan ng isang kasamahan sa paglalagay ng CSS sa maling file, nagalit ito sa akin at hindi ako pinahintulutan na kolektahin ang aking mga iniisip sa loob ng ilang araw. At sa hinaharap, hindi ko malamang na payagan ang gayong tao na maging malapit sa isa sa aking mga koponan (ngunit who knows, nagbabago ang mga tao).

Sa wakas, ang negatibo literal na nakakapinsala sa iyong kalusugan.

Galit sa code: programmer at negatibiti
Sa tingin ko, ganito dapat ang hitsura ng master class sa mga ngiti.

Siyempre, hindi ito isang argumento na pabor sa pagpapakita ng kaligayahan, pagpasok ng sampung bilyong emoticon sa bawat kahilingan sa paghila, o pagpunta sa isang master class sa mga ngiti (hindi, mabuti, kung iyon ang gusto mo, kung gayon walang tanong). Ang negatibiti ay isang napakahalagang bahagi ng programming (at buhay ng tao), ang kalidad ng pagbibigay ng senyas, na nagpapahintulot sa isa na magpahayag ng mga damdamin at maawa sa kapwa tao. Ang negatibiti ay nagpapahiwatig ng pananaw at pagkamaingat, ang lalim ng problema. Madalas kong napapansin na ang isang developer ay umabot sa isang bagong antas kapag nagsimula siyang magpahayag ng hindi paniniwala sa kung ano ang dati niyang mahiyain at hindi sigurado. Ang mga tao ay nagpapakita ng pagiging makatwiran at kumpiyansa sa kanilang mga opinyon. Hindi mo maaaring bale-walain ang pagpapahayag ng negatibiti, iyon ay magiging Orwellian.

Gayunpaman, ang negatibiti ay kailangang dosed at balanse sa iba pang mahahalagang katangian ng tao: empatiya, pasensya, pag-unawa at pagpapatawa. Maaari mong palaging sabihin sa isang tao na siya ay nagsinungaling nang hindi sumisigaw o nagmumura. Huwag maliitin ang diskarteng ito: kung ang isang tao ay nagsabi sa iyo nang walang anumang emosyon na seryoso kang nagulo, ito ay talagang nakakatakot.

That time, few years ago, kinausap ako ng CEO. Napag-usapan namin ang kasalukuyang kalagayan ng proyekto, pagkatapos ay tinanong niya kung ano ang pakiramdam ko. Sumagot ako na ang lahat ay maayos, ang proyekto ay gumagalaw, kami ay nagtatrabaho nang dahan-dahan, marahil ay may napalampas ako at kailangan na muling isaalang-alang. Sinabi niya na narinig niya akong nagbahagi ng higit pang mga pessimistic na saloobin sa mga kasamahan sa opisina, at napansin din ito ng iba. Ipinaliwanag niya na kung mayroon akong mga pagdududa, maaari kong ganap na ipahayag ang mga ito sa pamamahala, ngunit hindi "ibagsak sila." Bilang isang lead engineer, kailangan kong isipin kung paano nakakaapekto ang aking mga salita sa iba dahil marami akong impluwensya kahit na hindi ko ito napagtanto. At sinabi niya sa akin ang lahat ng ito nang napakabait, at sa wakas ay sinabi na kung talagang naramdaman ko iyon, malamang na kailangan kong isipin kung ano ang gusto ko para sa aking sarili at sa aking karera. Ito ay isang hindi kapani-paniwalang banayad, get-it-or-get-out-of-your-seat na pag-uusap. Nagpasalamat ako sa kanya para sa impormasyon tungkol sa kung paano ang aking nagbagong saloobin sa loob ng anim na buwan ay nakakaapekto sa iba na hindi ko napapansin.

Ito ay isang halimbawa ng kapansin-pansin, epektibong pamamahala at ang kapangyarihan ng isang malambot na diskarte. Napagtanto ko na tila ako ay may ganap na pananalig sa kumpanya at sa kakayahan nitong makamit ang mga layunin nito, ngunit sa katotohanan ay nagsalita ako at nakipag-usap sa iba sa ibang paraan. Napagtanto ko rin na kahit na nakaramdam ako ng pag-aalinlangan tungkol sa proyektong ginagawa ko, hindi ko dapat ipakita ang aking damdamin sa aking mga kasamahan at ipagkalat ang pesimismo na parang isang nakakahawa, na binabawasan ang aming mga pagkakataong magtagumpay. Sa halip, agresibo kong maiparating ang totoong sitwasyon sa aking pamamahala. At kung naramdaman kong hindi nila ako pinakikinggan, maaari kong ipahayag ang aking hindi pagkakasundo sa pamamagitan ng pag-alis sa kumpanya.

Nakatanggap ako ng isang bagong pagkakataon nang ako ay kumuha ng posisyon ng pinuno ng pagtatasa ng tauhan. Bilang isang dating punong inhinyero, napakaingat ko sa pagpapahayag ng aking mga opinyon sa aming (patuloy na pagpapabuti) na legacy code. Upang aprubahan ang isang pagbabago, kailangan mong isipin ang kasalukuyang sitwasyon, ngunit wala kang makukuha kung maglulubog ka sa daing, pag-atake, o mga katulad nito. Sa huli, narito ako upang kumpletuhin ang isang gawain at hindi dapat magreklamo tungkol sa code upang maunawaan ito, suriin ito, o ayusin ito.

Sa katunayan, mas nakokontrol ko ang aking emosyonal na reaksyon sa code, mas naiintindihan ko kung ano ang maaaring maging ito at mas mababa ang pagkalito na nararamdaman ko. Nang ipahayag ko ang aking sarili nang may pagpipigil (“may lugar para sa karagdagang pagpapabuti dito”), pinasaya ko ang aking sarili at ang iba at hindi masyadong sineseryoso ang sitwasyon. Napagtanto ko na maaari kong pasiglahin at bawasan ang negatibiti sa iba sa pamamagitan ng pagiging ganap (nakakainis?) makatwiran ("tama ka, ang code na ito ay medyo masama, ngunit pagbutihin namin ito"). Natutuwa akong makita kung hanggang saan ako makakarating sa landas ng Zen.

Sa esensya, patuloy akong natututo at natututo muli ng isang mahalagang aral: napakaikli ng buhay para patuloy na magalit at masaktan.

Galit sa code: programmer at negatibiti

Pinagmulan: www.habr.com

Magdagdag ng komento