Кодқа ашулану: бағдарламашылар және негатив

Кодқа ашулану: бағдарламашылар және негатив

Мен кодтың бір бөлігін қарап жатырмын. Бұл мен көрген ең нашар код болуы мүмкін. Дерекқордағы бір ғана жазбаны жаңарту үшін ол жинақтағы барлық жазбаларды шығарып алады, содан кейін дерекқордағы әрбір жазбаға, тіпті жаңартуды қажет етпейтіндерге жаңарту сұрауын жібереді. Оған берілген мәнді қайтаратын карта функциясы бар. Шамасы бірдей мәнге ие айнымалылар үшін шартты сынақтар бар, жай ғана әртүрлі стильде аталған (firstName и first_name). Әрбір ЖАҢАРТУ үшін код басқа серверсіз функциямен өңделетін, бірақ бір дерекқордағы басқа жинақ үшін барлық жұмысты жасайтын басқа кезекке хабарлама жібереді. Бұл серверсіз функция қоршаған ортада 100-ден астам функцияны қамтитын бұлтқа негізделген «қызметке бағытталған архитектурадан» екенін айттым ба?

Мұны істеу қалай мүмкін болды? Мен бетімді жауып, күлкімнен жылап жіберемін. Әріптестерім не болғанын сұрайды, мен оны түрлі-түсті етіп айтып беремін BulkDataImporter.js 2018 жылғы ең нашар хиттері. Барлығы маған түсіністікпен бас изеді де, келіседі: олар бізге мұны қалай жасады?

Теріс: бағдарламашы мәдениетіндегі эмоционалды құрал

Бағдарламалауда негатив маңызды рөл атқарады. Ол біздің мәдениетімізге енген және біз білген нәрселермен бөлісу үшін пайдаланылады («сіз емес сенесің, бұл код қандай болды!»), көңілсіздік арқылы жанашырлық білдіру («Құдай, НЕГЕ мұны істейсің?»), өзін көрсету («Мен ешқашан жасамас едім. солай мұны істемеді»), кінәні басқа біреуге жүктеу («біз оның кодының арқасында сәтсіздікке ұшырадық, оны сақтау мүмкін емес») немесе, ең «улы» ұйымдардағы әдеттегідей, басқаларды бақылау арқылы басқару. ұят сезімі («Сіз не туралы ойладыңыз?» ? дұрыс»).

Кодқа ашулану: бағдарламашылар және негатив

Негативтілік бағдарламашылар үшін өте маңызды, өйткені бұл құндылықты жеткізудің өте тиімді тәсілі. Мен бір кездері бағдарламалау лагеріне қатыстым және студенттерге өнеркәсіп мәдениетін тәрбиелеудің стандартты тәжірибесі мемдерді, әңгімелер мен бейнелерді жомарт түрде жеткізу болды, олардың ең танымалы пайдаланылған. адамдардың түсініспеушілігімен бетпе-бет келгенде программисттердің көңілі қалуы. Жақсыны, Жаманды, Ұсқынды, Олай етпе, Ешқашан дегенді анықтау үшін эмоционалды құралдарды пайдалана білу жақсы. Жаңадан келгендерді IT-тен алыс әріптестер түсінбей қалуы мүмкін деп дайындау керек. Олардың достары оларға миллион долларлық қолданба идеяларын сата бастайды. Олар ескірген кодтың шексіз лабиринттерін бұрышта бірнеше минотаврлар арқылы аралап шығуға мәжбүр болады.

Бағдарламалауды алғаш үйренген кезде «бағдарламалау тәжірибесінің» тереңдігі туралы түсінігіміз басқа адамдардың эмоционалдық реакцияларын байқауға негізделген. Оны посттардан анық байқауға болады sabe ProgrammerHumor, мұнда көптеген жаңадан келген бағдарламашылар араласады. Көптеген әзілдер бір дәрежеде әртүрлі теріс реңктермен боялған: көңілсіздік, пессимизм, ашулану, ренжіту және т.б. Егер бұл сізге жеткіліксіз болып көрінсе, пікірлерді оқыңыз.

Кодқа ашулану: бағдарламашылар және негатив

Байқағаным, бағдарламашылар тәжірибе жинақтаған сайын теріске айналады. Жаңадан бастағандар өздерін күтіп тұрған қиындықтарды білмей, ынта-жігермен және бұл қиындықтардың себебі тәжірибе мен білімнің жетіспеушілігінен деп сенуге дайын болудан бастайды; және ақырында олар заттардың шындығымен бетпе-бет келеді.

Уақыт өтеді, олар тәжірибе жинақтайды және жақсы кодты жаманнан ажырата алады. Ал сол сәт келгенде, жас бағдарламашылар анық нашар кодпен жұмыс істеудің сәтсіздігін сезінеді. Ал егер олар командада (қашықтан немесе жеке) жұмыс істесе, олар көбінесе тәжірибелі әріптестердің эмоционалдық әдеттерін қабылдайды. Бұл көбінесе негативтіліктің ұлғаюына әкеледі, өйткені жастар енді код туралы ойланып айтып, оны жаман және жақсы деп бөле алады, осылайша өздерінің «білетіндігін» көрсетеді. Бұл жағымсыз жағын одан әрі күшейтеді: көңілі қалғандықтан әріптестермен тіл табысу және топтың бір бөлігі болу оңай; Bad Code-ті сынау сіздің мәртебеңіз бен кәсібилігіңізді басқалардың алдында арттырады: теріс пікір білдіретін адамдар көбінесе ақылды және сауатты болып қабылданады.

Негативтіліктің артуы міндетті түрде жаман нәрсе емес. Бағдарламалауды талқылау, басқалармен қатар, жазылған кодтың сапасына ерекше назар аударылады. Код қандай функцияны толығымен анықтайды (аппараттық құрал, желі және т.б. қоспағанда), сондықтан осы код туралы өз пікіріңізді білдіре білу маңызды. Барлық дерлік талқылаулар кодтың жеткілікті жақсы екендігіне және эмоционалды коннотация кодтың сапасын сипаттайтын терминдер бойынша нашар кодтың көріністерін айыптауға келеді:

  • «Бұл модульде көптеген логикалық сәйкессіздіктер бар, ол өнімділікті айтарлықтай оңтайландыруға жақсы үміткер».
  • «Бұл модуль өте нашар, біз оны қайта өңдеуіміз керек.»
  • «Бұл модуль мағынасы жоқ, оны қайта жазу керек».
  • «Бұл модуль жағымсыз, оны түзету керек.»
  • «Бұл модуль емес, қошқардың бір бөлігі, оны жазудың қажеті жоқ, оның авторы не ойлады».

Айтпақшы, дәл осы «эмоционалды шығарылым» әзірлеушілер кодты «сексуалды» деп атауға мәжбүр етеді, бұл сирек әділетті - сіз PornHub-те жұмыс істемейінше.

Мәселе мынада, адамдар біртүрлі, мазасыз, эмоционалды жаратылыстар және кез келген эмоцияны қабылдау және білдіру бізді өзгертеді: бастапқыда нәзік, бірақ уақыт өте келе күрт өзгереді.

Негативтің мазасыз тайғақ баурайы

Бірнеше жыл бұрын мен бейресми топ жетекшісі болдым және әзірлеушіден сұхбат алдым. Ол бізге қатты ұнады: ол ақылды, жақсы сұрақтар қоятын, технологияны жақсы білетін және біздің мәдениетімізге жақсы сәйкес келетін. Оның позитивтілігі мен іскерлігі мені ерекше таң қалдырды. Ал мен оны жұмысқа алдым.

Ол кезде мен бір-екі жыл компанияда жұмыс істеп, мәдениетіміздің онша тиімді еместігін сезіндім. Мен келгенге дейін біз өнімді екі рет, үш рет және тағы бірнеше рет шығаруға тырыстық, бұл қайта өңдеуге үлкен шығындарға әкелді, оның барысында бізде ұзақ түндерден, қатаң мерзімдерден және жұмыс істеген өнімдерден басқа ештеңе көрсете алмадық. Ал мен әлі тынбай жұмыс істеп жүрсем де, басшылықтың бізге берген соңғы мерзіміне күмәнмен қарадым. Және ол менің әріптестеріммен кодекстің кейбір аспектілерін талқылағанда абайсызда ант берді.

Сондықтан таңқаларлық емес, бірақ мен таңқалдым - бірнеше аптадан кейін сол жаңа әзірлеушінің мен жасаған теріс нәрселерді (соның ішінде балағаттау) айтқаны таңқаларлық емес. Мен оның мәдениеті басқа компанияда өзін басқаша ұстайтынын түсіндім. Ол тек мен жасаған мәдениетке бейімделді. Мен өзімді кінәлі сезіндім. Өзімнің субъективті тәжірибемнің арқасында мен жаңадан келген адамға пессимизмді ояттым, оны мен мүлдем басқа деп қабылдадым. Тіпті ол шынымен де ондай болмаса да, оған сыйып кететінін көрсету үшін жай ғана кейіп танытса да, мен оған өзімнің ренжіген көзқарасымды мәжбүрледім. Әзіл-қалжыңмен де, өткінші де айтылғанның бәрі сенілетін нәрсеге айналу сияқты жаман қасиетке ие.

Кодқа ашулану: бағдарламашылар және негатив

Теріс жолдар

Кішкене даналық пен тәжірибе жинақтаған бұрынғы жаңадан келген бағдарламашыларымызға оралайық: олар бағдарламалау индустриясымен көбірек таныс болды және жаман код барлық жерде бар екенін түсінді, оны болдырмауға болмайды. Бұл тіпті сапаға бағытталған ең озық компанияларда да кездеседі (және айта кетейін: қазіргі заман нашар кодтан қорғамайды).

Жақсы сценарий. Уақыт өте келе әзірлеушілер нашар код бағдарламалық жасақтаманың шындығы екенін және олардың міндеті оны жақсарту екенін қабылдай бастайды. Ал егер жаман кодты болдырмау мүмкін болмаса, онда бұл туралы шу шығарудың қажеті жоқ. Олар өздеріне тап болған мәселелерді немесе міндеттерді шешуге назар аудара отырып, Зеннің жолын алады. Олар бизнес иелеріне бағдарламалық жасақтаманың сапасын дәл өлшеуді және жеткізуді үйренеді, олардың көп жылдық тәжірибесі негізінде негізделген бағалаулар жазады және сайып келгенде, бизнес үшін керемет және тұрақты құндылығы үшін жомарт сыйақылар алады. Олар өз жұмысын жақсы атқаратыны соншалық, оларға 10 миллион доллар сыйақы алып, өмірінің соңына дейін өз қалауларымен айналысу үшін зейнеткерлікке шығады (өтінемін, мұны қарапайым деп қабылдамаңыз).

Кодқа ашулану: бағдарламашылар және негатив

Басқа сценарий - қараңғылық жолы. Нашар кодты сөзсіз деп қабылдаудың орнына, әзірлеушілер оны жеңе алу үшін бағдарламалау әлеміндегі барлық жаман нәрселерді атайды. Олар көптеген жақсы себептермен бар жаман кодты жақсартудан бас тартады: «адамдар көбірек білуі керек және соншалықты ақымақ болмауы керек»; «бұл жағымсыз»; «бұл бизнес үшін жаман»; «Бұл менің қаншалықты ақылды екенімді дәлелдейді»; «Егер мен сізге бұл қандай жаман код екенін айтпасам, бүкіл компания мұхитқа құлап кетеді» және т.б.

Әрине, олар қалаған өзгерістерді жүзеге асыра алмайды, өйткені бизнес, өкінішке орай, дамуын жалғастыруы керек және кодтың сапасы туралы алаңдауға уақыт жұмсай алмайды, бұл адамдар шағымданушы ретінде беделге ие болады. Олар өздерінің жоғары құзыреттілігі үшін сақталады, бірақ олар көптеген адамдарды тітіркендірмейтін, бірақ әлі де маңызды жүйелердің жұмысын қолдайтын компанияның шетіне шығарылады. Жаңа даму мүмкіндіктеріне қол жеткізбестен, олар дағдыларын жоғалтады және салалық талаптарды қанағаттандыруды тоқтатады. Олардың теріс пиғылдары ащы ащылыққа айналады, нәтижесінде олар жиырма жастағы студенттермен өздерінің сүйікті ескі технологиялары барған саяхаты және оның неге соншалықты ыстық екендігі туралы дауласу арқылы өздерінің эголарын тамақтандырады. Олар зейнеткерлікке шығып, қарттықтарын құстарды балағаттап өмір сүреді.

Шындық осы екі шектен тыс жерде жатқан шығар.

Кейбір компаниялар өте жағымсыз, оқшауланған, ерік-жігері күшті мәдениеттерді құруда өте табысты болды (мысалы, Microsoft корпорациясы бұрын жоғалған онжылдық) - көбінесе бұл нарыққа толық сәйкес келетін өнімдері бар және мүмкіндігінше тез өсу қажеттілігі бар компаниялар; немесе командалық және басқару иерархиясы бар компаниялар (Apple Jobs-тың ең жақсы жылдарында), мұнда әркім өзіне айтылған нәрсені жасайды. Дегенмен, қазіргі заманғы бизнес зерттеулері (және парасаттылық) компаниялардағы жаңашылдыққа және жеке адамдарда жоғары өнімділікке әкелетін максималды тапқырлық үздіксіз шығармашылық және әдістемелік ойлауды қолдау үшін стресстің төмен деңгейін талап ететінін көрсетеді. Әріптестеріңіз кодыңыздың әрбір жолы туралы не айтатыны туралы үнемі алаңдап отырсаңыз, шығармашылық, талқылауға негізделген жұмысты орындау өте қиын.

Теріс - инженерлік поп-мәдениет

Бүгінде инженерлердің қарым-қатынасына бұрынғыдан да көп көңіл бөлінуде. Инженерлік ұйымдарда «Мүйіздері жоқ«. Твиттерде бұл кәсіпті тастап кеткен адамдар туралы көбірек анекдоттар мен әңгімелер пайда болуда, өйткені олар бөгде адамдарға қарсы өшпенділік пен жаман ниетпен төзе алмаған (болмайтын). Тіпті Линус Торвальдс жақында кешірім сұрады басқа Linux әзірлеушілеріне қарсы жылдар бойы дұшпандық пен сын - бұл осы тәсілдің тиімділігі туралы пікірталасқа әкелді.

Кейбіреулер әлі де Линустың өте сыншыл болу құқығын қорғайды - «улы негативтіліктің» артықшылықтары мен кемшіліктері туралы көп білуі керек адамдар. Иә, мәдениеттілік өте маңызды (тіпті іргелі), бірақ егер көпшілігіміз теріс пікірлерді білдірудің «уыттылыққа» айналуына жол беретін себептерді қорытындылайтын болсақ, бұл себептер патерналистік немесе жасөспірімдік көрінеді: «олар бұған лайық, өйткені олар ақымақ. ", "ол ​​олар мұны енді қайталамайтынына сенімді болуы керек", "егер олар мұны жасамаған болса, оларға айғайламас еді" және т.б. Көшбасшының эмоционалды реакцияларының бағдарламалау қауымдастығына тигізетін әсерінің мысалы ретінде Ruby қауымдастығының MINASWAN аббревиатурасын келтіруге болады - «Матц жақсы, сондықтан біз жақсымыз».

Менің байқағаным, «ақымақты өлтіру» әдісінің көптеген жалынды жақтаушылары көбінесе кодтың сапасы мен дұрыстығына қатты мән береді, олар өздерінің жұмысымен сәйкес келеді. Өкінішке орай, олар қаттылықты қаттылықпен жиі шатастырады. Бұл позицияның кемшілігі қарапайым адамның, бірақ өзін басқалардан жоғары сезінуге деген өнімсіз ұмтылуынан туындайды. Осы тілекке бой алдырған адамдар қараңғылық жолында қалып қояды.

Кодқа ашулану: бағдарламашылар және негатив

Бағдарламалау әлемі қарқынды дамып келеді және өз контейнерінің шекарасына қарсы итермелейді - бағдарламаланбаған әлем (немесе бағдарламалау әлемі бағдарламаланбаған әлем үшін контейнер ме? Жақсы сұрақ).

Біздің өнеркәсібіміз үнемі өсіп келе жатқан қарқынмен кеңейіп, бағдарламалау қолжетімді болған сайын, «технологиялар» мен «қалыптылар» арасындағы қашықтық тез жабылуда. Бағдарламалау әлемі ерте технологиялық бумның оқшауланған мәдениетінде өскен адамдардың тұлғааралық өзара әрекеттестігіне көбірек ұшырайды және олар бағдарламалаудың жаңа әлемін қалыптастырады. Кез келген әлеуметтік немесе ұрпақтық аргументтерге қарамастан, капитализм атынан тиімділік компания мәдениеті мен жалдау тәжірибесінде көрінеді: ең жақсы компаниялар жақсы қарым-қатынасты былай қойғанда, басқалармен бейтарап қарым-қатынас жасай алмайтын ешкімді жұмысқа алмайды.

Мен негатив туралы не білдім

Егер сіз тым көп негативтілікке сіздің ақыл-ойыңызды және адамдармен қарым-қатынасыңызды басқаруға, уыттылыққа айналуға жол берсеңіз, бұл өнім топтары үшін қауіпті және бизнес үшін қымбат. Мен бір сенімді әзірлеушіде технологияға, басқа әзірлеушіге немесе тіпті бүкіл кодтық базаның сапасын көрсету үшін таңдалған бір файлға өшпенділік танытқандықтан, ыдыраған және толығымен қайта салынған көптеген жобаларды көрдім (және естідім).

Негативтілік сонымен қатар қарым-қатынасты бұзады және бұзады. Әріптесімнің CSS-ті қате файлға салғаным үшін ұрысқанын ешқашан ұмытпаймын, бұл мені ренжітті және бірнеше күн бойы ойымды жинауға мүмкіндік бермеді. Болашақта мен мұндай адамның командаларымның біріне жақын болуына жол бермеуім екіталай (бірақ кім біледі, адамдар өзгереді).

Соңында, теріс денсаулығыңызға зиян тигізеді.

Кодқа ашулану: бағдарламашылар және негатив
Менің ойымша, смайликтер бойынша мастер-класс осылай болуы керек.

Әрине, бұл бақытпен жарқыраудың, әрбір тарту сұрауына он миллиард смайлик енгізудің немесе смайликтер бойынша мастер-классқа барудың пайдасына дәлел емес (жоқ, егер сіз мұны қаласаңыз, онда сұрақ жоқ). Негатив - бұл бағдарламалаудың (және адам өмірінің) өте маңызды бөлігі, сигнал беру сапасы, сезімдерін білдіруге және басқа адамдармен қарым-қатынас жасауға мүмкіндік береді. Негативтілік көрегенділік пен сақтықты, мәселенің тереңдігін көрсетеді. Мен әзірлеушінің бұрын ұялшақ және сенімсіз болған нәрсеге сенбейтіндігін білдіре бастағанда жаңа деңгейге жеткенін жиі байқаймын. Адамдар өз пікірлерімен парасаттылық пен сенімділік көрсетеді. Сіз негативтіліктің көрінісін жоққа шығара алмайсыз, бұл Оруэллдік болар еді.

Дегенмен, негативтілікті дозалау және басқа да маңызды адами қасиеттермен теңестіру керек: эмпатия, шыдамдылық, түсінушілік және юмор. Сіз әрқашан адамға айқайламай немесе ұрыспай-ақ оның бұзғанын айта аласыз. Бұл тәсілді бағаламаңыз: егер біреу сізге ешқандай эмоциясыз қатты шатастырғаныңызды айтса, бұл өте қорқынышты.

Сол жолы, бірнеше жыл бұрын бас директор менімен сөйлесті. Біз жобаның қазіргі жағдайын талқыладық, содан кейін ол менің көңіл-күйімді сұрады. Мен бәрі жақсы, жоба қозғалып жатыр, біз баяу жұмыс істеп жатырмыз, мүмкін мен бірдеңені жіберіп алған шығармын және қайта қарау керек деп жауап бердім. Ол менің кеңседегі әріптестеріммен көбірек пессимистік ойлармен бөліскенімді естігенін және мұны басқалардың да байқағанын айтты. Ол егер менің күмәнім болса, мен оларды басшылыққа толық жеткізе алатынымды, бірақ «оларды алып тастай алмаймын» деп түсіндірді. Жетекші инженер ретінде мен сөздерімнің басқаларға қалай әсер ететінін есте ұстауым керек, өйткені мен оны түсінбесем де, әсерім көп. Және ол маған мұның барлығын өте жылы лебізбен айтып, ақырында егер мен шынымен де сондай сезімде болсам, онда мен өзіме және мансабыма не қалайтынымды ойлауым керек екенін айтты. Бұл ғажайып жұмсақ әңгіме болды, не жетсін, не орнынан тұрды. Мен оған алты ай ішінде өзгерген көзқарасым мен байқамаған басқаларға қалай әсер еткені туралы ақпарат үшін алғыс айттым.

Бұл тамаша, тиімді басқарудың және жұмсақ тәсілдің күшінің үлгісі болды. Мен компанияға және оның мақсаттарына жету қабілетіне толық сенетін сияқты болғанымды түсіндім, бірақ іс жүзінде мен басқалармен мүлдем басқаша сөйлесіп, сөйлестім. Сондай-ақ, мен жұмыс істеп жатқан жобаға күмәнмен қарайтын болсам да, әріптестеріме өз сезімімді көрсетіп, пессимизмді жұқпалы ауру сияқты таратпау керек екенін түсіндім, бұл біздің табысқа жету мүмкіндігімізді азайтады. Оның орнына мен өз басшылығыма нақты жағдайды агрессивті түрде жеткізе алдым. Ал егер олардың мені тыңдамайтынын сезсем, компаниядан кету арқылы келіспейтінімді білдіре аламын.

Мен персоналды бағалау бөлімінің басшысы лауазымына келгенімде жаңа мүмкіндікке ие болдым. Бұрынғы бас инженер ретінде мен (үнемі жетілдірілетін) бұрынғы кодымыз туралы өз пікірімді білдіруге өте мұқиятмын. Өзгерісті мақұлдау үшін сіз ағымдағы жағдайды елестетуіңіз керек, бірақ егер сіз ыңылдап, шабуылдасаңыз немесе сол сияқты ештеңеге жете алмайсыз. Сайып келгенде, мен тапсырманы орындау үшін келдім және оны түсіну, бағалау немесе түзету үшін кодқа шағымданбауым керек.

Шындығында, мен кодқа эмоционалдық реакциямды неғұрлым көп басқарсам, соғұрлым оның не болуы мүмкін екенін түсінемін және мен шатасуды азайтамын. Мен өзімді ұстамдылықпен («мұнда әрі қарай жақсартуға мүмкіндік болуы керек») айтқан кезде, мен өзімді және басқаларды қуантып, жағдайды тым байыпты қабылдамаймын. Мен ақылға қонымды (тітіркендіргіш пе?) («сіз дұрыс айтасыз, бұл код өте нашар, бірақ біз оны жақсартамыз») арқылы басқалардағы жағымсыздықты ынталандырып, азайта алатынымды түсіндім. Мен Зен жолында қаншалықты алыс жүре алатынымды көргеніме қуаныштымын.

Негізінде мен үнемі маңызды сабақты үйреніп, қайта үйреніп жатырмын: өмір үнемі ашуланып, қиналу үшін тым қысқа.

Кодқа ашулану: бағдарламашылар және негатив

Ақпарат көзі: www.habr.com

пікір қалдыру