Zmiana języka programowania

0

hej, pracuje ponad 2 lata z java i moze nie jestem jeszcze midem (na pewno sie tak nie czuje) ale takim poziomie mocnego juniora mysle, że jestem. Wkurza mnie troche pisanie w javie pomimo, że na początku mi podchodziła, tak teraz czuje lekkie obrzydzenie tym językiem.

Postanowiłem uczyć się na własną rekę C#, mam fajne tutki do nauki i myślę klepnąć sobie jakiś projekt żeby ogarnąć co i jak i może w przyszłosci zmienic firmę już na stanowisko c# deva, tylko tutaj pojawia się problem, otóż bardzo dużo firm ma w wymaganiach KOMERCYJNE DOŚWIADCZENIE Z C# min. 2 lata (na przykład), ja tego doświadczenia w cszarpie nie mam, a niechciałbym zaczynać od stanowiska juniora z pensją nwm 5k..

Moglibyście doradzić jak z Waszego doświadczenia wyglądał proces przebranżowienia się na inny język?

6

Java, C#?

screenshot-20240802201004.png


Lepiej Kotlina sobie obadaj albo Scale

2

Najlepiej w firmie, która używa jednego i drugiego przenieść się z Javy do C#. Jeśli w Twojej obecnej nie używają C#, to pójść gdzieś na javę i po jakimś czasie powiedzieć/zaproponować przesuwanie się w stronę C#. Ale w sumie to w taki sposób to dużo czasu zajmie

1

They are the same picture

Tak, ale tylko jeśli chodzi o język. Bo cała reszta to dwa zupełnie odmienne światy, cały tooling naokoło, IDE, frameworki, libki itp. Podstawy języka to pewnie pół dnia czytania tutoriali, ale wejść w ten ekosystem to będzie potężna praca.

1
kelog napisał(a):

Tak, ale tylko jeśli chodzi o język.

Nawet niekoniecznie - o ile składnia może i jest podobna, to jest kilka dość fundamentalnych różnic głównie jeśli chodzi o hierarchię typów, polimorfizm, czy generyki, a które to mocno rzutują na sposób pisania kodu. Widać to bardzo, gdy Javowiec próbuje pisać w C#.

Bjorn Nożycoręki napisał(a):

Postanowiłem uczyć się na własną rekę C#, mam fajne tutki do nauki i myślę klepnąć sobie jakiś projekt żeby ogarnąć co i jak i może w przyszłosci zmienic firmę już na stanowisko c# deva, tylko tutaj pojawia się problem, otóż bardzo dużo firm ma w wymaganiach KOMERCYJNE DOŚWIADCZENIE Z C# min. 2 lata (na przykład), ja tego doświadczenia w cszarpie nie mam, a niechciałbym zaczynać od stanowiska juniora z pensją nwm 5k..

Teraz pracy dla ludzi bez doświadczenia chyba nie ma nigdzie, więc na Twoim miejscu siedziałbym już w tej Javie, przynajmniej dopóki sytuacja się nie poprawi. (Oczywiście w międzyczasie możesz się uczyć nowych rzeczy, ale już chyba lepiej jakiejś chmury czy kubernetesa niż innego języka.)

1
stivens napisał(a):

Java, C#?

screenshot-20240802201004.png

hqdefault.jpg

7

8z5ycg.jpg

// humorystyczne

1

Jeden wuj te wszystkie języki. Chcesz się uczyć, bo Cię interesuje albo jest Ci to w pracy potrzebne, to się ucz, a nie filozofuj na forum.
Raz w robocie miałem napisać projekt biblioteki/frameworka w Swift na iOS nie mając pojęcia o tych technologiach, to się ich w miesiąc nauczyłem i napisałem projekt od zera. Równie dobrze można taki proces przeprowadzić z każdym innym językiem.

2
wiciu napisał(a):

Raz w robocie miałem napisać projekt biblioteki/frameworka w Swift na iOS nie mając pojęcia o tych technologiach, to się ich w miesiąc nauczyłem i napisałem projekt od zera. Równie dobrze można taki proces przeprowadzić z każdym innym językiem.

Uczyłeś się po godzinach za darmo czy w ramach godzin pracy?

3

podam przykład z nieco innego poletka:
moim zdaniem 99% (albo, bardziej ostrożnie, 90%+) kodu w pythonie jest pisanych przez ludzi, który nie znają pythona i mało komu to robi różnicę. da się? da się, bo python i tak (w mniemaniu większości programistów) służy do pisania śmieciowego kodu (i np. mało kto się rozwodzi n.t. architektury czy testowania takiego kodu). problem w tym, że ten śmieciowy kod potem niestety trzeba utrzymywać :/ . stosuje się więc metodę kopiego-pejsta wzbogaconą o modyfikację kopii, a potem (po wielu latach) usuwaniem staroci. nawet devopsi w moim zespole nie znają dobrze pythona (np. jeden nowy nie rozróżniał metod statycznych od instancyjnych w pythonie), a przecież oni zarządzają całą infrastrukturą, włączając skrypty w bashu i pythonie.

ogólnie:
jeśli będziesz klepał zrozumiały kod z dobrą architekturą i dobrym pokryciem testami automatycznymi, to już jest w miarę ok, a ulepszenia typu bardziej idiomatyczny, czytelny i zwięzły kod przyjdą później. zarówno java jak i c# to imperatywny oop z małymi dodatkami funkcyjnymi, więc koncepcyjnie podobne.

somekind napisał(a):
kelog napisał(a):

Tak, ale tylko jeśli chodzi o język.

Nawet niekoniecznie - o ile składnia może i jest podobna, to jest kilka dość fundamentalnych różnic głównie jeśli chodzi o hierarchię typów, polimorfizm, czy generyki, a które to mocno rzutują na sposób pisania kodu. Widać to bardzo, gdy Javowiec próbuje pisać w C#.

.net to chyba jedyna szeroko używana platforma, która ma reified generics, więc jeśli ktoś z tego w znaczący sposób korzysta (czyli pomijając różnice typu ArrayList<Integer> vs ArrayList<int> bo to tylko kwestia wydajności w mikrobenchmarkach i bardzo specyficznych problemach, a skupiając się raczej na dynamicznym / run-time'owym sprawdzaniu generycznych typów), to jego kod w c# (czy tam innym sitku / płotku) odbiega od całej reszty szeroko używanych języków.

3

Podzielam zdanie @stivens - zmieniasz jeden beznadziejny język programowania, na drugi - w zasadzie taki sam, momentami tylko trochę lepszy, momentami nawet gorszy (przypominamy, ze java nie ma goto i parametrów out ) - ale zasadniczo tożsamy.... i spodziewasz się, że coś to zmieni?

Mam doświadczenie ze zmieniania języka programowania, ale to faktycznie była jakaś zmiana:
java -> kotlin -> scala

Nie, kotlin i C# nie są podobne. I nie dlatego, że C# brakuje ficzerów. Siła kotlina i scali polega na tym, że zasadniczo mają dużo mniej ficzerów niż C# i Java. Tylko mają akurat przeważnie te sensowne.

2

No skoro każdy język imperatywny jest taki sam, to nie tylko C# to to samo, co Java, także np. C czy PHP. No i przede wszystkim JavaScript to to samo co Java, więc należy przeprosić wszystkie Panie z HR, które palnęły tę głupotę na rozmowach i w ogłoszeniach.

Twierdzenie na serio, że nie ma różnic, świadczy raczej o byciu tak w połowie drogi na szczyt na tym wykresie IQ score wklejonym parę postów wyżej. To, że nawet 90% mechanizmów czy koncepcji jest podobna, nie znaczy, że różnice nie są drastyczne.

0

@somekind Chodzi o to, ze mozna powiedziec ze Java i C# sa takie same, albo dlatego ze sie patrzy plytko (gosc po lewej) albo dlatego, ze sie patrzy szeroko - zakapturzony gosc po prawej. I o co chodzi z plytkim podejscie, to nie musze tlumaczyc, bo wszyscy chyba to rozumiecie skoro stoicie w opozycji do takiego twierdzenia. Natomiast patrzac szeroko to jesli "To, że nawet 90% mechanizmów czy koncepcji jest podobna, nie znaczy, że różnice nie są drastyczne.", to co wtedy powiesz o zestawieniu C# albo Java vs Haskell, Rust, Lisp, Erlang? Jesli juz Java vs C# to "drastyczne" roznice, to dla tego drugiego zestawienia wlasnie zabraklo skali.

I juz nie chodzi o to czy np. Erlang to jest gorszy czy lepszy, tylko ze tutaj to dopiero jest roznica drastyczna

Btw. drastyczny ze slownika:

«o zmianach, metodach: zbyt radykalny lub zbyt gwałtowny»

No nie sadze, nie sadze. To co ja moge powiedziec, to to ze roznica jest widoczna i znaczaca

0
stivens napisał(a):

@somekind Chodzi o to, ze mozna powiedziec ze Java i sa C# sa takie same, albo dlatego ze sie patrzy plytko (gosc po lewej) albo dlatego, ze sie patrzy szeroko - gosc po prawej. I o co chodzi z plytkim podejscie, to nie musze tlumaczyc, bo wszyscy chyba to rozumiecie skoro stoicie w opozycji do takiego twierdzenia. Natomiast patrzac szeroko to jesli "To, że nawet 90% mechanizmów czy koncepcji jest podobna, nie znaczy, że różnice nie są drastyczne.", to co wtedy powiesz o zestawieniu C# albo Java vs Haskell, Rust, Lisp, Erlang? Jesli juz Java vs C# to "drastyczne" roznice, to dla tego drugiego zestawienia wlasnie zabraklo skali.

Użyłem słowa drastyczne, bo kod w języku C# pisany przez programistę Javy, który stosuje javowe idiomy wygląda makabrycznie. (Widać krew i zwłoki w IDE, a ludzie na to patrzący płaczą.)
Ok, mogę się zgodzić, że to nie jest trafny dobór słowa z mojej strony, ale te różnice po prostu są, i wpływają na sposób projektowania oraz pisania kodu. (I nie są to kosmetyczne różnice dotyczące zbędnych albo rzadko używanych mechanizmów typu out czy goto.)

Udawanie, że różnic nie ma jest ignorancją, bo opiera się wyłącznie na patrzeniu na kod i słowa kluczowe, nie mechanizmy czy ficzery języka, a gość po prawej, który "patrzy szeroko" jest takim samym ignorantem jak gość po lewej.

0

Udawanie, że różnic nie ma jest ignorancją

Postawiles sobie sam chochola i teraz z nim walczysz

No bo memy to maja to do siebie, ze sa 120% serious, prawda? Prawda?

1
stivens napisał(a):

No bo memy to maja to do siebie, ze sa 120% serious, prawda? Prawda?

To jest mem:
screenshot-20240805223358.jpg
To jest mem:
screenshot-20240805223421.jpg

Mem ma być śmieszny, Twój jest tylko bez sensu. :P

I nie postawiłem chochoła - Ty kilkukrotnie zasugerowałeś nieprawdę. Ok, pewnie hiperbolizowałeś na potrzeby żartu, tylko mnie to mocno rusza, bo zdarzało mi się być bezpośrednią ofiarą działań ludzi, którzy na serio uważają tak, jak Ty. I to jest bardzo traumatyczne.

1

Tzn. oprócz patrzenia na same różnice w językach w ostatnich wersjach warto spojrzeć choćby na różnicę we wstecznej kompatybilności, czy powiązania języka z wersją frameworka. C# pozwala na używanie nowszej wersji języka na starszych wersjach frameworka, tak że możesz jako developer używać najnowszych feature'ów nie ingerując w finalny build.
Java co prawda zaczyna mieć niektóre feature'y dodane kilkanaście lat temu do innych języków, ale w rzeczywistości znaczna część kodu tkwi na starych wersjach 8 czy 11 więc programiści javy dopiero za jakieś 20 lat będą mogli się pobawić "nowinkami" języka. Mimo że niby java stawia na wsteczną kompatybilność to z tego co widziałem praktycznie każdy projekt ma istotne problemy z podniesiem wersji.
W .NET wygląda to całkiem inaczej i praktycznie rzadko kiedy występuje jakakolwiek przeszkoda żeby podnieść wersję języka w projekcie, nawet jeśli jakiś projekt utknął na starym .NET Frameworku (4.8) bo przejście z .NET Framework na .NET może być ciężkie, to nadal jeśli ktoś chce może używać w znacznej części najnowszej wersji języka do developmentu - wystarczy tylko użyć nowszego kompilatora i załatać brakujące wbudowane typy paczkami.

Jeśli java i c# są podobne to z pewnością kotlin i swift też wpadają do tego worka, kotlin ma mniej bloatu ale to tylko dlatego że jest stosunkowo nowy; każdy język w końcu staje się przesadzony i właściwie trzeba by było ciągle tworzyć nowe języki i zrywać kompatybilność ze starymi lub nie aktualizować języka żeby tego nie było.

jarekr000000 napisał(a):

Siła kotlina i scali polega na tym, że zasadniczo mają dużo mniej ficzerów niż C# i Java. Tylko mają akurat przeważnie te sensowne.

To zabrzmiało mocno subiektywnie i fanboyowo.

Tu lista najbardziej lubianych języków:

Rust – 83.5%
Python – 73.1%
TypeScript – 73.1%
Kotlin – 72.6%
WebAssembly – 69.5%
Swift – 69.2%
Clojure – 68.3%
Elixir – 68.2%
Go – 67.9%
C# – 67.0%
JavaScript – 66.8%
Dart – 66.3%
SQL – 64.1%
HTML/CSS – 62.2%
F# – 61.7%
Bash/Shell/PowerShell – 59.5%
Scala – 58.3%
Java – 53.4%
C++ – 52.0%
R – 51.7%
Ruby – 50.3%
Erlang – 47.4%
PHP – 45.8%
C – 42.5%
Assembly – 35.6%

I najbardziej nielubianych:

VBA – 75.2%
Objective-C – 68.7%
Assembly – 64.4%
C – 57.5%
PHP – 54.2%
Erlang – 52.6%
Ruby – 49.7%
R – 48.3%
C++ – 48.0%
Java – 46.6%
Scala – 41.7%
Bash/Shell/PowerShell – 40.5%
F# – 38.3%
HTML/CSS – 37.8%
SQL – 35.9%
Dart – 33.7%
JavaScript – 33.2%
C# – 33.0%
Go – 32.1%
Elixir – 31.8%
Clojure – 31.7%
Swift – 30.8%
WebAssembly – 30.5%
Kotlin – 27.4%
TypeScript – 26.9%

Podobnie jak na filmwebie polecam oglądać filmy tylko z oceną >6 tak samo tutaj polecam trzymać się języków z poziomem satysfakcji >60% nawet jeśli są do siebie podobne

0
obscurity napisał(a):

Java co prawda zaczyna mieć niektóre feature'y dodane kilkanaście lat temu do innych języków, ale w rzeczywistości znaczna część kodu tkwi na starych wersjach 8 czy 11 więc programiści javy dopiero za jakieś 20 lat będą mogli się pobawić "nowinkami" języka. Mimo że niby java stawia na wsteczną kompatybilność to z tego co widziałem praktycznie każdy projekt ma istotne problemy z podniesiem wersji.

z której na którą? java 9 dużo zmieniła w bebechach (tych nieustandaryzowanych, nieudokumentowanych oficjalnie szczegółach implementacyjnych nieprzeznaczonych do bezpośredniego użycia) i dlatego frameworki, które grzebią w tych bebechach mogą wymagać konkretnie javy 8. w pozostałych przypadkach, tzn. przesiadki z wersji x na y, gdzie zarówno x jak i y są >= 9, wielkich problemów nie powinno być.

gdyby javowe frameworki nie grzebały w bebechach nieprzeznaczonych do grzebania, tylko używały standardowego api, to problemu z upgrade'm javy by nie było. rzeczywistość jednak jest jaka jest. stąd java zmierza powoli w kierunku ograniczenia takich praktyk: https://openjdk.org/jeps/8305968 JEP draft: Integrity by Default.

innym problemem jest dynamiczna analiza i generowanie bajtkodu. ten czasem zmienia się z wersji na wersję i java nie daje tutaj oczywiście żadnych gwarancji kompatybilności wprzód, tzn. że stara biblioteka obsłuży nowy bajtkod. stąd potrzeba wbudowania w javę mechanizmów typu https://openjdk.org/jeps/457 JEP 457: Class-File API (Preview). z takim mechanizmem będzie łatwiej tworzyć frameworki, które nie powstrzymują przed upgradem javy, a jednocześnie dalej obrabiają bajtkod.

java 8 ma komercyjne wsparcie gdzieś około do końca 2030 roku, więc to 'odblokuje' ekosystem javy przed tym terminem, tzn. współczesny nacisk na aktualizacje bezpieczeństwa raczej wyeliminuje biblioteki uczepione porzuconej wersji javy.

tak czy siak, java idzie w kierunku coraz szybszego i sprawniejszego podnoszenia wersji, a ostatnim momentem, gdzie przejście na nową wersję było bardzo problematyczne, jest przejście z javy 8 na javę 9.

0
somekind napisał(a):

No skoro każdy język imperatywny jest taki sam, to nie tylko C# to to samo, co Java, także np. C czy PHP. No i przede wszystkim JavaScript to to samo co Java, więc należy przeprosić wszystkie Panie z HR, które palnęły tę głupotę na rozmowach i w ogłoszeniach.

To nawet prawda. Wszystko zależy od tego jak szeroko patrzymy.
W porównaniu do prologa, Lisp itp. to wszystkie powyższe języki są mocno takie same.

Ale jak już weźmiemy te języki w izolacji to C# i Java są bardziej do siebie podobne niż do PHP, czy nawet do JS. Najbliżej będzie Javy i C# będzie C++, ale zasadnicza różnica to brak maszyny wirtualnej.

Twierdzenie na serio, że nie ma różnic, świadczy raczej o byciu tak w połowie drogi na szczyt na tym wykresie IQ score wklejonym parę postów wyżej. To, że nawet 90% mechanizmów czy koncepcji jest podobna, nie znaczy, że różnice nie są drastyczne.

Różnice są, ale to naprawdę niuanse.
Pisałeś, wcześniej że widziałeś różnice w stylu pisania javowców. Ja pracowałem w samej javie i widziałem różnice w stylu javowców :-) Z niektórymi naprawdę nie dawałem rady.

Dla mnie te jezyki różnią się niuansami.
Zasadniczo (jeśli chodzi o koncepcje) znajdziesz więcej rozbieżności w stylu kodowania między dwoma programistami Javy czy dwoma programistami C# niż między javowcem muszącym pisać w C#, a .Netowcem robiącym w Javie.

Kiedysz przepisywałem jeden serwis (webówka) z C# do Javy, serio bez problemu się w tym odnajdywałem i mógłbym to przepisać jeden do jednego.... niestety akurat ten C# był napisany dokładnie w tym javowym stylu, którego nie cierpie (czyli po prostu nie był to Haskell przebrany za C#).

0
wiciu napisał(a):

to się ich w miesiąc nauczyłem i napisałem projekt od zera.

A potem świat musi się przez lata wozić z takim kodem napisanym przez gościa co się w miesiąc nauczył. Za każdym razem jak się ktoś w miesiąc nauczy - umiera kotek.

0

To są właśnie tacy Technicy Magicy po botcampach, aby tylko szybko zarabiać na słabym kodzie. Nie czują pasji informatyki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.