Legacies Never Die: How to Handle Legacy Code

kun termi ”legacy code” tulee esiin, se yleensä sanotaan tai otetaan vastaan väheksyen. Alustava Google-haku ”legacy code memes” tuo esiin satoja ja satoja kuva makroja ihmisistä repimässä hiuksiaan, näyttämässä väsyneeltä tai erittäin pettyneeltä.

Frazzled looking man with disorganized papers captationed 'explaining legacy code to newly hired employees''explaining legacy code to newly hired employees'

When I started working as a software developer 6 months ago, I had no idea what legacy code is or what working with it entled.

neljäntenä kuukautenani juniorikehittäjänä minua pyydettiin lisäämään hakusuodattimen modaali erään työkaverini kaksi tai kolme vuotta sitten rakentamaan sovellukseen. Se tuntui helppoa tarpeeksi; olin viettänyt suurimman osan viimeisten neljän kuukauden aikana työskennellyt uskomattoman monimutkainen sovellus toisen asiakkaan mukana standardin pino: TypeScript/React/Redux/Redux-Saga. Olin jo ratkaissut monia ainutlaatuisia ongelmia ja tunsin luottamusta minun koodaus kyky tarpeeksi tehdä yksinkertainen modaali siirtää kyselyn parametrit backend.

kuten arvata saattoi, se ei ollut läheskään niin yksinkertaista. Mutta miksi?

mikä legacy-koodi on ja miksi

Legacy-koodin käsittely voi olla haastavaa, on koodi, joka periytyy toiselta kehittäjältä tai tiimiltä, joka käyttää vanhempia teknologioita, joita uudempi versio ei enää tue tai on syrjäyttänyt. Monet ohjelmoijat sanovat, että”koodista tulee vanhaa koodia heti, kun se on kirjoitettu”. Toiminnallinen ero ”tavallisen” koodin ja vanhan koodin välillä voi yksinkertaisesti olla se, että siinä on erilaisia käytäntöjä verrattuna siihen, mitä olet tottunut työskentelemään.

minun tapauksessani sovellus, johon minut oli määrätty, käytti Flow ’ ta Konekirjoituksen sijaan, eikä se ollut niin vahvasti tyypitetty kuin mihin olin tottunut. Tämä teki minulle hieman vaikeammaksi ymmärtää taustajärjestelmästä haettavan datan rakennetta. Ei tyyppejä tarkoitti, että olin törmäämässä Typeerrs runtime paljon useammin, joka voi olla vaikea debug kun kirjoitat suuri ominaisuus. Tämän lisäksi sovellus käytti Reactista paljon vanhempaa versiota, joka piti sovittaa yhteensopivaan versioon komponenttikirjastosta, jota halusin käyttää modaalin rakentamiseen.

ennen kuin pääsen nitty-gritty miten käsitellä legacy koodi tunnetta ryhdikkyyttä ja rationaalisuutta, haluan lisätä vastuuvapauslauseke, että legacy koodi ei ole kaikki huono ja työskentely legacy projekti ei tarvitse olla kauhea. Päinvastoin, työskentely legacy code opetti minua olemaan joustava, kärsivällinen, ja ennen kaikkea kokemus antoi minulle mahdollisuuden ratkaista ongelmia uudella näkökulmalla uudenlaisessa kontekstissa.

itse asiassa se teki minusta paremman kehittäjän kuin olin ennen kuin aloin työskennellä edellä mainitun koodebaasin kautta, ja toivottavasti myös perintöprojektisi voi opettaa sinulle jotain.

miten käsitellä vanhaa koodia teknisellä tasolla

Sekstnt ja nahkakantinen kirja luonnonpuupenkillä.Photo by Jeff Sheldon on Unsplash

Read documentation and code comments when possible

in a perfect world, every codebase has a robust README that contributes explanations of the project works, code comments that explain the exact logic of the original author, and the whole application is perfect sense. Näin on kuitenkin harvoin. Monet READMEs eivät päivity projektien kehittyessä, ihmiset unohtavat kirjoittaa kommentteja, olettavat, että heidän logiikkansa on ilmiselvää uudelle kehittäjälle, tai heiltä yksinkertaisesti loppuu aika huolehtia näistä asioista.

Katso koodebaasia kokonaisuutena

Jos olet eksynyt etkä tiedä mistä aloittaa, kysy itseltäsi nämä kysymykset:

  • mikä on sovelluksen tarkoitus?
  • Miten tieto kulkee sovelluksen kautta?
  • miten ominaisuutesi sopii sovellukseen?

kun kokonaiskuvasta saa käsityksen, on helpompi keksiä, miten ongelmaan parhaiten puututaan. Ehkä sinun täytyy luoda uusi tiedosto ja luoda uusi komponentti. Ehkä sinun täytyy kirjoittaa hyödyllisyys toiminto ja testata sitä. Oli miten oli, ongelman laajemman kontekstin ymmärtäminen on hyvä ensimmäinen askel ratkaisun löytämiseksi.

testaa sovellusta manuaalisesti ja yksikkötesteillä aina kun mahdollista

sovelluksen rikkominen väliaikaisesti uuden ominaisuuden lisäämisen yhteydessä on väistämätöntä riippumatta siitä, minkä tason Kehittäjä olet. Tämä on normaalia ja odotettavissa, varsinkin jos olet uusi työ, työskentelevät legacy codebase tuntematon pino, tai jokin näiden kahden yhdistelmä.

paras tapa estää näitä katkoksia tulemasta pitkäaikaisiksi ongelmiksi on testata sovellus perusteellisesti sekä yksikkötesteillä että manuaalisilla testeillä. Ottaa nämä testit paikallaan ja tietää, millaista kattavuus saat ulos niistä säästää sinua ja tulevia kehittäjiä paljon aikaa. Lisäksi tiukat testit tekevät sovelluksesta skaalautuvamman ja antavat sinulle myös pienen dopamiiniryöpyn aina, kun testisi suoritetaan puhtaana.

yksikkötestaukseen voi käyttää testikehyksiä, kuten Jestiä tai Jasminea.

manuaalisiin testeihin kannattaa kehittää testimatriisi ja varmistaa, että dokumentti on tulevien kehittäjien saatavilla. Matriisia varten sinun kannattaa määritellä joukko toimia, odotettu käyttäytyminen, todellinen käyttäytyminen, kun testaat sitä, ja kaikki muut tärkeät yksityiskohdat, kuten näin: taulukkolaskenta käyttäytymisohjeiselle kehitykselle

i ’ ll be covering how to implement both types of testing effectively into your workflow in a future blog post.

pyydä apua

olettaen, että projektisi on työpaikkasi nykyisen tai entisen työntekijän kirjoittama, joku muu luultavasti tietää, mitä sovelluksessa tapahtuu, tai ainakin tietää tarpeeksi saadakseen sinut irti. Oppiminen niellä ylpeytesi ja kysyä joku muu on epämiellyttävä askel joillekin, mutta välttämätön yksi kasvaa kehittäjä, ja ehkä työkaveri voi opettaa sinulle muutamia uusia temppuja.

hyvä tapa käyttää tehokkaasti aikaansa (ja heidän aikaansa) on muotoilla tietoon perustuvia kysymyksiä. Yritä palata tarkastelemaan koodebaasia kokonaisuutena ja selvittää ymmärryksesi aukot. Se ei ainoastaan auta heitä saamaan parempaa käsitystä siitä, mikä sinun ongelmasi on, vaan se osoittaa, että yritit ratkaista ongelman ensin omin neuvoin.

tiedä, milloin kannattaa vähentää tappioitasi

Jos käytät liikaa aikaa yrittäen saada jalkasi oven väliin, etkä ole ottanut mitään vakavaa askelta kohti ominaisuuden toteuttamista yritettyäsi edellä mainittuja vaiheita, kannattaa ehkä muotoilla koodi uudelleen ominaisuuden ympärille. Älä luovuta liian helposti, vaan pidä myös mielessä, mitkä ovat aikataulusi ja mitä projektipäällikkö sinulta odottaa.

se sanoi, että tällä tavalla toimimisessa on haittapuolia:

  • koodien uudelleenkirjoittamisessa voi esiintyä vikoja, vaikka tätä voi jonkin verran kiertää hyvällä yksikkötestauksella.
  • Uudelleenkirjoituskoodilla voidaan poistaa piileviä toimintoja, joskin tätä voidaan myös kiertää hyvillä yksikkötesteillä.
  • Jos aikaa painaa, ominaisuuden lisäksi koodin kirjoittaminen oman ominaisuuden ulkopuolelle saattaa itse asiassa olla enemmän aikaa vievää kuin vain sen ympärille rakentaminen.

kaiken kaikkiaan, käytä parasta harkintaasi. Kummassakin valinnassa on hyviä ja huonoja puolia, ja kaikki riippuu yksilöllisistä olosuhteista ja projektin budjetista.

How to deal with legacy code on a psychological level

a man sitting on a dock in a seesteinen mountain lakePhoto by Simon Migaj on Unsplash

Now that we ’ve covered the technical aspects of dealing with legacy code, let’ s talk about how to deal with our soft skills. Loppujen lopuksi kehittäjät ovat ihmisiä, ei vain koodausrobotteja, ja haastavien ongelmien käsittely projekteja, jotka vaativat luovuutta ja tekijyyttä voi olla emotionaalisesti verottaa, ei vain sinulle, mutta työkavereille samoin.

olkaa nöyriä ja kilttejä

Tämä on jotain sellaista, mitä lampaanmaisesti myönnän tarvitsevani harjoitella enemmän. Kun olin ensimmäinen määritetty suodatin modal projekti, olin melko laulu siitä, miten janky ja unappealing koodi oli käsitellä, kun alkuperäinen kirjoittaja koodi istui 15 metrin päässä minusta. Tarkoitin kommenttejani vitsiksi, mutta jälkikäteen ymmärrän, että olin ylimielinen ja loukkaava, ja että minun olisi pitänyt olla empaattisempi.

on paljon tekijöitä, jotka voivat johtaa siihen, että legacy-koodi näyttää ”offilta”, joka kannattaa ottaa huomioon ennen kuin alkaa kritisoida tekijää tai olettaa niistä pahinta (tämä on löyhästi sidottu perustavaa laatua olevaan attribuutiovirheeseen!).

alkuperäisellä tekijällä saattoi olla omat syynsä koodata sillä tavalla kuin he kirjoittivat.

Aikarajoitteet ja teknologiarajoitteet voivat saada henkilön kirjoittamaan koodia, joka toimii, mutta ei välttämättä ole paras tapa. Jos kuvittelet itsesi tilanteeseen, jossa ei ole tarpeeksi aikaa, vanhentuneita työkaluja ja mailin mittainen todo-lista, et luultavasti kirjoittaisi myöskään parasta koodia!

konventiot muuttuvat.

vanhemmissa Olio Apps-projekteissa koodin käytäntönä on käyttää yksittäisiä lainausmerkkejä merkkijonojen julistamiseen, ja kaksi välilyöntiä vastasi yhtä välilehteä. Meillä oli useita pieniä Reagointikomponentteja yhden tiedoston sisällä. Nykyisessä konventiossamme käytetään kaksinkertaisia lainausmerkkejä ja neljää välilyöntiä, ja jokainen Reagointikomponentti, olipa se kuinka pieni tahansa, elää omassa .tsx tiedostossaan component hakemistossa. Muutaman vuoden päästä sekin varmasti muuttuu.

kaikki koodi muuttuu lopulta legacyksi

tämä sitoo takaisin edelliseen pisteeseen: koodisi on lopulta legacy. Kun siirryt tikkaita seniority, uusia kehittäjiä palkataan ja täytyy säilyttää vanha koodi. Voit kirjoittaa puhdasta, virheetöntä, kuivaa koodia, mutta kun käytännöt muuttuvat tai trendit muuttuvat, uudet kehittäjät saattavat tarkastella koodiasi samalla tavalla kuin sinä muiden vanhoja koodeja.

ole ylpeä pienistä onnistumisista

ei ole helppoa työskennellä tavanomaisten konventioidesi ulkopuolella; perintökoodin käsittelystä kertovien meemien ja vitsien valtavaan ryöppyyn on syynsä. Jos olet joskus oppinut kieltä äidinkielesi ulkopuolella, tiedät, miltä tuntuu unohtaa sana tai termi toisella kielelläsi, mutta muistaa sen omalla äidinkielelläsi eikä pysty kääntämään kuilun yli. Sama koskee muutosta modernien ja vanhojen konventioiden välillä. Joskus kestää vain hetken päästä.

kun osaat navigoida onnistuneesti vanhaa koodia, osoitat kykysi olla mukautuvainen, mikä on tärkeä taito, joka hyödyttää sinua nykyisessä työssäsi ja kaikissa tulevissa työpaikoissasi, olivatpa nämä työt teknologia-alalla tai eivät. Legacy koodi on täydellinen leikkipaikka harjoitella tätä taitoa.

johtopäätöksenä:

käytä tämä aika Oman koodikirjoituksesi tukemiseen

nyt kun olet saanut kokemusta vanhasta koodibaasista, sinun pitäisi päästä siitä eroon ymmärtäen paremmin, mistä pidät ja mistä et pidä työkalujen ja käytäntöjen suhteen. Nämä ovat asioita, joita voit jatkaa tuleviin projekteihin, ja tehdä sinusta paremman tarkistamaan muiden koodia, tarjoamalla rakentavaa kritiikkiä ja antamalla mentorointia.

Develop apps for the user and the future developer

olipa sinulla kokemusta upeista dokumentaatio-ja koodikommenteista tai ei dokumentaatio-tai koodikommenteista, voit nähdä, miten sekä dokumentaatio että kommentit ovat tehokkaita työkaluja tulevien kehittäjien navigointiin projektissa. Sinulla on yhteinen tavoite, jonka mukaan haluat sujuvan, toimivan ja kuivan sovelluksen; dokumentaation ylläpitäminen ja informatiivisten koodikommentien jättäminen on hyvä tapa kuroa umpeen tämä aukko.

muista, että sinunkin koodisi on jonain päivänä legacy

olen maininnut tämän jo muutaman kerran, mutta on tärkeää toistaa, että sinunkin koodisi on legacy, riippumatta siitä, kuinka kuiva ja tahraton koodisi ja logiikkasi ovat.

tärkein takeaway on olla joustava, nöyrä, ja että vanhasta koodista voi varmasti oppia uusia temppuja.

Vastaa

Sähköpostiosoitettasi ei julkaista.