Czy powinienem oczekiwać, że ostatnie stopnie będą znane z podstawowych pojęć programistycznych? [Zamknięte]

9

Wydaje się, że istnieje OGROMNA rozbieżność między tym, czego oczekuję od kogoś, kto studiował programowanie przez kilka lat na uniwersytecie, a tym, co się właściwie zna.

Nie mam ochoty zadawać zbyt skomplikowanych pytań w wywiadach. Niektóre z moich zwykłych pytań to:

  • Jaka jest różnica między typem odniesienia a typem wartości?

    Jeśli wydaje się, że rozmówca tak naprawdę nie rozumie własnej odpowiedzi lub jeśli nie zna terminologii, której używam, wchodzę w więcej szczegółów, prosząc go o wyjaśnienie, co się dzieje, gdy piszę int i = 0; w metodzie, co z obiektem o = 0, obiektem o = nowa MyClass () itp.

    Zasadniczo robię wszystko, co w mojej mocy, aby oszukać rozmówcę, aby powiedział mi o stosie wywołań, stosie itp., I staram się pozostać przy koncepcjach agnostycznych z językiem. Jeśli rozmówca powie mi, że zrobił dużo C, C ++ lub c #, nurkuję głębiej w konkretnym języku i prawdopodobnie w szczegółach implementacji.

    W razie potrzeby pytam rozmówcę, co to jest stos wywołań lub gdzie przechowywane są argumenty przekazywane do funkcji w wybranym przez niego języku rozkazującym.

    większość rozmówców nie ma pojęcia o tym, czym jest callstack, nie mówiąc już o boksie itp.

  • Jaka jest różnica między klasą abstrakcyjną a interfejsem. W jakich przypadkach należy stosować jeden na drugim?

    Zwykle proszę również, aby wyobrazili sobie projekt małej biblioteki z przypadkiem użycia mającym na celu wykorzystanie pewnego dziedzictwa i niektórych abstrakcyjnych fabryk

    Większość rozmówców nie ma pojęcia, jaki może być prawdziwy cel dziedziczenia. Zazwyczaj znają niektóre słowa kluczowe (wirtualne, zastępowanie itp.), Ale tak naprawdę nie wiedzą, kiedy ich użyć, nie mówiąc już o wyjaśnieniu, czym jest wirtualna tabela.

Mimo że wcześniej sprawdzam CV, nawet w przypadku osób z 5-letnim doświadczeniem w projektach z udziałem złożonych architektur, powiedziałbym, że mniej niż 25% wszystkich moich rozmówców może poprawnie odpowiedzieć na te dwa pytania. A kiedy mówię poprawnie, nie mam na myśli „dogłębnie” ... tylko po to, aby mieć przybliżone wyobrażenie o tym, czym jest ta koncepcja.

Jeśli chodzi o juniorów, nie mam nic przeciwko zatrudnieniu kogoś, kto nie wie, jak dobrze zorganizować swój czas, lub kogoś, kto nie jest przyzwyczajony do procesów budowy przemysłowej, ale mam wrażenie, że jeśli ktoś nie słyszał słowa „ callstack ”po kilku latach studiowania informatyki jest albo głupi, albo niemotywowany, albo wybrał swój uniwersytet bardzo niemądrze.

Myślisz, że jestem tu zbyt ekstremistką? Czy często uczyć się tych podstawowych po ukończeniu uniwersytetu? Czy znasz osoby, które nie były z nimi zaznajomione i po kilku latach stały się bardzo dobrymi inżynierami oprogramowania? I czy uważasz, że moja firma może mieć problem z przyciąganiem utalentowanych ludzi, czy może doświadczasz tego samego rodzaju problemów w procesie rekrutacji?


Edytować. jeśli chodzi o „typ natychmiastowy”, było to dosłowne tłumaczenie z francuskiego na angielski, jak zwykle przeprowadzamy nasze wywiady w języku francuskim. Naprawiłem to w swoim pytaniu. Ale nadal myślę, że wszyscy doskonale rozumiecie, co miałem na myśli, co to za punkt widzenia, prawda?

Brann
źródło
4
To tylko drobna uwaga, ale nie wiedziałbym, co masz na myśli, używając typu bezpośredniego, typu wartości, z drugiej strony mógłbym ci wyjaśnić. Uważam jednak, że każdy, kto ukończył jakikolwiek dyplom CS, powinien być w stanie odpowiedzieć na te dwa pytania. Aby poprawić swoje pytanie, możesz podać przykład wyczerpującej odpowiedzi, jakiej oczekujesz.
sebastiangeiger
Uczenie się języka przez ponad 2 lata na uniwersytecie, konkurowanie z innymi przedmiotami pozostawia studentom jedynie minimalne minimum po zakończeniu testów. Jedyną rzeczą, której możesz być pewien, to, że mogą nauczyć się tych informacji lub kiedyś ją znali. Tylko praktyczne doświadczenie może dać im trwałość wiedzy. Joel Spolsky podaje świetny przykład tego, jak i dlaczego uczniom brakuje wielu umiejętności, których powinniśmy oczekiwać od programistów w swoim blogu tutaj - http://www.joelonsoftware.com/items/2009/10/26.html
Justin Shield
@sebastiangeiger; masz rację, zaktualizowano!
Brann
2
Musi wiedzieć, że prawie nic nie wie. Jest to kluczowy punkt, aby poprawić się z czasem.
deadalnix
Brann, co ciekawe, wszyscy ludzie, którzy odpowiedzieli na to pytanie, wspominają o „typie natychmiastowym” (błąd tłumaczenia) i mówią, że nie wiedzą, co to jest. Czy Twoi ankieterzy mówią: „Nie studiowałem tych kwestii dogłębnie?” czy twierdzą, że są ekspertami na przykład w zakresie specyfiki środowiska wykonawczego i głębokiego zrozumienia kompilatorów?
Pindatjuh

Odpowiedzi:

15

Terminologia jest częstym błędem w sytuacji wywiadu.

Zadajesz rozmówcy pytanie przy użyciu terminologii, która coś dla ciebie znaczy, ale rozmówca może znać to pod innym pojęciem lub po prostu znać ogólną teorię bez zastosowania w określonych językach lub środowiskach. Powstają nieporozumienia. Żadna ze stron nie jest szczęśliwa.

W rzeczywistości okazuje się, że rozmówca doskonale rozumie, że niektóre wartości mogą być przechowywane bezpośrednio w rejestrze, a inne odnoszą się do fragmentu pamięci w innym miejscu, ale ponieważ zadajesz pytanie w sposób określony przez domenę, chodzi o to, o co pytasz, i to, o czym chciałbyś, żeby rozmówca ci powiedział, tak naprawdę nie daje rady.

Może masz wiele sytuacji, w których osoba udzielająca wywiadu nagle klika i mówi „Och - o tym mówisz” - a następnie dość dokładnie wyjaśnia.

Jest to trudna równowaga, ponieważ programiści świeżo po studiach nie będą mieli zróżnicowanego doświadczenia, jakie zapewnia im rzeczywisty rozwój w środowisku zespołowym. Tymczasem doświadczeni programiści często nie pamiętają (ani nawet nie interesują się) wszystkimi rzeczami, których nauczyli się na uniwersytecie, ponieważ jest to po prostu nieistotne dla ich codziennego użytku.

Te dwa typy ludzi (tak - to osoba przeprowadzająca wywiad i osoba przeprowadzająca wywiad) muszą nauczyć się, jak się ze sobą komunikować, zanim będzie można się dowiedzieć o sobie nawzajem. Ciężar spoczywa na osobie z większym doświadczeniem (ankieterze), aby upewnić się, że tak się stanie.

Nie wspominając już o tym, że niektórzy ludzie doświadczają całkowitej awarii pamięci w wywiadach. Ja wliczony w cenę. Pamiętam, że zostałem poproszony o napisanie programu w C i przez całe życie nie mogłem sobie przypomnieć symbolu używanego do uzyskiwania dostępu do członka za pomocą wskaźnika (->) i musiałem kogoś zapytać. To nie było nawet dla mojej pierwszej pracy. Chłopak nękał mnie ten moment przez ostatnie 15 lat :-)

Moim zdaniem, o wiele bardziej przydatna jest umiejętność komunikowania się, umiejętność skutecznego i pełnego rozwiązywania problemów; podnosić rzeczy szybko; okazywać pozytywne nastawienie; dobrze współdziałać z innymi ludźmi i innymi podstawowymi wartościami.

Nie poddawaj się rozmówcom, ponieważ nie wiedzą, jaki jest typ bezpośredni. Pójść dalej.

Roger Attrill
źródło
@Brann - typ natychmiastowy -> typ wartości. zanotował
Roger Attrill
Cóż, może nie jest to wystarczająco jasne z treści mojego pytania, ale naprawdę robię wiele, aby upewnić się, że nie ma problemu terminologicznego. Pytam rozmówcę, co dzieje się w określonych sytuacjach w wybranym przez niego języku, pytam go, czy wie, co to jest callstack, pytam go, czy istnieją inne „rodzaje” wspomnień, pytam, gdzie są argumenty przekazywane do funkcji przechowywane w wybranym przez niego imperatywnym języku. Naprawdę nie uważam, że to kwestia terminologii. Czasami osoba udzielająca wywiadu NIE MA POMYSŁU na temat tego, co dzieje się za sceną, gdy instancja jest tworzona.
Brann
jeśli chodzi o „ruszanie się”, zwykle tak robię. Ale z mojego doświadczenia wynika, że ​​gdy rozmówca nie wie, jaki jest typ wartości, nie wie on również o synchronizacji wątków, ani o tym, do czego służą generyczne itp. Więc po kilku pytaniach, kiedy staje się jasne, że kandydat nie jest nie pasuje do pracy, zwykle udzielam mu porady, jak nauczyć się lepiej radzić sobie w rozmowach technicznych i ... przejść do następnego kandydata :)
Brann
12

Pytasz o znajomość języka, a używane terminy nie są w 100% takie same we wszystkich językach. Ja - na przykład - nie mam pojęcia, co to jest „typ natychmiastowy”.

Weź również pod uwagę, że nauczanie na uniwersytecie nie polega na tym, jak wykopać standardowy kod w X, ale nauczyłem się wielu podstawowych pojęć i widziałem różne paradygmaty programowania. Innymi słowy, jest bardzo podobny do prawa jazdy - mimo że znasz podstawową teorię, wciąż potrzebujesz dużo praktyki.


źródło
Zaktualizowałem do „typu wartości”. Ale chodzi o to, że jeśli rozmówca nie rozumie pytania, zwykle wyjaśniam je bardziej szczegółowo i próbuję wielu rzeczy, aby nakłonić rozmówcę do powiedzenia mi o stosie rozmów, stosie itp. (Tak, WIEM są to szczegóły implementacji, ale nadal są to ogólne koncepcje, które nie są tak naprawdę specyficzne dla danego języka IMO)
Brann
Myślę, że koncepcja „callstack” jest jedną z tych ogólnych koncepcji, o których mówisz. Nawet po ponownym sformułowaniu pytania na dziesięć różnych sposobów, aby upewnić się, że rozmówca wie, że oczekuję, że powie mi o alokacji pamięci, stosie połączeń, typach wartości itp., Nadal często otrzymuję puste spojrzenia ...
Brann
Jeśli dobrze cię rozumiem, chcesz wiedzieć, czy programista zna wskaźniki i wie, co robią i jak ich używać?
Nie ja nie. Chcę się upewnić, że programista ma przynajmniej ogólne pojęcie o tym, co dzieje się za sceną, gdy używa funkcji x lub y wybranego przez siebie języka. Zapytanie go o wskaźniki to tylko sposób na przekonanie go o tym, co wie na temat alokacji pamięci.
Brann
3
@Brann, wszystkie szczegółowe informacje dotyczące stosu wywołań, sterty itp., Są w zasadzie tylko zastosowanymi wskaźnikami .
3

„Słyszę i zapominam. Widzę i pamiętam. Rozumiem i rozumiem”. (I moim zdaniem zrozumienie prowadzi do lepszego przechowywania pamięci).

Mówiąc najprościej, niedawny absolwent nie ma dużego doświadczenia, więc jak zauważył ktoś inny, nie będzie miał o wiele więcej niż minimum wiedzy, bez względu na to, jaki jest ich „wybrany” język.

Poszedłem do college'u, który został zaprojektowany specjalnie w celu usprawnienia nauki o wybranej przez siebie specjalności (więc na przykład nie miałbyś literatury historycznej, gdybyś był studentem CS; najbliższą dostępną literaturą historyczną jest Science Fiction), i zaraz po studiach nie byłbym w stanie powiedzieć wam, czym był interfejs, nie mówiąc już o jego różnicy w porównaniu z klasą abstrakcyjną, chociaż nauczyliśmy się o abstrakcji (i interfejsach jest pełno w .Net, technologii, której się nauczyłem). Mogliśmy dotknąć interfejsów, ale zagubiliśmy się we wszystkich innych rzeczach, które musieliśmy wiedzieć, aby zaliczyć klasę. Dopiero po mojej pierwszej pracy po studiach dowiedziałem się o interfejsach, szczególnie w jakikolwiek znaczący sposób.

Wspomniałeś o przeprowadzaniu wywiadów w języku francuskim, co pokazuje, że jesteśmy w różnych krajach, więc twój przebieg może być różny, ale tutaj, w Stanach Zjednoczonych, uczelnie notorycznie opóźniają się, jeśli chodzi o technologię. Dlatego, chyba że masz do czynienia z dojrzałymi językami (C / C ++, COBOL itp.), Jest również całkiem prawdopodobne, że to, czego używasz nawet przez lata, może nie być dostępne w wersji, której nauczyli się studenci. Na przykład .Net 3.0 wprowadził Entity Framework, WPF, WCF i wiele innych fajnych rzeczy, ale nawet moja szkoła wciąż utknęła w .Net 1.1 i 2.0 (co oznaczało, że utknąłem w ADO.NET i nawet nie uczyłem się o Object -Relational Relation). Szkoła korzystająca z PHP może utknąć na (innym niż OOP) PHP 4.

Pamiętaj też, że uczeń musi zebrać mnóstwo informacji, które są często używane tylko przez krótki czas. Koncepcje „zaawansowane”, takie jak abstrakcja, są często nauczane pod koniec klasy, gdzie uczeń może mieć tylko tydzień na zabawę, walcząc z innymi klasami, które musi wziąć i być może szczyt pracy w niepełnym lub pełnym wymiarze godzin. Połącz je wszystkie i to cud, że osoba może wszystko zapamiętać , a tym bardziej utrzymać wszystko w porządku.

Przynajmniej w Stanach Zjednoczonych zakłada się, że niedawna ocena nie wie nic poza podstawowymi podstawami (być może różnica między przekazywaniem wartości a przekazywaniem referencji), ponieważ rozumie się, że teoria ogólna i rozwiązywanie problemów jest główną częścią szkoła, nie uczy się tajników danego języka.

Zalecam używanie pytań, które miałeś więcej, jako miernika tego, czego będziesz musiał uczyć / ponownie uczyć (pamiętaj, jest całkiem możliwe, że po prostu nie nauczyli się terminu , którego próbujesz użyć, nawet jeśli uważasz, że jest to wszechobecne), w przeciwieństwie do tego, czy rozmówca jest „bezwartościowy”. Połącz to ze sprawdzeniem, jak chętni są się uczyć i jakie są ich ogólne umiejętności rozwiązywania problemów (poważnie, daj im zagadkę do rozwiązania i zobacz, jak sobie radzą), a możesz bardzo dobrze mieć przyszłą gwiazdę rocka, którą ty mogło minąć, ponieważ nie wiedzieli, co masz na myśli przez „callstack”.

Shauna
źródło
Cóż, we Francji (i podejrzewam, że w większości miejsc jest tak samo), każdy program CS zawiera obowiązkowe kodowanie w C (lub podobnych językach), gdy uczy się między innymi alokacji pamięci), a niektóre obowiązkowe kodowanie w C ++ / java / .net (gdzie uczy się o OOP). Ponadto robisz wiele rzeczy, które mogą obejmować wiele dziedzin, ale jeśli absolwenci nie wiedzą, co to jest metoda wirtualna, oznacza to, że nie potraktował swoich studiów bardzo poważnie ... Z pewnością wiedziałem, co to było, kiedy ukończyłem szkołę ... Co byś pomyślał o studentach matematyki, którzy nie wiedzą, co to jest seria?
Brann
@Brann - Według moich (szybkich) badań nad tym, czym jest informatyka (a także z mojego wcześniejszego zrozumienia), CS nie jest specjalizacją programistyczną. Tak, ma w sobie programowanie, ale niekoniecznie jest to główny cel. W tym względzie „informatyka” jest tak szeroka i raczej niejasna, że ​​może różnić się w zależności od szkoły. Stanford jest jedną z najlepszych szkół CS w USA, a na liście wyboru kursów jesiennych i zimowych ( www-cs.stanford.edu/courses ) ma mniej niż pół tuzina kursów, które wydają się koncentrować na rzeczywistym programowaniu (nie tylko teoria programów), spośród około 50 klas.
Shauna
Oznacza to, że student prawdopodobnie będzie posługiwał się dowolnym językiem przez semestr lub dwa, a następnie nie będzie go dotykać przez resztę swojej kariery studenckiej. Ponadto uczy się również robotyki i programowania genetycznego, które znacznie różnią się od standardowych programów komputerowych / systemów wbudowanych / oprogramowania układowego.
Shauna
Co myślisz o uczniu matematyki, który nie wie, co to jest seria? - To zależy od rodzaju matematyki, w którym specjalizuje się uczeń i nad czym tak naprawdę pracuje. Ponownie jest całkiem możliwe, że uczeń się tego nauczył (a zatem technicznie nie wie, co to jest), ale po prostu zapomniał o tym, ponieważ nigdy nie używa go w swojej codziennej pracy z kryptografią lub dyskretną matematyką. Matematyka i programowanie są ogólnie uważane za tematy „zrób to albo zrób to”.
Shauna
3

Masz dość wąskie poglądy i zakładasz je domyślnie.

  • Wydaje się, że istnieje OGROMNA rozbieżność między tym, czego oczekuję od kogoś, kto studiował programowanie przez kilka lat na uniwersytecie, a tym, co się właściwie zna.

    Według mojej wiedzy nie ma uniwersytetu, w którym ludzie studiują programowanie przez kilka lat. Uniwersytety oferują kursy informatyki, których jednym z aspektów jest programowanie.

  • Jaka jest różnica między typem odniesienia a typem wartości?

    Ogólna zasada: jeśli Lisp poradzi sobie bez rozróżnienia, to tylko bałagan;)

  • Zasadniczo robię wszystko, co w mojej mocy, aby oszukać rozmówcę, aby powiedział mi o stosie wywołań, stosie itp., I staram się pozostać przy koncepcjach agnostycznych z językiem.

    Mówienie o pojęciach niezależnych od języka jest dobrym pomysłem. Ani stos, ani stos nie są jednak zależne od języka.

  • Jeśli rozmówca powie mi, że zrobił dużo C, C ++ lub C #, nurkuję głębiej w konkretnym języku i prawdopodobnie w szczegółach implementacji.

    Wszystkie te języki mają specyfikacje. Implementacja jest niezdefiniowana przez język. C i C ++ mogą być kompilowane krzyżowo przy użyciu LLVM do uruchamiania w programie Flash Player lub dowolnym środowisku wykonawczym JavaScript. To powoduje, że twoje założenia dotyczące alokacji stosów i stosów stają się nieważne.
    Z C # jest prawie tak samo. C # jest JITowany przed wykonaniem z dużą optymalizacją, którą można wykonać. Zmienne lokalne, które są przechwytywane przez zamknięcia, ostatecznie staną na stosie, zamiast na stosie, podczas gdy analiza ucieczki pozwala na przechowywanie obiektów lokalnych o zasięgu (które zwykle powinny przechodzić na stos) do przechowywania na stosie. Właściwa alokacja rejestru znacznie zmniejszy również potrzebę alokacji stosu.

  • W razie potrzeby pytam rozmówcę, co to jest stos wywołań lub gdzie przechowywane są argumenty przekazywane do funkcji w wybranym przez niego języku rozkazującym.

    O co zapytałbyś kogoś, kto ma tylko bogate doświadczenie programistyczne w Haskell? : P

  • Większość rozmówców nie ma pojęcia o tym, czym jest callstack, nie mówiąc już o boksie itp.

    Podstawową ideą stojącą za autoboxingiem jest to, że prymitywy można również traktować jako obiekty (lub przynajmniej wartości, których typ można wykryć w czasie wykonywania). W odniesieniu do tej abstrakcji istnieją trzy rodzaje języków:

    1. tam, gdzie nie istnieje. Przypuszczam, że Objective-C jest kanonicznym przykładem.
    2. tych, w których to naprawdę trzyma
    3. te, w których istnieje, ale których nie ma. Myślę, że Java jest najlepszym przykładem (zakładam, że został już naprawiony).

    Nie rozumiem, dlaczego ludzie nie powinni używać języków kategorii 1 (tak naprawdę to dobry pomysł). Nie rozumiem, dlaczego ludzie, którzy używają języków kategorii 2, powinni się tym przejmować. I myślę, że każdy, kto używa języka kategorii 3, tj. Takiego, w którym podstawowa funkcja semantyczna jest po prostu zepsuta, używa niewłaściwego języka.

  • Jaka jest różnica między klasą abstrakcyjną a interfejsem. W jakich przypadkach należy stosować jeden na drugim?

    To jest bardzo subiektywne i naprawdę zależy od języka. C ++ nie ma interfejsów. Cel C nie ma klas abstrakcyjnych. Twierdziłbym, że każdy język, który ma oba, wymaga poważnego przeprojektowania. Wiele współczesnych języków używa cech, miksów, kategorii, ról i podobnych konstrukcji w celu zapewnienia znacznie czystszych rozwiązań w zakresie ponownego wykorzystania kodu niż dziedziczenia częściowych implementacji. Języki oparte na prototypach i tak nie mają klas.

    Ostatecznie jest to trudny i kwestionowany temat. Rozmowa kwalifikacyjna nie jest właściwym miejscem do rozwiązania tego pytania i tak naprawdę nie dałbym rady nikomu ubiegając się o stanowisko młodsze, ponieważ nie dał mi dobrej odpowiedzi.

  • Większość rozmówców nie ma pojęcia, jaki może być prawdziwy cel dziedziczenia. Zazwyczaj znają niektóre słowa kluczowe (wirtualne, zastępowanie itp.), Ale tak naprawdę nie wiedzą, kiedy ich użyć, nie mówiąc już o wyjaśnieniu, czym jest wirtualna tabela.

    Istnieje wiele języków obiektowych, które nie używają dziedziczenia ani klasycznych vtables.

Moja rada:

  • Bądź bardzo ostrożny, aby zakładać, że coś wiesz o programowaniu jest naprawdę podstawowe pojęcia programowania. Możesz założyć, że każdy dobry programista ma ciekawość, aby znaleźć odpowiedzi na takie pytanie. Nie można jednak zakładać, że każdy, kto je zna, jest dobry. Skłaniam się ku wierzeniu, że ci, którzy przywiązują zbyt dużą wagę do takich szczegółów, prawdopodobnie nie zobaczą lasu dla drzew.
  • Martw się mniej o szczegóły implementacji. Języki programowania służą do tworzenia abstrakcji. Musisz myśleć o tych abstrakcjach i tylko o nich. Dobry kod nie jest napisany na podstawie szczegółów implementacyjnych języka. Został napisany, aby jak najlepiej wbudować semantykę rozwiązania w funkcje językowe. Jeśli ci się to uda, Twój kod stanie się nie tylko solidny, ale również czytelny dla każdego, kto zna język, i łatwiej będzie go zoptymalizować pod kątem kompilatora.
  • Znajomość oczekiwanych odpowiedzi nie jest tak ważna. Zrozumienie ich jest. Jeśli ktoś ich po prostu znał, ponieważ czytał je w książce lub powiedział mu jego profesor, to ma niewielką wartość. Właściwie możesz to wszystko wyjaśnić w ciągu kilku godzin.
    Ważne jest zrozumienie, w jaki sposób te proste i izolowane fakty można zastosować do projektowania elastycznych i łatwych do utrzymania rozwiązań złożonych problemów.

Aby przejść do prawdziwego pytania:

I czy uważasz, że moja firma może mieć problem z przyciąganiem utalentowanych ludzi, czy może doświadczasz tego samego rodzaju problemów w procesie rekrutacji?

Wszystkie firmy mają problemy z przyciąganiem zręcznych ludzi, z wyjątkiem być może dużych graczy. To dlatego, że jest ich niewiele. I z powodu założenia uniwersytet czyni ludzi umiejętnościami. Tak nie jest. Dzięki temu są kompetentni (zakładając, że zarówno student, jak i uniwersytet wytrzymają swoją część umowy). Doświadczenie czyni ludzi umiejętnymi.

Jest kilka osób, które zebrały doświadczenie przed podjęciem studiów i kontynuują je podczas studiów. Ponieważ lubią programować i ponieważ, gdy na kursie wpadną na jakiś nowy pomysł, postarają się przekonać, w jaki sposób mogą go wykorzystać, a przede wszystkim wrócą do domu. To ludzie, których chciałbyś zatrudnić. Ale jest ich niewiele.
To pasja programowania i samodoskonalenia oraz jego dążenie sprawiają, że programiści są dobrzy. W samą porę.

Myślę, że musisz zdać sobie sprawę, że niestety większość ludzi wejdzie na uniwersytet i opuści go bez wystarczającego doświadczenia w programowaniu.
Jednocześnie nasza branża bardzo potrzebuje doświadczonych programistów. Dlatego uważam, że misją naszej branży jest próba wkroczenia. A przeprowadzając wywiady z kandydatami na stanowiska młodsze, realistycznie szukasz osób chętnych do nauki i doskonalenia się. I powinieneś wybrać ostrożnie, ponieważ będziesz musiał zainwestować dużo energii i nie chcesz, aby to się marnowało.

Pomyśl o tym jak o wynajęciu świeżej krwi, aby zostać kierowcą dla swojego zespołu wyścigowego: Dobry kierowca ma wystarczającą wiedzę na temat mechaniki, aby jak najlepiej wykorzystać swój samochód, ale sama ta wiedza nie ma sensu (nie jest to nawet głowa początek). To, czego szukasz, to ktoś chętny do ciężkiej pracy nad własnym ulepszeniem i dobrze ze swoim zespołem.

back2dos
źródło
1

Niezależnie od terminu „typu bezpośredniego”, o którym nie mam pojęcia (typ wartości? OK, nie byłem pewien, dziękuję za aktualizację), myślę, że masz rację co do swoich pytań i całkowicie nie jesteś ekstremistą. To są pytania, na które można odpowiedzieć, jeśli ktoś zaraz wychodzi ze szkoły. Mimo to nie od razu zwolnię kandydatów, wciąż są tacy, którzy mogą mieć potencjał, ponieważ chcą się uczyć.

Kontynuacja analogii prawa jazdy: niektórym ludziom nie zależy na tym, co się stanie po włożeniu klucza (lub naciśnięciu przycisku „Start”). Po prostu to robią i jeżdżą. To nie znaczy, że oni też są bezwartościowi, po prostu, że zajmie im trochę czasu;

Tylko osobista uwaga na temat stopnia / dyplomu: Obecnie pracuję z osobami z biochemią i doświadczeniem przemysłowym, które mają kilkuletnie doświadczenie w branży IT, a także z niektórymi „doświadczonymi” facetami z wykształceniem CS, i zgadnij, kto jest najbardziej kompetentny jak działa silnik pojazdu? Tak, to nie ludzie, którzy studiowali CS! Po prostu doświadczam faktu, że dyplom nie zawsze ma znaczenie!

Jalayn
źródło
2
Niektóre osoby mogą tak długo majstrować przy swoim pojeździe, aby uzyskać maksymalną prędkość, że powolne kończą, zanim jeszcze zaczną.
wystarczy :-)
Jalayn
Całkowicie zgadzam się co do osób pochodzących z innych dziedzin niż CS. ale dla kogoś, kto faktycznie posiada tytuł CS, nie wiedząc, co to jest typ wartości, wydaje się nieco niepokojące, mówiąc co najmniej ...
Brann
@brann, mogą nie znać tego terminu , ale nadal mają świadomość, że fizyczne umieszczenie danych przechowywanych przez zmienną jest umieszczane w segmencie danych, a nie w stercie lub stosie. Jakiego języka używasz, ponieważ wydaje się to ważne?
Używam c #. I zgadzam się, że znajomość tego rodzaju szczegółów implementacyjnych prawdopodobnie nie jest tak ważna w tym kontekście (chociaż w niektórych szczególnych sytuacjach może być). Chodzi o to, że nie próbuję znaleźć eksperta od AC #. Próbuję znaleźć kogoś wystarczająco sprytnego i wystarczająco zmotywowanego, aby stać się naprawdę dobrym w kodowaniu w c #. Jeśli ktoś nie chciał nauczyć się / rozumieć, jaki typ wartości ma tendencję (może niesłusznie) do myślenia, że ​​tęskni przynajmniej za jedną z tych dwóch cech
Brann
1

Zasadniczo nie zadaję szczegółowych pytań na temat terminologii lub definicji podczas wywiadów. Jak zauważyły ​​inne odpowiedzi, ludzie mają różne terminy dla różnych pojęć i chociaż mogą koncepcyjnie zrozumieć ten temat, mogą nie być w stanie ci tego przekazać.

W Juniors intensywnie koncentruję się na stażach i projektach szkolnych. Zadaję pytania na ich temat, pozwól im sformułować odpowiedzi, a następnie zacznę głębiej zanurzyć się w faktyczne zaangażowanie w projekt, czego się nauczyli, co poczuli.

Zasadniczo, jeśli dana osoba była w projekcie martwa, to nie może ogólnie dać mi satysfakcjonujących odpowiedzi, więc zazwyczaj jest dość łatwo powiedzieć. Uważaj tylko, aby nie pomylić nerwowego i zamkniętego w sobie intencji z bezinteresownością i zaangażowaniem.

Określenie dobrego kandydata, który jest nieśmiały i zamknięty w sobie, jest trochę trudne, ale kultura, w której pracuję, nie byłaby dobra dla introwertycznego i nieśmiałego programisty, więc jeśli nie będą w stanie przeprowadzić szczegółowej szczegółowej rozmowy ze mną, nie są dobrze dopasowane.

wałek klonowy
źródło
1
 or chose his university very unwisely.

To bardzo niesprawiedliwe. Gdy jesteś studentem, możesz wybrać najwyżej oceniany uniwersytet, do którego dostaniesz swoje stopnie, a może ten, który reklamuje się, pozwalając ci grać z robotami w piłce nożnej. Nic więcej. Kurs uniwersytecki można ocenić dopiero po jego ukończeniu, po czym odszedł i pracował przez kilka lat w przemyśle i zbudował kilka niebanalnych projektów.

Nawet jeśli na każdym takim kursie pojawił się wielki neon, który brzmiał: „NIE UCZYMY STAŁU WEZWANIA”, to czego oczekujesz od uczniów? Spędzasz miesiące badając go, aby naprawdę mogli zrozumieć, co to znaczy i ile potrzebowaliby takiego, który go uczy? Dla każdego kursu z każdą kombinacją znaków?

Realistycznie ludzie nie wybierają swojej edukacji.

DeadMG
źródło
0

Podczas wywiadów z nowymi absolwentami trzymam się tematów wymienionych w ich CV. Jeśli użyli Java, zapytam ich o Javę. Jeśli użyli Bluba, spędzam pół godziny, czytając o Blubie i pytając ich o to. Ale zawsze pytam za pomocą słów kluczowych języka. Jeśli jest to Java, zapytam o „rozszerzenia” i „implementuje”, ale nie „podklasę” i „dziedziczenie”. Oczekuję, że nowi absolwenci będą w stanie porozmawiać o napisanym przez siebie kodzie, rozwiązać prosty problem programistyczny i mieć podstawową strukturę danych (tabele skrótów i drzewa).

Kevin Cline
źródło
0

Jako dyrektor, który zaprojektował proces rozmowy kwalifikacyjnej, mogę podać ci, czego nasza firma oczekuje od nowych stopni: oczekuję ludzi, którzy potrafią czytać dokumentację i stosować wiedzę. Tak więc mamy kilka bardzo praktycznych zadań, które prosimy o wykonanie. Są to proste zadania kodowania, niewiele trudniejsze niż przeciętne ćwiczenia na studiach (doświadczeni „dobrzy” programiści mogą to znokautować w około 15 minut). Kandydat otrzymuje stację roboczą z dostępem do Internetu, kompilatorem (w naszym przypadku studio wizualne) i plikami pomocy.

Jeśli nie mogą napisać kodu w tych warunkach, nie otrzymują wynagrodzenia za wynajem. Proste. Cała wymówka „no cóż, nie znam języka” tak naprawdę nigdy mi nie przeszkadzała, ponieważ każdy kandydat, który przychodzi na rozmowę, wie, że będzie test, zna języki i narzędzia, których używamy z góry. Możesz pobrać Visual Studio Express w domu i zrobić kilka podstawowych rzeczy przed wejściem i zdać test poziomu podstawowego, tych, którzy nie zawracają sobie głowy ... Cóż, to nazywam czerwoną flagą.

Eric
źródło
Jest to najlepszy sposób na znalezienie kogoś, kto twierdzi, że wie, że coś naprawdę wie na tyle dobrze, aby z niego skorzystać. Pytanie o to, co oznacza termin, coś, co jest rzadko używane poza klasą, jest bezcelowe. Mam na myśli, że w ciągu ostatnich 18 miesięcy ani razu nie dyskutowałem na temat typów referencji, które mogły narzekać na coś, co dotyczyło wskaźników.
Ramhound,