Wątek przeniesiony 2018-12-21 16:34 z Off-Topic przez Ktos.

C++ vs C#

0

Witam,
chciałbym się dowiedzieć co nie co o pracy jako programista c++ oraz programista c#. Którego języka warto się uczyć, aby za kilka lat móc znaleźć jakąkolwiek pracę. Jakie są plusy i minusy każdego z języków oraz jakie jest ich zastosowanie.
Jestem w klasie maturalnej, przygotowuję się do matury z informatyki. Dość sporo uczę się C++. Wcześniej uczyłem się C#. Zastanawiam się, czy jeżeli przygotowuję się do egzaminu (na którym wybrałem C++) to czy później przy nim nie zostać. Mam obawy co do tego języka, że za kilka lat, na studiach i po, nie będę mógł znaleźć pracy.
Nie mam pojęcia do jakich projektów każdy z tych języków się przyda. Ciekawi mnie wytwarzanie oprogramowania oraz pisanie gier. W wolnym czasie piszę strony internetowe i uczę się JavyScript.
Mam wielki dylemat z jakim językiem wiązać swoją przyszłość, mam nadzieję, że znajdzie się ktoś na forum, kto ma jakiekolwiek pojęcie o pracy lub był w podobnej sytuacji co ja.

Pozdrawiam

0

Którego języka warto się uczyć, aby za kilka lat móc znaleźć jakąkolwiek pracę.

Istnieje spora szansa, że umiejąc każdy z tych języków będziesz w stanie znaleźć pracę, ale jeżeli utrzymają się obecne trendy, to o wiele więcej pracy (i to znacznie więcej!) jest w C# albo Javie niż w C++. Czy tak będzie w przyszłości? Raczej tak, bo idziemy w stronę szybszego tworzenia aplikacji, a zbudowanie jej w C# jest zazwyczaj szybsze niż w C++.

Jakie są plusy i minusy każdego z języków oraz jakie jest ich zastosowanie.
Ciekawi mnie wytwarzanie oprogramowania oraz pisanie gier.

Oba te języki mają bardzo szerokie zastosowanie - aczkolwiek C++ rzadziej się używa do tworzenia aplikacji desktopowych ogólnego użytku, a mobilnych lub webowych praktycznie wcale się nie używa. Za to w grach się używa, np. w Unreal Engine 4. Również C# tutaj jest obecny, w Unity, ale produkcje AAA raczej nie korzystają z Unity. Z drugiej strony - zawsze tam, gdzie wymagana jest wydajność lub odpowiednio niski poziom pojawiają się zarówno C++, jak i C (choć w dzisiejszych czasach dochodzimy do JavaScriptu uruchamianego w urządzeniach wbudowanych). Innymi słowy: C++ będzie miał najczęściej węższe spektrum zastosowań, za to jego dobra znajomość może być bardziej ceniona.

0

To zależy co chcesz robić. Jak chcesz robić w korpo i mieć spokojną pracę to pewnie C#. W C# jest na pewno więcej pracy w C++, ale czy jest więcej ambitnej pracy to wątpliwe (choć może się mylę, świat wokół M$ jest mi zupełnie obcy). C++ to obecnie typowe rozwiązanie dla dużych wymagań wydajnościowych, jak np.gier, obróbki video, itp.
C++ na pewno się przyda jeśli jara Cię programowanie. Jednak chyba dla obu są znacznie ciekawsze alternatywy. Jeśli bardzo lubisz rozwiązania Redmond, może F#? To chyba już fajniejsze, wspiera chociaż FP. Tylko po co się wiązać z .NETem? Nie lepiej JVM? Polecam Scalę. Z języków kompilowanych, jako pewnie przyszli zastępcy C i C++ (przynajmniej w wielu dziedzinach), ostatnio popularne się robią Go i Rust.

1
elwis napisał(a):

To zależy co chcesz robić. Jak chcesz robić w korpo i mieć spokojną pracę to pewnie C#. W C# jest na pewno więcej pracy w C++, ale czy jest więcej ambitnej pracy to wątpliwe (choć może się mylę, świat wokół M$ jest mi zupełnie obcy).

W C# nie pisze się dla Microsoftu tylko dla klientów. A ci są różni, poza wszechobecnymi finansami i nudnymi crudami istnieją projekty z branży biotechnologicznej, lotniczej, motoryzacyjnej. No i oczywiście gry.

Jednak chyba dla obu są znacznie ciekawsze alternatywy. Jeśli bardzo lubisz rozwiązania Redmond, może F#? To chyba już fajniejsze, wspiera chociaż FP.

C# też "wspiera" FP. F# po prostu jest FP.

1

w cpp o wiele ciężej znaleźć pracę, próg wejścia wyższy niż np. w javie/pythonie, zarobki stosunkowo niższe od tych w innych językach. Też chciałbym pracować w cpp, ale patrząc na ogłoszenia o pracę, to bardzo wątpię :((( Smutne to trochę, ale no cóż.

0
somekind napisał(a):

W C# nie pisze się dla Microsoftu tylko dla klientów. A ci są różni, poza wszechobecnymi finansami i nudnymi crudami istnieją projekty z branży biotechnologicznej, lotniczej, motoryzacyjnej. No i oczywiście gry.

Wiem o tym. Chodziło mi o to, że te technologie wiążą w dużym stopniu ze środowiskiem Windowsa, a to przełknąć co raz ciężej. To znaczy dla kogoś, kto pracuje na Windowsie. JVM chociaż pójdzie na każdej platformie dla użytkownika końcowego, i na PC i na ARMie, Linux czy Windows. Tylko niestety wolne implementacje są wolne, dlatego mimo wszystko wolę źródła do skompilowania. No ale to moje prywatne potrzeby. Jak się robi $$$ to sprawy mają się trochę inaczej. A to, że i w tych technologiach też są ambitne projekty - pewnie, ale nie napisałem, że nie ma.

C# też "wspiera" FP. F# po prostu jest FP.

Java też "wspiera". Spróbowałem, rzuciłem parę bluzgów i przestałem. Nic nie poradzisz, jeśli język nie jest do tego przystosowany. Jestem zdania, że nie da się (albo bardzo trudno) zrozumieć urok tego paradygmatu jeśli nie programuje się w języku, który go dobrze wspiera.

2
elwis napisał(a):

Wiem o tym. Chodziło mi o to, że te technologie wiążą w dużym stopniu ze środowiskiem Windowsa, a to przełknąć co raz ciężej. To znaczy dla kogoś, kto pracuje na Windowsie. JVM chociaż pójdzie na każdej platformie dla użytkownika końcowego, i na PC i na ARMie, Linux czy Windows. Tylko niestety wolne implementacje są wolne, dlatego mimo wszystko wolę źródła do skompilowania. No ale to moje prywatne potrzeby. Jak się robi $$$ to sprawy mają się trochę inaczej. A to, że i w tych technologiach też są ambitne projekty - pewnie, ale nie napisałem, że nie ma.

Ten argument jest nieaktualny od chyba 3 lat.

C# =/= Windows, a framework .NET Core działa pod Linux / Mac / Windows i również on jest otwarty.

1

Ja robię w c++ i praca z tego co widzę to głównie telco typu ericsson/nokia/motorola, ale może być tak że rekrutujesz się na c++ a trafisz w jakieś guano typu rsa/rte i powiem ci jeszcze że praca w korpo w c++ to żadne ciary - ja od dwóch miesięcy mam trzy zadania które są na 100 linijek logiki każde(i to nie jest porywający algorytm) reszta to testy, rozmowy na skype z systemowcami i jeszcze więcej testów, nie ma tam żadnej inwencji twórczej - robisz co ci każą we frameworku tej aplikacji i tyle. W c++ naprawdę musisz być dzikiem żeby robić ciekawe rzeczy, w ogóle w programowaniu trzeba być mocnym zawodnikiem żeby coś samodzielnie działać w dużym projekcie.

0
elwis napisał(a):

Chodziło mi o to, że te technologie wiążą w dużym stopniu ze środowiskiem Windowsa, a to przełknąć co raz ciężej. To znaczy dla kogoś, kto pracuje na Windowsie. JVM chociaż pójdzie na każdej platformie dla użytkownika końcowego, i na PC i na ARMie, Linux czy Windows.

Szczerze, to nigdy nie rozumiałem tego podejścia. Programista spędza czas głównie w IDE, trochę mniej w przeglądarce, a jakiś 1% w systemie operacyjnym. Co za różnica jaki to system?Jeśli programista ma problem z obsługą systemu operacyjnego dla laików, to nie jestem w stanie zrozumieć, jakim cudem programuje.

Poza tym, to nie jest takie proste, pomijając już .NET Core, to jak projekt stoi na bazie Oracle, to masz pod nią Linuksa, podobnie np. z ELK i wieloma innymi narzędziami, i czasem trzeba to wszystko umieć skonfigurować/naprawić/obsłużyć. A w Javie też się zdarzają projekty na MSSQL i deployowane na Azure. Więc wybór JVM też nie gwarantuje braku Windowsa.

1

Na bazie własnego doświadczenia w pracy C++ embedded powiem tyle, że większy problem sprawia mi zrozumienie działania urządzenia niż jakas implementacja feature'a w kodzie dla niego. Trzeba się liczyć z tym, że w takiej pracy przeważnie więcej jest ogarniania sprzętu, który programujesz niż samego programowania.

0
WeiXiao napisał(a):

Ten argument jest nieaktualny od chyba 3 lat.

C# =/= Windows, a framework .NET Core działa pod Linux / Mac / Windows i również on jest otwarty.

.Net zadziała na androidzie? I na RPi? Cokolwiek napiszesz? Jak tak to chwała mu za to, ale mnie to nie obchodzi, bo po co mam instalować .NETa, skoro nie używam ŻADNEGO programu który go używa, a środowisko też nie jest dla mnie niczym atrakcyjnym? Może należy uściślić. Ja przede wszystkim programuję dla siebie (z resztą zaznaczyłem wcześniej, że jak chcesz język do zarabiania to pewnie C# jest OK). Od 10 lat siedzę praktycznie tylko na Linuksie i dobrze mi ztym. To że na tym zarabiam to przy okazji, to pewnie trochę zmienia perspektywę. No ale przyznaję, że obiektywnie rzecz biorąc, argument może nietrafiony.

1
elwis napisał(a):
WeiXiao napisał(a):

Ten argument jest nieaktualny od chyba 3 lat.

C# =/= Windows, a framework .NET Core działa pod Linux / Mac / Windows i również on jest otwarty.

.Net zadziała na androidzie? I na RPi? Cokolwiek napiszesz? Jak tak to chwała mu za to, ale mnie to nie obchodzi, bo po co mam instalować .NETa, skoro nie używam ŻADNEGO programu który go używa, a środowisko też nie jest dla mnie niczym atrakcyjnym? Może należy uściślić. Ja przede wszystkim programuję dla siebie (z resztą zaznaczyłem wcześniej, że jak chcesz język do zarabiania to pewnie C# jest OK). Od 10 lat siedzę praktycznie tylko na Linuksie i dobrze mi ztym. To że na tym zarabiam to przy okazji, to pewnie trochę zmienia perspektywę. No ale przyznaję, że obiektywnie rzecz biorąc, argument może nietrafiony.

Android: Xamarian.

Xamarin is a Microsoft-owned San Francisco-based software company founded in May 2011[2] by the engineers that created Mono,[3] Mono for Android and MonoTouch, which are cross-platform implementations of the Common Language Infrastructure (CLI) and Common Language Specifications (often called Microsoft .NET).

With a C#-shared codebase, developers can use Xamarin tools to write native Android, iOS, and Windows apps with native user interfaces and share code across multiple platforms, including Windows and macOS.[4] According to Xamarin, over 1.4 million developers were using Xamarin's products in 120 countries around the world as of April 2017.[5] 

IoT:

Nie testowałem, ale jest coś takiego:

https://github.com/dotnet/iot

https://blogs.msdn.microsoft.com/david/2017/07/20/setting_up_raspian_and_dotnet_core_2_0_on_a_raspberry_pi/

Zatem idą w tym kierunku, ale to jeszcze raczkuje z tego co widzę

Linux:

https://dotnet.microsoft.com/download/linux-package-manager/rhel/sdk-current

I to faktycznie działa na tym Linuxie.

1
Geraldinio napisał(a):

Na bazie własnego doświadczenia w pracy C++ embedded powiem tyle, że większy problem sprawia mi zrozumienie działania urządzenia niż jakas implementacja feature'a w kodzie dla niego. Trzeba się liczyć z tym, że w takiej pracy przeważnie więcej jest ogarniania sprzętu, który programujesz niż samego programowania.

Nie uogólniaj, nie każda firma tak pracuje. Spora liczba programistów Embedded nie ma za wiele pojęcia o sprzęcie i w pracy go nie dotyka. Firm, w których musisz ogarniać każdy aspekt systemu wbudowanego, zamiast po prostu programować, lepiej unikać.

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