Pracuję z javascript przez ostatnie 4 lata. Jestem bardzo pewny swoich umiejętności rozwiązywania problemów i widzę, że poprawia się jakość mojego kodu. Staram się być na bieżąco ze społecznością i obecnie pracuję z ES2015 i React.js. Wydaje mi się jednak, że nie jestem w stanie pojąć wzorców programowania. Wiem, gdzie znaleźć zasoby na ten temat i już czytałem o tym książki. Przy podejmowaniu decyzji dotyczących struktury projektu polegam na moich starszych współpracownikach, ale nie mam z tym problemu.
Ilekroć muszę coś zacząć sam, szukam tych dwóch ścieżek: Jeśli używam dużej biblioteki / frameworka, takiego jak React.js, mam tendencję do kopiowania tego, co robi społeczność; Jeśli jestem na czymś mniejszym, będę używał wzoru modułu. Wiem, że kiedy lepiej zrozumiem ten temat, będę mógł podejmować lepsze decyzje, ale na razie jestem całkowicie zagubiony.
Czy powinienem poszukać wyższego wykształcenia w tym zakresie? Czy potrzebuję mentora na ten temat? Czy jestem po prostu głupi? Czy to naprawdę tak trudne do zrozumienia?
źródło
Odpowiedzi:
Wzorce projektowania oprogramowania są dobrze znanymi rozwiązaniami znanych problemów. Sposób, w jaki je rozumiesz, polega na uczeniu się wzorców, zrozumieniu ich działania i wiedzeniu, kiedy należy zastosować każdy z nich do projektu oprogramowania.
Sposób uczenia się wzorców projektowych polega na ich analizowaniu, pojedynczo. To ciągły proces edukacji. Jeśli chcesz zmniejszyć ślad uczenia się, przestudiuj wzorce, które odnoszą się bezpośrednio do aktualnie używanych technologii.
Kilka ważnych rzeczy na temat wzorców projektowych:
Niektóre wzory mają charakter architektoniczny. MVC i MVVM są przykładami takich wzorców. Stosujesz takie wzorce, gdy potrzebujesz związanych z nimi korzyści organizacyjnych i strukturalnych.
Niektóre wzorce projektowe są obejściem braków w językach programowania. Nie potrzebujesz tych wzorów, jeśli używasz bardziej ekspresyjnego języka programowania, ale często nie możesz dokonać tego wyboru. Większość wzorców GoF należy do tej kategorii .
Użyj wzorca oprogramowania tylko wtedy, gdy próbujesz rozwiązać problem, który wzorzec jest specjalnie zaprojektowany do rozwiązania. Jeśli piszesz aplikację, łącząc wzory oprogramowania, robisz to źle.
Nie istnieje żaden wzorzec oprogramowania dla każdego istniejącego problemu komputerowego. W takim przypadku programowanie byłoby jedynie ćwiczeniem polegającym na dopasowaniu wzorców.
Niektóre wzory są w rzeczywistości anty-wzorami. Dodatkowa złożoność, którą wprowadzają te wzorce, przewyższa korzyści, które zapewniają. Będziesz musiał sam zdecydować, na podstawie wzoru, który z tych wzorów unikniesz.
źródło
Podejście każdego do uczenia się jest trochę inne i nie mam pojęcia, jakie jest twoje ogólne podejście, ale wierzę, że wyrządziłeś sobie krzywdę, oznaczając siebie jako „głupiego”.
Osobiście z moich obserwacji tego, co wielu nazwałoby „odnoszącymi sukcesy” inżynierami, projektantami itp., Wszyscy mają wspólny motyw do nauki: „doświadczenie”. Wierzę, że jest to twoja „wyższa edukacja” i nauczysz się z niej szybciej niż kupowanie ton książek w Amazon i czytanie ich (mój zły nawyk).
Na przykład weź wzorzec GOF, taki jak wzorzec poleceń, i zaimplementuj go w wybranym języku. Dowiedz się, jakie korzyści to daje i jakie wady. Różne książki na temat wzorców projektowych wyjaśnią ci to, ale uważam, że lepiej jest zastosować tę wiedzę praktycznie i wyciągać z niej wnioski. Nie lekceważ materiałów do czytania, mają one swój cel, ale świat IT nie jest ćwiczeniem podręcznika. To powiedziawszy, to moja opinia i pogląd na świat IT, a częściowo stanowi własną walkę na początku mojej kariery w inżynierii oprogramowania. Poważnym problemem, jaki widzę, nawet w przypadku bardzo doświadczonych programistów, jest niecierpliwość i zapominanie o czerpaniu radości z tego, co robią. Więc nie spiesz się z tym, czego się uczysz i pamiętaj, aby naprawdę czerpać radość z tego, co robisz, w przeciwnym razie po co męczyć się w to, aby w to inwestować?
Ponadto skorzystaj z praktycznego doświadczenia innych osób. Istnieje mnóstwo rozwiązań typu open source, zarówno złych, jak i dobrych, i można się z nich uczyć. Spójrz, jak zastosowali wzorce i zastanów się, jak inaczej byś sobie z tym poradził.
Tak więc, moja ogólna rada jest taka, że jeśli uważasz, że twoje podejście jest złe, zmień je. Spójrz na ludzi wokół ciebie, którzy czują, że uczą się materiału, który według ciebie nie chwytasz, i spójrz na to, co robią, a nawet zapytaj ich.
źródło
Krótka odpowiedź brzmi: nie potrzebujesz ich. Możesz pisać kod bez nich. Jak powiedział Matthew w komentarzach, jest to szczególnie prawdziwe w JavaScript, gdzie język jest dość elastyczny, a projekty są zwykle mniejsze. Ale jeśli programujesz od 4 lat, trudno mi uwierzyć, że nie natknąłeś się na rzeczy, które wydają się powtarzalne lub niezręczne. To te obszary, które albo odkrywacie na nowo, albo brakuje wzorców projektowych.
Przykład: system zdarzeń JavaScript jest często nieodpowiedni do danego zadania. Czy nigdy nie chciałeś łączyć lub przekształcać strumieni wydarzeń? Czy ta seria wydarzeń była sama w sobie pierwszorzędnymi wartościami? Potrzebujesz wzorów Mediatora i / lub Obserwatora. Potrzebujesz dwukierunkowego powiązania danych? Ta sama historia
Czy kruchość hierarchii prototypów spadła? Wzory Mixin / Trait / Subclass Factory na ratunek.
źródło
Znajdź mentora, kogoś z bardzo dobrym doświadczeniem do nauki. Zadaj mu pytanie, obejrzyj jego kod, prześlij recenzję kodu i spróbuj z nim współpracować. To najlepszy sposób na zwiększenie umiejętności kodowania.
dodatkowy:
Współpracuj przy prostym projekcie OSS, który Ci się podoba
Jeśli istnieją dwa sposoby rozwiązania tego samego problemu, zawsze wybieraj prostsze
Zdobądź dodatkowe doświadczenie z pobocznymi projektami, w których możesz popełniać wszelkiego rodzaju dziwne błędy, a nauczysz się wzoru projektowego „na poważnie” (tm)
źródło