Sunday 24 March 2024

kod inżynierski

Jak poznać? No właśnie. Problem zdaje się palący, a palenie szkodzi (zwłaszcza głupa, ew. Marzanny, ale jak nie spłonie, to się topi, a może na odwyrtkę). Skoro tak, to poniżej niewielki bezpłatny tutorial. Zwykle poznaję głupawy kod poinżynierski po

1. Sztucznie nieoczywistych schematach, łatwych do rozplątania i uproszczenia;

2. Nałogowym nadużywaniu ++ z lewej, gdy różnicy nie ma żadnej, pętli for z pustymi miejscami między średnikami; while spokojnie by wystarczyło;

3. Bardzo wery profeszjonalnym nazewnictwie zmiennych (np. podkreślnik na początku nazwy zm. lokalnej, jeśli to jest tablica i po niej sobie łazimy, iterator koniecznie z dwoma podkreślnikami) - takie coś widywałem tylko w nagłówkach do C/C++, z których rozumiałem tyle, ile wiadomo;

4. Jeśli brakuje braku dokumentacji, to napisana jest kiepsko, niejasno, miejscami poliszingliszem, ew. zostawiony jest inglisz, bo kod wzięty skądś; czasem poliszinglisz dotyczy starań wobec pkt. 3 - choćby taka garstka atrybutów "IsIgnore", "IsRequire", czasem "IsRequied". No i uczta Baltazara, a Baltazar, że sami się uczta, Baltazar już do szkół chadzał. "Property typy is not enum value", kurwa. Albo: string.Format("Writed {0} records", _commandCount) - very ładnie, myster ingenieeer kiemist;

5. Zostawianiu niedziałających odwołań do obiektów, czasem nieco zakamuflowanych. Choćby taki kwiatek:

if (EnumConverter.IsEnum(propertyType))
{
bool bEnumIgnoreCases = 
            propertyInfo.GetCustomAttributes(typeof(EnumIgnoreCases), true).Count() != 0;
return (object value) => EnumConverter.ToString(value);
}

No i po chuja ten bool? Z 4 odwołań do EnumIgnoreCases zostały 2. I nie wiadomo, czy te 2 powinny były być wzorcem dla pozostałych, czy nawzajem. A inteligiętny człek miałby to wszystko w 1 klasie. Okazało się, że takich klas było 4, z czego 2 rzeczywiście tego bool'a potrzebowały. Widać Ctrl-C-Ctrl-V odchodziło, i to intensywnie. Szkoda, że myślenie i czyszczenie już mniej, jeśli w ogóle;

6. Posługiwaniu się słownikami zamiast hashsetów czy nawet list z banalnym "jeśli nie ma, to dodaj" - po kiego xuja przechowywać pary, gdzie na drugiej pozycji po prostu wbija się np. 1 czy 2, bo nie zna się jakiegoś-tam typu - niechby i hashset był wyrafinowany i ew. szybki, ale jednak lista z w.w. warunkiem jest do ogarnięcia, nawet przez - przysłowiową już - małpę z porażeniem mózgowym;

7. var ponad wszystko, typ jest widocznie be; chyba naleciałość z Dżawaskryptu (albo Pascala, jak kto starsza trzcina);

8. Dziedziczenie jest złe, jakiekolwiek dostrzeganie podobieństw między zestawami zmiennych podobnego typu czy postaci funkcji jest niewskazane, szkodliwe ("bo te klasy oznaczają coś innego" - tak, kurwa, w sofcie dla pań księgowych ma być oddzielnie umowa o dzieło, o pracę (słyszał ktoś?) i b2b, a że wszystkie mają zapewne Id, jakiś wewnątrzplacówkowy nr, nad sobą osobnika związanego tą umową i placówkę, zakres dat obowiązywania etcerata. Nie, to inne umowy, to inaczej - rzecze inżynier. I gwóźdź mu w brak mózgu.

Bo właśnie że kurwa w dużej części prawie to samo, modulo szczegóły - to w "polach" czy przechowywanych zmiennych (prymitywnych albo nie). A funkcje przynależne takiemu czemuś też. Ile to jest trzy japka plus dwie ślifki? No pięć owoców, kto tego nie umie dostrzec, ma problem... Zresztą chuj z dziedziczeniem, można inaczej unikać powtarzania się.

8. Apropos 7: uporczywe kopiowanie kodu. (Choć spotykałem raz czy drugi sytuację, że czytelniej było powtarzać coś 4-5 linijkowego parę razy i brnięcie w uogólnianie i oszczędzanie kodu za wszelką cenę było możliwe, ale rzeczywiście zaciemniało obraz - spokojnie, trochę ćwiczenia i przestanie zaciemniać.)

9. Bardzo humorystyczne rozwiązania w razie błędów/niepowodzeń. return null; to lajcik, najweselszy kawałek objawił się przy jakimś eksporcie do pliku (pech chciał, że do arkusza karkulacyjnego znanej i jakże poważanej firmy) - kontrola, czy tytułów kolumn jest tyle, co spodziewanych pól do wypełnienia. Jeśli nie - return; i absolutne zero sygnału, że coś nie wyszło. Kurwa twoja mać, inżynierze... Kilka klas obok: klecony samodzielnie parser csv (po chuja, skoro istnieją gotowce i to chyba wraz z językiem?) - na wypadek odczytu aż zera linii z pustego pliku - cyk, result.ok = true i zwraca pustaka. Można? Można.

Jasne, że dla endjuzera nic praktycznie od tego nie zależy, jeśli całość działa. A u inżyniera owszem, wykonuje się. Ale późniejsze modyfikacje to zgroza, krew, pot, łzy i zgrzytanie sztucznej szczęki.

Jeszcze weselej jest z postępowaniem z użytkownikiem, szczytem jest korelacja między oczekiwanym stopniem jego przytomności i świadomości ew. zaniedbań itp. (i zerem starań, żeby jednak tu i ówdzie ostrzec, za łapkę poprowadzić itp.) a podejściem do kodowania w podobnym wymiarze. Raz wyszła ujemna - bo takie C to choroba umysłowa, bo ręcznie trzeba zwalniać pamięć i mało co jest podane na talerzu. Nu, okiej, tawariszczi ajtiszniki... I to - niestety - nie jest już sygnał od inżyniera. Za to od solidarucha, któremu widać etos i styropian musi we łbie miesza.

To tyle na dziś, towarzysze. "Żądasz czystości, zachowaj ją sam" - tak było w łazience napisane w podstawówce. Albo "Czyste ręce - zdrowia więcej", co w naszej klasie jeden zgrywus przekwalifikował na "Czyste ręce - zdrowia mniej-więcej". Hehe! Nawet pamiętam, że u tego zgrywusa na metrażu usłyszałem po raz pierwszy "ZChN zbliża się" wiadomego zespołu.

No comments:

Post a Comment