C++ czy Java/C# - co kontynuować

0

Cześć wszystkim!
To mój pierwszy post na tym forum, nie miałem tu konta, aż nadeszła potrzeba jego założenia i zapytania się Was o moim "problemie".
Jestem studentem III roku na Politechnice Śląskiej, odbyłem już praktyki w Asseco jako programista Java, niestety nie udało mi się przebić konkurencji w ofercie stażowej i okazało się, że są lepsi ludzie w Codility ;p Mam teraz możliwość odbycia stażu w dwóch miejscach : Java/C# w Kamsoft lub C++ w WB Electronics w Gliwicach. Tutaj moje pytanie, w co byście poszli ?
Nie wiem jak wygląda na rynku praca związane z C/C++, spora ilość firm idzie własnie w tworzenie typowych aplikacji w C#, Java i inne. Jako, że nie znam się tak dobrze na rynku jak niektórzy z Was, nie wiem czy kodzenie w C/C++ nie będzie swego rodzaju degradacją w stosunku do całego rynku. Nie oczekuję też jasnowidztwa, bo nikt nie wie co będzie za 10 lat, widać tylko, że rynek Java i C# jest coraz większy, ale co z wyspecjalizowanym C/C++. Wiem, że dopiero moje początki, ale im więcej wiem tym lepiej :) Jak Wy to widzicie ?
Z góry dziękuję za wszystkie opinie i rady :)

1

Hej! To zależy gdzie się widzisz. Jak wejdziesz w C#/Javę, to prawdopodobnie będziesz pisał webowe apki (lub też tylko backend). W C++ raczej rzeczy związane ze sterownikami, generalnie bliżej sprzętu. Tak naprawdę jeśli nie możesz się zdecydować to idź gdziekolwiek, jeśli nie będzie Ci do odpowiadało, to zmienisz. Rozwijaj się w tym, co Cię interesuje, prowadź projekty "na boku", w końcu sam będziesz wiedział gdzie się widzisz.

Co do łatwości otrzymania pracy, to na pewno zdecydowanie łatwiej o pracę w webie, chociaż i tu coraz mniej ofert dla całkowicie początkujących.

0

No właśnie na boku to systemy wizyjne, na razie w LabView, ale wiem, że w C/C++ się piszę i Java też co ciekawe, a te systemy są wszędzie, w dronach m.in.

2

Języki zarządzane są znacznie przyjemniejsze od niezarządzanych. A od C++ wszystko jest przyjemniejsze, nawet PHP.

2

Mi osobiście lepiej się programuje w C# niż w C++ podejrzewam, że jest to kwestia masy gotowych funkcji i dopracowanego visuala :) . Dodatkowo możesz zawsze przy programowaniu w C#/Java zająć się pisaniem aplikacji mobilnych.

2
ŁF napisał(a):

Języki zarządzane są znacznie przyjemniejsze od niezarządzanych. A od C++ wszystko jest przyjemniejsze, nawet PHP.

Podpinając się pod tego posta:
czyli albo odrzucasz C++ bo Ci się nie podoba, albooo nie możesz się zdecydować i w sumie o doświadczenie w C++ jest trudniej (wydaje mi się) niż w takiej Javie

Akihito napisał(a):

Mi osobiście lepiej się programuje w C# niż w C++ podejrzewam, że jest to kwestia masy gotowych funkcji i dopracowanego visuala :) . Dodatkowo możesz zawsze przy programowaniu w C#/Java zająć się pisaniem aplikacji mobilnych.

Visual ma przecież wsparcie dla C++

Ja subiektywnie wybrałbym Jave/C#

0

Czyli nie patrzeć się czym zajmuję się firma, tylko iść w kierunku języka programowana ?

0

A widzisz tego w pytaniu nie było albo nie doczytałem
w sumie ja bym to brał pod uwagę jeśli nie mógłbym się zdecydować bo to też ważne jest

0

Bo mam do wyboru Kamsoft, czyli typowe aplikacje lub WB Electronics, czyli wojskowe rzeczy :)

8

Porównywać pisanie w Javie/C# do C++ to tak jak porównywać lot samolotem Boeing 747 z tanich linii lotniczych do Rzymu a lot Szybowcem nad Warszawą za 200zł z kupony od Grouponu.
Niby tutaj i tutaj lecisz, ale w Boeing 747 lecisz dalej i szybciej i lepsze ma przyśpieszenie a autopilot i najnowsze systemy czunikow i sam pilot czuwają nad twoim bezpieczeństwem i w dodatku lecisz wysoko HEAD i dostajesz zimne napoje chłodzące i lecisz do ciepłych krajów i w ogóle jest mega! jest po co żyć!!!
a lot szybowcem nad Warszawą? niby też fajny, ale w każdej chwili może się spierdolić i w ogóle.

W Javie masz odśmiecanie pamięci, wygodne ide i wgle pisze sie totalnie inaczej, totalnie bardziej przyjemnie itd..
Tymczasem w C++ cały soft jest starszy, trudniejsze to, trzeba sie skupiać i walczyć z jakimiś p******enami błędami.

Aż szkoda gadać - to trzeba po prostu przeczytać i spróbować. Na koniec jeszcze jedno:
zerknij sobie jak C++ wygląda i co standard dodaja nowe rzeczy udziwniając jeszcze bardziej, chcą być coraz bardziej nowocześni a tam gdzie daleko w przeszłość są czyste pointery i kompatybilność z językiem C (ofc niepełna).

Zajmij się Java i C# i nie trać czasu na C++.

Jak dalej Cię nie przekonałam to spróbuj napisać tą samą dość prostą aplikację najpierw w Javie, potem w C++ a na końcu możesz spróbować jeszcze w ANSI C.
Gwarantuje, że niektóre outputy kompilatora C++ sprawią, że osiwiejesz albo zaczniesz pić. Mówił o tym nawet Linus Tovards pisząc w ANSI C, że to co dzieje się w C++ to katastrofa. Polecam zerknąć w jego wypowiedź nt. powyższego języka, bo jest ciekawa.

1

Świetny komentarz, dziękuję :) Pisałem kiedyś w C++ a potem Java, niebo a ziemia ;p zależy co chcemy ;d

0

Możesz zobaczyć też C++ i wtedy będziesz miał porównanie, staż to tylko staż

8

Jestem C++-owcem.

Zalety C++ wg mnie:

  • Zależy co kogo kręci, ale wg mnie projekty C++owe często są ciekawsze od Javowych/C#. Raczej nie będziesz robił kolejnego CRUDA / apki webowej. Dużo projektów embedded / blisko sprzętu.
  • Jest to pewna nisza, w której konkurencja jest sporo mniejsza. Np. moja firma w tej chwili szuka ludzi na praktyki i nie może ich znaleźć.
  • Język jest potężny i dość przyjemny. Jest duża swoboda wyboru stylu programowania.

A teraz wady:

  • Dużo projektów z legacy kodem, źle napisanym i używającym antycznych techonolgii. Np. jeśli chodzi o projekty Windowsowe, jak widzisz skróty MFC lub co gorsza COM / DCOM, to wiej. Tak samo wiej, jeśli widzisz, że projekt jest w czystym C, chyba że to kernel Linuxa albo BSD, albo inny znany projekt open-source o dobrej reputacji.
  • Niekompetentny programista w C++ może narobić kaszany, która jest nieosiągalna w Javie/C#. Kiedy programista w Javy mów, że mają burdel w projekcie, to oznacza, że kod jest źle zaprojektowany i mają tam klasę z 300 metodami, której wszyscy muszą używać i należałoby ją zrefaktorować, ale nigdy nie ma czasu. Kiedy programista C++ mówi, że jest burdel w projekcie, to oznacza, że są w nim niemożliwe do zdebugowania race conditions i memory corrutpions i program wywala się co 15 minut.
  • Wiedza nie jest przenośna między projektami. Nie ma frameworków, którch uczy się raz, a potem tłucze powtarzalne apki jedna po drugiej.
  • Jeśli developujesz na dziwne platformy, to narzędzia są często z epoki kamienia łupanego. Często korzysta się z zamkniętoźródłowych bibliotek i frameworków wątpliwej jakości dostarczanych przez producenta sprzętu / platformy.

Podsumowanie: C++ jest bardzo fajne, pod warunkiem, że wybiera się projekty:

  • robione od zera lub dobrze utrzymane, bez legacy kodu
  • open-sourcowe lub przynajmniej oparte o open-sourcowe technologie.

Przykłady świetnych projeków C++-owych, przy których warto pogrzebać: Chrome, LLVM.

A tak w ogóle to wg mnie warto uczyć się języka Rust: to takie C++ zrobione od nowa, bez bagażu historycznego, prościej i bezpieczniej. Mam nadzieję, że powoli będzie wypierał C++, a zwłaszcza C. W Polsce znam tylko jedną firmę, która go używa: Anixe z Wrocławia.

2
  1. Życie jest za krótkie, żeby się męczyć z ręczną alokacją pamięci.
  2. W C++ dużo można zautomatyzować i kod może być całkiem fajny, nawet funkcyjny, nawet momentami lepszy niż w Javie... tylko prawie nikt tak nie pisze i raczej będziesz się grzebał w źle napisanym kodzie. (nazywam to współpracą z mamutami -czyli kolegami tkwiącymi mentalnie w czasach Beverly Hills 90210)
  3. Rust fakycznie to ciekawy jezyk i mam nadzieję, że się spopularyzuje...ale zaczynanie w C++ po to żeby przejść na Rusta IMO jest nierealne. (Prawie jak wygrać w totka).
  4. Tak samo Java jest IMO za kiepska jak na rok 2017. Ale ma całkiem rozsądnego następce -> Kotlin, który jest dość blisko Javy i coraz więcej teamów się przestawia.
  5. I to jest moim zdaniem niezgorsza i realna ścieżka - Java w kierunku Kotlina.
  6. Sam jestem raczej fanboyem Scali - ale to kolejny krok od Kotlina - a IT nie robi tak dużych kroków.
  7. Jest szansa, że Kotlin będzie uzupełniany o ficzery ze Scali - tylko lepiej przemyślane - i w sumie to dość realny scenariusz.
  8. Przy okazji Kotlin, TypeScript i Scala mają dość podobną składnię - ucząc się jednego poprawiasz się w innym. TypeScript mocno teraz popularyzuje się na frontendzie (jako zastępca ECMA 5).
1

Naturalnie np. to wychodzi, że jak obrabiasz dużego XMLa to wczytujesz całego do pamięci ...

SAX i pochodne. Słyszał?


O takich co gigabajty XML wczytują do pamięci, i nie tylko; a wydaje im się, że wymiatają w seniorstwie.

0
jarekr000000 napisał(a):
  1. Życie jest za krótkie, żeby się męczyć z ręczną alokacją pamięci.
  2. W C++ dużo można zautomatyzować i kod może być całkiem fajny, nawet funkcyjny, nawet momentami lepszy niż w Javie... tylko prawie nikt tak nie pisze i raczej będziesz się grzebał w źle napisanym kodzie. (nazywam to współpracą z mamutami -czyli kolegami tkwiącymi mentalnie w czasach Beverly Hills 90210)
  3. Rust fakycznie to ciekawy jezyk i mam nadzieję, że się spopularyzuje...ale zaczynanie w C++ po to żeby przejść na Rusta IMO jest nierealne. (Prawie jak wygrać w totka).
  4. Tak samo Java jest IMO za kiepska jak na rok 2017. Ale ma całkiem rozsądnego następce -> Kotlin, który jest dość blisko Javy i coraz więcej teamów się przestawia.
  5. I to jest moim zdaniem niezgorsza i realna ścieżka - Java w kierunku Kotlina.
  6. Sam jestem raczej fanboyem Scali - ale to kolejny krok od Kotlina - a IT nie robi tak dużych kroków.
  7. Jest szansa, że Kotlin będzie uzupełniany o ficzery ze Scali - tylko lepiej przemyślane - i w sumie to dość realny scenariusz.
  8. Przy okazji Kotlin, TypeScript i Scala mają dość podobną składnię - ucząc się jednego poprawiasz się w innym. TypeScript mocno teraz popularyzuje się na frontendzie (jako zastępca ECMA 5).

Życie jest za krótkie, żeby czekać na wyniki programu w Javie :) Z punktu widzenia wydajności podstawowymi grzechami Javy są:

  • Brak kontroli nad layoutem obiektów, wszystkie obiekty alokowane oddzielnie na stercie, brak możliwości tworzenia zagnieżdżonych struktur lub tablic struktur, jak w C/C++.
  • Garbage collection, który sumarycznie niekoniecznie zużywa więcej procesora, ale na pewno zżera więcej pamięci i może wprowadzać długie pauzy. W szczególności jeśli chcemy, żeby nie zużywał dużo procesora, to musimy dać dużo pamięci.
  • Magiczne dynamiczne optymalizacje w JVM, które często załapują, ale czasami nie.

Natomiast z punktu widzenia wygody programowania do Javy naprawdę trudno się przyczepić. Jedyna upierdliwość dla mnie to wieczne pałowanie się z typami unboxed, które zawsze trzeba traktować oddzielnie. Scali nie lubię ze względu na mieszanie obiektowości z funkcyjnością, w efekcie powstaje język nie mniej skomplikowany niż C++ o wątpliwych walorach. Jak ktoś chce programować funkcyjnie to lepszy jest Haskell lub OCaml.

1

Z tą wydajnością to już zostało milard razy wytłumaczone, że Java nie jest specjalnie wolniejsza od C++. A czas pisania dużo szybszy. Ja własnie się teraz męcze, bo klepie agorytmy w C++ i nie mogę normalnie złączyć stringa i inta...

6

Z tą wydajnością to jest tak, że:

  • HFT programuje się w Javie, a w HFT wymaga się zarówno najwyższej wydajności jak i najmniejszych opóźnień. Konfrontując to z opisem użytkownika @zarazek wynikałoby, że użycie Javy w HFT to zupełna pomyłka, a tymczasem całe HFT Javą stoi. Owocem zmagań programistów z Javą jest np https://lmax-exchange.github.io/disruptor/
  • wydajność zwykle zależy bardziej od algorytmu niż implementacji. Widać to bardzo dobrze chociażby na konkursach algorytmicznych czy sprawdzarkach zadań z ASD (przedmiotu Algorytmy i Struktury Danych) na studiach. Niby wszystkie algorytmy zakodowane w C/ C++, ale jedne są o rzędy wielkości szybsze od innych. Pisząc 5 algorytmów w Javie rozwiązujących ten sam problem i wybierając najszybszy prawdopodobnie dostaniemy coś szybszego niż pierwszy zakodowany algorytm w C++
  • klepanie dużych rzeczy w C/C++ to droga przez mękę, bo nie ma wielu bajerów, które w Javie są w standardzie, jak np sprawdzanie indeksów tabel, sprawdzanie poprawności wskaźników, sprawdzanie poprawności rzutowań - te bajery są ważne, bo ułatwiają wykrywanie błędów i sprawiają, że nie rozpieprzają one aplikacji w niekontrolowany sposób
  • Javka ma bardzo dobrą optymalizację wywołań metod wirtualnych (w Javie każda metoda, którą da się nadpisać jest wirtualna) - metody wirtualne to esencja polimorfizmu i OOP w ogóle. W C++ metod wirtualnych się unika, bo niespecjalnie da się je zoptymalizować w przypadku kompilacji AOT (ahead of time)

Ponadto pewne rzeczy mają być rozwiązane w Javie 10 (wiem, że to brzmi jak obiecanki, ale przymiarki już są, więc w ciągu np 3 lat powinno to wejść):

Brak kontroli nad layoutem obiektów, wszystkie obiekty alokowane oddzielnie na stercie, brak możliwości tworzenia zagnieżdżonych struktur lub tablic struktur, jak w C/C++.

Project Valhalla jest o tworzeniu struktur w Javie oraz parametryzowaniu klas generycznych strukturami czy prymitywami. W końcu będzie można sparametryzować Listę małym intem.

Garbage collection, który sumarycznie niekoniecznie zużywa więcej procesora, ale na pewno zżera więcej pamięci i może wprowadzać długie pauzy. W szczególności jeśli chcemy, żeby nie zużywał dużo procesora, to musimy dać dużo pamięci.

Tutaj z odsieczą przychodzi GC nowej generacji czyli Shenandoah który ma mocno zredukować pauzy GC. Twardych gwarancji nadal nie ma, więc do systemów realtime się to nie nada, ale jeśli popracują dalej nad tym Shenandoah i pauzy będą w granicach kilku milisekund to będzie można nawet dynamiczne gry pisać w Javce.

Inna rzecz jest niezależna od wersji Javy:

Magiczne dynamiczne optymalizacje w JVM, które często załapują, ale czasami nie.

Podobnie magiczne optymalizacje w GCC/ LLVM/ itd czasami się załączają, a czasami nie. Miałem takie przypadki, gdzie np dodanie zliczania wywołań metod przyspieszało cały program. Idiotyczne? Pozornie tak, ale nie dociekałem co się działo pod spodem. Dynamiczne optymalizacje w JVM wymagają rozgrzania JVMki, czyli włączenia JITa. JIT w Javce jest wielopoziomowy, więc zmierzenie stabilnej wydajności jest nieco trudne do zrobienia ręcznie i dlatego powstały takie narzędzia jak JMH (Java Microbenchmark Harness) czy ScalaMeter.

3

Jak miałem 10 lat to się kłóciłem z kolegą, że c++ jest najlepszy.

No i jest najlepszy, ale dużo mechanizmów trzeba samemu zaimplementować, żeby w pełni OOP był, a taki java, jest wolniejszy nie ma co ukrywać

Pisze się wolniej, czy szybciej to zależy, masz klasę w java albo w c++, to pewnie czas pisania jest zrównoważony.
C++ ma taki minus, albo plus, że można obfuskować i to zaawansowanie już w trakcie pisania kodu.

Pytanie zadałeś głupie, bierz co chcesz.
Też za ciebie mamy wybrać kobietę, w której się zakochasz?

Język to nic innego jak miłość programisty do swobody programowania i jego temperamentu.

W ogóle język to tylko narzędzie, zawsze możesz zmienić, a każdy język daje ci nowe doświadczenie, które możesz przenosić między językami.
Dużo osób co programowało w c++ potem w javie mogło coś wyciągnąć z jednej i drugiej strony, a potem sobie to zaimplementować co potrzeba.

5

Jak tak się to czyta to można by odnieść wrażenie że Java jest czymś lepszym od C++.
A to niestety wszystko zależy od kontekstu.
(C# pomijam w porównaniu głównie dlatego że nie znam)

Java - plusy

  • ma gigantyczną "bibliotekę standardową" - SE zawiera w sobie kolekcje, wątki, wyrażenia regularne, logowanie, BigDecimal itd.
  • jej biblioteka kolekcji jest o wiele bardziej rozbudowana (zwłaszcza w kierunku wielowątkowości)
  • program nie musi być kompilowany na każdą maszynę osobno, JVM/JIT robi to sam pod spodem
  • jest bardzo przenośna jeśli chodzi o czytane / generowane dane - wspiera bez zająknięcia różne kodowania Unicode, wspiera różne Endiany, różne charsety
  • składnia jest o wiele prostsza od C++ (jeden język zamiast pięciu)
  • ma wbudowane biblioteki do GUI (Swing, JavaFx)
  • JVM ma wbudowaną dewirtualizację metod (duży plus)
  • jednostka kompilacji (plik *.java, w Pascalu unit) ma jasną i unikalną definicję, w C++ to wchodzi (modules) ale chyba na razie boczkiem
  • pojęcie plugin może zaimplementować ktoś po przeczytaniu jednego tutoriala (class loader)
  • masz o wiele lepsze wsparcie dla RTTI (refleksji)

Java - minusy (tak, czytałem post Wibowita, piszę o dzisiaj)

  • nie możesz sobie ułożyć struktury danych w pamięci zgodnie z CPU (alignment, padding). Pewnie JVM to pod spodem robi, ale nie masz nad tym kontroli.
  • jest pewien dyskomfort w tym że nie możesz sobie robić klas generycznych z prymitywami (int, double itd)
  • GC jest obligatoryjny, nie ma ręcznie zarządzanych referencji (C++ / Nim / Pascal), nie ma destruktorów, są za to czasami przestoje
  • daje się ją łatwo zdekompilować, o ile nie zastosujesz np. ProGuard
  • można wywołać metody prywatne spoza klasy
  • nie możesz sobie wyskoczyć ze swoją implementacją Javy bo zaraz Wielka Czerwona Wróżka (WCW) dobierze Ci się do d... (patrz G vs O)

C++ - plusy

  • masz wpływ na to kiedy się zwolni obiekt, ale również masz elementy automatycznego zarządzania pamięcią (1) sprytne wskaźniki: shared_ptr, unique_ptr, weak_ptr, (2) emplace
  • szablony mogą być argumentowane nie tylko klasami, ale także typami prostymi (int, double) i wartościami int
  • można implementować własne algorytmy wykonywane w czasie kompilacji (szablony, constexpr)
  • możesz zaalokować obiekty na stosie CPU (i je potem zgrabnie i szybko zwolnić)
  • możesz zaalokować obiekty w wybranym bloku pamięci (np. przekazanym z innego procesu) - niewygodne, ale możliwe
  • masz pair, tuple
  • łatwa i szybka współpraca z kodem systemowym (kompatybilność z C)
  • ma możliwość automatycznej wektoryzacji kodu (przyspieszenie do 16 razy z float z AVX-512)
  • pojęcie języka i pojęcie standardu to dwie różne rzeczy, w związku z tym możesz zaimplementować język bez wspierania pełnego standardu (co robi większość kompilatorów)
  • kompilatorów jest wiele na różne potrzeby (pgi - HPC, gcc - open source, embarcadero - gui), nikt Cię nie pozwie jeśli zrobisz swój

C++ - minusy

  • C++ potrafi być bardzo nieczytelny - patrz niżej
  • wiele języków w jednym: C, C z klasami, funkcyjny (dwa podejścia: funktory, lambda), generyczny co może prowadzić do kompletnych rozjazdów w ramach jednej bazy kodu
  • wiele różnych, niekompatybilnych ze sobą lub czasami nieefektywnych sposobów przekazywania obiektów
  • wady C, np. słabe typowanie, makra
  • C++ jest bardziej pracochłonny (np. rule of five)
  • w C++ wymagania co do klas będących argumentem szablonu są implementowane bardzo zawile

C++ - plusy lub minusy zależy jak na to patrzysz

  • nie masz finally, ale masz RAII które jest prostsze w składni dla użytkownika klasy, gorsze w implementacji dla autora klasy
  • masz kontrolę nad konwersją klas
  • możesz zrobić swój operator w klasie
    **
    Podsumowanie**

Niestety w obu językach można spotkać spaghetti kod, kod przeinżynierowany lub po prostu w starym standardzie kodowania.
W obu językach można implementować algorytmy na konkursy, w HackerRank w zasadzie korzystałem tylko z Javy.
Obecnie kod backend / enterprise (korpo, weź klienta, zmień mu flagę, zapisz klienta, weź konto, zwiększ jego saldo itd...) implementuje się prawie wyłącznie w Javie lub C#.
W C++ implementuje się dzisiaj duże kody gdzie ważna jest wydajność (HPC, CAM - wsparcie produkcji) i nie można po prostu włączyć czy dokupić procka (bo np. kod siedzi w piekarniku, robocie, routerze czy satelicie).
Język C++ jest starszy, w związku z tym większa szansa że trafisz do jakiegoś legacy projektu, gdzie kod przypomina mieszaninę bohomazów przedszkolaka i po-imprezowej niemocy studenta.
Java jest prostsza więc większa szansa że trafisz na kod kogoś kto nie powinien zajmować się kodowaniem, albo implementuje wzorce projektowe bo ktoś mu tak powiedział żeby robić.

1

Zastanawiasz się czy C++ czy Java. To pytanie miałoby sens, gdybyś zadał je z 10 lub 15 lat temu :-)

Teraz będzie Ci trudniej znaleźć spoko pracę, bo zdecydowana większość projektów będzie polegać ich utrzymywaniu. Co więcej konkurencji masz dużo więcej na rynku więc szansa, że trafisz w miejsce na ciekawy rozwój (bez klepania crudów) i jednocześnie spoko warunki (nie tylko finansowe) jest dość słaba.

Na twoim miejscu bym szedł w kierunku Elixir/Go/Scala/Clojure/Swift/Python. Co prawda każdy z tych języków na razie jest niszowy (względem Java/C#/Php/JS), ale jeśli w któryś polubisz i będziesz w nim już wymiatał to dość łatwo ustawisz się na rynku.

2

Lepiej najpierw miec umiejetnosci co pozwola spokojnie zyc - cos popularnego, a pozniej mozna eksperymentowac z czyms bardziej niszowym ;)

0

Dołączę się do tematu. Ale mam nieco inny problem.

Pracuję obecnie w Java, ale... ostatnio (być może) pojawia się dla mnie pewna okazja. Prawdopodobnie kolega mógłby mnie wciągnąć do pewnej firmy, gdzie pracują jego znajomi - ludzie zresztą z dobrym doświadczeniem. Sama firma pracuje też w bardzo ciekawej domenie oraz płaci wysokie stawki. Ogólnie wszystko brzmi bardzo cacy, co prawda wiem, że projekt nie jest idealny bo odziedziczony - ale mają duże chęci by go poprawić. Wydaje mi się też, że praca byłaby ciekawsza, ze spoko ludźmi.

Kłopot tylko w tym, że używają .Net i c#. Nie mam alergii na te technologie, sam język jest raczej ok. Bardziej martwi mnie tooling.
Do javy szczególnej miłości nie mam - prywatnie wybralbym cos innego niz java czy c#, java ot język jak język. Microsoft ostatnio wydaje się podejmować dobre decyzje, Oracle raczej na odwrót...

No i się zastanawiam czy się w to pakować, ale wydaje mi się, że warto.

0

Jakies rady do powyzszego?

4

title

0

Co byś wybrał prywatnie zamiast Javy i C#?

1

Zalety C++ wg mnie:

  • Jest to pewna nisza, w której konkurencja jest sporo mniejsza. Np. moja firma w tej chwili szuka ludzi na praktyki i nie może ich znaleźć.

Czy Twoja firma w dalszym ciągu szuka ludzi do praktyk?

1

W tym momencie przyzwoicie znam 3 języki.
C++, C# i Jave.
Każdy ma swoje plusy i minusy.
Zawsze będę lubił C++ bo daje funkcjonalności których inne języki nie dają. I zawsze się ciesze jak coś mogę w nim napisać. Dla mnie największym problemem C++a nie jest język tylko ekosystem (czyli depsy, abi compatibity, package managery, buildy, deploye, debug-mode, ..., cala masa innego crapu nie istniejąca w innych językach)

C# jest świetny, brakuje mi paru rzeczy z C++a, dodatkowo patrząc na to jak się rozwija, i jak idą w core'a i blazora, dzisiaj na pewno to jest język który bym polecił ludziom.

A java jak java, java zawsze ssała :P (ale niestety czasem trzeba w niej coś napisać)

btw, dla ludzi co pisali że java jest równie szybka jak c++. (@scibi92, @Wibowit)
tak jest! tylko musisz

  • sam zarządzać pamięcią (wiec robisz to co w C tylko mocno to wymuszasz na języku)
  • piszesz w prosty strukturalny sposób (żadnych abstract factory...) (wiec znów jak w c)
  • nie korzystasz z biblioteki standardowej javy (tak nawet stringa masz swojego) (wiec znów jak w c)

Wiec jak widzicie da się tylko trzeba pisac w cjava (i tak sa pisane hftki). Wiec czemu firmy tak piszą, bo nie mają wyjścia nie ma ludzi do c++a, wiec jest robione w Javie. (oczywiście upraszam tu troche)

0
amd napisał(a):

btw, dla ludzi co pisali że java jest równie szybka jak c++. (@scibi92, @Wibowit)
tak jest! tylko musisz

  • sam zarządzać pamięcią (wiec robisz to co w C tylko mocno to wymuszasz na języku)
  • piszesz w prosty strukturalny sposób (żadnych abstract factory...) (wiec znów jak w c)
  • nie korzystasz z biblioteki standardowej javy (tak nawet stringa masz swojego) (wiec znów jak w c)

Wiec jak widzicie da się tylko trzeba pisac w cjava (i tak sa pisane hftki). Wiec czemu firmy tak piszą, bo nie mają wyjścia nie ma ludzi do c++a, wiec jest robione w Javie. (oczywiście upraszam tu troche)

Nie znasz możliwości Javowego JITa. Przytoczę tylko stary post demonstrujący możliwości Javy 6 Update 24 (nowsze wersje mają jeszcze więcej optymalizacji): Dlaczego foreach jest gorsze od for (beta)

Java na chwilę obecną właśnie niespecjalnie nadaje się do ręcznego zarządzania pamięcią (do dyspozycji jest głównie JNI oraz sun.misc.Unsafe czyli kiepskie rozwiązania), ale to ma się zmienić za sprawą http://openjdk.java.net/projects/panama/ (a także http://openjdk.java.net/projects/valhalla/ ).

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