Парады па апрацоўцы спадчыннага кода

Знакавая APPLE MACINTOSH 128K

Калі прыходзіць тэрмін "састарэлы код", ён звычайна гаворыцца альбо з прыкметай пагарды. Папярэдні пошук «спадчынных мемавых кодаў» у Google прыносіць сотні і сотні макрасаў малюнкаў, якія раздзіраюць валасы, выглядаюць вар'ятам або вельмі расчараванымі.

Калі я пачаў працаваць распрацоўшчыкам праграмнага забеспячэння ў кампаніі, якая базуецца на прадуктах, 5 месяцаў таму я не ўяўляў, што такое спадчынны код і што звязана з працай.

Падчас майго чацвёртага месяца мяне папрасілі дадаць рэжым фільтра камутатара да прыкладання, створанага адным з маіх супрацоўнікаў два-тры гады таму. Здавалася, досыць лёгка; Я правёў большасць апошніх трох гадоў працуючы над неверагодна складаным дадаткам, які ўключае стандартны стэк: TypeScript / React / Angular / Dotnet. Я ўжо вырашыў мноства унікальных праблем і адчуваў упэўненасць у сваёй здольнасці кадавання, дастаткова зрабіць просты мадальны для перадачы параметраў запыту ў рэзервовы.

Як вы ўжо здагадаліся, усё было не так проста. Але чаму?

Што такое спадчынны код і чаму з ім складана змагацца

Спадчынны код - код, успадкаваны іншым распрацоўшчыкам або камандай, якая выкарыстоўвае больш старыя тэхналогіі, якія больш не падтрымліваюцца альбо былі заменены больш новай версіяй. Многія праграмісты кажуць, што "код становіцца састарэлым кодам, як толькі ён будзе напісаны". Функцыянальная розніца паміж "звычайным" кодам і састарэлым кодам можа проста заключацца ў тым, што ён мае розныя канвенцыі ў параўнанні з тым, з чым вы прывыклі працаваць.

У маім выпадку дадатак выкарыстаў тэкставыя шаблоны XAML і T4, а не асноўны код C #, і гэта было не так моцна, як я прывык. Гэта зрабіла мне крыху цяжэй зразумець структуру дадзеных. Ніякія тыпы не азначалі, што я часцей сутыкаюся з TypeErrors падчас выканання, што можа быць складана адладзіць пры напісанні вялікай функцыі. Акрамя гэтага, прыкладанне выкарыстоўвала значна больш старую версію dotnet, якую неабходна ўзгадніць з сумяшчальнай версіяй бібліятэкі кампанентаў.

Перш чым я патрапіць на тонкую і дробную капрыз, як звяртацца са спадчыннымі кодамі з пачуццём ураджайнасці і рацыянальнасці, я хачу дадаць адмову, што спадчынны код не ўсё дрэнна і праца над састарэлым праектам не павінна быць страшнай. Наадварот, праца над састарэлым кодам навучыла мяне быць гнуткім, цярплівым і, перш за ўсё, досвед дазволіў мне вырашыць праблемы з новай пункту гледжання ў кантэксце рамана.

На самай справе, гэта зрабіла мяне лепшым распрацоўшчыкам, чым я быў, перш чым я пачаў працаваць праз вышэйзгаданую базу дадзеных, і, спадзяюся, ваш спадчынны праект таксама можа вас навучыць.

Як змагацца са састарэлым кодам на тэхнічным узроўні

Калі магчыма, прачытайце дакументацыю і каментары

У ідэальным свеце кожная база дадзеных мае надзейную README, якая змяшчае кароткія тлумачэнні таго, як працуе праект, каментарыі да кода, якія тлумачаць дакладную логіку першапачатковага аўтара, і ўся заяўка мае дасканалы сэнс. Аднак гэта бывае рэдка. Многія README не абнаўляюцца, калі праекты развіваюцца, людзі забываюць пісаць каментарыі, мяркуюць, што новая распрацоўшчык відавочная іх логіка, альбо ў іх проста не хапае часу, каб клапаціцца пра гэтыя рэчы.

Паглядзіце на кодавую базу ў цэлым

Калі вы згубіліся і не ведаеце, з чаго пачаць, задайце сабе наступныя пытанні:

  • Якая мэта прыкладання?
  • Як праходзяць дадзеныя праз прыкладанне?
  • Як ваша функцыя ўпісваецца ў дадатак?

Калі вы можаце зразумець вялікую карціну, прасцей зразумець, як лепш вырашыць гэтую праблему. Магчыма, вам трэба стварыць новы файл і стварыць новы кантролер. Магчыма, вам трэба напісаць функцыю ўтыліты і праверыць яе. Як бы там ні было, разуменне шырокага кантэксту вашай праблемы - добры першы крок да стварэння рашэння.

Праверце прыкладанне ўручную і пры дапамозе блочных тэстаў, калі магчыма

Наламаць прыкладанне часова пры даданні новай функцыі - гэта непазбежнасць, незалежна ад узроўню распрацоўшчыка. Гэта нармальна і чакана, асабліва, калі вы пачатковец у працы, працуеце ў састарэлай базе кода з незнаёмым стэкам або нейкай камбінацыяй з двух.

Лепшы спосаб прадухіліць гэтыя паломкі ад праблем з доўгімі тэрмінамі - гэта старанна праверыць ваша прыкладанне як з адзінкавымі тэстамі, так і ўручную. Правядзенне гэтых тэстаў і дакладнае веданне таго, які ахоп вы атрымаеце, дазволіць вам зэканоміць шмат часу. Акрамя таго, строгія тэсты робяць прыкладанне больш маштабаваным, а таксама даюць вам невялікую дофамінавую пік кожны раз, калі вашы тэсты чысцяцца. На жаль, у маім сцэнарыі ёсць адзінкавыя тэставыя выпадкі

Для ручных тэстаў вы хочаце распрацаваць тэставую матрыцу і пераканацца, што дакумент даступны будучым распрацоўшчыкам. Для матрыцы вы хочаце вызначыць набор дзеянняў, чаканае паводзіны, фактычнае паводзіны пры яго праверцы і любыя іншыя важныя дэталі, напрыклад:

Прасіць аб дапамозе

Калі вы мяркуеце, што ваш праект напісаны цяперашнім альбо былым супрацоўнікам на вашым працоўным месцы, хтосьці іншы, напэўна, ведае, што адбываецца ў дадатку, альбо, па меншай меры, ведае дастаткова, каб вас адлепяць. Навучыцца глынаць гонар і пытаць каго-небудзь - гэта нязручны крок для некаторых, але неабходны для росту як распрацоўшчыка, і, магчыма, ваш калега можа навучыць вас некалькім новым трукам.

Добры спосаб эфектыўна выкарыстоўваць свой час (і іх) - гэта фармуляваць інфармаваныя пытанні. Паспрабуйце вярнуцца да разгляду базы дадзеных у цэлым і высветліце прабелы ў разуменні. Гэта не толькі дапаможа ім лепш зразумець, у чым заключаецца ваша праблема, але і паказвае, што вы праявілі ініцыятыву, спрабуючы вырашыць праблему самастойна.

Ведайце, калі скараціць страты

Калі вы марнуеце занадта шмат часу на тое, каб ступіць на нагу ў дзверы, і не паспрабавалі зрабіць сур'ёзны крок да рэалізацыі гэтай функцыі пасля спробы крокаў, прыведзеных вышэй, магчыма, варта перайграць код вакол вашай функцыі. Не адмаўляйцеся занадта лёгка, але таксама майце на ўвазе, якія вашыя тэрміны і што ваш менеджэр праектаў чакае ад вас.

Але пры гэтым ёсць недахопы:

  • Перапісванне кода можа ўводзіць памылкі, хаця гэта можа быць абмінута добрым тэставаннем.
  • Перапісванне кода можа выдаліць схаваную функцыянальнасць, хаця гэта таксама можна пазбегнуць добрымі адзінкавымі тэстамі.
  • Калі вы націснеце час, напісанне кода па-за вашай функцыі ў дадатак да функцыі можа заняць больш часу, чым проста будаваць вакол яе.

Увогуле, выкарыстоўвайце сваё найлепшае меркаванне. Для любога выбару ёсць плюсы і мінусы, і ўсё залежыць ад вашых абставін і бюджэту праекта.

Як змагацца са спадчыным кодам на псіхалагічным узроўні

Цяпер, калі мы разгледзелі тэхнічныя аспекты рацыянальнага выкарыстання састарэлага кода, давайце пагаворым пра тое, як з ім змагацца, выкарыстоўваючы нашы навыкі працы. У рэшце рэшт, распрацоўшчыкі - гэта людзі, якія не проста кадзіруюць робатаў, а сутыкацца з складанымі праблемамі на праектах, якія патрабуюць творчасці і аўтарства, могуць эмацыянальна падаткаабкладаць не толькі для вас, але і для вашых калегаў.

Будзьце сціплымі і добрымі

Я гэта сарамліва прызнаю, што мне трэба больш займацца. Калі мне ўпершыню прысвоілі мадальны праект фільтра, я даволі галасаваў пра тое, наколькі прыдзірлівы і непрывабны код павінен мець справу, у той час як першапачатковы аўтар кода сядзеў ад мяне ў 15 метрах. Я меркаваў, што мае каментары будуць жартам, але, калі я гляджу, я разумею, што я быў нахабным і крыўдным і павінен быў быць больш чулым.

Ёсць мноства фактараў, якія могуць прывесці да таго, што састарэлы код выглядае "адключаным", які вы павінны прыняць да ўвагі, перш чым пачаць крытыкаваць аўтара альбо выказаць здагадку пра іх горшае (гэта слаба прывязана да асноўнай памылкі атрыбуцыі!).

У арыгінальнага аўтара, магчыма, былі свае прычыны напісання кода так, як яны рабілі.

Часовыя абмежаванні і тэхналагічныя абмежаванні могуць прымусіць чалавека пісаць код, які працуе, але абавязкова не мае лепшай умовы. Калі вы апынецеся ў сітуацыі з недастатковым часам, састарэлымі інструментамі і спісам Todo за вярсту, вы, верагодна, таксама не запішаце лепшы код!

Канвенцыі мяняюцца.

У старых праектах канвенцыя для кода выкарыстоўвае адзінкавыя двукоссі для абвяшчэння радкоў, і два прабелы былі роўныя адной укладцы. У нас было некалькі маленькіх класаў, укладзеных у адзін файл. У нашай дзеючай канвенцыі мы выкарыстоўваем падвойныя двукоссі і чатыры прабелы, і кожны клас, незалежна ад таго, наколькі маленькі, жыве ў сваім .csfile у каталогу мадэляў. І праз некалькі гадоў я ўпэўнены, што гэта таксама зменіцца.

Увесь код з часам становіцца спадчынай

Гэта звязана з папярэднім пунктам: ваш код з часам застанецца ў спадчыну. Калі вы будзеце рухацца па лесвіцы працоўнага стажу, новыя распрацоўшчыкі будуць наняты далей, і яны павінны будуць падтрымліваць свой стары код. Вы можаце пісаць чысты, бездакорны DRY-код, але як толькі змены ўмоўнасцей альбо змены тэндэнцый, гэтыя новыя распрацоўшчыкі могуць праглядаць ваш код гэтак жа, як вы бачыце састарэлы код іншых.

Ганарыцеся невялікімі поспехамі

Працаваць за межамі звыклых умоў няпроста; у гэтым ёсць прычына велізарнай ахвоты мемаў і жартаў пра справу са спадчыным кодам. Калі вы калі-небудзь вывучалі мову па-за роднай мовай, вы ведаеце, як адчуваеце забываць слова ці тэрмін на другой мове, але памятаеце яго на роднай мове і не зможаце перавесці праз прабел. Тое ж самае тычыцца пераменаў паміж сучаснымі і састарэлымі канвенцыямі. Часам проста патрабуецца хвіліна, каб аднавіць падшыпнікі.

Умеючы паспяхова арыентавацца па састарэлым кодзе, вы дэманструеце сваю здольнасць да адаптацыі, што з'яўляецца важным навыкам, які прыносіць карысць вам на вашай бягучай працы і ўсіх вашых будучых вакансіях, незалежна ад таго, працуюць яны ў сферы тэхналогіі ці не. Спадчынны код - ідэальная пляцоўка для практыкі гэтага навыку.

У заключэнне

Выкарыстоўвайце гэты час, каб узмацніць напісанне ўласнага кода

Цяпер, калі ў вас ёсць досвед працы са застарэлай базай дадзеных, вам варта адысці ад яе, каб лепш зразумець, што вам падабаецца і што вам не падабаецца ў плане інструментаў і звычай. Гэта тое, што вы можаце працягваць у будучых праектах і зрабіць вас лепш пры разглядзе кодэкса іншых, прапаноўваючы канструктыўную крытыку і даючы настаўніцтва.

Распрацуйце прыкладанні для карыстальніка і будучага распрацоўшчыка

Калі ў вас ёсць досвед выдатнай дакументацыі і каментарыяў да кода, альбо няма дакументацыі або каментарыяў да кода, вы можаце бачыць, як дакументацыя і каментары з'яўляюцца магутнымі інструментамі, якія дапамагаюць будучым распрацоўшчыкам арыентавацца па праекце. Вы падзяляеце агульную мэту - жаданне гладкага, функцыянальнага і сухога прыкладання; падтрыманне дакументацыі і пакіданне пасля сябе інфарматыўных каментарыяў кода - добры спосаб пераадолення гэтага разрыву.

Памятаеце, што ваш код таксама застанецца калі-небудзь

Я ўжо згадваў пра гэта некалькі разоў, але важна яшчэ раз падкрэсліць, што ваш код таксама застанецца, незалежна ад таго, наколькі сухія і некранутыя ваш код і логіка.

Самы галоўны вывад - быць гнуткім, сціплым і вызначаць новыя фокусы са старога кода.