Nový projekt vs. cizí kód

Kit

  • ****
  • 475
    • Zobrazit profil
    • E-mail
Re:Nový projekt vs. cizí kód
« Odpověď #15 kdy: 10. 09. 2020, 19:08:49 »
Mně samotnému vyhovuje hrabat se v cizím kódu, často ho refaktoruji už při prvním čtení nebo alespoň píši k němu dokumentaci. Nebylo tomu tak vždy, jako juniorovi mi psaní dokumentace připadalo jako šílený opruz a údržba cizí aplikace jako horror.


Re:Nový projekt vs. cizí kód
« Odpověď #16 kdy: 10. 09. 2020, 19:18:59 »
Záleží co je to za projekt - Rozsáhlé věci v C++ / Java asi nikdo přepisovat nechce, protože i kdyby se začalo od nuly tak to bude trvat 10-20 let než bude výsledek, a zákazník chce většinou ty features co tam už jsou, a ne nějaký "lépe napsaný" program co nic neumí. Věci ve frontendu jsou víc likely na přepis, protože za pár let už bude v módě jiný toolkit (nebo bude vyšší a nekompatibilní verze toho stávajícího) a ten původní třeba už nebude mít ani podporu.

Začít dělat něco znovu v podstatě znamená, že ten původní kód má nějaký fundamentální design flaw přímo v jádru, a nedá se to už rozšířit. Popřípadě když už vývoj toho legacy softu je dražší než kdyby se to začalo dělat znovu. Údržba a vývoj v takovém projektu potom stojí víc peněz, protože to nikdo nechce dělat - tzv "pay for pain" - ti co si chcou vydělat toho můžou využít :)

Existují i příklady z open-source světa, např. vývoj LLVM trval hodně dlouho než dosáhl kvalitou na GCC, popř. přepis některých věcí ve Firefoxu do Rustu, atd... Když se nad tím zamyslím tak open-source je vlastně perfektní příklad, proč vždycky začínat na nové louce není ideální - spousta nedokončených projektů, které možná jsou v jádru lepší než ty ostatní, ale nemají features -> nemají základnu uživatelů -> nemají funding -> vývoj jde pomalu nebo vůbec. Na druhou stranu občas se objeví něco, co svoji kvalitou překoná něco jiného a ten projekt jde pak rychle dopředu - např. vývoj VSCode jde neuvěřitelným tempem.

Re:Nový projekt vs. cizí kód
« Odpověď #17 kdy: 10. 09. 2020, 19:20:52 »

Myslim, ze dlouhodobe neni udrzitelne kazde 2 roky vsechno prepisovat.


Moc tomu nerozumím. Na jednu stranu se ptáš tak, že je jasné, že o vývoji nic nevíš a chceš se něco dozvědět. Na druhou stranu, tady ale plácneš tu větu, kterou tady cituji. Co to má znamenat?

Samozřejmě, že je neudržitelné každé 2 roky všechno přepisovat. Taky se to tak nikdy nedělá. Přepisování se typicky dělá proto, že původní kód je historický a je napsaný v jazyce, ve kterém se dneska už blbě shání programátoři.

Případně se se celý kód zahodí a napíše znova (někdy v jiném jazyce a někdy i ve stejném), pokud je starý kód ve špatném stavu. Většinou proto, že je v něm příliš mnoho úprav, které jdou proti logice původní architektury (buď to architekt blbě navrhl, nebo to zákazník blbě zadal a nějaký junior do toho patlal úpravy, jak uměl a projekťák mu to schvaloval, protože to přece funguje).

Do tohoto stavu kód ale obvykle dospěje po mnoha letech.

Pokud by to někde dělali už po dvou letech, tak je to asi tak na úrovni toho, že máš po dvou letech běžného provozu neopravitelně opotřebované osobní auto. Není to normální a bude se hodně řešit, kdo za to může.

Velmi speciální situace ve vývoji SW je ta, že je nutno velmi rychle udělat nějaký prototyp. A ten prototyp se ukáže, že po nějakých úpravách může fungovat v nějakém předprodukčním provozu, který přejde v normální produkční provoz (s definovanými fallback procedurami, když něco nefunguje správně).
A během toho provozu prototypu se postupně připravuje řádný produkt, který bude robustní a bude mít funkce, které v tom prototypu nejsou.
Takhle nějak se psaly ERP systémy v 90. letech v jedné ERP velmoci, které ale celkově moc zkušeností s vývojem většího SW neměla.


[/quote]

Re:Nový projekt vs. cizí kód
« Odpověď #18 kdy: 10. 09. 2020, 20:04:45 »
panove neznate mapu :-)

https://xkcd.com/2347/

Re:Nový projekt vs. cizí kód
« Odpověď #19 kdy: 10. 09. 2020, 20:06:02 »

Myslim, ze dlouhodobe neni udrzitelne kazde 2 roky vsechno prepisovat.


Moc tomu nerozumím. Na jednu stranu se ptáš tak, že je jasné, že o vývoji nic nevíš a chceš se něco dozvědět. Na druhou stranu, tady ale plácneš tu větu, kterou tady cituji. Co to má znamenat?

Samozřejmě, že je neudržitelné každé 2 roky všechno přepisovat. Taky se to tak nikdy nedělá. Přepisování se typicky dělá proto, že původní kód je historický a je napsaný v jazyce, ve kterém se dneska už blbě shání programátoři.

Případně se se celý kód zahodí a napíše znova (někdy v jiném jazyce a někdy i ve stejném), pokud je starý kód ve špatném stavu. Většinou proto, že je v něm příliš mnoho úprav, které jdou proti logice původní architektury (buď to architekt blbě navrhl, nebo to zákazník blbě zadal a nějaký junior do toho patlal úpravy, jak uměl a projekťák mu to schvaloval, protože to přece funguje).

Do tohoto stavu kód ale obvykle dospěje po mnoha letech.

Pokud by to někde dělali už po dvou letech, tak je to asi tak na úrovni toho, že máš po dvou letech běžného provozu neopravitelně opotřebované osobní auto. Není to normální a bude se hodně řešit, kdo za to může.

Velmi speciální situace ve vývoji SW je ta, že je nutno velmi rychle udělat nějaký prototyp. A ten prototyp se ukáže, že po nějakých úpravách může fungovat v nějakém předprodukčním provozu, který přejde v normální produkční provoz (s definovanými fallback procedurami, když něco nefunguje správně).
A během toho provozu prototypu se postupně připravuje řádný produkt, který bude robustní a bude mít funkce, které v tom prototypu nejsou.
Takhle nějak se psaly ERP systémy v 90. letech v jedné ERP velmoci, které ale celkově moc zkušeností s vývojem většího SW neměla.



Uz 15 let se delam vyvoj software. Na ruznych pozicich, v ruznych jazycich, domenach a pro klienty v ruznych castech sveta.
Ptam se protoze pozoruju trend.
Ty dva roky sem si z prstu nevycucal. Je to opakovana zkusenost. Takze muzu rict, ze dela.
Posledni zkusenost je asi mesic stara.
"Cerstve" vyvinuta vec. Posledni work package je v produkci asi pul roku. Vyvoj zacal v prosinci 2018. Business si chrochta, ze to funguje. Opsici jsou taky relativne spokojeny (i kdyz to jsou vecny brucouni...)
A ted sem se dozvedel, ze se mam podilet navrhu neceho co to ma nahradit. A kdyz sem se zeptal architekta u zakaznika jaka je motivace, abych vlastne vedel jaky problem mam resit... tak nevedel...
Rikal, ze ho to vlastne nezajima, protoze na to mame budget tak muzem vyzkouset novou platformu.

Kdybych byl businesak/uzivatel/akcionar .... tak ho asi vystrelim ze cvicek...
Ale jelikoz jsem potencialni dodavatel tak se jdu vybrecet na root a hledat logiku...


Re:Nový projekt vs. cizí kód
« Odpověď #20 kdy: 10. 09. 2020, 20:08:26 »
ja bych byl pro refaktoring odspoda, zacit modifikovat/zlepsovat funkce a metody dole.
pozdeji pak refaktorovat na urovni trid a modulu a jejich vazeb.

treba kdyz je treba prejit na novejsi (nekompatibilni) verzi frameworku a jazyka.

luvar

  • ***
  • 126
    • Zobrazit profil
    • E-mail
Re:Nový projekt vs. cizí kód
« Odpověď #21 kdy: 10. 09. 2020, 20:09:29 »
Ja  som zazil projekty, ktore mali pravidlo "program moze byt len tak velky, aby ho jeden koder dokazal za mesiac napisat nanovo". Toto fungovalo fajn. V pripade, ze refaktoring by znamenal vela prace, tak sa zvolila taktika "prepiseme to podla uz 10 krat evolvovanych poziadaviek a tentokrat budeme mysliet na viac moznych oziadaviek do buducna". Chytili sa vsetky testy, nasledne kusy kodu (java; balicky) pre parsovanie konfigu, pre matematiku okolo biznisu a pripadne nejake casti pre pracu s databazou, ci parsovanie struktur z externych zdrojov a nasledne jeden clovek za cca mesiac prepisal projekt... Malo to inu architekturu (nie vzdy), bolo to citatelnejsie a hlavne, napisane jednym clovekom. Nasledne dany clovek bol najblizsie obdobie "spravcom" projektu a mal vpodstate zakazane robit bezne ulohy na tom projekte. Mal robit iba review a merge a pripadne nejake diskusie k architekture... Imho to bol fajn pristup. Zakaznik spokojny, lebo nove feature sa dali pridavat vramci tyzdnov (maximalne mesiac a tyzden); aplikacie bezali svizne (ak by nie, tak sa spravil prepis vpriebehu mesiacu, ale zabralo to len jedneho cloveka z cca 5 clenneho tymu) a podobne. Nutno dodat, ze bola snaha o DevOps, agilny vyvoj v style scrum, mikroservisy a podobne.

Re:Nový projekt vs. cizí kód
« Odpověď #22 kdy: 10. 09. 2020, 20:16:03 »
Ja  som zazil projekty, ktore mali pravidlo "program moze byt len tak velky, aby ho jeden koder dokazal za mesiac napisat nanovo". Toto fungovalo fajn.

tohle bylo kdysi i heslo unixu, nebo linuxu. dneska se delaji silene komplexni silenosti.
skoda, ze to v 90 letech nevyslo s plan9 a hurdem a dneska se vsecko resi pomoci virtualnich stroju vmware, virtualbox apod.

puvodne se myslelo, ze operacni systemy se samy postaraji o spousteni vice ruznych oddelenych systemu
na zaklade namespace, oddelenych filesystemu, oddelenych uzivatelu.
bylo by to mene tezkotonazni nez dneska, kdy se ve virtualnim prostredi spousteji cele operacni systemy.


Re:Nový projekt vs. cizí kód
« Odpověď #23 kdy: 10. 09. 2020, 20:19:11 »
Ja  som zazil projekty, ktore mali pravidlo "program moze byt len tak velky, aby ho jeden koder dokazal za mesiac napisat nanovo". Toto fungovalo fajn. V pripade, ze refaktoring by znamenal vela prace, tak sa zvolila taktika "prepiseme to podla uz 10 krat evolvovanych poziadaviek a tentokrat budeme mysliet na viac moznych oziadaviek do buducna". Chytili sa vsetky testy, nasledne kusy kodu (java; balicky) pre parsovanie konfigu, pre matematiku okolo biznisu a pripadne nejake casti pre pracu s databazou, ci parsovanie struktur z externych zdrojov a nasledne jeden clovek za cca mesiac prepisal projekt... Malo to inu architekturu (nie vzdy), bolo to citatelnejsie a hlavne, napisane jednym clovekom. Nasledne dany clovek bol najblizsie obdobie "spravcom" projektu a mal vpodstate zakazane robit bezne ulohy na tom projekte. Mal robit iba review a merge a pripadne nejake diskusie k architekture... Imho to bol fajn pristup. Zakaznik spokojny, lebo nove feature sa dali pridavat vramci tyzdnov (maximalne mesiac a tyzden); aplikacie bezali svizne (ak by nie, tak sa spravil prepis vpriebehu mesiacu, ale zabralo to len jedneho cloveka z cca 5 clenneho tymu) a podobne. Nutno dodat, ze bola snaha o DevOps, agilny vyvoj v style scrum, mikroservisy a podobne.

Tohle skoro chapu.
Pokud mam business logiku kterou akorat nekam naroubuju tak fajn.
Jenze to co vidam je spis ten pripad "zahodit a zacit znova". Vcetne sberu pozadavku od businessu....

luvar

  • ***
  • 126
    • Zobrazit profil
    • E-mail
Re:Nový projekt vs. cizí kód
« Odpověď #24 kdy: 10. 09. 2020, 20:22:10 »
Inak pri dostatocne rozhladenych programatoroch sa bezne odpoveda na vetu "Pouzijeme XYZ, to je vyborne riesenie na ABC!", ze problem ABC vyriesil uz programator z IBM v roku 1982 a XYZ ma prvy komit z minuleho roku... Pri hlbsom zamysleni sa daju najst analogie i medzi necakanymi technologiami, ktore na prvy pohlad riesia rozne problemy, ale v konecnom dosledku su zamenitelne, pokial sa ich vlastnosti vyuziju naplno.

Re:Nový projekt vs. cizí kód
« Odpověď #25 kdy: 10. 09. 2020, 20:22:25 »
Dělat něco měsíc - to je prostě malý projekt a nedá se to srovnat s něčím, na čem dělalo 50 lidí 20 let.

Re:Nový projekt vs. cizí kód
« Odpověď #26 kdy: 10. 09. 2020, 20:30:36 »
Ja taky rad delam neco od piky. Jak tady psal tomas88 kazdeho bavi tvorit. A tvorit neco noveho jeste vic.
Ale ve svem profesnim zivote jsme mel to "štestí" ze jsem dedil kod po nekom cizim. Ted jsem v stavu ze vlastne nic jineho nedelam jen udrzuji cizi kod. Pomalu se stavam odbornikem na prevzeti kodu. Mam jiz par kroku ktere vzdycky udelam. Ucesem kod, napisu testy, zmazu co tam nepatri, odstranim blbosti, udelam update balicku. Hodim to do gitu!!! Skratka z toho polodrahokamu vybrousim drahokam. Vlastne mne to zacina celkem bavit. Potom to predam nekteremu juniorovi i s instrukcema. Ma to jeste jednu vyhodu. Najednou jsme 2 co tomu projektu rozumime.

Re:Nový projekt vs. cizí kód
« Odpověď #27 kdy: 10. 09. 2020, 20:37:27 »
Ja taky rad delam neco od piky. Jak tady psal tomas88 kazdeho bavi tvorit. A tvorit neco noveho jeste vic.
Ale ve svem profesnim zivote jsme mel to "štestí" ze jsem dedil kod po nekom cizim. Ted jsem v stavu ze vlastne nic jineho nedelam jen udrzuji cizi kod. Pomalu se stavam odbornikem na prevzeti kodu. Mam jiz par kroku ktere vzdycky udelam. Ucesem kod, napisu testy, zmazu co tam nepatri, odstranim blbosti, udelam update balicku. Hodim to do gitu!!! Skratka z toho polodrahokamu vybrousim drahokam. Vlastne mne to zacina celkem bavit. Potom to predam nekteremu juniorovi i s instrukcema. Ma to jeste jednu vyhodu. Najednou jsme 2 co tomu projektu rozumime.


to mi pripomina situaci, kdy je treba nejaky projekt/knihovnu zkompilovat v novem systemu.
zdrojaky existuji, build system existuje, ale je treba to cele poladit, at to jde sestavit v systemu XYZ,
to je maso.

Re:Nový projekt vs. cizí kód
« Odpověď #28 kdy: 10. 09. 2020, 22:55:07 »
Uz 15 let se delam vyvoj software. Na ruznych pozicich, v ruznych jazycich, domenach a pro klienty v ruznych castech sveta.
Ptam se protoze pozoruju trend.
Ty dva roky sem si z prstu nevycucal. Je to opakovana zkusenost. Takze muzu rict, ze dela.
Posledni zkusenost je asi mesic stara.
"Cerstve" vyvinuta vec. Posledni work package je v produkci asi pul roku. Vyvoj zacal v prosinci 2018. Business si chrochta, ze to funguje. Opsici jsou taky relativne spokojeny (i kdyz to jsou vecny brucouni...)
A ted sem se dozvedel, ze se mam podilet navrhu neceho co to ma nahradit. A kdyz sem se zeptal architekta u zakaznika jaka je motivace, abych vlastne vedel jaky problem mam resit... tak nevedel...
Rikal, ze ho to vlastne nezajima, protoze na to mame budget tak muzem vyzkouset novou platformu.

Kdybych byl businesak/uzivatel/akcionar .... tak ho asi vystrelim ze cvicek...
Ale jelikoz jsem potencialni dodavatel tak se jdu vybrecet na root a hledat logiku...

A co proc ti to vadi? Evidentne se pohybujes v nejake (pochybne - jak jinak ze) korporatni sfere, kde prava ruka nevi co dela leva. Proste klasika. Tak ale bud rad ze mas praci ne. Nebo proc se pohybujes mezi temito lidma? Evidentne to jejich businessu dava smysl, kdyz na to uvolnili prachy. Chces logiku. Tak ja ti nejakou dam. Treba se jim tam zmenil nejaky vysoky manager a jednim z jeho KPI jsou uspesne realizovane nove IT projekty. Takhle to bejva casto.

BoneFlute

  • *****
  • 1 470
    • Zobrazit profil
Re:Nový projekt vs. cizí kód
« Odpověď #29 kdy: 10. 09. 2020, 23:42:43 »
Já rád dělám na legaci kódu pro klienta. Protože obvykle ten klient už ví, že je v háji, a já umím dělat refactoring tak akorát, abych na jednu stranu nezařízl bussines, a na druhou stranu abych ozdravoval kód. Takže když po letech odcházím, je ten kód obvykle v mnohem lepším stavu.

Vzhledem k tomu, že většinu programátorů se legaci kódu štítí, tak mám skvělou vyjedávací pozici s klientem :-)