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:
{
bool bEnumIgnoreCases =
return (object value) => EnumConverter.ToString(value);
}
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