Jak nauczyć się sztuki mienia wy*ebane na jakość kodu?

1
Shalom napisał(a):

@Stary Wiarus to co napisałeś jest faktem, ale tylko dla małych aplikacji których nikt nie będzie rozwijał. Jak klepiesz coś co ma być rozwijane przez lata, albo coś co ma obsługiwać krytyczne systemy (satelity, elektrownie etc) to zwyczajnie nie możesz sobie pozwolić na słaby kod, bo koszty modyfikacji i poprawek będą kolosalne.

G prawda. Kod napisany perfekcyjnie 10 lat temu, dziś jest uznawany za gówniany i ciężki w utrzymaniu. Miałem aplikację w MFC C++ napisaną zajebiście, zgodnie ze wszystkimi ówczesnymi praktykami jakie tylko można było zastosować.

Niestety, dziś jest to uznawane za trudne w utrzymaniu i kijem nikt nie chce tego ruszać. Za 10 lat to samo będzie z waszymi wychuchanymi wywzorvowanymi pięknymi aplikacjami w .Net i Javie - nikt tego nie zechce nawet dotknąć. Mogę wam to zagwarantować.

5

Tak czytam komentarze w stylu 'jak widzę niefajny kod to go zmieniam' i zastanawiam się czy wy pracujecie nad jakimiś malutkimi projektami czy WTF? Pracuję przy bardzo dużym systemie, którego używa mnóstwo firm w Polsce, projekt ma ponad 10 lat - ogólnie są w nim zastosowane wszystkie trendy jakie panowały w programowaniu od 10 lat wstecz do teraz, tzw. 8 - tysięczniki to jeszcze jest w porządku, w wielu miejscach jest znacznie gorzej, wyobraźcie też sobie, że przez te 10 lat logika biznesowa zmieniała się wielokrotnie więc logika w kodzie jest bardzo zagmatwana, nie ma takiej opcji żeby zmieniać niefajny kod bo trzeba by było przepisywać cały moduł :)

0

Robiłem dwa małe projekty w KO3, w samym tylko katalogu application, w jednym projekcie ok 26K linii kodu, w drugim ok. połowa tego. To co mi pokazuje raport z PHP Metrics nie jest powalające, zastanawiam się też czy na tym FW jest w ogóle możliwe uzyskanie jakichś powalających wyników? Zaczynam już rozumieć dlaczego Symfony tu rządzi.

Nie boję się rozbudowy i realizacji nowych zachcianek klientów, gorzej z refaktoryzacją albo zmianą działania poszczególnych metod w kontrolerach. Na szczęście w przypadku jakiegokolwiek błędu objawiającego się w praktyce (500) Internal Server Error mam automatyczny raport, na moją skrzynkę mail po czymś takim by przyszła informacja i to nawet z fragmentami kodu gdzie dokładnie to wystąpiło. Czasami było tak, że z pozoru aplikacja działała poprawnie i niby wszystko OK a tu na mail przyszło powiadomienie o jakimś błędzie, zastanawiam się tylko czy tego typu rzeczy można by było tak łatwo wykryć testem jednostkowym? Zwłaszcza jeśli chodzi o integrację z zewnętrznymi serwisami do jakiegoś logowania OAuth czy inne tego typu rzeczy.

Generalnie macie rację z tymi dobrymi praktykami. Ale liczy się jeszcze np. odpowiednia organizacja plików i podkatalogów i ich nazewnictwo a nie tylko SOLID, KISS, DRY itd. No bo chyba nikt normalny nie będzie trzymał wszystkich klas kontrolerów w jednym tylko katalogu.

2
Krwawy Szczur napisał(a):
Shalom napisał(a):

@Stary Wiarus to co napisałeś jest faktem, ale tylko dla małych aplikacji których nikt nie będzie rozwijał. Jak klepiesz coś co ma być rozwijane przez lata, albo coś co ma obsługiwać krytyczne systemy (satelity, elektrownie etc) to zwyczajnie nie możesz sobie pozwolić na słaby kod, bo koszty modyfikacji i poprawek będą kolosalne.

G prawda. Kod napisany perfekcyjnie 10 lat temu, dziś jest uznawany za gówniany i ciężki w utrzymaniu. Miałem aplikację w MFC C++ napisaną zajebiście, zgodnie ze wszystkimi ówczesnymi praktykami jakie tylko można było zastosować.

Niestety, dziś jest to uznawane za trudne w utrzymaniu i kijem nikt nie chce tego ruszać. Za 10 lat to samo będzie z waszymi wychuchanymi wywzorvowanymi pięknymi aplikacjami w .Net i Javie - nikt tego nie zechce nawet dotknąć. Mogę wam to zagwarantować.

MVC jest z 1970'; 10 lat temu był 2006; większość wzorców projektowych było w 2006 już solidnie utwardzonymi; MFC już wtedy było stare;

Podsumowując: nie chce mi się wierzyć, że ktoś w 2006 brał mfc(!) i pisal perfekcyjny kod, który teraz jest słaby.

Słaby kod jest słaby niezależnie od czasu.

1

Jak widze niefajny kod to go zmieniam, bo przeczytałę książkę:

user image

1

Bardzo prosto. Zrozumieć swoje miejsce w stadzie i przestać uważać się za programistycznego mesjasza. Jak to osiągniesz to pójdzie z górki.

3
Krwawy Szczur napisał(a):

G prawda. Kod napisany perfekcyjnie 10 lat temu, dziś jest uznawany za gówniany i ciężki w utrzymaniu. Miałem aplikację w MFC C++ napisaną zajebiście, zgodnie ze wszystkimi ówczesnymi praktykami jakie tylko można było zastosować.

A to dobre praktyki są czymś zależnym od czasu? 10 lat temu nie znano jeszcze pętli i funkcji, więc kopiowano kod? SRP albo DI były zakazane?
A kiedy GoF opublikowali swoją książkę o wzorcach projektowych? A w jakim języku są przykłady?

Niestety, dziś jest to uznawane za trudne w utrzymaniu i kijem nikt nie chce tego ruszać. Za 10 lat to samo będzie z waszymi wychuchanymi wywzorvowanymi pięknymi aplikacjami w .Net i Javie - nikt tego nie zechce nawet dotknąć. Mogę wam to zagwarantować.

Co do MFC - trudno, żeby np. nowi na rynku programiści chcieli pisać w czymś, co jest starsze od nich, a ponadto istnieją do tego dużo przyjemniejsze alternatywy.

Za 10 lat to samo będzie z waszymi wychuchanymi wywzorvowanymi pięknymi aplikacjami w .Net i Javie - nikt tego nie zechce nawet dotknąć. Mogę wam to zagwarantować.

Problem jest właśnie w tym, że może z 1% aplikacji trzyma się jakichś dobrych praktyk. Większość kodu jest słaba, więc masz rację - za 10 lat nikt nie będzie chciał tego ruszać.

wiewiorek napisał(a):

Tak czytam komentarze w stylu 'jak widzę niefajny kod to go zmieniam' i zastanawiam się czy wy pracujecie nad jakimiś malutkimi projektami czy WTF? Pracuję przy bardzo dużym systemie, którego używa mnóstwo firm w Polsce, projekt ma ponad 10 lat - ogólnie są w nim zastosowane wszystkie trendy jakie panowały w programowaniu od 10 lat wstecz do teraz, tzw. 8 - tysięczniki to jeszcze jest w porządku, w wielu miejscach jest znacznie gorzej, wyobraźcie też sobie, że przez te 10 lat logika biznesowa zmieniała się wielokrotnie więc logika w kodzie jest bardzo zagmatwana, nie ma takiej opcji żeby zmieniać niefajny kod bo trzeba by było przepisywać cały moduł :)

Każde podzielenie metody na mniejsze, znalezienie powtórzeń w kodzie i zrobienie z nich metody, oddelegowanie wykonania czegoś do innej klasy - to już zmiana kodu na lepsze. Nie trzeba przepisywać od razu całości. Często jest tak, że jak zaczynasz długą metodę dzielić na mniejsze, to potem okazuje się, że można ich wielokrotnie używać także w innych długich metodach, więc ostatecznie z ośmiotysięcznika robi się 1000 linii w 10 klasach.

Nie doszłoby do takiego syfu, gdyby ludzie stosowali zasadę harcerza zamiast zasady zbitej szyby. Gdyby nie mówili, że nie można nic zrobić dobrze, tylko trzeba przepisać od nowa cały moduł. No i gdyby od początku trzymali się SRP, DRY i kilku wzorców projektowych ograniczających ifologię.

drorat1 napisał(a):

Czasami było tak, że z pozoru aplikacja działała poprawnie i niby wszystko OK a tu na mail przyszło powiadomienie o jakimś błędzie, zastanawiam się tylko czy tego typu rzeczy można by było tak łatwo wykryć testem jednostkowym? Zwłaszcza jeśli chodzi o integrację z zewnętrznymi serwisami do jakiegoś logowania OAuth czy inne tego typu rzeczy.

Jak najbardziej, po prostu przemyśl testy pod kątem różnych błędów, które zewnętrzny serwis może zwrócić. Sam serwis opakuj w jakąś klasę dostępową, a potem ją zamockuj w testach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1