Zmiana języka - luźne rozważania

Odpowiedz Nowy wątek
2019-07-08 08:12
1

Cześć wszystkim.
Znudzony już trochę tym jak wygląda kod produkcyjny w C++[tona zaszłości, wskaźniki na wskaźniki, wskaźniki na funkcje, new i delety, brak STL'owych struktur danych bo lepiej zrobić alokacje przez new], pomyślałem sobie o zmianie ścieżki kariery. Broń boże nie jest to temat na zasadzie "jest tyle języków, nie wiem co wybrać", ani też nie "który język przyniesie mi największe zarobki". Wybrałem kilka języków, potrzebuję dowiedzieć się o realiach pracy w tych technologiach. C++ bardzo lubię, od 11'stki da się w nim pisać naprawdę super kod, ale mam wątpliwości, że jak będę zmieniał firmę, to w innych projektach jest dużo bardziej "nowoczesny" kod, mniej bałaganu, mniejsza ilość definów i innych dupereli, których w tym języku, od co najmniej 8 lat, nie trzeba kompletnie używać - niemniej, jeżeli się mylę, i ktoś osobiście zna krakowskie firmy, w których standardy kodowania w tym języku są całkiem wysokie, chętnie się o nich dowiem, bo ten język znam zdecydowanie najlepiej ze wszystkich, i sporo czasu na rozwijanie tej wiedzy poświęciłem.

Selekcja dotyczy kilku języków, które mniej lub bardziej znam, a w których bym się widział:

C - Rezygnacja z C++ na rzecz tego języka to pewnie byłby trochę ból, z uwagi na konieczność pożegnania się z STL'em i brakiem alternatywy dla niego, ale z drugiej strony język jest relatywnie prosty, i ta rezygnacja z STL'a ma taką korzyść, że i dziwnych problemów można uniknąć. Mam jednak wątpliwości czy byłaby tu jakaś wielka zmiana względem C++'a pod względem standardów kodzenia, a i najwięcej ofert widzę w embedded, a trochę nie jestem fanatykiem programowania na bare metal i malutkie urządzenia.

C# - Super język, naprawdę bardzo lubię pisać w C#, mimo ogólnego nielubienia się z technikami MS. Problem jaki widzę to niestety konieczność pracy na Windowsie - dużo wygodniej pracuje mi się na macOS/Linux. Widziałem kilka ofert, gdzie oferowano możliwość pracy na Linuxie czy Maku, ale generalnie takich ofert było niewiele - może ktoś się spotkał, bo trochę mnie interesuje jak to wygląda.

Scala - Cenię sobie możliwości Scali, ciężko sobie rozpisywać, ale bardzo przyjemnie jest dla mnie pisanie w tym języku. Tutaj jedyne wątpliwości, to w zasadzie fakt, czy dla kogoś bez doświadczenia w Javce, jest w ogóle szansa na wbicie się na rynek Scali.

Go - Patrz avatar. Brak sensownych ofert na ten moment i to jest główny problem.

Chciałbym poznać wasze doświadczenia z tymi językami, w opozycji do tego, co skromnie opisałem na temat moich doświadczeń z C++. Można ten temat potraktować luźno, obecnie nie pali się mi się grunt pod nogami, nie mam potrzeby zmieniania pracy "na już", a i zdaję sobie sprawę, że moja doświadczenie z pracą przy C++, nie jest żadnym wyznacznikiem i rzeczywistość może się okazać zupełnie inna.


tak zle z tym cpp w polsce? myslalem ze tu juz wiekszosc jedzie na c++11 :/ kurna, ja tu emulator zaczalem pod cv - Cr0w 2019-07-10 10:08
No ja mam nawet C++17 w pracy, ale to nie kompilator, tylko ludzie piszą, i jak ktoś wychodzi z ISO C++, do tego był wtedy oczarowany tym językiem, to ciężko mu porzucić nawyki. - Tenonymous 2019-07-10 14:06

Pozostało 580 znaków

2019-07-19 09:23
0
Tenonymous napisał(a):

Cześć wszystkim.
Znudzony już trochę tym jak wygląda kod produkcyjny w C++[tona zaszłości, wskaźniki na wskaźniki, wskaźniki na funkcje, new i delety, brak STL'owych struktur danych bo lepiej zrobić alokacje przez new], pomyślałem sobie o zmianie ścieżki kariery. Broń boże nie jest to temat na zasadzie "jest tyle języków, nie wiem co wybrać", ani też nie "który język przyniesie mi największe zarobki". Wybrałem kilka języków, potrzebuję dowiedzieć się o realiach pracy w tych technologiach. C++ bardzo lubię, od 11'stki da się w nim pisać naprawdę super kod, ale mam wątpliwości, że jak będę zmieniał firmę, to w innych projektach jest dużo bardziej "nowoczesny" kod, mniej bałaganu, mniejsza ilość definów i innych dupereli, których w tym języku, od co najmniej 8 lat, nie trzeba kompletnie używać - niemniej, jeżeli się mylę, i ktoś osobiście zna krakowskie firmy, w których standardy kodowania w tym języku są całkiem wysokie, chętnie się o nich dowiem, bo ten język znam zdecydowanie najlepiej ze wszystkich, i sporo czasu na rozwijanie tej wiedzy poświęciłem.

c++ (specjalnie z małej) to zawsze był najbardziej poryty kod, zwłaszcza w projektach komercyjnych. Od tego nie ma ucieczki.

Selekcja dotyczy kilku języków, które mniej lub bardziej znam, a w których bym się widział:

C - Rezygnacja z C++ na rzecz tego języka to pewnie byłby trochę ból, z uwagi na konieczność pożegnania się z STL'em i brakiem alternatywy dla niego, ale z drugiej strony język jest relatywnie prosty, i ta rezygnacja z STL'a ma taką korzyść, że i dziwnych problemów można uniknąć. Mam jednak wątpliwości czy byłaby tu jakaś wielka zmiana względem C++'a pod względem standardów kodzenia, a i najwięcej ofert widzę w embedded, a trochę nie jestem fanatykiem programowania na bare metal i malutkie urządzenia.

Embedded to nie tylko bare metal i nie tylko malutkie urządzenia. To też całkiem pokaźne routery, switche, smartfony etc. wszystko działające pod kontrolą całkiem sporych OSów.

Go - Patrz avatar. Brak sensownych ofert na ten moment i to jest główny problem.

To szukaj zdalnych opcji dla zagramanicy.

Chciałbym poznać wasze doświadczenia z tymi językami, w opozycji do tego, co skromnie opisałem na temat moich doświadczeń z C++. Można ten temat potraktować luźno, obecnie nie pali się mi się grunt pod nogami, nie mam potrzeby zmieniania pracy "na już", a i zdaję sobie sprawę, że moja doświadczenie z pracą przy C++, nie jest żadnym wyznacznikiem i rzeczywistość może się okazać zupełnie inna.

Twoja praca z C++ jak najbardziej jest wyznacznikiem rzeczywistości - realia większości projektów komercyjnych to byle szybciej byle działało - w połączeniu z C++ to mokry sen naćpanego Duńczyka, który nie wychodzi z piwnicy przez większość życia, bo kocha debugować błędy generujące 10 stronicowy output i zgadywać jakie nieobsłużone przypadki brzegowe generuje 10 warstw kodu każdy pisany korzystając z innego subsetu C++. Plus jest taki, że jak umiesz to robić, to mało co cię w życiu jako programista zagnie.

Jakieś konkretne firmy w krakowie, klepiące Embbedded, nie będące bare metal, w C? - Tenonymous 2019-07-19 18:08

Pozostało 580 znaków

2019-07-19 10:16
0
Tenonymous napisał(a):

Jeszcze takie pytanie - jak na kompletną zmianę języka patrzą pracodawcy?

Zdefiniuj "kompletną zmianę" :P

  • czy zmiana w obrębie tego samego języka, tylko na mocno różniącą się wersję jest kompletna?
  • czy zmiana na język wywodzący się z dotychczasowego (lub odwrotnie) jest kompletna?
  • czy zmiana na język np. w obrębie tego samego ekosystemu np. Java <-> Kotlin <-> Scala <-> Groovy jest kompletna?
  • czy zmiana na język różniący się mocno składnią ale w obrębie zbliżonych zastosowań i paradygmatu jest kompletna?

Załóżmy, że chcę iść z Embedded C/C++, do Scali. Jestem traktowany jak gość bez doświadczenia i muszę się liczyć z obniżeniem zarobków do rangi absolutnie początkującego?

To jest jedna, wielka, cholerna ruletka jak patrzą.

  • dla części odpadasz całkowicie, bo ale pan nie masz doświadczenia w X tylko w Y
  • część przymknie trochę oko i przyjmie ale "zdegraduje" czy coś
  • część przymknie bardzo oko tzn. słyszałem o przypadkach gdy np. gość bez doświadczenia w C++ i embedded zostawał seniorem C++ w embedded
  • część ma coś w rodzaju zaburzenia dwubiegunowego i np. najpierw przeciągnie Cię pomyślnie przez rekrutację, a potem zajrzy do CV i Cię odrzuci przez brak doświadczenia

Prosząc o pomoc w wiadomości prywatnej odbierasz sobie szansę na otrzymanie pomocy od kogoś bardziej kompetentnego :)
Na pewno zmiana z czegokolwiek na Delphi jest kompletną zmianą. Nie ma za co ;) - cerrato 2019-07-19 10:37
Jak można dać seniora embedded komuś zielonemu (chyba że przez doświadczenie rozumiesz tylko doświadczenie zdobywane za wynagrodzenie) w embedded? XD - Satanistyczny Awatar 2019-07-19 11:28
a kto bogatemu zabroni... no ale, ale, podobno kupił sobie RPi "żeby poćwiczyć" :D :D :D - superdurszlak 2019-07-19 11:33
Może to było embedded C++ na zasadzie instalacja kompilatora C++ na raspberry xD - Satanistyczny Awatar 2019-07-19 16:34
Przez kompletną zmianę miałem na myśli zmianę właśnie C++'a na coś korporacyjnego - vide Jave/Scale/C#. :P - Tenonymous 2019-07-19 18:07

Pozostało 580 znaków

2019-07-19 18:06
0
TurkucPodjadek napisał(a):

Pamiętaj, że język to tylko narzędzie i w każdym możesz trafić do totalnego gównostacku. Ja np. w Go (który jest chyba młodym językiem), trafiłem do 2 zupełnie nowych projektów, które z teamem bootstrapowaliśmy. Po tygodniu już była sieka technologiczna i dług na miesiąc, i to w Go. Nie chcę mówić, co było po miesiącu. Pozdro korpoarchitekci od Javy z tego miejsca. W ogóle, z odpowiednim korpoarchitektem znienawidzisz każdy język, tylko daj mu szansę.

Więc nie przywiązuj się do języka, bo trafisz z jeszcze większego deszczu pod rynnę niż w antycznym C++ (bo w antycznym wiesz, że będzie antyk, a jak jest "cool" język i nowy to oczekuje się "cudów"). Jak chcesz robić coś "cool", to rób swój projekt po godzinach, pracując w jakimś ciepłym ***, gdzie jest miło i kasa spływa za samo tylko oddychanie. A jak chcesz więcej zarabiać, to język programowania nie ma żadnego znaczenia, tylko dochodzą inne skille i umiejętności.

Tylko to niekoniecznie chodzi o architekturę, a bardziej o zróżnicowanie C++ na poszczególnych standardach. Jak w kodzie spotykasz tonę dziwnych makr, bo ktoś tam kiedyś przeczytał, że to super hiper uber mega szybkie rozwiązanie, a już na pewno milion razy wydajniejsze niż lambda, czy funktor, to trochę się jednak odechciewa na to patrzeć. A jak jeszcze w miejscu, w którym tego "cudownego" makra użyto, pojawia się błąd to krzyż na drogę.
Mnie generalnie wcale nie chodzi o to, żebym miał super nowoczesny projekt, z samymi wysokimi standardami. Po prostu wiem, że w innych językach, z uwagi na brak takich dziwacznych możliwości, jest szansa uniknąć takiego burdelu.


Pokaż pozostałe 14 komentarzy
Rust również jest wieloparadygmatowy. - axde 2019-07-19 19:14
No niespecjalnie (w sensie jest, ale zarówno OOP jak i FP jest w nim znacznie gorszy niż np w Scali). OOPa jest w nim niewiele (np nie ma w ogóle dziedziczenia) i nie jest nawet używany do polimorfizmu - do niego używane są typeclassy (no chyba, że ktoś używa trait object, który jest dość OOPowy, ale ich używa się rzadko, bo są wolne). FP jest słaby, nie ma nawet wbudowanych niemutowalnych kolekcji z structural sharing. - Wibowit 2019-07-19 19:20
Nie od razu Rzym upadł. Owszem nie wszystko jest ale biorąc pod uwagę comiesięczne (trochę dlużej) wypluwanie kolejnych wersji języka można liczyć, że pewne rzeczy w końcu się w nim znajdą. - axde 2019-07-19 19:31
Chyba raczej nie od razu Kraków zbudowano :] Ta pseudo-wieloparadygmatowość Rusta jest raczej podyktowana założeniami, a nie chęcią zaoferowania możliwości pisania w wielu stylach programowania. Założenia są np takie: kompilacja AOT, brak tracing GC, niski narzut wydajnościowy i pamięciowy, przewidywalne zarządzanie zasobami, etc Stąd np pomysł wykorzystania typeclass. Te można zmonomorfizować, tzn typeclassy są mocno zbliżone do szablonów w C++ (połączonych z conceptami, bo typeclass jest silnie typowana, a nie słabo jak zwykły szablon w C++). - Wibowit 2019-07-19 19:40
Borrow checker w Ruście to też nie ukłon w stronę FP, a sposób na uniknięcie data races, aliasingu dla wskaźników dla odczytu i zapisu, etc Gwarancje które daje borrow checking można wykorzystać do wyprodukowania szybszego kodu natywnego, np z większą ilością keszowania danych w rejestrach. Jeżeli w Ruście zrobię metodę do kopiowania danych z jednej tablicy do drugiej to mogę założyć iż referencje wejściowe prowadzą do różnych tablic, bo jeśli mam jedną mutowalną referencję do czegoś to nie mogę mieć jakiejkolwiek innej. W C++ takie optymalizacje umożliwia słówko restrict - Wibowit 2019-07-19 19:42

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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