Jak nauczyć się programować w czystości [Wzorce projektowe]

1

Ale co on AAA robi?

0
LukeJL napisał(a):
stivens napisał(a):

Pierwszym i najwazniejszym krokiem jest niemutowalnosc :)

somekind napisał(a):

Niemutowalność jest istotna, ale to dodatek, który nawet nie zawsze daje się zastosować.

No właśnie, niemutowalność i gry to niekoniecznie muszą iść w parze (nie musi to być wydajne, żeby tworzyć cały czas nowe obiekty i odśmiecać stare)

Czasem lepiej jest panować nad mutacjami, mieć je pod kontrolą, rozumieć, że są częścią układanki, ale z drugiej strony pamiętać o konsekwencjach.

Myślę, że trzeba trochę popisać spaghetti kodu, takiego ze zmiennymi globalnymi i z najgorszymi praktykami, żeby zrozumieć, że jednak mutacje latające po całej apce to nie musi być dobry pomysł (dobrze, żeby to był kod oparty na eventach, czy asynchroniczności, żeby jeszcze boleśniej to odczuć). Ale czy zaraz od razu popadać w drugą skrajność i wszystko robić niemutowalne? Nie zawsze jest taka potrzeba.

"shared mutable state is the root of evil", ale samo "mutable state" nie musi być złem. Tak samo nie musi być złem trzymanie stanu, który się zmienia pod spodem (więc jest mutowalny), ale współdzielenie tego stanu tylko w określonych okolicznościach i w określony sposób.

Tylko w idelogiach są rzeczy 100% dobre i 100% złe - w realnym życiu jest inaczej. Masz plusa
Np takie "lekarstwo" immutabilistów zwykle znane jako "with"

IJabłko jabłko2 = jabłko1.withUpiecz();

Ja też wolę mieć dwa jabłka niż jedno :)

0

Dwa podejścia:

1) Z wiedzą - jak masz wiedzę wtedy masz większe szanse, że unikniesz problemów wynikających ze sposobu użycia przeglądarki, bazy czy też dodatkowych narzędzi na których docelowo bazujesz. W oprogramowaniu wszystko ma jakiś dodatkowy narzut i wady o których można długo dyskutować. Stąd pracę z komputerem warto postrzegać jak dialog w którym chodzi o korzystne kompromisy z perspektywy celu jaki zamierza się osiągnąć. Wiedza pod tym względem umożliwia podjęcie lepszych i przede wszystkim świadomych decyzji, pozwala wypracować prostsze rozwiązania, unikać rażących błędów itd

2) Natomiast jak nie masz wystarczająco dużo wiedzy, wtedy pozostaje Ci bycie pilnym uczniem. Musisz wtedy uważnie obserwować to do czego prowadzi Cię sam projekt, musisz zadawać sobie pytania o rzeczy które budzą Twoje wątpliwości, musisz uwzględnić kontekst i podejmować próby patrzenia na problem z różnych stron, po to by móc zrozumieć istotę problemu i wiedzieć jak sie do niego ustosunkować.

Co do wzorców i przeróżnych technik to są one w pewnym stopniu pomocne, ponieważ pozwalają spojrzeć na problem z innej strony. Natomiast one nie zastąpią myślenia. Jestem pewien, że ktoś kto nie zna wzorców, zacznie je nieświadomie stosować o ile po drodze zacznie analizować problem oraz cel do jakiego zmierza.

0

Mi bardzo pomogło patrzenie pod kątem code reusability. Świadomość, że kod będę jeszcze używał w kolejnych projektach, zmusza mnie do myślenia bardziej uniwersalnego. Konkretny system robi to co powinien, nie mniej, nie więcej. Rozwijam sobie bazę (zwał jak zwał, może framework ładniej brzmi) z kodem od kilku projektów. Gdy widzę, że czegoś brakuje lub coś tu nie gra, to modyfikuję ją w taki sposób, by działała poprawnie i dla poprzednich projektów i aktualnych.

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