Co musisz umieć do pierwszej pracy w embedded?

ucgosu.pl 5 lat temu

Pytania o wymagania na pozycję junior developera są bardzo popularne. Dotyczą one zwykle frontendu, Javy, czy C# i w internecie można znaleźć na ten temat już całkiem sporo, o embedded natomiast takich informacji brakuje. Są osoby, które traktują systemy embedded jako hobby – lubią sobie dłubać przy Arduino, czy Raspberry Pi, ale pracy szukają w prawdziwym programowaniu. Jednak o ile sprawia Ci to przyjemność, dlaczego nie zamienić hobby w stałą pracę? W tym wpisie przedstawie jakie musisz spełnić wymagania, żeby zdobyć pierwszą pracę w systemach embedded.

Dlaczego embedded?

Potrzeba coraz więcej programistów i systemy embedded nie różnią się tutaj od reszty branży. W Polsce nieustannie rośnie ilość firm robiących projekty embedded, a rąk do pracy nieustannie brakuje. Oczywiście najbardziej brakuje specjalistów, ale oni też musieli gdzieś zaczynać. Jak to ktoś kiedyś powiedział (nie pamiętam czyje to słowa) – Zatrudniamy tylko seniorów, ale niektórych jeszcze zanim awansują.

Podstawowy warsztat, a także pożądane cechy charakteru nie różnią się zbytnio od innych gałęzi programowania. Dlatego wybierając branżę embedded nie zamykasz sobie żadnych drzwi. Tak samo piszesz kod, debugujesz, testujesz, pracujesz w zespole, estymujesz zadania itp. Oczywiście na poziomie szczegółów są znaczące różnice, ale jak zechcesz później zmienić ścieżkę, zobaczysz, iż to takie samo programowanie, a dodatkowa wiedza o niskopoziomowych niuansach może się choćby okazać atutem.

Zestaw potrzebnych umiejętności

Termin systemy embedded jest dosyć pojemny. Poza programowaniem mikrokontrolerów zawiera również choćby systemy oparte na Linuxie, czy FPGA. Jednak ja się skupię na mikrokontrolerach. Zestaw umiejętności potrzebnych do pierwszej pracy w systemach embedded to dla mnie:

  • znajomość składni języka C – szczególnie wskaźniki, volatile, wskaźniki na funkcje. Innymi językami nie ma co sobie na początku zaprzątać głowy.
  • wiedza o działaniu programów – co to jest stos, heap, przerwania, rejestry.
  • Znajomość dowolnej rodziny mikrokontrolerów – co to RAM, FLASH, CPU, DMA itp. Do tego obsługa podstawowych peryferiów (GPIO, UART, SPI, I2C, ADC, Timery).
  • Podstawy RTOSów – mutexy, semafory, kolejki, taski, priorytety, deadlocki.
  • Obsługa narzędzi – miernika, oscyloskopu, analizatora, zasilacza (wystarczy po jednym filmiku na YT z obsługi każdego).
  • Podstawy elektroniki – pull-up/down, open drain, wpływ zakłóceń, sterowanie silnikami DC, czytanie schematów.
  • Podstawowa znajomość gita – push, pull, commit, merge, rebase.
  • Język angielski.

Zrobienie 2-3 większych projektów na studiach albo hobbystycznie powinno wystarczyć do nabycia całej tej wiedzy. Ja polecam na projekt roboty – na przykład Line Follower. Chociaż inne projekty jak na przykład własny system inteligentnego budynku nadają się równie dobrze. Po takim przygotowaniu będziecie wystarczająco samodzielni, żeby coś wnieść do projektu, będziecie rozumieć otrzymywane zadania i będziecie potrafili zadać pytania o ile czegoś nie wiecie. Na początek to już dużo. A zebrana w ten sposób wiedza to dobra baza do dalszej nauki.

Później tą bazę można rozszerzać o C++, Asemblera, Makefile i ogólnie buildowanie, dobre praktyki, clean code, wzorce projektowe, testowanie, debugowanie i ogromną ilość innych aspektów. To one odróżniają juniora od doświadczonego programisty i wiedza o nich naturalnie przychodzi z czasem w miarę rozwiązywania codziennych zadań.

Przykładowe pytania na rozmowę

Rozmowa rekrutacyjna powinna sprawdzać wymienione wyżej umiejętności. Nie może więc na niej zabraknąć pytań z C. Musisz być w stanie napisać prosty program na tablicy albo na kartce np. FizzBuzz, printowanie stringa od tyłu albo printowanie ASCII artów. Celem takiego zadania jest upewnienie się, iż potrafisz się posługiwać ifami, pętlami i zmiennymi.

Dalej pora na trudniejsze pytania sprawdzające wiedzę o wskaźnikach, stosie, czy przerwaniach. Na przykład:

uint32_t *ptr1 = 0x4000; uint8_t *ptr2 = ptr1; ptr1++; ptr2++;

Jakie adresy wskazują ptr1 i ptr2? Istnieją również pytania, które można zadać każdemu i w zależności od doświadczenia spodziewać się innych odpowiedzi, albo prowadzić dalszą dyskusję na inne tory. Dobry przykład został opisany na Embedded Artistry.

Pytania powinny dotyczyć problemów możliwych do natrafienia w pracy. Pytania o kruczki są bez sensu. W końcu nie rekrutujemy do Obfuscated Code Contest

Obowiązkowe jest również pytanie o najciekawsze projekty kandydata, gdzie może on trochę opowiedzieć o rozwiązywaniu typowych problemów i wadach oraz zaletach zastosowanych rozwiązań technicznych. Przy okazji możemy od razu zobaczyć, czy mówi z zaangażowaniem i go to interesuje.

Podsumowanie

Jak widać, wykonanie kilku projektów powinno zapewnić wystarczające umiejętności, aby znaleźć pierwszą pracę w embedded. W przyszłości może to się zmienić – w końcu rynek jest dużo mniejszy niż w innych dziedzinach programowania. Jednak o ile ktoś ta ścieżka interesuje i jest dobry – zawsze da sobie radę.

Trafiając do pierwszej pracy nie musisz wiedzieć wszystkiego. Powinieneś zwracać uwagę na odpowiednie środowisko do podnoszenia umiejętności – mieć kontakt z doświadczonymi inżynierami chętnymi do dzielenia się wiedzą, projekt, w którym przestrzegane są dobre praktyki i firma, która inwestuje w rozwój pracowników.

Idź do oryginalnego materiału