Ledwo zdałem dziś egzamin z programowania Java. Musiałem odpowiedzieć na kilka ogólnych pytań dotyczących wątków, które zrobiłem dobrze, i napisać trochę wątkowy program, który był gorszy. Musiałem podłączyć laptopa do ekranu projektora i od razu napisać program. Moją pierwszą próbą było użycie anonimowych klas, ale zapomniałem dokładnej składni. Może z powodu podniecenia, a może dlatego, że przez ostatnie dwa tygodnie pisałem głównie w php. Następnie zapytałem, czy można korzystać z dokumentacji API. Odpowiedź brzmiała „NIE”. Postanowiłem więc obrać inną drogę i wdrożyłem Runnable. Program robił to, o co proszono na końcu. Oczywiście egzaminatorzy zauważyli moją pierwszą porażkę, co bardzo wpłynęło na mój wynik. Byłem zaskoczony, że nie wolno używać dokumentacji API.
Moje pytanie brzmi: czy naprawdę ważne jest, aby móc bezbłędnie kodować bez dokumentacji API? Czy powinienem rozwinąć tę umiejętność? Czy to naprawdę ważne w świecie rzeczywistym i środowisku pracy? Podczas kursów programowania skupiałem się na wzorcach uczenia się, rozwijaniu umiejętności pisania dobrych aplikacji projektowych, umiejętności korzystania z API i szybkiego znajdowania niezbędnych informacji. Nie próbowałem nauczyć się programować bez dokumentacji API. Czy jest to obowiązkowe podczas rozmów kwalifikacyjnych (kodowanie bez dokumentacji API)?
źródło
Odpowiedzi:
W Real Life ™ oceniłbym tę umiejętność jako „miło mieć”, ale wcale nie był wymagany. Jednak w środowisku uniwersyteckim jest inaczej.
Umiejętność kodowania bez dokumentacji może być wykorzystana jako pośredni wskaźnik znajomości przedmiotu przez studenta. W pewnym sensie, widzenie, jak kodujesz coś bez dotykania dokumentacji, mówi profesorowi, że ćwiczyłeś wcześniej używanie API - odrabiając zadania domowe i inne zadania, a może nawet sam programując dla zabawy. Inteligentna osoba z pobieżnym zrozumieniem danego interfejsu API powinna być w stanie to zrobićdowiedzieć się prawie każdego interfejsu API Java samodzielnie, przeglądając dokumentację. To nie przypadek: często oczekuje się, że programiści będą uczyć się w pracy, a dokumentacja API dla popularnych systemów programistycznych, w tym Java, ma strukturę ułatwiającą programistom szybką naukę. Dokumentacja często zawiera krótkie, niezależne przykłady, ilustrujące koncepcję w zwięzły i zwięzły sposób.
Działa to bezpośrednio wbrew celowi profesora, polegającemu na mierzeniu twojej wiedzy na ten temat (w przeciwieństwie do mierzenia twojej inteligencji). Dlatego nie jest nierozsądne pytanie o kod bez przejrzenia dokumentacji.
UWAGA: Zredagowałem tę odpowiedź w odpowiedzi na edycję pytania.
źródło
Był kiedyś facet, który miał mały błąd w kodzie, więc zabrał go do StackOverflow i poprosił o pomoc. StackOverflow: Java (generowanie liczb bez powtórzeń) . Spojrzałem na jego kod i wskazałem mu, że jego HashSet jest nieustannie wypełniony wartościami, ale nigdy nie został wyczyszczony. Zapytał mnie więc: „jak to wyczyścisz?” Muszę przyznać, że nie jestem szczególnie dumny z udzielonej odpowiedzi.
Musisz absolutnie znać podstawowe rzeczy, których używasz na co dzień. Musisz znać je wszystkie i dobrze je znać. Ale tylko podstawowe rzeczy.
W przypadku wszystkiego innego ważne jest, aby wiedzieć, że istnieje coś, co robi, co chcesz. Dokładnie, z której klasy należy skorzystać, dokładnie, którą metodę należy wywołać i jakie parametry należy do niej przekazać, jest czymś, czego nie trzeba zajmować cennymi neuronami mózgu. Do tego służy dokumentacja i dlatego wymyślono IDE z funkcją autouzupełniania. A jeśli push przychodzi do końca, zawsze istnieje StackOverflow i większy interwebz.
Proszenie programistów o zapamiętywanie API na pamięć jest podobne do proszenia prawników, aby znali na pamięć kodeks prawny i wszystkie precedensy. To jest bezcelowe. Ćwiczenie bezcelowości.
źródło
Nie powiedziałbym, że jest to wymagane, ale tak jest
bardzo pożądana umiejętność
imNSho.
Ostatnie kilka miesięcy spędziłem na kodowaniu w ścisłej współpracy z facetem, który zna API zauważalnie lepiej ode mnie. Jest o wiele bardziej produktywny - po prostu dlatego, że może pominąć sprawdzanie dokumentów API, które mnie rozpraszają .
Mówię tutaj o płynności. O byciu nie tylko zdolnym do czegoś, ale płynnym.
Czy wiesz, co to znaczy być płynnym? To dla kogoś, kto na ciebie patrzy, wygląda to tak, jakbyś pisał podczas pisania ...
... To płynna wiedza. To wtedy zajmuje ci minutę, aby zrobić to, co nowicjusz zajmuje godzinę. Naprawdę warto. Pachnie zwycięstwem.
Jeśli opanujesz biegłość w niektórych interfejsach API i odpowiednio zapamiętasz, jak to jest, pamięć ta poprowadzi cię dalej, jak stać się najbardziej produktywnym w pracy z dowolnym innym interfejsem API.
źródło
Nie. Byłbym martwy bez możliwości spojrzenia z dokumentacji API. Nie mam go tylko wtedy, gdy próbuję debugować coś, w którym nie mogę uzyskać dostępu do dokumentacji. Następnie „odtwarzam inżynierię” interfejsu API i w razie potrzeby wycinam i wklejam kawałki.
Ważne jest, aby dobrze wiedzieć, o co chodzi w interfejsie API i której części najlepiej użyć, ale znając nazwy metod, nazwy zmiennych ... nie jest to naprawdę konieczne.
źródło
W pracy nigdy nie miałem sytuacji, w której nie miałem dostępu do dokumentacji. Z drugiej strony, umiejętność rozumienia czytania i ogólne rozumienie, aby móc interpretować źle napisaną dokumentację, jest przydatna przez cały czas.
W końcu powinieneś poznać wzorce i strukturę swoich interfejsów API, ale wiedza, gdzie dokładnie wszystko jest, nie jest szczególnie przydatna.
W SFU Computing Science egzaminy zamknięte stanowią od 70% do 100% naszych ocen. Teoria polega na tym, że egzaminy sprawdzają twoje zrozumienie materiału kursu i twoją zdolność adaptacyjną. W rzeczywistości wszystko, co naprawdę testuje, to twoje nerwy, jakość / czas snu, twój dowcip i techniki zapamiętywania na pamięć - z których żadna nie jest konieczna ani naukowo, ani do typowej pracy w branży oprogramowania.
źródło
Do wszystkich oprócz ostatniego pytania: Encyklopedyczna znajomość dokumentacji API nie jest ważna. Oczywiście programujesz szybciej, jeśli znasz każdy szczegół każdej metody każdej klasy, ale nie jest to rozsądne oczekiwanie.
Na twoje ostatnie pytanie: Można oczekiwać, że znasz specyfikę niektórych klas bez dokumentacji API. Jeśli przed wejściem na rozmowę wiesz, że zostaniesz przetestowany, lub jeśli praca jest bardzo skoncentrowana (tzn. Będziesz robił wątki przez cały dzień), możesz oczekiwać, że będziesz musiał szczegółowo zapoznać się z powiązanymi zajęciami.
Dodatek: Powinieneś dokładnie wyjaśnić przed egzaminem z profesorem / instruktorem, jakie dokładnie materiały zostaną dostarczone i jakie możesz sobie przynieść. Załóż, że wszystko, na co nie wyrazili wyraźnej zgody, jest niedozwolone. Miałem kursy, w których mogłem tylko przynieść podstawy pisania, gdzie mogłem przynieść dowolne książki i gdzie mogłem przynieść dokładnie jeden dwustronny arkusz ze wszystkim, co chciałem. Egzaminy są zwykle skonstruowane wokół dozwolonych materiałów.
źródło
Dokumenty API! = Składnia języka.
Rozumiem, kiedy ktoś nie zna dokładnych nazw różnych klas Java i ich metod. Nie znam ich i codziennie koduję w Javie. Zgubiłbym się bez dokumentacji lub wszechstronnego autouzupełniania IDE - szczególnie jeśli chodzi o standardowy interfejs API języka Java, który jest dobrze znany ze swojej szczegółowości w nazwach zmiennych / klas / metod.
Jednak, jak sam powiedziałeś, w dokumentach zwykle nie ma niczego, czego nie mogłeś zapamiętać. Jest to składnia klas wewnętrznych - jest to cecha samego języka, a nie coś, co należy zapamiętać z dokumentów.
Chociaż uważam, że uczniowie powinni (w wielu przypadkach) mieć możliwość korzystania z dokumentów dla standardowych interfejsów API, myślę, że każdy, kto chce zdać egzamin programistyczny, powinien znać składnię języka. I nie mam na myśli dziwacznych przypadków, o których wiedzą tylko projektanci języków, tylko te standardowe - jak ten w twoim przykładzie.
źródło
W Eclipse możesz pisać
obj.
i naciskać ctrl + spacja, a on spróbuje się automatycznie uzupełnić, podając wszystkie opcje metody dla danego obiektu. Jeśli z jakiegoś powodu mi się to nie powiedzie, Java API ma resztę odpowiedzi. Trudno mi byłoby wymyślić dzień, w którym nie zrobiłem Google, jak coś zrobić.Szkoła to jednak zupełnie inna historia.
źródło
IMHO, środowisko akademickie zwykle śmierdzi wytwarzaniem dobrych inżynierów oprogramowania. Tylko ludzie, którzy kodują dla zabawy po lekcjach, mają szansę osiągnąć coś w rzeczywistych projektach.
Z drugiej strony środowisko akademickie nie polega na tworzeniu programistów, cały świat polega na rozwiązywaniu abstrakcyjnych problemów i przeprowadzaniu badań. Przez większość czasu jest to dalekie od praktycznego zastosowania. A naukowcy niekoniecznie są dobrymi programistami.
A nauka API na pamięć śmierdzi. Istnieje autouzupełnianie / google / msdn / javadocs, aby sprawdzić wszystkie zakamarki, dlaczego ktoś miałby chcieć mieć to wszystko w głowie przez cały czas? Najczęstsze funkcje, których nauczysz się za kilka tygodni / miesięcy, wszystko inne można sprawdzić w ciągu kilku sekund, jeśli znasz składnię, strukturę i ogólne pomysły.
Z drugiej strony, niektóre osoby nadal kodują w edytorach tekstowych i zapamiętują nazwy funkcji na pamięć, niekoniecznie jest to błędne, ale jeśli są fanatyczne, masz swojego profesora.
Co więcej, nawet jeśli znasz nazwy funkcji i parametry na pamięć, dobrym pomysłem jest ich weryfikacja w najnowszym dokumencie API. Strtok działał dobrze w scenariuszu jednowątkowym 10 lat temu, obecnie nie jest dobrze. Jeśli nauczysz się tylko nazw i parametrów, nigdy nie dowiesz się, że funkcjonalność może być przestarzała lub wymyślone lepsze alternatywy.
Języki się zmieniają, więc musisz się z nimi zmieniać, pamiętając, że jeden prawdziwy sposób nie jest do tego odpowiedni.
źródło
jeśli zaczniesz pracę nad jakimś projektem przez jakiś czas, używając API, wcześniej czy później nauczysz się tego interfejsu. wierzę, że jest to całkowicie niepotrzebna umiejętność, ponieważ nie znam nikogo, kto nigdy nie zajrzy do żadnej dokumentacji (msdn, strony podręcznika itp.)
jednak uniwersytety są zupełnie innym wszechświatem, więc nie zdziw się, jeśli zawiedziesz, ponieważ nie znasz na przykład nazwy typedef 10. parametru CreateWindowEx.
źródło
Powiedziałbym, że nie, nie jest to wymagane, ludzki mózg jest fizycznie niemożliwy do zapamiętania tak dużej ilości informacji, ale nadal musisz znać podstawy lub najczęściej używane rzeczy, ponieważ nie ma zbyt wielu z nich do zapamiętania . W przeciwnym razie niemożliwe jest zapamiętanie wszystkiego, co jest w Javie.
Również niesprawiedliwe jest, aby nauczyciel chciał, aby jego uczniowie wiedzieli wszystko lub wykorzystali to, aby wiedzieć, czy programują w języku, oprócz ćwiczeń lub projektów, które ci zleca. Dla mnie to tak, jakby chcieć wiedzieć, co robisz, gdy nie jesteś w szkole, lub wykonywać związanej z tym pracy.
EDYCJA: Oczywiście, to, o co nauczyciel cię prosi, zależy od niego, niektórzy nauczyciele bardziej cenią teorię, podczas gdy inni cenią praktykę i nie dbają o to, jeśli nie wszystko zrozumiesz.
źródło