Łatwo uzasadnić to pojęcie specyficzne kulturowo, dlatego tak trudno jest wymyślić konkretne przykłady. Jest to termin zakotwiczony w ludziach, którzy mają rozumować.
„Łatwy do uzasadnienia” to tak naprawdę bardzo opisowe zdanie. Jeśli ktoś patrzy na kod i chce zrozumieć, co robi, to łatwo =)
Okej, rozkładam to. Jeśli patrzysz na kod, zwykle chcesz, żeby coś zrobił. Chcesz się upewnić, że robi to, co Twoim zdaniem powinno. Opracowujesz teorie na temat tego, co powinien robić kod, a następnie zastanawiasz się nad tym, aby spróbować argumentować, dlaczego kod rzeczywiście działa. Próbujesz myśleć o kodzie jak człowiek (a nie jak komputer) i próbujesz zracjonalizować argumenty dotyczące tego, co potrafi kod.
Najgorszym przypadkiem „łatwego do uzasadnienia” jest sytuacja, w której jedynym sposobem na zrozumienie tego, co robi kod, jest przechodzenie przez wiersz po wierszu jak maszyna Turinga dla wszystkich danych wejściowych. W takim przypadku jedynym sposobem na uzasadnienie czegokolwiek w kodzie jest przekształcenie się w komputer i wykonanie go w głowie. Te najgorsze przykłady można łatwo zobaczyć w zaciemnionych konkursach programistycznych, takich jak 3 linie PERL, które odszyfrowują RSA:
#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
$/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)
Dla łatwości rozumowania, termin ten jest bardzo kulturalny. Musisz wziąć pod uwagę:
- Jakie umiejętności ma rozumujący? Ile doświadczenia?
- Jakie pytania może mieć osoba odpowiedzialna na temat kodu?
- jak pewny musi być powód?
Każdy z nich wpływa inaczej na „łatwy do uzasadnienia”. Weź przykład umiejętności rozumującego. Kiedy zaczynałem w mojej firmie, zalecano mi rozwijanie skryptów w MATLAB-ie, ponieważ „łatwo jest to uzasadnić”. Dlaczego? Cóż, wszyscy w firmie znali MATLAB. Gdybym wybrał inny język, każdemu byłoby trudniej mnie zrozumieć. Nieważne, że czytelność MATLAB jest okropna w przypadku niektórych zadań, po prostu dlatego, że nie została dla nich zaprojektowana. Później, w miarę rozwoju mojej kariery, Python stał się coraz bardziej popularny. Nagle kod MATLAB stał się „trudny do uzasadnienia”, a Python był językiem preferowanym do pisania kodu, który był łatwy do uzasadnienia.
Zastanów się także, jakie treści może mieć czytelnik. Jeśli możesz polegać na czytniku, który rozpoznaje FFT w określonej składni, „łatwiej jest uzasadnić” kod, jeśli trzymasz się tej składni. Pozwala im spojrzeć na plik tekstowy jako płótno, na którym namalowałeś FFT, bez konieczności wchodzenia w szczegółowe szczegóły. Jeśli używasz C ++, dowiedz się, jak bardzo czytelnicy czują się komfortowo z std
biblioteką. Jak bardzo lubią programowanie funkcjonalne? Niektóre idiomy wychodzące z bibliotek kontenerów są bardzo zależne od preferowanego stylu idomatycznego.
Ważne jest również zrozumienie, na jakie pytania czytelnik może być zainteresowany odpowiedzią. Czy Twoi czytelnicy najbardziej interesują się powierzchownym zrozumieniem kodu, czy też szukają błędów głęboko w jelitach?
To, jak pewny musi być czytelnik, jest w rzeczywistości interesujące. W wielu przypadkach mgliste rozumowanie w rzeczywistości wystarcza, aby wyprowadzić produkt z domu. W innych przypadkach, takich jak oprogramowanie lotu FAA, czytelnik będzie chciał mieć uzasadnienie ironclad. Natknąłem się na przypadek, w którym argumentowałem za użyciem RAII do określonego zadania, ponieważ „Możesz to po prostu skonfigurować i zapomnieć o tym ... zrobi to dobrze”. Powiedziano mi, że się mylę. Ci, którzy zamierzali zastanowić się nad tym kodem, nie byli ludźmi, którzy „chcą zapomnieć o szczegółach”. Dla nich RAII było bardziej jak wiszący czad, zmuszając ich do myślenia o wszystkich rzeczach, które mogą się zdarzyć po opuszczeniu pola widzenia.