Jak oceniasz umiejętności projektowania obiektowego? [Zamknięte]

11

jakie spostrzeżenia lub pytania doprowadziłyby cię do ustalenia umiejętności OOAD danej osoby.

Rohan Monga
źródło
Zapytaj ich, czy kropkują swoje ja.
Job

Odpowiedzi:

10

Możesz pokazać w połowie osądzony projekt OO prostego problemu i przedyskutować, co robi, co jest dobre i złe w tym, czy jest wystarczająco elastyczny, co można poprawić i jak.

Jeśli chcesz rozpocząć dyskusję, zapytaj, co dana osoba myśli na temat jakiegoś aspektu kodu, ale nie z wiodącym pytaniem.

Ważne jest, aby pamiętać, że dyskusja jest ważna, a nie, że znałeś wcześniej odpowiedzi. Każdy porządny programista powinien być w stanie wskazać coś na temat kodu, o którym nawet wcześniej nie pomyślałeś.

Guffa
źródło
podoba mi się ta metoda wywiadu, w której jest to dyskusja, a nie pytania i odpowiedzi.
Rohan Monga
5

Omów z osobą problem z otwartym projektem. Zobacz, jak buduje model systemu, jakie pytania są zadawane, jak zmienia się projekt w odpowiedzi na nowe informacje.

Świetnym przykładem - wspomnianym przez Steve'a Yegge'a w jednym z jego postów na blogu - jest poproszenie tej osoby o zaproponowanie modelu obiektowego dla XML.

talonx
źródło
Czy możesz mi podać link :)
Rohan Monga
1
@bronzebeard - Proszę bardzo - sites.google.com/site/steveyegge2/… . Mówi on o modelowaniu HTML OO - ale myślę, że XML może być trudniejszą wersją tego pytania :)
talonx
4

Dobra znajomość wszystkich najpopularniejszych wzorców projektowych może udowodnić, że kandydat faktycznie szukał rozwiązań swoich problemów projektowych.

Możliwość ich omówienia i wiedza, kiedy je zastosować, czy nie, to dobra wskazówka, że ​​je rozumie.

Pomocne może być również zapytanie go o przykładowe zastosowania z jego przeszłych doświadczeń.


źródło
To test wiedzy o tym, jak działa przeciążanie w C #, ale nie jest to test umiejętności projektowania OOAD.
user281377,
Masz całkowitą rację. Zbyt szybko czytam twoje pytanie, zmieniam je.
4
Możesz jednak mieć wiedzę na temat wzorców projektowych i nigdy nie słyszał o tej koncepcji. Używałem takich rzeczy, jak łańcuch odpowiedzialności, obserwatorzy i kontrolerzy na długo zanim dowiedziałem się, że mają nazwiska. Uważaj, aby nie zakładać, że ponieważ ktoś nie zna nazwy wzoru, nie może go używać w sposób kompetentny.
Michael K
@Michael: tak, to z pewnością dlatego lepiej najpierw zapytać, jak rozwiązać pewien problem, a potem porozmawiać o rzeczywistej nazwie wzoru. Wiem, że wiele osób korzysta ze strategii codziennie i nie wiem, jak się to nazywa. Po prostu „stworzyli” to przez samo myślenie, tak jak pierwotna grupa czterech osób. Różnica polega na tym, że ten ostatni napisał książkę na ten temat.
Zauważ, że Gang of Four wzoruje się na widzeniu kodu OO używanego w innych projektach. W żadnym wypadku nie przypisują sobie żadnego z projektów, tylko je rozpoznają i konsekwentnie opisują.
Macneil
3

Nie podawaj quizu słownictwa. „Zdefiniuj dziedziczenie” lub „nazwij 3 cechy projektu OO” to pytania, które nie powiedzą ci nic o umiejętnościach danej osoby, tylko ile czasu minęło od ostatniego przeczytania podręcznika. Spotkałem kilku świetnych programistów, którzy używają tych umiejętności każdego dnia, ale zadławiłbym się, gdyby poproszono mnie o podanie formalnej definicji.

AShelly
źródło
2

Poprosi go o zapisanie obiektów biznesowych, klas i interfejsów / metod dla pokoju lub innego wirtualnego bytu

Gopi
źródło
2

Jeśli to możliwe, poproś o przykładowy kod.

W przeciwnym razie znajdź kod proceduralny do użycia jako przykład (lub jakiś źle zaprojektowany kod OO), a następnie zapytaj go, w jaki sposób przeprojektowałby, uogólnił i ulepszył go. Upewnij się, że program ma dodatkowy kontekst, aby przeprojektowanie mogło mieć sens.

Ostatecznie to, co testujesz - projekt - jest subiektywne. Dlatego twoja ocena powinna być otwarta, aby umożliwić kilka możliwych dobrych rozwiązań, a nie tylko jedno. Następnie pomyśl o możliwych zmianach wymagań, które wymusiłyby zmianę interfejsu: jak sobie z tym poradzą?

Macneil
źródło
1

Przeczytaj książkę Head First Design Patterns. Wszystkie przykłady w książce zaczynają się od problemu zorientowanego obiektowo, a następnie kończą się wzorem. Mówią również, dlaczego niektóre koncepcje OOP osiągają ograniczone wyniki i dlaczego niektóre są lepsze od innych.

Pomimo tego, że książka wzorców projektowych jest pełna problemów OOP :-)

Maniak
źródło
Nie wiem o tym, ponieważ wszystkie przykłady w książce odnoszą się konkretnie do jednego Wzoru Projektu lub drugiego. Jeśli masz wystarczającą wiedzę teoretyczną, możesz ją rozgryźć, co nie odzwierciedla pragmatycznego zastosowania
Rohan Monga
1

Zacznij od prostego: o co chodzi w OOP?

Możesz zacząć od pytania o podstawowe założenia OOP: abstrakcję, polimorfizm, dziedziczenie i enkapsulację. Dobre jedzenie do namysłu, aby je rozgrzać.

Daj im problem

Następnie przedstaw im problem, który może obejmować wzorce. Nie trzeba nazywać ani używać wzorów, ale ich podejście prawdopodobnie przyniesie pewne efekty, jeśli mają doświadczenie w tej dziedzinie.

Być może sprawdzanie poprawności dynamicznego wprowadzania tekstu. Chcesz sprawdzić poprawność wprowadzanego znaku po znaku, aby sprawdzić, czy jest to poprawna data, godzina lub data i godzina w formacie ISO8601. Otrzymujesz kopię ciągu wejściowego za każdym naciśnięciem klawisza i możesz zwrócić wartość logiczną, aby wskazać, czy tekst pozostaje dobry w co najmniej jednym z formatów. Poproś ich o omówienie i naszkicowanie projektu przy użyciu zasad projektowania OO.

Zanim skończysz rozmawiać

  1. Kontroler (rzecz, która uruchamia zdarzenia zmiany i ocenia odpowiedzi),
  2. Obserwator (weryfikatory reagują na zdarzenia zmiany),
  3. Strategia (każdy walidator reprezentuje inny sposób ustalenia, czy dane wejściowe są prawidłowe),

wtedy będziesz miał całkiem niezły pomysł, jeśli zrozumieją OOD.

Daj im ten sam problem jeszcze raz, ale tym razem poproś o inny projekt

Teraz poproś ich o przeprojektowanie systemu bez użycia wzorca Observer (jeśli o tym wspomnieli) - mogą wybrać podejście Łańcucha Odpowiedzialności lub wzorzec Dowodzenia. Tak naprawdę nie obchodzi cię to, wiesz, że mają rozsądną wiedzę na temat zasad.

Nawet jeśli nie wybierają podejścia opartego na wzorcach, samo słuchanie, w jaki sposób próbują rozbić problem na powiązane z nim funkcje , przyniesie oczekiwane rezultaty.

Gary Rowe
źródło
1

Zazwyczaj wybieram scenariusz z prawdziwego świata, coś dobrze znanego każdemu † i proszę o identyfikację bytów; zaangażowani aktorzy; jakie są między nimi interakcje; gdzie można wyróżnić wspólne cechy; jakie właściwości należy wziąć pod uwagę.

Tak, możesz poprosić ich, aby usiedli i narysowali UML, tak, możesz zadać im pytania dotyczące niektórych szczegółów implementacji OOP, aby sprawdzić, czy mogą oni „zacząć działać”.

Ale to, czego pracodawca naprawdę potrzebuje w swoim zespole, to umysł, który rozumie zaangażowane koncepcje i może zastosować je do wszystkiego, co się pojawi. Specyfik można się szybko nauczyć, gdy pojęcia są osadzone.


† Głęboka znajomość i brak połączenia z pomocą kodu: korzystanie z łazienki przez rodzinę rano; gotować obiad; trasa autobusowa do pracy; montaż samochodu.

Orbling
źródło
0

Coś, co wydaje się działać całkiem dobrze i faktycznie zajmuje tylko kilka sekund: poproś ich o zaprojektowanie modelu obiektowego. Nie ma znaczenia co. To może być absolutnie trywialne. W rzeczywistości prawdopodobnie powinno być trywialne, aby niepotrzebnie nie przeciągać testu.

Jeśli pierwszą rzeczą, którą piszą, jest przedmiot, to już wyprzedzają 99% swoich rówieśników w rozumieniu OO. Jeśli pierwszą rzeczą, którą piszą, jest lekcja, uprzejmie poproś ich, aby wyszli i wysłali następnego kandydata, i zastanowili się, dlaczego nazywa się OOP, a nie COP.

Jörg W Mittag
źródło
Chociaż rozumiem, co masz na myśli, myślę, że mógłbym być nieco ostrożny, biorąc to dosłownie. Kiedy jestem „wolnomyślicielem” rozwiązań projektowych, zwykle używam notacji klasy UML, nawet jeśli nie o to tak naprawdę mam na myśli.
Ken Henderson