Juz troche w sumie doswiadczenia komercyjnego mam, a mimo to ciągle mi sie wydaje ze nie za bardzo idzie mi pisanie naprawde dobrego jakościowo kodu, glownie przez niedbalosc o to w mojej obecnej firmie.
Doświadczenie komercyjne != pisanie czystego kodu.
Są firmy, w których się dba o to, są firmy, w których się na to kładzie lachę. Ty trafiłeś do takiej, gdzie się kładzie lachę. Wnioski sam sobie wysnuj...
Nie mówie tutaj o jakichś architekturach, ale o takim prostym DRY
DRY - to akurat najprostsze. Wystarczy:
- nie stosować metody kopiuj-wklej
- zamiast robić zmienne typu zmienna1, zmienna2, zmienna3, zastosować tablicę/listę
- starać się ogranicząć ify. Szczególnie, jak masz w jednej funkcji z 5 podobnych ifów, które niewiele się różnią zarówno pod kątem warunku, jak i tego co jest wykonywane jeśli warunek jest prawdziwy -- to wiedz, że coś się dzieje i że jest tu code smell...
- wydzielać powtarzającą się logikę gdzieś (np. do klasy, do funkcji, ale czasem wystarczy do zwykłej pętli)
- jeśli potrzeba, to wydzielone funkcjonalności wsadzić do osobnych plików
- pamiętać o decouplingu
- umieć postrzegać podobieństwa różnych use'caseów. Jeśli masz mysz, kota i psa, to nie musisz rozpatrywać każdego przypadku z osobna, wystarczy, że gdzieś zrobisz jakąś strukturę danych dla każdego zwierzęcia, gdzie wypiszesz cechy dystynktywne dla każdego zwierzaka (np. pokarm, wygląd itp.) a potem będziesz pobierać te dane z tej struktury. Uogólniaj po prostu.
czyli nie:
PSEUDOKOD
if (kot) {
jedzMieso()
}
if (mysz) {
jedzSer()
}
tylko
PSEUDOKOD
kot.jedzenie = 'mięso';
mysz.jedzenie = 'ser';
...
zwierze = kot
jedz(zwierze, zwierze.jedzenie);
może to banał, ale często widzę, że ludzie tego nie umieją uogólniać, nawet zaawansowani rzekomo programiści. Łatwiej jest im zrobić kopiuj wklejkę i zmodyfikować niż stworzyć strukturę/słownik/klasę/obiekt z danymi.
, KISS.
KISS - to akurat najtrudniejsze. Niestety dopiero dochodzę do tego etapu, więc nie mam sprawdzonych recept. Zazwyczaj dochodzę do zachowania zasady KISS po iluś próbach przepisania czegoś od zera. Niestety nie zawsze mogę sobie na to pozwolić (w projektach komercyjnych, gdzie goni deadline często trzeba zrobić jakkolwiek, zamiast najlepiej).
Anyway, jest taki fajny cytat o zasadzie KISS:
Doskonałość osiąga się nie wtedy, kiedy nie można już nic dodać, ale kiedy nie można nic ująć.
Antoine de Saint-Exupéry
zazwyczaj na początku człowiek napakuje niepotrzebnie kod podobnie do tego, jak się pakuje wędliny wodą, żeby więcej ważyły. dopiero potem się zauważa, że nie chodzi o to, ile ficzerów czy ile wzorców projektowych się włoży do kodu, ale raczej bardziej ważne jest to, żeby w projekcie znajdowało się tylko to, co naprawdę potrzebne.
Nie wiem w jakim języku programujesz, ale np. jesli chodzi o JavaScript to radziłbym się zainteresować projektami Dana Abramova (Redux i toole do niego), bo to gość, który robi biblioteki właśnie w stylu KISS (przynajmniej na poziomie koncepcji oraz ich używania, co do kodu to mało zaglądałem, ale też ponoć dość prosty kod pisze).