
Nakatingin ako sa isang piraso ng code. Marahil ito ang pinakamasamang code na nakita ko. Upang mag-update lamang ng isang talaan ng database, kinukuha nito ang lahat ng mga tala sa koleksyon at pagkatapos ay nagpapadala ng kahilingan sa pag-update para sa bawat tala sa database, kahit na ang mga hindi na kailangang i-update. Mayroong function ng mapa na ibinabalik lamang ang halagang ipinasa dito. Mayroong mga kondisyong pagsusuri para sa mga variable na may malinaw na magkaparehong mga halaga, pinangalanan lamang sa iba't ibang mga estilo (firstName и first_name). Para sa bawat UPDATE, ang code ay nagpapadala ng mensahe sa isa pang queue, na pinoproseso ng isa pang walang server na function, ngunit nagsasagawa ng 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 kapaligiran?
Paano magagawa ng sinuman ang ganoong bagay? Tinakpan ko ang mukha ko at humikbi ng malakas sa aking pagtawa. Tinatanong ng mga kasamahan ko kung ano ang nangyari, at malinaw kong ikinuwento ito. Pinakamasamang Hit Ng BulkDataImporter.js 2018Lahat ay tumango nang may simpatiya at sumasang-ayon: paano nila ito magagawa sa atin?
Negatibiti: Isang Emosyonal na Tool sa Kultura ng Programmer
Malaki ang ginagampanan ng negativity sa programming. Ito ay binuo sa ating kultura at ginamit upang ibahagi ang ating natutunan ("hindi ka maniniwala ka, ano ang code na iyon!"), upang ipahayag ang pakikiramay sa pamamagitan ng pagkabigo ("Oh aking diyos, BAKIT mo ginagawa iyon?"), upang ipakita ang iyong sarili sa isang paborableng liwanag ("Hinding-hindi ko kaya hindi ginawa ito"), upang ilipat ang sisihin sa ibang tao ("nabigo kami dahil sa kanyang code, na hindi mapanatili"), o, gaya ng karaniwan sa mga pinaka-"nakakalason" na organisasyon, upang kontrolin ang iba sa pamamagitan ng isang pakiramdam ng kahihiyan ("ano ang naisip mo? Ayusin ito").

Napakahalaga ng negatibiti sa mga programmer dahil ito ay isang napaka-epektibong paraan upang maihatid ang halaga. Minsan ay dumalo ako sa isang programming boot camp, at ang karaniwang kasanayan para sa pagkintal sa mga mag-aaral ng kultura ng industriya ay isang masaganang supply ng mga meme, kwento, at video, na ang pinakasikat ay pinagsamantalahan. Mahusay na makagamit ng mga emosyonal na tool upang lagyan ng label ang mga kasanayan: Mabuti, Masama, Pangit, Huwag Gawin Ito, Kailanman. Kailangang maging handa ang mga bagong dating sa katotohanang malamang na sila ay hindi maintindihan ng mga kasamahan na hindi mga propesyonal sa IT. Na ang kanilang mga kaibigan ay magsisimulang magbenta sa kanila ng milyong dolyar na mga ideya sa app. Na kailangan nilang mag-navigate sa walang katapusang mga labyrinth ng legacy code na may pulutong ng mga minotaur na nakatago sa sulok.
Noong una tayong nagsimulang mag-aral ng programming, ang ating perception sa lalim ng "programming experience" ay nakabatay sa pagmamasid sa mga emosyonal na reaksyon ng ibang tao. Ito ay malinaw na nakikita sa mga post sa , kung saan maraming newbie programmer ang tumatambay. Marami sa mga nakakatawang komento ay may bahid ng iba't ibang antas ng negatibiti: pagkabigo, pesimismo, pagkagalit, pagpapakumbaba, at iba pa. At kung hindi iyon sapat, basahin ang mga komento.

Napansin ko na habang nagkakaroon ng karanasan ang mga programmer, lalong nagiging negatibo ang kanilang negatibiti. Ang mga baguhan, na hindi alam ang mga paghihirap na naghihintay sa kanila, ay nagsisimula nang masigasig at madaling maniwala na ang mga paghihirap na ito ay dahil lamang sa kakulangan ng karanasan at kaalaman; at sa huli, haharapin nila ang realidad ng sitwasyon.
Sa paglipas ng panahon, nakakakuha sila ng karanasan at nagkakaroon ng kakayahang makilala ang magandang code sa masama. At kapag dumating ang sandaling ito, ang mga batang programmer ay nakakaranas ng pagkabigo mula 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 kanilang mas may karanasan na mga kasamahan. Madalas itong humahantong sa pagtaas ng negatibiti, dahil ang mga batang programmer ay maaari na ngayong magsalita nang maingat tungkol sa code at makilala ang mabuti at masama, kaya nagpapakita na sila ay "nasa alam." Lalo nitong pinasisigla ang negatibiti: ang pagkabigo ay nagpapadali sa pakikipag-ugnayan sa mga kasamahan at maging bahagi ng grupo; ang pagpuna sa masamang code ay nagtataas ng iyong katayuan at propesyonalismo sa mata ng iba. .
Ang pagpapalaki ng negatibiti ay hindi naman isang masamang bagay. Ang mga talakayan tungkol sa programming, bukod sa iba pang mga bagay, ay lubos na nakatuon sa kalidad ng nakasulat na code. Ang likas na katangian ng code ay ganap na tumutukoy sa function na nilalayon nitong tuparin (iiwan ang hardware, networking, atbp.), kaya mahalagang makapagpahayag ng opinyon ng isang tao sa code na iyon. Halos lahat ng mga talakayan ay bumagsak sa kung ang code ay sapat na mabuti, at sa pagkondena sa mismong mga pagpapakita ng masamang code sa mga expression na ang emosyonal na kulay ay nagpapakilala sa kalidad ng code:
- "Ang module na ito ay may maraming lohikal na hindi pagkakapare-pareho at isang magandang kandidato para sa makabuluhang pag-optimize ng pagganap."
- "Ang module na ito ay medyo masama, kailangan nating i-refactor ito."
- "Walang katuturan ang modyul na ito at kailangang isulat muli."
- "Ang pangit ng module na ito, kailangan itong i-patch."
- "Ito ay isang piraso ng ram, hindi isang module, hindi na kailangan pang isulat, kung ano ang iniisip ng may-akda nito."
Hindi sinasadya, ito mismo ang "emosyonal na pagpapalabas" na humahantong sa mga developer na tawagan 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, banayad, ngunit sa paglipas ng panahon, kapansin-pansing.
Ang madulas na slope ng negatibiti
Ilang taon na ang nakalilipas, ako ay isang impormal na pinuno ng koponan at nakikipagpanayam sa isang developer. Talagang nagustuhan namin siya: matalino siya, nagtanong ng magagandang tanong, marunong sa teknikal, at akmang-akma sa ating kultura. Lalo akong humanga sa kanyang pagiging positibo at kung gaano siya ka-enterprising. Kaya kinuha ko siya.
Sa puntong 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 humahantong sa malaking gastos sa muling paggawa, kung saan wala kaming maipakita dito maliban sa mahabang gabi, masikip na deadline, at diumano'y gumaganang mga produkto. At habang nagsusumikap pa ako, nag-aalinlangan ako tungkol sa pinakabagong deadline na itinakda ng management. Kaswal pa akong nagmura habang tinatalakay ang ilang aspeto ng code sa aking mga kasamahan.
Kaya hindi nakakagulat—bagama't nagulat ako—na pagkalipas ng ilang linggo, ang parehong bagong developer na iyon ay nagpahayag ng parehong negatibong damdamin gaya sa akin (kabilang ang pagmumura). Napagtanto ko na iba sana ang kilos niya sa ibang kumpanya na may ibang kultura. Nakibagay lang siya sa kulturang ginawa ko. Dinaig ako ng guilt. Dahil sa aking subjective na karanasan, naitanim ko ang pesimismo sa isang baguhan na sa tingin ko ay ganap na naiiba. Kahit na hindi talaga siya ganoon at sinusubukan lamang na magpakita sa paraang iyon upang ipakita na maaari siyang magkasya, ipinataw ko ang sarili kong masamang ugali sa kanya. At anumang sinabi, kahit na ito ay pabiro o palihim, ay may masamang paraan upang maging kung ano ang pinaniniwalaan ng mga tao.

Mga Daan ng Negatibiti
Bumalik tayo sa ating mga dating baguhang programmer, na nakakuha ng kaunting karunungan at karanasan: mas nakilala nila ang industriya ng programming at naunawaan na ang masamang code ay nasa lahat ng dako, hindi ito maiiwasan. Matatagpuan ito kahit na sa mga pinaka-advanced, mga kumpanyang nakatuon sa kalidad (at hayaan mong idagdag ko: tila hindi tayo pinoprotektahan ng modernity mula sa masamang code).
Isang magandang senaryo. 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. Niyakap nila si Zen, na nakatuon sa paglutas ng mga problema o hamon na kinakaharap nila. Natututo sila kung paano tumpak na sukatin at ipaalam ang kalidad ng software sa mga may-ari ng negosyo, gamitin ang kanilang mga taon ng karanasan upang magsulat ng mga pagtatantya na may mahusay na katwiran, at sa huli ay makakakuha ng masaganang pabuya para sa kanilang hindi kapani-paniwala at pangmatagalang halaga sa negosyo. Ginagawa nila ang kanilang mga trabaho nang napakahusay na nakatanggap sila ng $10 milyon na mga bonus at nagretiro upang gawin ang anumang gusto nila sa natitirang bahagi ng kanilang buhay (mangyaring huwag itong kunin sa halaga).

Ang isa pang senaryo ay ang landas ng kadiliman. Sa halip na tanggapin ang hindi magandang code bilang hindi maiiwasan, ang mga developer ay kusang-loob na ipahayag ang lahat ng masama sa mundo ng programming upang malabanan nila ito. Tumanggi silang pagbutihin ang umiiral na masamang code para sa iba't ibang magagandang dahilan: "Dapat mas alam ng mga tao at huwag 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 mga tao kung gaano kalala ang code na ito, ang buong kumpanya ay babagsak sa karagatan"; at iba pa.
Malamang na hindi maipatupad ang mga pagbabagong gusto nila dahil ang negosyo, sa kasamaang-palad, ay dapat magpatuloy sa pag-unlad at hindi kayang mag-aksaya ng oras sa pag-aalala tungkol sa kalidad ng code, ang mga taong iyon ay nagkakaroon ng reputasyon bilang mga nagrereklamo. Ipinagdiriwang sila para sa kanilang mataas na kakayahan, ngunit ibinaba sa mga margin ng kumpanya, kung saan hindi sila magiging istorbo ngunit mananatili pa rin ang mga kritikal na sistema. Nawalan ng access sa mga bagong pagkakataon sa pag-unlad, nawawala ang kanilang mga kasanayan at nabigong matugunan ang mga kinakailangan ng industriya. Ang kanilang negatibiti ay nagiging kapaitan, at sila ay nauwi sa paghaplos sa kanilang mga kaakuhan sa pamamagitan ng pakikipagtalo sa dalawampung taong gulang na mga mag-aaral tungkol sa landas na tinahak ng kanilang minamahal na lumang teknolohiya at kung bakit ito ay patuloy pa rin. Sa kalaunan, sila ay nagretiro at ginugugol ang 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 ) — ang mga ito ay kadalasang mga kumpanyang may mahusay na produkto-market fit at ang pangangailangan na lumago nang mabilis hangga't maaari; o mga kumpanyang may command-and-control hierarchy (Apple in Jobs's heyday), kung saan ginagawa ng lahat ang sinabi sa kanila. Gayunpaman, ang modernong pananaliksik sa negosyo (at sentido komun) ay nagmumungkahi na para sa pinakamataas na talino, na humahantong sa pagbabago ng kumpanya, at mataas na indibidwal na produktibidad, ang mababang stress ay mahalaga upang suportahan ang patuloy na malikhain at pamamaraang pag-iisip. At napakahirap gumawa ng malikhaing gawain, na umaasa 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 engineered pop culture
Ngayon, ang mga saloobin ng mga inhinyero ay nakakatanggap ng higit na atensyon kaysa dati. Ang panuntunang "attitude" ay lalong nagiging popular sa mga organisasyong pang-inhinyero."Parami nang parami ang mga biro at kwento sa Twitter tungkol sa mga taong umalis sa propesyon na ito dahil hindi nila (o hindi) natitiis ang poot at masamang hangarin sa mga tagalabas. Maging si Linus Torvalds sa paglipas ng mga taon ng kanyang poot at pagpuna sa iba pang mga developer ng Linux, ito ay humantong sa isang debate tungkol sa pagiging epektibo ng diskarteng ito.
Ipinagtatanggol pa rin ng ilan ang karapatan ni Linus na maging lubos na mapanuri—ang mga dapat na maraming alam tungkol sa mga kalamangan at kahinaan ng "nakakalason na negatibiti." Oo, mahalaga ang pagkamagalang (kahit na pundamental), ngunit kung ibubuod natin ang mga dahilan kung bakit marami sa atin ang nagpapahintulot sa negatibong pagpapahayag na maging "toxicity," parang paternalistiko o kabataan ang mga ito: "Deserve nila ito dahil mga tanga sila," "Kailangan niyang tiyakin na hindi na nila ito gagawin muli," "Kung hindi nila ginawa iyon, hindi niya kailangang sumigaw sa kanila," at iba pa. Isang halimbawa ng epekto ng emosyonal na reaksyon ng isang lider sa isang programming community ay ang Ruby acronym na MINASWAN—"Mabait si Matz kaya mabait kami."
Napansin ko na maraming masigasig na tagapagtaguyod ng "kill the fool" na diskarte ay madalas na labis na nag-aalala sa kalidad at kawastuhan ng kanilang code, na nagpapakilala sa kanilang trabaho. Sa kasamaang palad, madalas nilang nalilito ang katatagan sa katigasan. Ang kapintasan sa pamamaraang ito ay nagmumula sa isang simple, tao, ngunit hindi produktibo, pagnanais na makaramdam ng higit na mataas kaysa sa iba. Ang mga taong nagpapakasawa sa pagnanais na ito ay natigil sa landas ng kadiliman.

Ang mundo ng programming ay mabilis na lumalago at umaabot na sa mga hangganan ng lalagyan nito—ang hindi programming mundo (o ang programming world ba ay lalagyan para sa non-programming world? Magandang tanong).
Habang lumalawak ang ating industriya sa isang pabilis na bilis at nagiging mas naa-access ang programming, ang agwat sa pagitan ng "techies" at "normals" ay mabilis na lumiliit. Ang mundo ng programming ay lalong nakalantad sa mga 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 mga argumento tungkol sa mga isyung panlipunan o henerasyon, ang kahusayan sa pangalan ng kapitalismo ay magpapakita mismo sa kultura ng kumpanya at mga kasanayan sa pag-hire: ang pinakamahuhusay na kumpanya ay hindi kukuha ng sinuman na hindi maaaring makipag-ugnayan sa iba nang neutral, lalo na sa positibong paraan.
Ang natutunan ko tungkol sa negativity
Ang pagpapahintulot sa labis na negatibiti na kontrolin ang iyong pag-iisip at mga pakikipag-ugnayan, na nagiging toxicity, ay mapanganib para sa mga pangkat ng produkto at magastos para sa mga negosyo. Nakakita na ako ng hindi mabilang na mga proyekto (at narinig ang tungkol sa iba) na bumagsak at ganap na itinayong muli sa malaking gastos dahil ang isang pinagkakatiwalaang developer ay may sama ng loob sa isang teknolohiya, isa pang developer, o kahit isang file na pinili upang kumatawan sa kalidad ng buong codebase.
Ang negatibiti ay nakakasira din ng moralidad at nakakasira ng mga relasyon. Hindi ko malilimutan kung paano ako pinagalitan ng isang kasamahan sa paglalagay ng CSS sa maling file; nagalit ito sa akin at pinigilan ako sa pagkolekta ng aking mga iniisip sa loob ng maraming araw. At sa hinaharap, malamang na hindi ko payagan ang ganoong tao kahit saan malapit sa isa sa aking mga team (ngunit who knows, nagbabago ang mga tao).
Sa wakas, ang negatibo .

Sa tingin ko, ganito dapat ang hitsura ng master class sa mga ngiti.
Siyempre, hindi ito argumento para sa pagpapakita ng kaligayahan, pagpasok ng sampung bilyong emojis sa bawat kahilingan sa paghila, o pagdalo sa isang smile workshop (well, kung iyon ang gusto mo, ayos lang). Ang negatibiti ay isang mahalagang bahagi ng programming (at buhay ng tao), pagbibigay ng senyas ng kalidad, na nagpapahintulot sa amin na ipahayag ang mga damdamin at pakikiramay sa aming mga kapwa tao. Ang negatibiti ay nagpapakita ng insight at prudence, ang lalim ng isang problema. Madalas kong napapansin na ang isang developer ay umabot na sa isang bagong antas kapag nagsimula silang magpahayag ng hindi paniniwala sa mga bagay na dati silang mahiyain at hindi sigurado. Ang mga tao ay nagpapakita ng pagkamaingat at pagtitiwala sa pamamagitan ng kanilang mga opinyon. Ang pagpapahayag ng negatibiti ay imposible; iyon ay magiging Orwellian.
Gayunpaman, ang negatibiti ay kailangang sukatin at balansehin sa iba pang mahahalagang katangian ng tao: empatiya, pasensya, pag-unawa, at pagpapatawa. Maaari mong palaging sabihin sa isang tao na niloko nila nang hindi sumisigaw o nagmumura. Huwag maliitin ang diskarteng ito: ang masabihan nang walang anumang emosyon na seryoso mong niloko ay talagang nakakatakot.
That time, a few years ago, kinausap ako ng CEO. Napag-usapan namin ang kasalukuyang estado ng proyekto, pagkatapos ay tinanong niya kung ano ang nararamdaman ko. Sinabi ko sa kanya na ang lahat ay maayos, ang proyekto ay umuusad, kami ay gumagawa ng matatag na pag-unlad, at marahil ay may napalampas ako at kailangan ko itong bisitahin muli. Sinabi niya na narinig niya akong nagbahagi ng higit pang mga pessimistic na saloobin sa mga kasamahan sa opisina, at napansin din ng iba. Ipinaliwanag niya na kung mayroon akong anumang mga alalahanin, maaari kong ganap na ipahayag ang mga ito sa pamamahala, ngunit hindi "i-channel down ang mga ito." Bilang isang senior engineer, kailangan kong alalahanin kung paano nakakaapekto ang aking mga salita sa iba, dahil marami akong impluwensya, kahit na hindi ko ito napagtanto. Sinabi niya ang lahat ng ito nang napakabait, at nagtapos sa pagsasabing kung tunay kong naramdaman 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, "pagsamahin ang iyong sarili o lumabas" na uri ng pag-uusap. Nagpasalamat ako sa kanya para sa impormasyon tungkol sa kung paano ang aking saloobin, na nagbago sa loob ng anim na buwan, ay nakakaimpluwensya sa iba nang hindi ko namamalayan.
Ito ay isang halimbawa ng kapansin-pansin, epektibong pamamahala at ang kapangyarihan ng isang banayad na diskarte. Napagtanto ko na bagama't tila naniniwala lang ako sa kumpanya at sa kakayahan nitong makamit ang mga layunin nito, ang paraan ng aktwal kong pakikipag-usap at pakikipag-usap sa iba ay medyo iba. Napagtanto ko rin na kahit na nakaramdam ako ng pag-aalinlangan sa proyektong ginagawa ko, hindi ko dapat hayaang ipakita sa aking mga kasamahan ang aking pesimismo at ipalaganap ito na parang isang nakakahawa, na binabawasan ang aming mga pagkakataong magtagumpay. Sa halip, maaari kong agresibong ipaalam ang katotohanan ng sitwasyon sa aking pamamahala. At kung naramdaman kong hindi sila nakikinig sa akin, naipahayag ko sana ang aking hindi pagsang-ayon sa pamamagitan ng pag-alis sa kumpanya.
Nakakuha ako ng bagong pagkakataon nang ako ay pumalit bilang Pinuno ng Pagsusuri ng Pagganap. Bilang isang dating senior engineer, napakaingat ko sa kung paano ko ipahayag ang aking mga opinyon sa aming (patuloy na umuunlad) na legacy code. Ang pag-apruba ng pagbabago ay nangangailangan ng pag-unawa sa kasalukuyang sitwasyon, ngunit wala kang mararating kung mapupunta ka sa pag-ungol, pag-atake, o anumang bagay na katulad nito. Sa huli, narito ako para tapusin ang trabaho, at hindi ako dapat magreklamo tungkol sa code para maunawaan ito, masuri ito, o ayusin ito.
Sa katunayan, kapag mas pinapadali ko ang aking mga emosyonal na reaksyon sa code, mas naiintindihan ko kung ano ang maaaring mangyari at hindi gaanong nalilito ang nararamdaman ko. Nang ipahayag ko ang aking sarili nang may pagpipigil ("dapat may puwang para sa pagpapabuti dito"), pinasaya ko ang aking sarili at ang iba at hindi ko masyadong inisip ang sitwasyon. Napagtanto ko na maaari kong pasiglahin at bawasan ang negatibiti sa iba sa pamamagitan ng pagiging ganap (nakakairita?) makatwiran ("tama ka, ang code na ito ay medyo masama, ngunit pagbutihin namin ito"). Masaya ako sa kung gaano kalayo ang narating ko sa landas ng Zen.
Sa esensya, patuloy akong natututo at natututo muli ng isang mahalagang aral: napakaikli ng buhay para patuloy na magalit at magdusa.

Pinagmulan: www.habr.com
