Witam wszystkich : )
Wypełniłem kwestionariusz rekrutacyjny na juniora (Java). Niedawno otrzymałem e-mail, że w krótkim czasie powinienem otrzymać zadanie programistyczne. Jeszcze nigdy takiego nie wykonywałem i ciekawy jestem czy do rozwiązanego zadania powinienem tworzyć dokumentacje. Co z testami i np. diagramami klas? Czy takie rzeczy są wymagane, czy opcjonalne na plus?
Mieliście już kiedyś styczność z takimi rzeczami? Jestem ciekawy waszych przemyśleń i doświadczeń: )
Kiedyś miałem takie zadanie zrobić na juniora. Wszystko było wyraźnie opisane, czego wymagają. Program polegał na napisaniu prostej klasy z kilkoma polami i załadowaniu obiektów do ArrayListy z pliku tekstowego. Miałem zrobić dokumentację opisująca poczynione założenia i zastosowane rozwiązanie na 2 strony A4. Na plus mogą być, wg mnie, testy JUnit, jeśli znasz. Albo proste użycie Mavena do załadowania bibliotek.
Albo dostaniesz coś prostego do napisania albo linka do codility ;] Diagramów ani dokumentacji raczej nie ;)
Nie lepiej zaczekać na treść zadania?
Jeśli nie będzie jasno wymagana olej dokumentacje i diagramy, skup się czy czystym kodzie i dobrym nazewnictwie. Moim zdaniem testy byłyby na duży plus, ale opcjonalny, jeśli Ci się uda przejść dalej i zwrócą na to uwagę to przynajmniej będziesz miał jako tako pewność że sami produkują kod dobrej jakości
Takie zadanko to może być właśnie Codility albo Hackerrank, względnie coś typu współpraca z kimś z firmy w środowisku typu cloud9 + skype, albo jakieś zadanko do domu na 24/48h/tydzień.
Wersja codility/hackerranki/inne
Dostaniesz zadanko, kod do napisania i jakieś test casey do przejścia - nie marnuj czasu na dokumentację bo jak coś nie działa to ci to nie pomoże. Najlepiej pisać w czymś ludzkim jak IntelliJ i później odpowiednio kopiować, przynajmniej jakiś debug jest dostępny. Zwykle link będzie żywy przez np 24h, najlepiej wcześniej sobie wejść na odpowiednią stronkę i przeklikać przez jakieś proste zadanka, będziesz przynajmniej widzieć gdzie klikać i jaki format odpowiedzi jest oczekiwany, również jaki jest feedback z testów.
Wersja live coding
Tutaj powiedzą ci co i jak, warto w trakcie uzasadniać decyzje projektowe i dopytywać się o szczegóły zadania przed implementowaniem - jakie założenia można przyjąć itp - otwórz sobie jakieś przeszukiwalne javadocsy wcześniej.
Wersja zadanko do domu
Na początku pozadawaj pytania odnośnie niejasności i założeń (również później jeśli coś wyjdzie w trakcie implementacji, ale nie co 5 minut), na końcu przydałoby się mieć kod który:
- działa (w tym sprawdzanie poprawności wejścia, jakaś odpowiednia obsługa innych błędów)
- jest sensownej jakości (sensowna struktura, spójne formatowanie, dobre nazewnictwo, użycie "nowszych" ficzerów Javy)
- ma 1-click build (mvn, gradle, sbt, whatever)
- ma jakiś opis architektury chociażby przez machanie rękami (chyba że to coś prostego) - najlepiej README + poglądowy obrazek (raczej nie ma sensu robić
- ma odpowiednie testy
- ma kontrolę wersji (upewnij się że masz skonfigurowanego autora pod twoim nazwiskiem i mailem, a nie jako
AnalRapist235 <[email protected]>
, widziałem coś podobnego) - jeśli ci wolno to jakoś wystawić najlepiej podpiąć to na githubie pod Travisa, krótkie, proste a daje punkty za nawet podstawowe użycie CI
- jeśli korzysta z zewnętrznej bazy (wątpię żeby coś takiego dali, prędzej coś zembedowanego typu h2) to również jakiś Vagrant czy Docker nie zaszkodzi, ale to raczej niski priorytet
- jeśli to jakieś webowe cudo to można to wrzucić na przykład na heroku
Oczywiście w tej kolejności. Pierwsze cztery są oczekiwane (czwarte od biedy ustnie), testy w jakimś rozsądnym wymiarze raczej też (przynajmniej żeby pokazać że wiesz że jest coś takiego jak testy), historii w VCSie ci raczej nikt nie będzie przeglądać ale tak czy siak trzymaj to czysto. Reszta to raczej bonus, zwłaszcza na juniora. W zależności od firmy mogą nawet oczekiwać tylko pierwszych dwóch.