Jak stać się dobrym w analizie i projektowaniu obiektowym (OOAD)?


26

Stanie się dobrym analizatorem i projektantem może być bardzo korzystne dla programisty. Ale są na pewno przeszkody. Nie wszyscy są zainteresowani OOAD i nie każda zainteresowana osoba zna ścieżkę. Czy dobry OOAD powinien znać wiele języków OO? A może powinien on / ona nie zaliczyć projektów? Jak stać się dobrym OOAD?

Odpowiedzi:


34

Ludzie, którzy nie są zainteresowani, tworzą własne przeszkody. Nie mogę się tym martwić.

Dla tych, którzy nie znają ścieżki, sugeruję:

  • Uważam, że każdy język, którego się uczę, czyni mnie lepszym programistą. Wiele można przenieść z każdego języka na inny, o ile znajdziesz społeczność.
  • Uczysz się więcej z porażki niż z sukcesu, ale staraj się to robić we własnym czasie. Zawodowo zaufaj osobom z większym doświadczeniem, przynajmniej przez pewien czas - ale nie bój się pytać „Dlaczego?”.
  • Poznaj wszystkie pięć zasad SOLID i dowiedz się, dlaczego one istnieją. Żadna z nich nie jest zasadami, ale są dobrymi wytycznymi, gdy się zgubisz.
  • Test Driven Development znacznie poprawił moje umiejętności projektowania OO niż wszystko, czego się kiedykolwiek nauczyłem.
  • Nie będziecie najlepsi, dopóki nie przejdziecie od inżynierii do nadinżynierii, a potem nie znajdziecie właściwej równowagi (bliżej tego drugiego).
  • Właściwie, zdrap to, nigdy nie będziesz tak dobry, jak dwa lata później.
  • Czytaj dużo książek i blogów, ale nie bierz nic za ewangelię. Ta branża wciąż nie znalazła i może nigdy nie znajdzie idealnej ścieżki.
  • Na pewno poznaj wzorce projektowe, ale nie szukaj miejsc do ich wykorzystania, po prostu wykorzystaj je jako środek ułatwiający komunikację.

Mam nadzieję, że to pomoże.


1
Dobra lista @pdr. +1
Saeed Neamati

5
+1 „nadal nie znalazł i może nigdy nie znaleźć idealnej ścieżki”.
ocodo

1
+1 „Rozwój oparty na testach znacznie poprawił moje umiejętności projektowania OO niż wszystko, czego się kiedykolwiek nauczyłem”.
kevin cline



5

Myślę, że aby w pełni docenić model OO, musisz mieć doświadczenie nieudane w technikach programowania innych niż OO. Możesz zrozumieć OO wewnątrz i na zewnątrz, ale aby to docenić i uszanować, musi to być błyszczące nowe narzędzie, które zastępuje stare zardzewiałe, które nie całkiem wykonało zadanie.

Sam uczyłem się przez 7 lat, zanim ostatecznie nauczyłem się OO na poziomie Java na studiach. Wcześniej ciągle budowałem te projekty, a one stawały się tak duże, że zapomniałem, co się do cholery dzieje. Byłyby nieporęczne, niezorganizowane i wymagałyby dużej konserwacji, aby wprowadzić drobne zmiany. Zasadniczo ciągle znajdowałem się w kłopocie z moim kodem i ciągle zaczynam od nowa.

Zajęło mi trochę czasu, aby wyciągnąć głowę z liniowego projektu, który przyjąłem, ale kiedy w pełni zrozumiałem model OO, to było jak Eureka! Byłem w stanie samodzielnie kodować znacznie bardziej złożone projekty, a moja wydajność przeszła przez dach po nauce takich pojęć, jak dziedziczenie. Nie marnuję czasu na przepisywanie kodu ani rozpoczynanie od nowa, ponieważ obiektywnie wszystko ma sens i jest po prostu intuicyjne.

Moim zdaniem każdy programista powinien znać tyle języków, ile może. To sprawi, że będą bardziej doświadczonym weteranem, niezależnie od tego, czy jest to OO, czy nie. Kiedy zrozumiesz OO, możesz wziąć te techniki i zastosować je wszędzie tam, gdzie są one wdrożone.

IMHO, jeśli nie rozumiesz lub nie chcesz uczyć się OO, będziesz nieodpowiednio wyposażony na polu bitwy życia. Coraz więcej firm korzysta z nowszych języków OO. Nie widzę żadnego powodu, aby nie znać modelu OO w dzisiejszych czasach.

W zależności od tego, jak osoba się uczy, to od niej zależy, w jaki sposób chce nauczyć się modelu. Osobiście najlepiej uczę się, gdy ktoś mnie uczy, dlatego chodzenie na zajęcia z Java I i Java II naprawdę zrobiło dla mnie dużą różnicę. Poleciłbym wzięcie inżynierii oprogramowania na studia lub po prostu przejście do trybu online i poszukiwanie samouczków OO, jeśli nie masz dostępu do kursów uniwersyteckich lub chcesz się uczyć w wolnym czasie.

Kiedy wracam myślami do tego, jak zostało mi to opisane, mówię; jabłko to jabłko, a pomarańcza to pomarańcza. Tak, oba spadają z drzew, ale są to dwa zupełnie różne owoce i leży w tym twoja harmonia.


1
Czy chodziło Ci o niepowodzenie w programowaniu funkcjonalnym, czy o niepowodzenie w programowaniu proceduralnym?
Andrew Grimm,

Niepowodzenie w funkcjonalnym programowaniu, ale nie w opanowaniu. Mam na myśli niepowodzenie w udanym wdrożeniu z powodu jego ograniczeń.
Styler

Zdecydowanie miałeś na myśli programowanie funkcjonalne, a nie programowe?
Andrew Grimm

Programowanie inne niż OO.
Styler

2
Zdecydowanie sugerowałbym edytowanie tego, ponieważ nie-OO! = Funkcjonalny przy dowolnym stopniu wyobraźni. Rzeczy mogą być nawet jedno i drugie.
Mag

0

Zawsze są przeszkody dla zainteresowanych lub nie, ale kontekst i dotkliwość mogą się różnić.

Nie musisz uczyć się wielu języków dla koncepcji OO, zacznij od jednego języka, który ci się podoba, z czasem uzyskasz mocną pozycję na tym języku, opublikuj to, co jest możliwe, aby zbadać niektóre rzeczy, które zrobiłeś już i spróbuj wykonać to samo w innym języku. Specjalizacja w jednym języku pomaga w przejściu na nowe, ponieważ będziesz mieć punkt odniesienia do oceny.

Każdy projekt jest raczej doświadczeniem edukacyjnym niż jego sukcesem, ważne jest to, jak dobrze dostosowałeś funkcje do jak najlepszego wykorzystania, czasami dobrze jest czytać inne kody i zastanawiać się, jak i dlaczego to zrobiono. Jeśli uda ci się zdobyć mentora, byłoby świetnie. Zawsze znam powód, dla którego wybrano to , a może zrobić to w inny sposób. Spróbuj pracować nad własnym modelem logicznym i projektowym i podrzuć go swojemu seniorowi / mentorowi. W ten sposób podnosisz swoje umiejętności, być może na początku pójdą prosto do kosza, ale wtedy spróbujesz i dowiesz się, co zrobiłeś źle. Iteracyjnie byłoby coraz lepiej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.