Projekt "droga do zawodowego programisty C"

8

Hey! Jestem studentem pierwszego roku informatyki na Politechnice Lubelskiej, który już jakiś czas (kilka lat) siedzi w programowaniu. Próbowałem różnych technologii i dziedzin IT, ale obecnie zdecydowałem się wyspecjalizować i "ograniczyć" do głównie jednej - programowanie embedded.

Pod tym postem będę opisywać daily progress, czyli co zrobiłem w danym dniu w kierunku zostania zawodowym programistą embedded. Będzie to swoisty "dziennik rozwoju".

Wiem, że embedded jest to nisza, więc jeśli nie uda mi się znaleźć pracy stacjonarnej, zdalnej lub wystartować na Upwork'u to podejmę się jej w innej technologii - przy pierwszej lepszej okazji, a następnie będę cały czas szukał i "czuwał" nad pracą w embedded.

Mam w planach do nauki i przerobienia następujące "zagadnienia":

  • Język C
  • Język C++
  • Osdev
  • Jądro Linuxa
  • Algorytmy, struktury danych
  • programowanie ARM, STM32
  • Linux ("użytkowanie"), bash
  • trochę Pythona (podstawy) do skryptowania
  • Git
  • Jakieś podstawy telekomunikacji, Ethernet, TCP, IP
  • CAN, I2C, SPI
  • FreeRTOS
  • Architektura AUTOSAR
  • Przetwarzanie sygnałów
  • Boost
  • STL
  • wielowątkowość i jej koncepty
  • Docker
  • Inne rzeczy związane z embedded

Część z tych rzeczy już znam w jakimś stopniu, więc niektóre "zagadnienia" będą szły szybciej, inne wolniej.

W ramach nauki tego wszystkiego chciałbym realizować różne projekty z "tego", udzielać się na stack overflow, prowadzić ten dziennik postępu oraz wrzucać kontrybucje do open-source (np. jądra Linuxa).

Kilka linków:
https://github.com/Grzegorz-Malyska
https://stackoverflow.com/users/12242086/grzegorz-ma%c5%82yska

Pozdrawiam, gjm

0

Nie myślałeś o założeniu kanału na YT?

0

Bez kanału na yt i bloga może się nie udać

3

Przydatna rada: dokumentuj swój postęp. Pisz teksty na bloga, artykuły i tak dalej. Dużo ci to pomoże, realnie wpłynie na szanse zatrudnienia. Ucząc innych, uczysz siebie też. Powodzenia.

Poza tym, nie żebym zniechęcał, ale...

screenshot-20191031151121.png

2

Jako ten, który szukając technicznych rzeczy misi się przekopać przez 20 bezwartościowych blogów kanałów YT itp zanim znajdę coś co ma wartość merytoryczną, proszę cię nie powiększaj internetowego śmietniska.

Jeśli chodzi o rekrutację więcej sensu ma konto na github ze zrealizowanymi projektami. Żaden rekruter nie będzie oglądał YT, albo czytał bloga kandydata (nie znam takiego przypadku).
Jak człowiek od technicznej części zobaczy konto github to jest spora szansa, że zajrzy tam na 5 minut. Bloga raczej nie będzie trawił.

2

@MarekR22: albo czytał bloga kandydata (nie znam takiego przypadku). A ja z kolei miałem co najmniej dwie rekrutacje do firm, które normalnie byłyby poza moim zasięgiem sądząc po cv, na które dostałem się dzięki blogowi.

3

Zapewne wszystko zależy od osoby czytającej CV. Ja osobiście też nie jestem fanem tworzenia jakiejkolwiek treści nie wnoszącej nic nowego (czy to blogi, filmy, książki, konferencje). Sam fakt posiadania bloga też nie musi pomagać, bo kto ma czas sprawdzić co kandydat tam wypisuje. Choć pewnie znajdzie się ktoś kto to doceni.

3

Na PolLub prawdopodobnie odpalimy (jako Grupa .NET) w tym semestrze albo projekt, w którym będzie element IoT do zaprogramowania, albo przynajmniej kilka wykładowarsztatów z IoT. Raczej Arduino/ESP8266 + Azure, ale może cię zainteresuje. Śledź https://www.facebook.com/grupanetPL/

10 dni temu robiłem warsztaty z Gita ;)

BTW, sporo rzeczy, które masz na tej liście, będziesz miał w ramach różnych przedmiotów na studiach.

0

Computer science student which is actively looking for a web development job (Java, JS). Interested also in embedded programming.

To emby czy jednak webowka ?

0

Dzień 1 projektu

Zaczynamy naukę C od książki "Język C. Szkoła programowania. Wydanie VI".

Co dziś zrobiłem?

  • Utworzyłem to repozytorium (https://github.com/Grzegorz-Malyska/MojePublikacjeIT), które będzie moim swoistym "blogiem", gdzie będę opisywał rzeczy, których się nauczyłem; 1 zagadnienie per 1 publikacja.
  • Zacząłem przerabiać powyżej wymienioną książkę.
  • Co przerobiłem z książki? Rozdziały od 1 do 4, wraz z pytaniami kontrolnymi i ćwiczeniami.
  • Jakie zagadnienia przerobiłem? Historia C, parę basic rzeczy o kompilatorach i linkerach, standardy języka C, struktura programu w C, definiowanie własnych funkcji, typy danych, operator sizeof, #define, const, trochę o printf() i scanf(), podstawy stringów

Wszystko dziś poszło gładko z racji tego, że już od dawna znałem te zagadnienia. Nie mniej jednak trochę sobie poćwiczyłem i "odświeżyłem" wiedzę :P

Pozdrawiam

0

Cześć. Fajny temat, będę go śledził.

Masz już wybraną dystrybucję Linuxa do "użytkowania"? I jeśli tak to pytam z ciekawości jaką i dlaczego.

2

To wszystko co napisałeś w pierwszym poście jak najbardziej ok choć nie wiem czy docker jest często w embedded używany, na pewno na plus jest znajomość działania tego na czym się docker opiera - namespaces, cgroups etc.. Do tego dołóż jeszcze umiejętność używania oscyloskopu, miernika i lutownicy, znajomość bootloaderów np. U-Boot i znajomość assemblera - przynajmniej czytanie, wbrew pozorom raz na jakiś czas się przydaje. Oczywiście nie wszystko naraz, IMO najlepiej jakbyś jak najszybciej poszedł do jakiejś pracy w embedded.

Ja też pracuję w embedded, rynek w PL niewielki tym bardziej jeśli nie lubisz Windowsa i będziesz chciał na co dzień pracować na Linuksie przynajmniej na hoście ale praca może być ciekawa.

EDIT: nie żebym ja to wszystko umiał :) nawet połowy nie umiem ale wiem że jest potrzebne

4

jako osoba która też studiuje na polibudzie lubelskiej 3 rok, styczność z embedded ma od 5 lat i pracuje komercyjnie 4 miesiąc dam ci takie protipy

po pierwsze - ogarnij C11 i leć w STM32, najlepiej na tym wyjdziesz w kwestii przyszłości. Nie wiem na którym roku jesteś, na 3 będą uczyć atmegi32 na zajęciach i będzie wstęp z asma a potem (jak prowadzący pozwoli xD) C.
Jak chcesz łatwiejszą drogę, to lecisz w C++a i Arduino, STMy też mają wsparcie.
Co prawda, STMy da się też w czystym cpp kodzić używając HALa, ale trzeba troszkę pokombinować czasami żeby to wyszło tak jak powinno, szczególnie jak się używa CubeMX'a.

co do jajka linuxa - zależy od tego w jakie embedded celujesz, ja pracuję na STM32 i Arduino więc jeśli też planujesz zostać na etapie mikrokontrolerów i nie bawić się w osdev, to nie ma większego sensu żebyś sie zagłębiał w działanie kernela linuxowego. FreeRTOS wtedy ci się zdecydowanie przyda, ale raczej nie linux.

STL C++owy w embedded ci się nie przyda, bo nie jest przystosowany do działania pod embedded i jak już masz użyć jakiejś libki standardowej to raczej nie tej oficjalnej, tylko jakieś klony które mają znacznie mniejszy code footprint.

docker/multithreading - j/w, nie w mikrokontrolerach. docker to jeszcze jak cię mogę, jak chcesz robić CI na symulatorze albo inne magiczne [CIACH!], ale takie rzeczy się robi raczej jak masz za dużo czasu i potrzebujesz kodu ostro obłożonego testami.

olso zapraszam do mojego koła naukowego Microchip, jak chcesz poznać szczegóły to pisz do mnie tutaj: https://www.facebook.com/steelph0en1x (albo na discordzie pollubu jak tam jesteś)

1
edwi-92 napisał(a):

Computer science student which is actively looking for a web development job (Java, JS). Interested also in embedded programming.

Popraw to "which" na "who", bo aż uszy bolą przy czytaniu ;-)

2

Pamiętam Cię z postów o nauce OSDevu i pamiętam też, że w sumie jesteś w podobnym wieku do mnie i też jesteś na drodze "zdobywania expa". Dlatego napiszę Ci przede wszystkim, żebyś się szybko nie zraził i nie poddawał się. Skoro znasz już podstawy programowania w C i czytasz książkę, która tych podstaw uczy to z jednej strony dobrze, bo zawsze znajdziesz tam coś nowego - jakieś szczegóły. Ale jest też druga strona medalu, a mianowicie prostota i szybkość przyswajania tych rzeczy.

Zmierzam do tego, że na początku nauka jest dość łatwa i przyjemna, ale potem zaczynają się schody. Po Twoich wcześniejszych postach (jeśli @Vaversky to Twoje konto, a myślę, że tak biorąc pod uwagę maila podanego na stacku) wnioskuję, że walczyłeś sam ze sobą, żeby w ogóle skupić się na samym zdobywaniu wiedzy. Nie popełnij tego błędu drugi raz i po prostu się ucz, nie patrz na innych i nie przestrasz się czegoś trudniejszego niż podstawy.

Powodzenia! Będę śledził Twój projekt ;)

1

Jeżeli studiujesz na Politechnice Lubelskiej to poczekaj do trzeciego roku gdzie pojawiają się systemy wbudowane i mikro-kontrolery. Jeżeli Pan Wojtek i Zbyszek #pdk nie zabiją w Tobie ciekawości do systemów wbudowanych: wtedy będziesz wiedział na pewno że to twoja miłość a nie przelotny romans i możesz traktować to poważnie. ;) Twój wątek wygląda trochę tak jak: złapałem zajawkę i teraz niech każdy o tym wie, tak czy siak. Powodzenia xD

0

Dzień 3 projektu.

Kontynuujemy naukę C z książki.

Z książki przerobiłem rozdziały od 9 i 10, wraz z pytaniami kontrolnymi i ćwiczeniami.
Jakie zagadnienia przerobiłem? Ostatnie informacje o funkcjach i ich prototypach, resztę informacji o tablicach, wszystko o wskaźnikach.

Większość informacji już znałem, jednak dowiedziałem się o literałach złożonych i sposobach definiowania tablic (tych, których nie znałem).

Udało się coś napisać na stack overflow:

Ciekawe linki:

Zrobiłem trochę rzeczy w Linuxianie (link do commita: https://github.com/Grzegorz-Malyska/Linuxian/commit/bfad528b98748f3f38af5a9eb4c04f86b9ff103d), głównie refaktoryzację podpinania ISRów do IDT.

Będę to ofc robił dalej w ramach projektu.

3

Wyznaczyłeś sobie bardzo dużo rzeczy do nauki, a żeby zostać programistą embedded wystarczy C, Git, Algorytmy, podstawy SO i matematyki :P

0

Dzień 4 projektu.

Dziś większość dnia to kodowanie i praca nad Linuxianem.

Co zostało zrobione?

2

A umiesz uzasadnić "po grzyba" te zmiany?

EDIT 1
Zwłaszcza takie kwiatki jak wywalenie Copyrightów?

EDIT 2
Czytałeś w ogóle https://www.kernel.org/doc/html/v4.10/process/coding-style.html

0

Dzień 5 projektu.

Dziś większość dnia to kodowanie i praca nad Linuxianem.

Co zostało zrobione?

Ogólnie to na ten moment priorytetem w projekcie jest przelecieć, zrozumieć i mieć "obcykany" cały code base - orientować się w nim bez problemu.

Postaram się za niedługo dodawać nowe feature'y do projektu.

0
  1. Czy to się buduje?
  2. Czy to działa?
  3. Jakie wnioski z pytania o rzutowanie rzeczy typu 0xDEDEDE na (void *)?
0
  1. Tak
  2. Tak
  3. Implicit cast warning :(
0

Jakieś przemyślenia na temat tego nieszczęsnego punktu 3? Lub po prostu pytania?

0

IMO dlatego, że musimy jasno dać znać kompilatorowi, że chcemy dany integer potraktować jako adres (wskaźnik) - duże ryzyko popełnienia błędu i customowa sytuacja.

2

Są i inne powdy - czy też przypadki, które mogą być powiązane mniej lub bardziej z tym co piszesz np. takie rzeczy jak
modele ILP32 oraz LP64
Przykładowy tekst o tym - polecam zapoznać się z rozbieżnościami między nimi:
https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.cbcpx01/datatypesize64.htm

Ogólnie przy pisaniu (bądź rżnięciu z internetu i książek) kodu na tym poziomie trzeba uważać na takie rzeczy jak

  • endianness
  • wielkości typów zależne od architektury

A całą epopeję można by pisać na temat jakim jest kolejność upakowania danych w strukturach i "dopełnianie" pól - tutaj też bywa zależnie od sytuacji powiązanie z powyższymi rzeczami jeśli zatrudnisz do tego wszelkiej maści rzutowania, przepisywania i kopiowania wartości. Jak zaczniesz robić przemeblowania w strukturach - pamiętaj że może mieć to konsekwencje dla bibliotek i aplikacji.

3

Pod to co wyżej napisał @Satanistyczny Awatar można podpiąć jeszcze security. Ja na przykład siedzę w low level sec (wciąż się uczę oczywiście) i mogę Ci napisać, że takie rzutowania albo nierozważne operowanie pointerami lub np. nieuważne operacje na intach mogą prowadzić do poważnych błędów, a skutki są potem takie, że atakujący może robić w systemie co chce. (przykładowo)

Także jeśli chcesz pracować w embedded to zainteresuj się choć trochę jak pisać w miarę bezpieczny kod. Możesz mieć farta, że firma, w której będziesz pracował będzie zatrudniała researcherów, którzy takie błędy będą znajdować odpowiednio wcześnie, ale jak nie będziesz miał tego farta to może być nieciekawie. Ogólnie C jest bardzo error prone i na każdym kroku trzeba myśleć co się robi.

3

Inicjatywe podziwiam itd., ale naprawdę zamierzasz pisac tu post codziennie? Nie lepiej zalozyc bloga i tam sie przeniesc zamiast robic taki watek tasiemiec?

0

Czy do nauki języka C na potrzeby programowania AVR (bo chyba lepiej czyste AVR niż Arduino) bardziej nada się książka Pana Praty czy Francuza?

1 użytkowników online, w tym zalogowanych: 0, gości: 1