Wpis z mikrobloga

#anonimowemirkowyznania
Prowadzimy rekrutację na seniora #programista15k. Przypadło mi przeprowadzić pierwszą rozmowę. Przyszło 7 seniorów, każdy dostał zadanie: "zaimplementuj quicksort w dowolnie wybranym języku programowania". Nie zrobił zaden. Czas 45 minut. Gdyby któryś zrobił, spytałbym o złożoność obliczeniową i pamięciową rozwiązania. Polskie IT to dramat.

INB4 "to nie olimpiada informatyczna" - u nas w produkcie mamy sporo "sprytnych" algorytmicznych rozwiązań.

#programowanie #pracait #pracbaza #praca

Kliknij tutaj, aby odpowiedzieć w tym wątku anonimowo
Kliknij tutaj, aby wysłać OPowi anonimową wiadomość prywatną
ID: #5f1706aa83e35d1fc753bfd4
Post dodany za pomocą skryptu AnonimoweMirkoWyznania ( https://mirkowyznania.eu ) Zaakceptował: sokytsinolop
Wesprzyj projekt

[==================......................] 45% (105zł/235zł)
Uzbieraliśmy już na 2 lat działania AMW!
  • 207
@Speedy: paradoksalnie to zarówno KR, jak i KMR, zwykłe haszowanie, albo inne tego typu algo są całkiem przydatne, nawet w codziennej pracy. Ja wiem, że jest np. biblioteka re w Pythonie, ale wyszukiwanie w tekście (szczególnie częste, w tekstach o dużej objętości) jest bardzo przydatne. A nawet jeśli nie zna się ich na pamięć (bo nie ma najczęściej takiej potrzeby), to po szybkim znalezieniu opisu powinno się umieć to sprawnie zaklepać
via Wykop Mobilny (Android)
  • 3
@motokate: przeczytałem sobie wszystkie twoje komentarze w tym wątku i zgadzam się, ale jednak nie.

Jeżeli kod jest nieczytelny, to wina code review. Znajomość języka żeby stworzyć jednolinijkowca to jakieś nieporozumienie i potwierdzi to każdy, kto miał styczność z szatanem o nazwie Perl.

Ale dla mnie jeśli w pierwszym przykładzie, zmienić nazwę zmiennej z numbers na oddNumbers. To jest to najbardziej czytelna i zrozumiała wersja. Z prostego powodu, każdy znając jakikolwiek
@ironiczny_qwert: Usunąłem mój wpis, bo nie wiem, czy to nie zarzutka i mi się głupio zrobiło xD. Co do Twojego komentarza, to oczywiście umiejętność zaklepania czegoś na podstawie dokumentacji oraz umiejętność kojarzenia faktów jest jak najbardziej ok, ale na takiej teoretycznej rekrutacji dostajesz temat, długopis, kartkę i ktoś siedzi nad Tobą i patrzy Ci na ręce z zegarkiem w ręku. Nie możesz nic wyszukać, na spokojnie poczytać i napisać jakby to
@AnonimoweMirkoWyznania: Masz. 0,235s szukania w gógle. #python. czekam na oferte pracy
def QuickSort(arr):

elements = len(arr)

#base case
if elements < 2:
return arr

currentposition = 0 #position of the partitioning element

for i in range(1, elements): #partitioning loop
if arr[i] <= arr[0]:
current
position += 1
temp = arr[i]
arr[i] = arr[currentposition]
arr[current
position] = temp

temp = arr[0]
arr[0] = arr[currentposition]
arr[current
position] = temp
@gdziemojimbuspiatka no i właśnie jesteś studentem który z tym jest na bieżąco, popracujesz kilka lat w branży to jest wiedza którą przydaje się tylko jeśli trafisz na takie pytanie na rozmowie kwalifikacyjnej. A jak nie zakujesz takich cudów przed rozmową to coś tam będzie dzwonić ale nie będziesz do końca wiedział co i jak. To nawet nie sprawdza wiedzy z algorytmów bo jakby ktoś chociaż siadł przed kompem i poczytał Wikipedię to
@motokate: ja się z tobą zgadzam, po to są higher order functions żeby z nich korzystać a nie wszędzie wrzucać fory, tak damo się zgadzam z komentarzami w projekcie, ale tak napisal @r333m4k444 mogę tak myśleć bo robię pare miesięcy w js xD (tutaj akurat react ts z wykorzystanie rxjs)
@AnonimoweMirkoWyznania: ja na rozmowach nie każę robić algorytmiki, ale pytam i rozmawiamy o złożoności obliczeniowej - bo chcę wiedzieć czy ktoś cokolowiek kojarzy w temacie.

natomiast powiem tak - wkurza mnie to jak wysokie są wymgania do robienia CRUDów w Polsce. wymagania jak do gamdevu a nawet lepuej, a potem praca taka, że w sumie bardziej ogarnięty licealista byłby w stanie to robić.

ale druga strona medalu też jest taka, że
via Wykop Mobilny (Android)
  • 2
@Bomfastic: To są przykłady tego, jak piszą kandydaci (a w sumie to nawet częściej nazywają zmienną po prostu "array").
Chyba już trzeci raz piszę, że nie chodzi o zmniejszenie liczby linii kodu, ostatni raz spróbuję wytłumaczyć:

Jeśli masz do przeczytania dużo kodu, to musisz jednocześnie ogarniać i przetrzymywać w swojej pamięci krótkotrwałej wiele rzeczy od najniższego do najwyższego poziomu abstrakcji: poczynając od "co zawiera zmienna x", przez "co robi ta linia
@zdalny_robol: Oczywiście że nie. Jak ktoś w pracy implementuje quicksorta to albo pracuje w światowej korporacji i jest najlepszym z najlepszych albo lepiej niech #!$%@? jak najprędzej.
Chociaż quicksort jest algorytmem uniwersalnym - mi się na przykład wielokrotnie sposób działania dziel i rządź przydał przy rozwiązaniu wielu codziennych problemów IT. W ogóle te algorytmy warto znać bo się przydają żeby się inspirować.
Ale fakt że mi się nie przydały przez 8
@Khaine: Z ciekawości aż sprawdziłem, i faktycznie ani abseil ani folly nie implementują własnego sortowania. Ale akurat takie firmy jak gugl czy fejsbuk jak najbardziej są przykładami wyjątków, gdzie może mieć to sens. Dość zobaczyć prezentację o fbstringu: [https://www.youtube.com/watch?v=kPR8h4-qZdk](https://www.youtube.com/watch?v=kPR8h4-qZdk) albo tę o sortowaniu (gdzie Alexandrescu wyciska wodę z kamienia z popularnych implementacji sortowań): [https://www.youtube.com/watch?v=FJJTYQYB1JQ](https://www.youtube.com/watch?v=FJJTYQYB1JQ)
Nie zgadzam się też, że w cpp nie można znaleźć dobrze płatnego zajęcia. Jest ciężej, faktycznie, niż
via Wykop Mobilny (Android)
  • 1
@motokate:

miałabym nie weryfikować znajomości JS w rozmowie o stanowisko JS dev


Tego nigdzie nie napisałem, ale jesteś skupiona na swoim języku i nie patrzysz na problem rekrutacji w sposób ogólny.

Zauważ też, że - jakkolwiek można się nie zgadzać z moim podejściem - nikt poza mną nie pokusił się o uzasadnienie, dlaczego jego podejście miałoby być lepsze.


Oczywiście, rekrutacja jest procesem złożonym. I w tym wątku ludzie w większości skupili
via Wykop Mobilny (Android)
  • 1
@motokate no i jeszcze uzasadniam dlaczego uważam, że to co napisałem wyżej jest lepsze. Dlatego, że ma standaryzację, jeżeli ktoś zajmuje się rekrutacją długo, to taki proces pozwala wysnuć logiczne wnioski i poprawić swój proces rekrutacji. Ponieważ wszystko jest zapisane i łatwo po czasie stwierdzić czy zatrudniony kandydat z perspektywy czasu dał radę, czy dupę
Uczelnie to wiedzą dlatego też na zajęciach i na kółkach skupiają się na tworzeniu projektów, a nie o dyskusji o tym jak działa sortowanie.


@push3k-pro: i słusznie. Nie po to mamy technologię, żeby wszystko kuć na pamięć. Należy pamiętac to co konieczne do sprawnej pracy na codzień a resztę można doczytać w momencie, gdy będzie potrzebne
@motokate:

To nie jest prościej (napisałam, dlaczego), a operacje na arrayach to podstawy. Nie chodzi o liczbę linijek.

Co nie zmienia tego, że kod powinien być zrozumiały za pierwszym spojrzeniem, a nie po kilkusekundowym (lub dłuższym) zastanowieniu się co tam się dzieje. Jak widzę w kodzie w pracy takie poskracane zapisy to komentuję taki i wklejam obok rozbity, by potem jak przyjdzie jakiś junior czy stażysta nie zastanawiał się co artysta
Jak widzę w kodzie w pracy takie poskracane zapisy to komentuję taki i wklejam obok rozbity, by potem jak przyjdzie jakiś junior czy stażysta nie zastanawiał się co artysta miał na myśli.


@push3k-pro: i o to chodzi. Jak konkretny kod A lub B nie ma realnego wpływu na wydajność a B jest czytelniejszy pomimo, że dłuższy to właśnie tego czytelniejszego należy użyć a nie tworzyć kod na siłę krótszy który ostatecznie
Pracuję w IT od lekko ponad 10 lat, a pierwsze projekty robiłem w liceum, czyli niemal 20 lat temu.
Ilość razy kiedy musiałem zaimplementować quicksort od zera: 0

W ogóle rekrutacja w IT to patologia i festiwal demonstrowania długości przyrodzenia przez firmę / rekruterów / osoby prowadzące rozmowy.

Najlepsze zadania rekrutacyjne, to tzw. zadanie domowe / take home assignment - prosty projekt to zaimplementowania w 3-4 godziny w wybranym przez siebie czasie
@AnonimoweMirkoWyznania: Po co im znajomość algorytmów na pamięć? Może jeszcze stackoverflow powinni znać na pamięć? Programista ma wiedzieć jak użyć danego algorytmu, a nie klepać go z pamięci.
Bez urazy, ale przez takie rekrutacje firmy tracą pieniądze, bo zamiast skupić się na poprawie procesu wyszukiwania kandydatów, to dajecie jakieś zadanka w stylu szkolnym i dane ogłoszenie wisi po 4 - 6 miesięcy, gdzie w tym czasie na spokojnie juniora da się
@Regis86: zadania domowe są fajnie pod warunkiem, że nie wymaga się od kandydata rozwiązania w 3 godziny jakiegoś problemu z którym zespół się miesiąc czasu męczył. Słyszałem też o praktykach, gdzie firma podsyłała kawałek funkcjonalności do zrobienia w rzeczywistym projekcie niby to jako zadanie rekrutacyjne, a potem sobie przywłaszczała kod dziękując kandydatowi za udział w rekrutacji.
Ja przez większość czasu, gdy programuję, myślę bardziej o tym, jak coś uprościć, skrócić, bądź wykorzystać gotowe narzędzia przyspieszające prace i zmniejszające późniejsze koszty związane z utrzymaniem i dalszą rozbudową aplikacji. Gdybym nagle w swojej pracy doszedł do wniosku, że muszę napisać quicksorta, to bym od razu widział, że coś jest nie tak. Znajomość algorytmiki jest przydatna, gdy pracujesz w Google czy innych gigantach, pracujących nad mega specjalistycznymi projektami. Dla zwykłego, szarego
@matwes: Oczywiście, zgadzam się. Zdanie o którym mówię, to jakiś trywialny algorytm na poziomie eliminacji Google Code Jam plus jakieś API dla niego. Albo prosta aplikacja CRU (nawet bez D) z jedną tabelą w bazie danych etc. Tu nie chodzi o trudność zadania, a "kompleksowość" tego, czego projekt dotyka.
TrzeźwaSamica: Jest to najgorsza metoda testowania developerów. Ale jak znam fantazję zakompleksieńców co coś jeszcze wymyślą.

1. Dobry developer po pierwsze wie, że biblioteki standardowe sortują całkiem dobrze i prawie nigdy nie musiał niczego takiego implementować.
2. Dobry developer wie gdzie się odwrócić by znaleźć sensowne informacje i wie czy i kiedy jest sens się "bawić".
3. Dobry developer wie jakie wymagania są stawiane jego algorytmowi i bardzo, bardzo często stawiane
@AnonimoweMirkoWyznania: Jestem programistą, seniorem i powiem tak: pamiętanie szczegółów jak coś działa jest zazwyczaj zbędne. Na co dzień ważna jest informacja o stabilności i przede wszystkim złożoności algorytmu. Wiele razy pisałem quicksort na olimpiadach i studiach, a mimo tego teraz pewnie bym się nie zmieścił w 45 minut. Szczególnie, żeby sprawdzić wszystkie przypadki brzegowe. Wolę pomyśleć i napisać to wolniej, ale porządnie, niż znać na pamięć algorytm i robić wyścig czy
Beka z Was, Typy. Nie musisz pamiętać jak napisać quicksorta, żeby go napisać. Jeśli znasz koncepcję, to po prostu (jak jesteś myślący i ogarniający na jakimkolwiek poziomie) to napiszesz i po sprawie :) !

Propsuje za normalne zadania rekrutacyjne!