jakie spostrzeżenia lub pytania doprowadziłyby cię do ustalenia umiejętności OOAD danej osoby.
jakie spostrzeżenia lub pytania doprowadziłyby cię do ustalenia umiejętności OOAD danej osoby.
Odpowiedzi:
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ś.
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.
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ń.
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.
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ą?
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 :-)
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ć
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.
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.
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.