Inne języki programowanie ? Właściwie po co ?

0

Temat sugeruje otwarte nawoływanie do flame . Ale nie. To by było za proste.
Jak to każdego (?) developera dopadła mnie ochota nauczenia się czegoś nowego, czegoś niekoniecznie ze swojego podwórka Na co dzien jestem .NET developerem. Obiektywnie patrząc pracuję przy fajnych projektach w z naprawdę sporą możlwością rozwoju. Ostatnio udało mi się trafić trochę na pole "Devops" (Terraform, Kubernetes itd w moim firmowym projekcie) - fajne wyzwanie z którego sporo wyniosłem. Znam podstawy Angulara, jak trzeba potrafię coś prostego napisać w Kotlinie pod Androida . Mam Ci ja swoje projekciki poboczne. Ogólnie 99% to projekty webowe. Osobiście jestem fanem podejścia, deklaratywnego, programowania reaktywnego i dodawania elementów funkcyjnych do swoich programów - ale nie języków czystko funkcyjnych. Staram się naprawde pisać kod możliwie zgodny z dobrymi praktykami. W zasadzie wszystko stawiam teraz w chmurze (w pracy Azure, w "domu" AWS). Sporo ostanio bawiłem się też w serverless.

A teraz sedno problemu - chciałem się ostatnio nauczyć czegoś nowego innego - znacznie innego niż narzędzia które używam na co dzien, ale jednocześnie nadal pozostając w sferze web, żeby w razie czego wykorzystać to w side-projekcie albo w pracy. Wybór padł Go (bez konkretnych powodów, kolejny do sprawdzenia był Python, ale jego "skryptowość" mnie odrzuca). Tak czytam sobie te tutoriale, zwłaszcza wystawianie api, ORM itd itp. I powiem szczerze że każde rozważania prowadzą mnie do pytania : "po co ci to kur... ?!" Może to kwestia przyzywczajenia do jednej technologii (z czym wewnętrznie walczę) ale coś co w ASP.NET wygląda ładnie i elegancko w Go wygląda jakby rzucić kotem w klawiaturę i to w latach 90tych gdy królowalo C. Złapałem się na tym że w zasadzie nie potrafię znaleźć sensownego powodu dla takiej zmiany. Nie czuję się fanboyem .NETa. i jestem odległy od gloryfikowania i idealizowania, ale gdzieś tam pojawiła się myśl, że po co zmieniać język skoro w C# jestem w stanie napisać wszystko. W miejsach które ciekawiły mnie jak są rozwiązane w Go w zasadzie się zawiodłem bo w moim przekonaniu w C# jest to zrobione lepiej. Na koniec doszła jeszcze myśl, że w sumie po co się tego uczyć ,skoro i tak znalezienie w Polsce pracy w Go graniczy z cudem.

Mieliście podobnie ? Macie jakieś pomysły na technologię do nauczenia ? Może moje podejście jest kompletnie niewłaściwe ?

0

Jak tkwisz w "kompilowanych", obejmuję w to typowy dla nich model obiektowości statyczny z dziedziczeniem, klasami, interfejsami - to Python byłby bardzo rozszerzający.
Podobnie jak JS ma inny model obiektowości (uleciało mi angielskie słowo) dynamiczny z "kwakaniem", czyli wszystko co ma metodę kwacz jest Kaczorem

Jako netowiec możesz przejść/odwiedzić ciemną stronę mocy, czyli JVM. Na Javę nie namawiam, bo to zbyt podobne, ale Groovy? Ma w sumie oba modele obiektowości (choć w innych słowach ludzie o tym mówią). Groovy ma dwa modele życia: skryptowy interpretowany i sztywno typowany.
Ma przydatność w webie, czy to w Grails, czy w Ratpack (skrajnie różne podejścia)

Mieliście podobnie ? Macie jakieś pomysły na technologię do nauczenia ? Może moje podejście jest kompletnie niewłaściwe ?

Ja uważam, ze tzreba/warto poznawać inne języki, niekoniecznie dla (zawodowego) używania, ale dla szerszych horyzontów.

6

Jest cos takiego jak: https://en.wikipedia.org/wiki/Linguistic_relativity

I w takim super skrocie, chodzi o to, ze jezyk ksztaltuje twoja swiadomosc. Wiec tak, warto uczyc sie nowych jezykow, zeby rozpychac granice swojej swiadomosci. To, ze znasz cos nowego, nie znaczy ze koniecznie musisz tego uzywac, ale przynajmniej wiesz, ze da sie inaczej :)

A to kwakanie to Duck typing ;)

9

Podpisuje się pod tym co pisał @g4l4n0nIm język zmienia sposób myślenia, przez co czasem daje nam nowe możliwości i rozwiązuje problemy, o których nawet nie wiedzieliśmy, że je mamy.
Co dają nowsze /lepsze języki:

  • wyższe poziomy abstrakcji, (przez to więcej kodu możemy ponownie wykorzystać)
  • lepszą odpornośc na błedy (nullsafety, no exceptions, security)
  • lepszą obsługe nowego hardware (haskell - ghc :-) ),

Kiedyś robiłem na ten temat prezentacje - ogólnie waznym motorem ewolucji jest łatanie bugów i problemów męczących poprzednią generację:

  • C - łata problemy assemblera (albo BCPL),

  • C++ wprowadza przyjaźniejszą modularyzację, łata problem z C, trochę poprawia malloc

  • Java łata problem zarządzania pamięcią z C++

  • Kotlin - łata javowe nulle (i tony innych rzeczy), bezpieczniejsze typy

  • Scala poprawia system typów javy (hkt, typeclass) (scala powstała przed kotlinem, ale jest duży krok do przodu )
    itd. coś pewnie bedzie

  • Haskell (tak naprawde powstał 1990), ale łata poważny problem scali (czyli statementy), jezyk w którym sa tylko wyrażenia jest o wile mniej błedogęnny

  • Idris łata haskella..
    itd...

Zawsze, jak się jedne błedy załata.... to pojawia się nowy poziom męczących problemów, co nie znaczy, że je wywołaliśmy :-) Po prostu w starym jezyku były przesłonięte przez inne problemy.

Co do OP. Nie dziwię się, że się rozczarowałeś. Go to niestety język cofający dokładnie o 30 lat postepu technnicznego i naprawia C z lat 70tych, Tak, żeby wygladało dobrze w latach 90tych...
Jesteś .Net owcem - zobacz przede wszystkim F# , ewentualnie Haskell lub Scala - zobaczysz power. Oczywiście nie od razu.

Jeszcze takie wynurzenie:
Jak siedzisz w jednym języku 2-3 lata to spoko, warto nadal pogłębiać tą wiedzę:
ale ponad 5 lat w jednym języku (w jednym typie języków np:java i C# to samo ) to raczej niestety marnowanie się jako programista. Nie znaczy, że musisz zmieniać główny jezyk i pracę - po prostu warto się w hobby doszkalać. Co zmienia też sposób pisania w głównym.

3

Dlaczego każdy .NETowiec musi być taki sam? Kilka lat temu na nocnym hackathonie w MS w Wawie spotkałem tabun takich myślicieli jak Ty. Cecha wspólna? Fanatyzm .NET i Microsoftu. Zabawne, że to jedyna grupa z poznanych przeze mnie (Python, JS(cały front), Ruby, Java, Scala) i tylko wy macie to przeświadczenie o wyższości nad innymi :D

Gdy zaczynałem naukę Go ponad 3 lata temu, miałem głowę zabitą Javą, Springiem, JEE oraz .NET.. Na tyle mocno, że gdy okazało się, że CRUD w Go można zmieścić w 60 linijkach i jednym pliku wraz z odpaleniem go to głowa mi eksplodowała.
Jak to!? IMPOSSIBRU!

Dla porównania kopałem coś w Springu z Angularem i tam to dopiero był rozpierdol na kilka katalogów i kilkanaście plików. Zmiana myślenia na pure go style zajęła w moim wypadku obejrzenie fajnej i jedynej w sumie na tamten czas serii od Todd McLeod. Sporo gadania zanim weszliśmy wspólnie na tematy czysto już techniczne. Do tego jakieś dobre pół roku rzeźbienia kilkulinijkowców. Do dziś przeczytałem chyba ze 4 książki związane z tym językiem z 7.
Dlaczego nie wszystkie? Bo nie wszystkie nadawały się do czytania. Po co? Fascynuje mnie on od początku. I chociaż dzisiaj już nie mam motyli w brzuchu tak wiem, że wyrosła z tego miłość. Dowiedziałem się mnóstwo ciekawych rzeczy, których pewnie nie wiedziałbym do dzisiaj i chociaż pewnie zapomniałem już o 60% z nich to nadal nie żałuję.

Co mi dało pół roku? Zmianę myślenia. Zmianę podejścia. Pokazanie, że nie trzeba kopać się ze słoniem. Można dużo więcej. Przyjemniej. Inaczej niż wszyscy. Weź też pod uwagę przeznaczenie języków i różnice. O ile C# czy Java na pierwszy rzut oka wyglądają tak samo o tyle jak postawisz obok nich np. Haskell to prawdopodobnie zniechęcisz się po 15 minutach.

Co chcę przez to powiedzieć? Żebyś przestał być kolejnym betonem. Widocznie ten język nie jest dedykowany dla Ciebie lub po prostu nie poświęciłeś mu wystarczająco dużo czasu.
Wołam tu @KamilAdam który grzebie w Haskellu. Może skrobnie kilka zdań dlaczego to robi, co mu to daje i jak to wpłynęło na jego postrzeganie komercyjnego stacku w którym pracuje vs. grzebaniny po godzinach.

0

Jeśli chodzi o F# itd. to trochę nie jestem przekonany. Obawiam się że w miejscach w których go używam może nie mieć do konca sensu - brak zrozumienia reszty zespołu :-D Inna sprawa że zależało mi na wyjściu trochę ze środowiska .netowego Ale ogólnie jest to jeden z kierunków o których myślałem.

4
purrll napisał(a):

Dlaczego każdy .NETowiec musi być taki sam? Kilka lat temu na nocnym hackathonie w MS w Wawie spotkałem tabun takich myślicieli jak Ty. Cecha wspólna? Fanatyzm .NET i Microsoftu. Zabawne, że to jedyna grupa z poznanych przeze mnie (Python, JS(cały front), Ruby, Java, Scala) i tylko wy macie to przeświadczenie o wyższości nad innymi :D

Jako programista z dotNOT pewnie będę odbierany jako obrońca, ale... przecież OP nie napisał że gardzi innymi technologiami tylko że mu się coś nie spodobało i że uważa że C# jest lepszy. No i ma do tego prawo, jego spostrzeżenia są bardzo subiektywne i sam temat też dotyczy personalnych spostrzeżeń więc nie ma sensu się czepiać tego że coś mu się nie podoba.

Za to w pełni zgadzam się z @jarekr000000. Sam jak mam czas klepię jakieś małe projekty w pythonie i scali. Niestety czasu zbyt wiele nie mam to i projektów nie ma dużo.

0

Kilka lat temu jak programowałem tylko w androidzie, na chwilę wskoczyłem do xamarina - nauczyłem się tam bardzo dużo w jaki sposób należy/można dzielić projekt dla aplikacji mobilnych. Zupełnie inne podejście niż my wtedy korzystaliśmy czy jaki był wtedy standard w andku.

3
purrll napisał(a):

Wołam tu @KamilAdam który grzebie w Haskellu. Może skrobnie kilka zdań dlaczego to robi, co mu to daje i jak to wpłynęło na jego postrzeganie komercyjnego stacku w którym pracuje vs. grzebaniny po godzinach.

Dziękuję za wywołanie do tablicy, ale myślę że o wiele więcej do powiedzenia będzie miał tu @jarekr000000, który pisze w Haskellu wielokrotnie dłużej niż ja.

A czemu ja zabrałem się za Haskella? Bo chcę umieć pisać w Scali, ale konkretnie funkcyjnej Scali. A nauka funkcyjnej Scali jest trudna ponieważ Scala implementuje wszystkie możliwe paradygmaty programowania. Haskell za to jest przede wszystkim funkcyjny. Można oczywiście w Haskellu pisać w innych paradygmatów, ale wymaga to już większego wysiłku.

Konkretnie do Haskella skłoniła mnie chęć zrozumienia co to są TypeClassy używane w Scali w bibliotekach Scalaz i Cats. W Scali 2 można zaimplementować TypeClassy, ale nie są one częścią języka i trudniej mi było zrozumieć jak one działają i po co one są. Teraz dzięki Haskellowi rozumiem po co się je stosuje i rozumiem ich wyższość nad klasycznym polimorfizmem obiektowym. Widzę także też ich wady w stosunku do klasycznych interfejsów, ale jeszcze nie wiem czy to są prawdziwe wady czy tylko moja słaba znajomość zaklęć Haskella

3

Ja już od dłuższego czasu przestałem myśleć w kategoriach nauki a zacząłem w kategoriach projektów. Zamiast zastanawiać się czy wybrać Go czy Haskella lepiej zastanowić się nad tym czy nie potrzebujesz jakiegoś narzędzia, a może jakiś portal w stylu kombatant.pl dla dziadzia i babci by się przydał. Wybierz projekt, powiedz sobie że dociągniesz go do końca i jazda. I tak zgadzam się w 85% przypadków pozostaniesz z dobrze ci znanym stackiem bo po prostu wystarczy.

Jeżeli nie zobaczysz 10 poziomów hierarchi klas z prawie każdą metodą virtual, to nie zrozumiesz dlaczego dziedziczenie to zło, będziesz mógł tylko ślepo powtarzać wuja Boba i jemu podobnych kaznodziejów. Jeżeli nigdy nie miałeś problemów z NullRefException ani nie zastanawiałeś się czy to pole w tej encji to może być nullem czy nie to nie docenisz nie-null'owalności by default (swoją drogą sama nie-null'owalność jest również słaba bo nie mówi dlaczego pole nie może być nullem). Jeżeli nie miałeś deadlocków i problemów z aliasingiem to niemutowalność będzie tylko kolejnym dziwactwem. A gdzie tego wszystkiego można doświadczyć? Tylko pisząc prawdziwe projekty. W sumie sugeruje to również wybór projektów które wyprowadzą Ciebie poza strefę komfortu wiec przykład z kombatantem może nie jest najlepszy no chyba że chcesz podszlifować UX/UI :D

2

Inne języki nie są potrzebne kiedy jest JS. JS już wszystko zastępuję, kwestia czasu.

https://pastebin.com/0ustiD9m

2

Języki programowania uczą o tym jak ludzie próbują nawadać regularność myślom z jakimi zdarzają się podczas programowania. To wszystko to są nieudane próby, ale osoba wnikliwa, ktoś kto takie rzeczy lubi analizować może dzięki temu wypracować odpowiedni dystans do technik i pojęć z jakimi na co dzień idzie się zderzyć.

0

W przypadku Go ograniczenia, które nadaje (albo raczej brak ficzerów) też mogą być uczące. Każda zmiana perspektywy coś wnosi np. po nauce go uważam, że warto dążyć do jak najprostszego kodu, co może być zaskoczeniem dla typowego programisty Javy czy C#. Z drugiej strony pisanie w ograniczonym języku pozwala docenić funkcjonalności, których nie ma np. ubogi system typów, brak union typów, brak generyków, wszechobecna mutowalność czy nulle.

0

Ale czemu CRUD w Go? Toz to bez sensu. Nie dziwie sie, ze sie odbiles.

Jestes "ograniczony" ale nie mysleniem w C# tylko mysleniem w kategoriach webowych CRUDow.

2
purrll napisał(a):

Dlaczego każdy .NETowiec musi być taki sam? Kilka lat temu na nocnym hackathonie w MS w Wawie spotkałem tabun takich myślicieli jak Ty. Cecha wspólna? Fanatyzm .NET i Microsoftu. Zabawne, że to jedyna grupa z poznanych przeze mnie (Python, JS(cały front), Ruby, Java, Scala) i tylko wy macie to przeświadczenie o wyższości nad innymi :D

Jedyna grupa ludzi, która ma przeświadczenie o jakiejkolwiek wyższości, to niektórzy Javowcy. Większość jest normalna, ale niektórzy to totalni totalitarni socjaliści językowi, którzy chcieliby, aby każdy w Javie pisał.

slsy napisał(a):

W przypadku Go ograniczenia, które nadaje (albo raczej brak ficzerów) też mogą być uczące. Każda zmiana perspektywy coś wnosi np. po nauce go uważam, że warto dążyć do jak najprostszego kodu, co może być zaskoczeniem dla typowego programisty Javy czy C#.

Czy Ty sugerujesz, że w Javie czy C# nie dąży się do jak najprostszego kodu? Że celowo pisze się w sposób skomplikowany?

W2K napisał(a):

Mieliście podobnie ? Macie jakieś pomysły na technologię do nauczenia ? Może moje podejście jest kompletnie niewłaściwe ?

Może Node.js?

2

Czy Ty sugerujesz, że w Javie czy C# nie dąży się do jak najprostszego kodu? Że celowo pisze się w sposób skomplikowany?

Pewnie chodzilo na przyklad, o to ze czami zeby dostac jakis pierdołowaty obiekt to trzeba rytualnie przeprawic sie przez fabryki, buildery itd. itd.

        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.parse(url.openStream());

        doc.getDocumentElement().normalize();
5

Czlowiek przebierajacy sie za Czarnego Kapturka mial o tym prezentacje: . W skrocie pomijajac jezyki ktore powstaly "bo tak", albo dla zabawy, nowe jezyki powstaja po to by zaadresowac jakis problem albo cos usprawnic. Potraktuj jezyki jak narzedzia: chcesz przybic gwodzia mozesz uzyc mlotek lub kombinerki. Ale przykrecic srube juz bedzie trudniej...

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