Jaki język programowania jest przyszłościowy?

0

Równie dobrze można wysłać jedno zapytanie SQL, które to zrobi, tylko to i tak nie ma żadnego związku z dyskusją. To nie jest argument za używaniem query syntax zamiast notacji metodowej.

Bardziej opłaca się zrobić jedno zapytanie, które wyciągnie wszystkie niezbędne dane (uwzględniając wszystkie potrzebne później kryteria), które później w LINQ przefiltruje niż robić kilka zapytań z różnymi kryteriami. Najkosztowniejsze jest połączenie i wykonanie zapytania a nie samo przesłanie danych.

Nie widzę powodu dla którego typy anonimowe miały łamać silne typowanie. Co innego dynamic.

Powód jest taki że typu anonimowego nie możesz używać wprost (no chyba, że jest w tym samym kontekście). A statyczne typowanie wymaga znajomości typu podczas kompilacji.

0
śmieszek napisał(a):

Równie dobrze można wysłać jedno zapytanie SQL, które to zrobi, tylko to i tak nie ma żadnego związku z dyskusją. To nie jest argument za używaniem query syntax zamiast notacji metodowej.

Bardziej opłaca się zrobić jedno zapytanie, które wyciągnie wszystkie niezbędne dane (uwzględniając wszystkie potrzebne później kryteria), które później w LINQ przefiltruje niż robić kilka zapytań z różnymi kryteriami. Najkosztowniejsze jest połączenie i wykonanie zapytania a nie samo przesłanie danych.

Którego słowa w kwestii "można wysłać jedno zapytanie SQL" nie ogarniasz? Ogólnie IMHO jeśli można zrobić coś w DB, to w 90% przypadków lepiej jest to zrobić w DB. Będzie szybciej i lepiej. Query syntax ma sens wtedy gdy, hmmmm…, piszemy query. W reszcie przypadków w 99% zdecydowanie czytelniej będzie użyć notacji metodowej.

Nie widzę powodu dla którego typy anonimowe miały łamać silne typowanie. Co innego dynamic.

Powód jest taki że typu anonimowego nie możesz używać wprost (no chyba, że jest w tym samym kontekście). A statyczne typowanie wymaga znajomości typu podczas kompilacji.

Statyczne typowanie rzeczywiście wymaga znajomości typu podczas kompilacji, ale typowi anonimowemu nic do tego. Przykład z Rusta:

W Ruscie każde domknięcie ma swój unikatowy typ, przez co nie da się napisać czegoś takiego:

fn foo(bar: Fn()) { … }

I trzeba się uciekać do zapisu:

fn foo<F: Fn()>(bar: F) { … }

Na razie wszystko jasne.

Jednak nic nie stoi na przeszkodzie by przypisać domknięcie do zmiennej:

let bar = || println!("Hello world!");

foo(bar);

Widzisz, jakoś pomimo silnego i statycznego typowania uzyskaliśmy zmienną przechowującą typ anonimowy. Magia, co nie?

0

Którego słowa w kwestii "można wysłać jedno zapytanie SQL" nie ogarniasz?

Przeczytaj zdanie również po przecinku, bo najwyraźniej tego nie zrobiłeś.

Ogólnie IMHO jeśli można zrobić coś w DB, to w 90% przypadków lepiej jest to zrobić w DB. Będzie szybciej i lepiej. Query syntax ma sens wtedy gdy, hmmmm…, piszemy query. W reszcie przypadków w 99% zdecydowanie czytelniej będzie użyć notacji metodowej.

Ciężko dyskutować z czyimiś gustami. Napisałeś to samo co ja, uważając że mi zaprzeczasz.

Statyczne typowanie rzeczywiście wymaga znajomości typu podczas kompilacji, ale typowi anonimowemu nic do tego.

Koncepcja typów anonimowych pochodzi z języków funkcyjnych. Jest to nienaturalne dla C# że typ jest nieokreślony, tym bardziej że jest to język statycznie typowany. Być może się zagalopowałem z określeniem że "łamie silne typowanie" ale sensem tej wypowiedzi nie było to a fakt, że jest to mechanizm nienaturalny dla tego języka i zapożyczony z języków funkcyjnych.

6
śmieszek napisał(a):

Bardziej opłaca się zrobić jedno zapytanie, które wyciągnie wszystkie niezbędne dane (uwzględniając wszystkie potrzebne później kryteria), które później w LINQ przefiltruje niż robić kilka zapytań z różnymi kryteriami. Najkosztowniejsze jest połączenie i wykonanie zapytania a nie samo przesłanie danych.

Czyli twierdzisz, że lepiej robić filtrowanie po stronie aplikacji niż bazy? Nawet jeśli w bazie jest miliard rekordów, a chcemy wyświetlić trzy?

Powód jest taki że typu anonimowego nie możesz używać wprost (no chyba, że jest w tym samym kontekście). A statyczne typowanie wymaga znajomości typu podczas kompilacji.

Typ anonimowy jest przecież silnym typem, znanym podczas kompilacji. Tyle, że nie ma nazwy i nie można się do niego odwołać poza metodą.

0

Czyli twierdzisz, że lepiej robić filtrowanie po stronie aplikacji niż bazy? Nawet jeśli w bazie jest miliard rekordów, a chcemy wyświetlić trzy?

Masz takie zadanie: klient ma widok w aplikacji składający się z trzech obszarów. W jednym pokazuje produkty pogrupowane po kategorii, w drugim według trzech przedziałów cenowych a w trzecim których stan magazynowy jest mniejszy od X. Wasz pomysł to zrobienie 3 zapytań, które przefiltrują dane (bo baza najlepiej to zrobi) a mój to zebranie kryteriów w jedno zapytanie, wyciągnięcie danych i przefiltrowanie tego w LINQ przed wyświetleniem.

Typ anonimowy jest przecież silnym typem, znanym podczas kompilacji. Tyle, że nie ma nazwy i nie można się do niego odwołać poza metodą.

Zgoda, zagalopowałem się trochę. Tym nie mniej nie możesz jawnie określić jakiego typu anonimowego się spodziewasz co sprawa że jego bezpośrednie wywoływanie nie jest bezpieczne i kompilator to zablokuje.

0

Wydaje mi się, że da dyskusja zmierza donikąd, zatem podsumuje ją z mojej strony:

  1. JVM ma świetne mechanizmy do tworzenia maszyn wirtualnych dla innych języków oraz bardzo interesujące maszyny wirtualne typu Zing (znam go, bo LMAX go stosuje),
  2. Uważam, że technologia jest narzędziem a nie religią i nie mam żadnego oporu przed używaniem Javy, Ruby, C#, C++ czy innych jeżeli w lepszy sposób rozwiązują mój problem.
  3. Niektóre technologie w pewnych kwestiach mają przewagę nad innymi ale nie zawsze są lepsze jako całość.
  4. Składnia LINQ zależy od preferencji. Ja się przekonałem do 'query' po przeczytaniu ciekawej książki, w której gość pisał zaawansowane algorytmy w niej (nie pamiętam niestety tytuły w tej chwili). Poza tym lubię języki funkcyjne a ona mi jakoś je przypomina.
  5. C# coraz więcej czerpie z języków funkcyjnych co może być odbierane jako przeładowanie go "ficzerami".
  6. W LINQ można dobrze obrabiać dane aby uniknąć wielu zapytań do bazy danych (jeżeli nie jest możliwe ich uniknięcie).

Dziękuję za dyskusję, chociaż była czasem gorąca - trochę się dowiedziałem nowych rzeczy, trochę mnie zmusiliście do poszukiwań także trochę nowej wiedzy zdobyłem o C# a także o Javie.

5
śmieszek napisał(a):

Masz takie zadanie: klient ma widok w aplikacji składający się z trzech obszarów. W jednym pokazuje produkty pogrupowane po kategorii, w drugim według trzech przedziałów cenowych a w trzecim których stan magazynowy jest mniejszy od X. Wasz pomysł to zrobienie 3 zapytań, które przefiltrują dane (bo baza najlepiej to zrobi) a mój to zebranie kryteriów w jedno zapytanie, wyciągnięcie danych i przefiltrowanie tego w LINQ przed wyświetleniem.

No i dla 10 tys produktów zajmie to godzinę, dla 100 tys wieczność, bo RAM się skończy. A bazie jedno i drugie zajmie 50ms.

Ale faktycznie w jakimś ekstremalnie dziwnym przypadku, w którym użytkownik chce oglądać na jednym ekranie te same 10 produktów na 3 sposoby, to faktycznie można sobie rozmnożyć te rekordy po stronie aplikacji. Tylko chciałbym poznać UXowca tej aplikacji. ;)

śmieszek napisał(a):
  1. W LINQ można dobrze obrabiać dane aby uniknąć wielu zapytań do bazy danych (jeżeli nie jest możliwe ich uniknięcie).

Tylko, że zawsze jest możliwe. Jeśli nie unionem, to po prostu wysłaniem wielu zapytań w jednym połączeniu i odebraniem wielu wyników. W bardziej hardkorowym przypadku, gdy chodzi o wydajność takiego raportu to rozsądne staje się utworzenie procedury składowanej lub widoku.
Trzeba tylko rozumieć bazy, a nie na pałę rzeźbić w LINQ, bo fajny.

0

Z tymi 100 tysiącami to kpina. RAM jest tani, nawet kilkadziesiąt Giga RAMu dużo danych zmieści (zależy co trzymasz ale i miliony rekordów też).
(jak rekord ma 1kb no to milion rekordów to 10gb - phi... ) ).
Dodatkowo w pamięci tez można mieć indeksy...
RAM to kiszka - ale bazy danych to dopiero pełna katastrofa.

0

A mnie ciekawi w jakich językach programowania DARPA i Boston Dynamics programuje te roboty?
Czy to jest C++, widziałem też parę książek do programowania robotów w Pythonie i JS.
http://www.wykop.pl/link/3584001/nowy-robot-jak-z-koszmaru-od-boston-dynamics-eng/

0
Złoty Ogórek napisał(a):

A mnie ciekawi w jakich językach programowania DARPA i Boston Dynamics programuje te roboty?
Czy to jest C++, widziałem też parę książek do programowania robotów w Pythonie i JS.
http://www.wykop.pl/link/3584001/nowy-robot-jak-z-koszmaru-od-boston-dynamics-eng/

C, C++ i Python.
Source: http://www.bostondynamics.com/bd_jobs.html

0

Linux C/C++ i Python super, szkoda że jeszcze nie napisali jaka dystrybucja Linux.

0

Nie chcę zakładać kolejnego tematu. Ogólnie "najbardziej przyszłościowy język" to też nie jest w sumie sensowna dyskusja i nie wiem czy na ten temat potrafią paść konkretne odpowiedzi. ;)

Zastanawia mnie trochę kwestia korpo vs startupy.
Z jednej strony Java, C# itp. a z drugiej Ruby, Python, PHP, Node itp.

Chociaż te drugie czasem są uważane 'zabawki' co według mnie jest niesprawiedliwe. Mysle, że to kwestia preferencji kto się gdzie odnajdzie albo czym się zmęczy.
Inna sprawa, że często taki startup jak wypali to często jest przenoszony np. na JVM.

Ja obecnie jestem w tym pierwszym korpo obozie i o ile pewne rzeczy by mnie interesowały to cięzko czasem się do nich dobrać gdy te projekty są często stare.

Na nofluffjobs pojawiają sięciekawe oferty i w sumie to oferty dla Pythona, Node, Go są często całkiem ciekawe i czuć w nich powiew świeżości.
Czasem widzę w parze Python + Go i około Cloud.

Według mnie ogólnie to dwa światy i każdy powinien zdecydować co go bardziej interesuje.

0

Zastanawia mnie trochę kwestia korpo vs startupy.
Z jednej strony Java, C# itp. a z drugiej Ruby, Python, PHP, Node itp.

Chociaż te drugie czasem są uważane 'zabawki' co według mnie jest niesprawiedliwe. Mysle, że to kwestia preferencji kto się gdzie odnajdzie albo czym się zmęczy.
Inna sprawa, że często taki startup jak wypali to często jest przenoszony np. na JVM.

Języki kaczo typowane mają słabe wsparcie od IDE, bo statyczna analiza języka który nie jest statycznie typowany jest słaba. Ponadto w językach kaczo typowanych ciężko narzucić sposób kodowania - skoro można dowolnie zmieniać zawartość obiektów i dobierać się do ich całej zawartości to można nieźle nabroić. Gdy nad projektem pracuje wiele osób w różnym stopniu zaawansowania to mechanizmy ochrony przed dostępem jakie są w Javie są niezbędne.

0

Jest gorsze wsparcie IDE ale PyCharm dla przykladu dziala niezle.

1

Języki kaczo typowane mają słabe wsparcie od IDE, bo statyczna analiza języka który nie jest statycznie typowany jest słaba.

to prawda, z drugiej strony... statyczna analiza takiego JS mogła być lepsza, gdyby twórcy IDE się bardziej starali. Od jakiegoś czasu bawię się w analizowanie statyczne JS i widzę ile rzeczy faktycznie da się zrobić, a jak mało z tego jest w edytorach, które mogłyby być o wiele bardziej inteligentne (niestety twórcy IDE zamiast wspierać po ludzku JavaScript to stawiają wszystko na TypeScript).

No, a poza tym... statyczna analiza to nie wszystko, można też dokonywać dynamicznej analizy i śledzić uruchomiony program, a potem zbierać o nim dane z runtime'a i używać tych danych np. do autocomplete. W ten sposób można by uzyskać masę danych (podobno Visual Studio tak robi dla JSa, ale nie wiem jak to w praktyce wygląda, bo nie mam Windowsa nawet, to nie przetestuję. Póki co sam sobie eksperymentuję i tworzę bibliotekę do tego typu analizy).

W każdym razie - statyczna analiza języka, który nie jest statycznie typowany to wyzwanie, ale jednak nie takie wielkie jak próbuje się wmówić ludziom. Po prostu ktoś musi usiąść i zastanowić się "jak zrobić statyczną analizę" a potem to zaimplementować np. jako wtyczkę do swojego ulubionego edytora (sam się bawię w tego typu rzeczy).

Ponadto w językach kaczo typowanych ciężko narzucić sposób kodowania - skoro można dowolnie zmieniać zawartość obiektów i dobierać się do ich całej zawartości to można nieźle
nabroić. Gdy nad projektem pracuje wiele osób w różnym stopniu zaawansowania to mechanizmy ochrony przed dostępem jakie są w Javie są niezbędne.

na to są rozwiązania (najlepiej wszystkie cztery).

  1. testy, żeby sprawdzić czy się nic nie zepsuło
  2. dyscyplina zespołu, ustalone standardy kodowania
  3. lintery do sprawdzania, czy standardy są zachowane
  4. code review do tego samego i do ogólnej oceny, czy dane rozwiązanie ma sens.
    :)
0

Poza tym.... w startupie coś takiego własnie będzie zaletą a nie wadą i według mnie z punktu widzenia biznesu ma to sens by zrobić coś tanio i cool przy pomocy np. PHP.
A jak pomysł chwyci to przepisać np. na coś z JVM. Całe mnóstwo jest takich historii.

0

No, a poza tym... statyczna analiza to nie wszystko, można też dokonywać dynamicznej analizy i śledzić uruchomiony program, a potem zbierać o nim dane z runtime'a i używać tych danych np. do autocomplete. W ten sposób można by uzyskać masę danych (podobno Visual Studio tak robi dla JSa, ale nie wiem jak to w praktyce wygląda, bo nie mam Windowsa nawet, to nie przetestuję. Póki co sam sobie eksperymentuję i tworzę bibliotekę do tego typu analizy).

Brzmi jak zakładanie majtek przez głowę. Jeśli to nie jest wystarczająco wygodne to dalej nie łagodzi problemu.

W każdym razie - statyczna analiza języka, który nie jest statycznie typowany to wyzwanie, ale jednak nie takie wielkie jak próbuje się wmówić ludziom. Po prostu ktoś musi usiąść i zastanowić się "jak zrobić statyczną analizę" a potem to zaimplementować np. jako wtyczkę do swojego ulubionego edytora (sam się bawię w tego typu rzeczy).

JetBrains zarabia kupę kasy na IDE, w szczególności na Webie - obsługa HTML, CSS i JS to elementy za które trzeba u nich płacić. Dziwne byłoby więc, gdyby celowo olewali JS i szli na łatwiznę. Z TSa przecież nie wyciągną takiej kasy jak z JSa.

na to są rozwiązania (najlepiej wszystkie cztery).

Po pierwsze trzeba założyć, że dyscyplina się nie skaluje. W dużych wieloletnich projektach jest tak, że programiści się zmieniają (rotacja), mają różny poziom zaawansowania i różne style kodowania. Nawet jeśli w danym momencie coś się ustali to i tak z czasem sprawy się pozmieniają, a kod będzie rozwijany w dziesiątkach różnych styli.

testy, żeby sprawdzić czy się nic nie zepsuło

To jest standard w każdym dużym projekcie i założyłem, że każdy to robi, także wtedy gdy pisałem o problemach z językami kaczo typowanymi.

dyscyplina zespołu, ustalone standardy kodowania

Jeszcze raz - dyscyplina się nie skaluje. Często jest tak, że czas goni i trzeba robić rozwiązania na szybko, a potem zbijać dług techniczny. W językach dynamicznych można iść na dużo większe skróty by osiągnąć cel i tym samym dużo więcej nabroić w takim samym czasie.

lintery do sprawdzania, czy standardy są zachowane

W językach statycznie typowanych lintery też są i z racji typowania języka mają obszerniejsze zestawy funkcjonalności. Jeśli projekt jest monolitem to łatwo dojść do takiego momentu kiedy ostrzeżeń wypluwanych przez kompilator czy innego sprawdzacza stylu jest na tyle dużo że łapie się na to znieczulicę. W Sabre tak miałem - moduł core przy kompilacji rzucał taką litanią ostrzeżeń, że mało kto próbował się w to wczytywać. Tutaj więc moim zdaniem dużo zależy od skali pojedynczej aplikacji.

Poza tym.... w startupie coś takiego własnie będzie zaletą a nie wadą i według mnie z punktu widzenia biznesu ma to sens by zrobić coś tanio i cool przy pomocy np. PHP.
A jak pomysł chwyci to przepisać np. na coś z JVM. Całe mnóstwo jest takich historii.

Są też sytuacje gdzie ugrzęźnie się w takim śmierdzącym PHP. Sztandarowy przykład - Facebook. Utknęli w PHP tak mocno, że stwierdzili że zrobią własną VMkę dla własnego dialektu PHP (HHVM dla języka Hack). Skala problemu musiała być ogromna by coś takiego im się opłacało.

0
Wibowit napisał(a):

Są też sytuacje gdzie ugrzęźnie się w takim śmierdzącym PHP. Sztandarowy przykład - Facebook. Utknęli w PHP tak mocno, że stwierdzili że zrobią własną VMkę dla własnego dialektu PHP (HHVM dla języka Hack). Skala problemu musiała być ogromna by coś takiego im się opłacało.

Wiadomo, że ma to swoje minusy ;) Jest też taki Dropbox gdzie obecnie mają Python/Go ;)
Po prostu pytanie czy lepiej przeskakiwać od startupu do startupu np. z Pythonem czy ugrzęznąć w jakimś starym Java projekcie ;)

A jak startup się powiedzie i zaczną przepisywać na Javę to ta Java pewnie będzie dużo lepiej wyglądać niż jak będzie siedzieć tam od początku ;)

Wszystko ma swoje plusy i minusy.

0

A które to IDE słabo wspiera JS, chyba nie chodzi WebStorm, PHPStorm czy Atom? Bo ta trójca jest do JS genialna. Pomijam Brackets, Sublime czy Aptana, Eclipse, NetBeans.

0

Javascript i Typescript są też świetnie wspierane w Visual Studio Code.

0

@winerfresh:
"VS Code to nie IDE"

W wielu przypadkach życzyłbym sobie, żeby text editor był wystarczającym narzędziem, bo są szybkie ;)

1

VS Code to jest IDE, bo ma wszystko co IDE powinno mieć, tylko jest beznadziejnym IDE.

0

@Maciej Cąderek
czemu uważasz, że jedno z lepszych? Co jest w VSCode takiego dobrego? Ja osobiście mam takie wrażenie - udało im się zrobić potencjalnie dobry edytor, bo szybki i trochę bardziej elegancki i "polished" niż przaśny Atom i może z 20% funkcjonalności więcej na start niż w Atomie - ale jednak na dłuższą metę korzystając z VSCode czułem, że wiele rzeczy mi brakuje (przy czym do VSCode nie ma wtyczek za bardzo, w przeciwieństwie do Atoma), i że w zasadzie jest to dość ubogie narzędzie, mimo że ładne, szybkie i mające jakiś potencjał.

Wydaje mi się jednak, że spoczęli na laurach i nie rozwijają tego w sensowny sposób (dla mnie VSCode to bardziej jak Minimal Viable Product - można popracować, fajne jest, ale taka zabawka na dłuższą metę). No i też podobno jakaś zaawansowana inteligencja kodu jest w VSCode, ale chyba tylko w TS, bo w JS za bardzo tego nie widzę (skakanie do definicji to nie jest coś, co zachwyca - w Atomie też się tak da używając Terna).

Z drugiej strony Webstorm faktycznie się rozwija w tę stronę, jeszcze w 2014 tam kompletnie nic za bardzo nie było jeśli chodzi o JS, to teraz patrzę co jakiś czas na bloga JetBrainsa i widzę, że coraz więcej jest tej inteligencji, aż zaczynam rozważać czy nie kupić nowej licencji (mam licencję na starą wersję, ale już nie mogę apdejtów robić). Ale WebStorm mnie odrzuca brzydkim przeładowanym GUI (dodajmy dobrą inteligencję kodu i słabe GUI i wychodzi nam raczej średnie "developer experience").

Teraz korzystam zaś z Atoma, który również ma słabe wsparcie JSa, ale za to prosty interfejs i dużo wtyczek, co jakoś mu to wynagradza.

0

Brackets jest ciekawy ale ustępuje lekkością Sublime. Szkoda że WebStorm nie ma darmowej opcji jak PyCharm.

0

@somekind, powiedz mi, czego ci tu brakuje byś nazwał to IDE?

vsc.png

0

@Azarien: a czy visual studio code mozesz skonfigurowac by

  1. podpowiadal skladnie z danej klasy, nie z slow kluczowych tylko patrzyl na definicje klasy
  2. Zeby bez problemow mozna byloby znalezc uzycia danej funkcji (nawet jezeli jest uzycie przez dziedziczenie, to zeby znalazl wszystkie implementacje)
  3. Jest watch, ale chcialbym podczas debugowania wpisac cos do consoli zeby zobaczyc wartosc obiektu czy wlozyc wyrazenie w quickwatch, jak to zrobic?
  4. Jak z dodawaniem referencji? Jest tak samo proste jak w visual studio?
  5. Jak z pakietami nuget? Jest jakis NuGet Package manager?
  6. jest cos takiego (jest to w resharperze, nie w visual studio) ze mozna szukac dana klase/metode po calej solucji uzywajac skrotu klawiszowego? (ctrl + t) ale przy okazji nie filtruje Ci listy wyswietlnych wszystkich plikow
  7. A co z refaktoryzacja? Latwo wydzielic metode? latwo zmienic wszystkie referencje?
  8. Czy jest synchronizacja plikow z tym ktore wlasnie nacisnalem?
  9. I jezeli sa takie wszystkie dodatki. Jak z predkoscia?
  10. Jak wyglada integracja z vsts + git ?
  11. A i pamietam ze code/sublime/atom mieli problemy z pojsciem do implementacji jezeli obiekt klasy byl dziedziczony, a typ jest bazowy
1
LukeJL napisał(a):

czemu uważasz, że jedno z lepszych? Co jest w VSCode takiego dobrego?

Jedno z lepszych do JS i TS oczywiście, o jakiś C# się nie wypowiadam.

Powody:

  • bardzo szybkie w porównaniu z Atomem (w Atomie nie da się pracować na bardzo dużych plikach),
  • zintegrowny, wygodny debugger, zintegrowana konsola,
  • zintegrowany git (branche, commity, reverty, merge, diffy itp),
  • dobre Intellisense - podpowiadanie metod, argumentów, typów (czyta z JSDoca), obsługa wszystkich popularnych systemów modułów,
  • domyślny wsparcie dla Reacta, JSXa (dla innych frameworków pewnie też, nie wiem), wbudowany Emmet,
  • dobre poruszanie się po projekcie - skoki do definicj to wiadomo, ale także automatyczny podgląd definicji jeśli funkcja nie ma pełnej sygnatury (nie ma JSDoca) - wystarczy najechać na nazwę z wciśniętym command/ctrl, podgląd definicji w bierzącym oknie (Peek Definition),
  • dobra wyszukiwarka, podmina symboli, wszystkich wystąpień itp,
  • ilość pluginów dla mnie wystarczająca - raczej wszystko czego potrzebuję jest (zależy jakie masz wymagania),
  • wygodny i estetyczny interfejs,
  • dla mnie wygodna konfiguracja - pliki json z dokładnymi podpowiedziami do wszystkiego, dla mnie wygodniejsze niż przeklikiwanie się przez kolejne warstwy interfejsu,
  • aktywnie rozwijane i ulepszane,

Nie jest to ideał, ale ze wspomnianej trójki: Atom, VS Code i WS najbardziej mi podchodzi.

0

Do tego VSCode do programowania w F# jest w tej chwili bezkonkurencyjny (CodeLens, podpowiadanie składni i wiele innych) i totalnie deklasuje "dużego" Visual Studio. A wszystko dzięki świetnemu pluginowi ionide-fsharp, rozwijanego przez naszego rodaka.

0

@LukeJL

Przewagą VS Code jest jego twórca, czyli Microsoft który ma ogromne doświadczenie w tworzeniu takich edytorów. Do tego wykorzystali silnik Monaco stąd tak to dobrze wszystko działa.

0

Kotlin i Swift to jest przyszłościowe ze wsparciem korporacji Apple i Google.

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