Czy są szanse na zatruenienie?

0

Witam wszystkich,
piszę tego posta, ponieważ chciałbym usłyszeć (a właściwie przeczytać :) opinię na temat moich podstawowych umiejętności. Mianowicie czy z tym co umiem mam szansę na znalezienie pierwszej pracy / stażu (płatnego:) na stanowisku juniora developera C++, a jeśli nie to może dostanę jakieś wskazówki na czym powinienem się skupić aby zmaksymalizować swoje szanse? A może ktoś szuka juniora w swojej firmie ?
Ale do rzeczy, umiejętności, które uważam że mam na wystarczającym poziomie na stanowisko junior developera (problem w tym, że to moje własne odczucie i nie jestem w stanie tego obiektywnie ocenić, dlatego piszę tego posta :):
• C++
• STL
• makefile
• C
• git/github
• SQLite
• Linux/Unix konsola
• UML 2.0
• mikrokontrolery AVR ATMega
• Eagle, podstawy elektroniki, RS232, RS485
• doxygen
Wszystkich wymienionych technologii uczę się głównie z książek, internetowych tutoriali i dokumentacji języków i bibliotek takich jak wxWidgets, boost (chociaż tej biblioteki użyłem tylko pośrednio, używając innej) i innych . Próbki kodu są na githubie.
Programy na githubie:
TerSer – jest to program korzystający z bibliotek STL, wxWidgets i pośrednio z boost. Służy do komunikacji z urządzeniami korzystającymi z komunikacji szeregowej (coś jak putty, tylko biedniejsze :). Na jego podstawie chcę napisać program, który w oparciu o komendy AT kontrolował będzie pracę sterowników w sieci opartej o magistralę RS485, głównym jego celem będzie odczytywanie temperatur w instalacji centralnego ogrzewania, temperatur zasilenia i powrotu każdego grzejnika w instalacji (nie wspomniałem, ale jestem inżynierem instalacji sanitarnych, aktualnie studiuję zaocznie ostatni semestr studiów magisterskich).
SerialTerminal – miał robić to co powyżej, ale działając w konsoli z użyciem bibliotek pdCurses. Doszedłem jednak do wniosku, że za dużo musiałbym napisać samemu więc użyłem wxWidgets.
ThermodynamicProcesses – program do obliczania punktów charakterystycznych w centrali klimatyzacyjnej, jak nazwa wskazuje są to obliczenia termodynamiczne, związane z wykresem Molliera. Pisałem go na pierwszym roku studiów magisterskich w trakcie chodzenia na przedmiot o tej tematyce. służył jedynie jako praktyka, zdecydowanie nie skończony (liczy tylko niektóre przypadki).
Programików tutorialowych i zadań z książek nie wrzucałem, ale było ich sporo. Kod ogólnie staram się pisać możliwie czytelny i przejrzysty zgodnie z książką „Czysty kod”, bo w końcu więcej się kodu czyta niż pisze :).
Do tej pory (czyli do wakacji) pracowałem w UK w firmie budowlanej, język angielski znam na poziomie B2. Tutaj link do opisu kilku problemów z którymi sobie poradziłem korzystając z różnych źródeł internetowych. Jest on w formie bloga, ale piszę go jedynie, żeby mieć co podlinkować w CV oprócz githuba (nie jest to blog dla szerszej publiczności).
Podsumowując, czy mając te kilka małych prywatnych projektów (z których tylko jeden działa na tyle, że można go używać :) mam jakieś szanse na zatrudnienie? Nie mam studiów informatycznych, ale jestem inżynierem, matematyka i fizyka nie jest mi obca. Angielski znam wystarczająco, aby czytać, pisać i potrafić się dogadać, a programowanie bardzo mi się podoba i sprawia mi wiele przyjemności. Wiem, że poszukiwani są głównie seniorzy i mid developerzy, ale może junior z podstawami i chęcią nauki też by się komuś przydał?
Link do githuba

3

Za takie komentarze już odpadasz :P Usuń to na Boga.

    //! A constructor.
    /*!
      \param height, an unsigned integer argument.
      \param width, an unsigned integer argument.
      \param startx, an unsigned integer argument.
      \param starty, an unsigned integer argument.
    */
MenuEngine(unsigned int height, unsigned int width, unsigned int startx, unsigned int starty);
mainMenu.add_item( &terminal); // adds terminal menu to the main menu

Ogólnie wielu studentów nie napisało pewnie tyle kodu przez całe studia :)

Jakość jest marna. Wiele zagnieżdżonych ifów i catchy. Spora ilość duplikacji.

Przykładowo po co ten else if?

if(serialConnection.isOpen() == false)
	{
}else if(serialConnection.isOpen() == true)

isOpen to sprawdzasz w każdej metodzie. Lepiej jest przykładowo napisać klasę, która przyjmuje serialConnection sprawdza czy Open tylko raz.
CleanCode leży. Książkę może przeczytałeś, ale spróbuj sobie tak 2 - 3 iteracje upraszczania tego kodu zrobić.

Nie jest źle, ale więcej poczytaj o programowaniu obiektowym, wzorcach projektowych, SOLID i clean code.
Fajnie, że interesujesz się wiedzą niskopoziomową - jak tam te bajty latają.

0
nie100sowny napisał(a):

Za takie komentarze już odpadasz :P Usuń to na Boga.

    //! A constructor.
    /*!
      \param height, an unsigned integer argument.
      \param width, an unsigned integer argument.
      \param startx, an unsigned integer argument.
      \param starty, an unsigned integer argument.
    */
MenuEngine(unsigned int height, unsigned int width, unsigned int startx, unsigned int starty);
mainMenu.add_item( &terminal); // adds terminal menu to the main menu

Dzięki za komentarz, zrobię tak jak piszesz :) Chociaż tego kodu nie planuję już rozwijać, ale może chociaż będzie się prezentował troszkę lepiej ;p

0

Polecam utworzyć folder 'src' na pliki źródłowe i 'include" na nagłówki.

0
Złoty Terrorysta napisał(a):

Polecam utworzyć folder 'src' na pliki źródłowe i 'include" na nagłówki.
Dopiszę do listy poprawek :)

0

Polecam pomedytować co jest nie tak ze ścianą tekstu jak w tym przypadku z kalkulatora wilgotności:

void GeneralTab::initEvent()
{
    humidifyingWidget->setStartingHumidifyingType(processes.getHumidifyingType());

    processes.calculate();

    setProcessingModel(processes.getProcessingModel());
    processingModelWidget->setProcessingModel(processes.getProcessingModel());
    startingWidget->setPointData(processes.getStartingPoint());
    heatExchangingWidget->setPointData(processes.getHeatExchangingPoint());
    mixingWithWidget->setPointData(processes.getMixingWithPoint());
    mixingWidget->setPointData(processes.getMixingPoint());
    coolingWidget->setPointData(processes.getCoolingPoint());
    heatingWidget->setPointData(processes.getHeatingPoint());
    humidifyingWidget->setPointData(processes.getHumidifyingPoint());
    endingWidget->setPointData(processes.getEndingPoint());
    setLayoutRegardProcessingModel();
}

W ogóle czemu to repo ma tag C jeśli kod w nim jest w C++?

0

Z obecnym podażem juniorów / stażystów oraz Twoją jakością kodu - nie masz szans.
Informacje które tutaj przedstawiłeś pokazują poziom, który obecnie jest za niski na bezpłatny staż.

0
Krzychu94 napisał(a):

Z obecnym podażem juniorów / stażystów oraz Twoją jakością kodu - nie masz szans.
Informacje które tutaj przedstawiłeś pokazują poziom, który obecnie jest za niski na bezpłatny staż.

Czyli jeszcze dużo pracy przede mną.

0

Dobra pokrytykowałem, to teraz wskazówki:

  • nie twórz klasy tylko po to by zawierała jedną metodę
  • zainteresuj się temate refactoringu i tego kiedy go stosować
  • ogólnie jeśli już wybierasz podejście obiektowe, to zastanów się czy ma ono sens w danym przypadku (posiadanie w portfoli przejrzystego proceduralnie napisanego kodu w ANSI C też może zaprocentować)
  • jak dajesz jakieś kody to niech one ilustrują jakieś zagadnienia algorytmiczne pokazujące jak sklejasz ze sobą użycia list, zmiany rozmiarów struktur danych itp.

Co jest dobrze:

Tematyka jest w sumie dość oryginalna, o ile nie jest zerżnięta z jakiejś książki o programowaniu czy tutoriala który przedstawia kod, który byłby żywcem wciągnięty do projektu.

0

Rozumiem, że kod jest delikatnie mówiąc mało czytelny, ale to mój pierwszy projekt i już nad nim nie pracuję, i raczej już nie będę. Co do tagu C to gitHub sam go ustawił, prawdopodobnie przez to, że jest program jest napisany w taki właśnie dziwny (jak na C++) sposób :). - Karol-Szykula

Więc go wywal, jeśli to oficjalne portfolio, bo jak go komuś podasz i trafi na ten kod jako pierwszy, to może od razu zamknąć okno przeglądarki i zacząć przeglądać następne CV w kolejce.

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