Piotr Koszuliński

Piotr Koszuliński JavaScript ninja

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Łukasz Lityński:
- bardzo podobna notacja tablic i obiektów (chociaż w Pythonie nazywa się to listami i słownikami. Ale jakby się nad tym zastanowić to kompilator Pythona mógłby spokojnie odczytać poprawnie skonstruowanego JSONa:

Nawet JS nie da rady sparsować poprawnie sformatowanego JSON-a. Nikt tutaj oczywiście nie stwierdził wprost, że JSON jest podzbiorem JS, ale wiedząc, że wiele osób tak myśli pozwalam sobie wrzucić tego oto linka: http://timelessrepo.com/json-isnt-a-javascript-subset
Piotr Brzuska

Piotr Brzuska JavaScript + .Net
Developer

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

przy nowym projekcie chciałem zacząć pisać zamiast w JavaScripcie w TypeScript i po kilku godzinach walki odpuściłem i wróciłem do JS.

chciałem go głównie dla wsparcia w Visual Studio, ale samo to wsparcie mnie trochę przerosło... owszem działa to fajnie dla swoich własnych plików .ts,
ale łącznie .js + .ts jak choćby przy dodaniu jquery.js juz sprawiało problemy.

narazie wolę zwykły JS, który sam w sobie jest całkiem dobrym językiem
Marek Kostrzewski

Marek Kostrzewski programista własna
działalność
C/C++,C#,PHP,AJAX,SQ
L

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Proszę zastanowić się nad jednym problemem.
Jeśli piszę w JS i potem coś zacznie się wywalać na jednej z przeglądarek to wiem co zrobić a znalezienie miejsca i powodu (czasami bywa ciężko) jest możliwe.
Teraz piszę w jakimś generatorze JS i proszę mi powiedzieć jak znaleźć co się tak naprawdę wyłożyło?
JS(+HTML i CSS) jest specyficznym językiem. Działa na wielu przeglądarkach i nie zawsze tak samo.
Po co tracić czas tylko po to by inaczej zapisać to samo i potem mieć jeszcze kupę problemów?
Nie lepiej nauczyć się ładnie pisać w JS i nie robić sobie niepotrzebnych problemów?

konto usunięte

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

JavaScript to prawie LISP/Scheme z składnią zbliżoną do C. A LISP, Scheme, Haskell, Scala, Ocaml i JS stoją o wiele wyżej od języków obiektowych i pozwalają na o wiele krótsze zapisanie kodu robiącego to samo. Przykładowa implementacja RPN w JS i Haskellu pozwala zobaczyć jak blisko siebie stoją te języki:

Haskell:
import Data.List
solveRPN :: String -> Float
solveRPN = head . foldl foldingFunction [] . words
where foldingFunction (x:y:ys) "*" = (x * y):ys
foldingFunction (x:y:ys) "+" = (x + y):ys
foldingFunction (x:y:ys) "-" = (y - x):ys
foldingFunction (x:y:ys) "/" = (y / x):ys
foldingFunction xs numberString = read numberString:xs

JavaScript:
var rpn=function(code) {
return [[]].concat(code.split(' ')).reduce(function(stack,elem) {
switch(elem) {
case '+' : return stack.concat([(+stack.pop())+(+stack.pop())])
case '-' : return stack.concat([(+stack.pop())-(+stack.pop())])
case '*' : return stack.concat([(+stack.pop())*(+stack.pop())])
case '/' : return stack.concat([(+stack.pop())/(+stack.pop())])
case ''+(+elem): return stack.concat([elem])
default: throw new Error("Unknown element: "+elem)
}
}).pop()
}
// Specjalnie użyłem [] zamiast listy dla uproszczenia kodu, implementacja z listą może być wydajniejsza


Języki funkcyjne takie jak LISP zawsze będą trudne dla początkujących programistów, szczególnie tych nauczonych tylko programowania obiektowego i stąd to narzekanie na JS jak i śmierć Lispa i mała popularność haskella.
Traktowanie JS jak innych imperatywnych języków obiektowych to pomyłka.
Dużym problemem w JS jest brak dobrych wzorców przeznaczonych dla tego języka, ale zawsze można w firmie wprowadzić własne zasady.
CoffeScript to też pomyłḱa ze względu na porytą składnie i problemy z debugowaniem w przeglądarce.
A PHP to jeden z największych błędów w historii informatyki.

konto usunięte

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Michał Łaszczewski:

No i niepotrzebnie skomplikowałeś cały temat. Jak dla mnie za duzo "szkolnego" podejścia do tematu :PAndrzej Winnicki edytował(a) ten post dnia 24.02.13 o godzinie 21:48

konto usunięte

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Błażej K.:
Odpowiem Ci na moim własnym przykładzie aplikacji opartej o node.js + backbone.js, która już w tej chwili ma ok 40 000 linii kodu.

A moze problem wcale nie drzemie w JS tylko w niewlasciwym frameworku?

Backbone.js jest znany z duzego narzutu programistycznego. Sam mam problemy z pytaniem czy istnieje problem, ktory ten framework probuje rozwiazac? Z wlasnego doswiadczenia moge powiedziec, ze 6tys.linii kodu MVVM w backbone.js mozna bez problemu zastapic <500 liniami w knockout.js.

Najwiekszym problemem CoffeeScript czy MS TypeScript w moich oczach jest debugowanie. Przy zlozonej aplikacj ciezko odnalezc sie w kodzie i w efekcie zmuszony jestes poznawac w szczegolach co do czego jest skompilowane. Na koniec wyglada to tak, ze rozwiazajac problemy w CS uzywasz de facto JS, musisz orientowac sie jednoczesnie w CS i JS, co jest malo sensowne. To anuluje wiekszosc zalet, nie ma znaczenia, ze napiszesz szybciej/ladniej, jak debugujesz (znacznie) wolniej.
Piotr Brzuska

Piotr Brzuska JavaScript + .Net
Developer

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Michał Łaszczewski:
Dużym problemem w JS jest brak dobrych wzorców przeznaczonych dla tego języka, ale zawsze można w firmie wprowadzić własne zasady.

myślę że to nie chodził o to że nie ma dobrych wzorców dla JS. Raczej chodzi o to że mało kto się tym aż tak bardzo przejmuje. to co już ktoś wcześniej napisał - każdy programista c++ czy php myśli że znając składnie zna też JS.

myslalem tez o Dart'cie - oferuje maszynę wirtualną wybudowaną w przeglądarkę (chromium/dartium), pomaga to w debugowaniu. Ale sama składnia odbiega od JS.
Piotr Koszuliński

Piotr Koszuliński JavaScript ninja

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Jeśli chodzi o debuggowanie CS, to sam nie mam w tej kwestii doświadczenia, bo omijam ten język szerokim łukiem. Podpytywałem jednak znajomych i twierdzą, że dzięki source mapom nie ma z tym większego problemu (BTW Google Closure Compiler, czy Uglify JS też potrafią produkować source mapy). Czyli w teorii nie jest tak źle. Jednakże padła w tym temacie bardzo ciekawa uwaga - co z przeglądarkami, w których JS/DOM działa inaczej, a które nie mają wsparcia dla SM? To w nich najczęściej trzeba coś debuggować, oczywiście o ile musimy je wspierać.

W kwestii CS smuci mnie jednak inna sprawa. Rozmywa nam jednorodne środowisko o które tak walczymy. Z jednej strony wszyscy chcemy, żeby przeglądarki implementowały wspólne, jednolite standard, bo to czyni życie znacznie prostym - piszemy jedną wersję kodu, piszemy szybciej i mniej musimy wiedzieć o dziwactwach. CS i inne podobne propozycje rozmywają nam ten piękny świat. Pojawia się nowy byt, który trzeba znać, którego rozwój trzeba śledzić i który może spowodować, że trudniej będzie nam skompletować sprawny zespół. I nie jest tak, że ode mnie, czy mojego szefa zależy, czy użyjemy CS. Niestety wiele ciekawych bibliotek, które powstały w ostatnich czasach zostało stworzonych w CS. Sam miałem już z tym problem, że musiałem próbować znaleźć coś w kodzie napisanym w CS, a jego składnia nie jest dla mnie zbyt czytelna.

Tak więc CS robi społeczności podobną krzywdę jaką od wielu lat robi jQuery. Ciekawe rozwiązania, które powinny mieć jak najmniej zależności, często mają nieakceptowalne wymagania.

Żeby jednak nie być jednostronnym - cieszy mnie wpływ CS na prace nad ES6. Jest to dobry poligon doświadczalny, dobrze by jednak było, gdyby pozostał "doświadczalny" :).

konto usunięte

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Piotr Koszuliński:
Podpytywałem jednak znajomych i twierdzą, że dzięki source mapom nie ma z tym większego problemu (BTW Google Closure Compiler, czy Uglify JS też potrafią produkować source mapy). Czyli w teorii nie jest tak źle.

Z mojego doswiadczenia Redux wyglada jak niestabilna beta, na podstawie wlasnych (malych) doswiadczen nie podjalbym ryzyka liczac, ze projekt rozwinie sie w stabilna, rozsadna alternatywe.

konto usunięte

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Cóż, ideałem byłoby móc odpalać natywnie wszystkie języki jakie się chce na zasadzie:
<script type="text/dart">.... </script>
<script type="text/python">.... </script>
<script type="text/php">.... </script>
etc. Może kiedyś tak będzie...

No i oczywiście fajnie, jakby te języki by się mogły porozumiewać np. ktoś pisze bibliotekę w JavaScript, a Ty ją odpalasz w Pythonie, bo zmienne z JS byłyby widoczne w Pythonie (poprzez wspólny DOM).

konto usunięte

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Łukasz Lityński:
Cóż, ideałem byłoby móc odpalać natywnie wszystkie języki jakie się chce na zasadzie:
<script type="text/dart">.... </script>
<script type="text/python">.... </script>
<script type="text/php">.... </script>
etc. Może kiedyś tak będzie...

No i oczywiście fajnie, jakby te języki by się mogły porozumiewać np. ktoś pisze bibliotekę w JavaScript, a Ty ją odpalasz w Pythonie, bo zmienne z JS byłyby widoczne w Pythonie (poprzez wspólny DOM).

Jedno wspólne API dla wielu języków - Fajnie by było :) haXe ma coś takiego, ale to język kompilowany a nie client-side...

konto usunięte

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Piotr Koszuliński:
W kwestii CS smuci mnie jednak inna sprawa. Rozmywa nam jednorodne środowisko o które tak walczymy. Z jednej strony wszyscy chcemy, żeby przeglądarki implementowały wspólne, jednolite standard, bo to czyni życie znacznie prostym - piszemy jedną wersję kodu, piszemy szybciej i mniej musimy wiedzieć o dziwactwach. CS i inne podobne propozycje rozmywają nam ten piękny świat. Pojawia się nowy byt, który trzeba znać, którego rozwój trzeba śledzić i który może spowodować, że trudniej będzie nam skompletować sprawny zespół. I nie jest tak, że ode mnie, czy mojego szefa zależy, czy użyjemy CS. Niestety wiele ciekawych bibliotek, które powstały w ostatnich czasach zostało stworzonych w CS. Sam miałem już z tym problem, że musiałem próbować znaleźć coś w kodzie napisanym w CS, a jego składnia nie jest dla mnie zbyt czytelna.
Dlatego właśnie zamierzam trollować każdego kto odważy się pisać w CS :) ŚWIĘTA WOJNA MUSI TRWAĆ!

konto usunięte

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Łukasz Lityński:
No i oczywiście fajnie, jakby te języki by się mogły porozumiewać np. ktoś pisze bibliotekę w JavaScript, a Ty ją odpalasz w Pythonie, bo zmienne z JS byłyby widoczne w Pythonie (poprzez wspólny DOM).

Języki mogą się porozumiewać - przez moduły C/C++ :)

konto usunięte

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Pomijając już wszystkie powyższe uwagi o preferencji składni (to dość subiektywna sprawa) jest chyba jeden zasadniczy problem z CoffeeScriptem, o którym Sebastian pisze - dorzuca dodatkową warstwę abstrakcji, nie dając wzamian żadnej nowej funkcjonalności.

Kiedy na konsoli w przglądarce pojawia się błąd - pojawia się numer linii w skompilowanym kodzie. Później trzeba jeszcze znaleźć błąd w CoffeeScripcie. Jeżeli nie wiemy dokładnie, w jaki sposób CoffeeScript kompiluje poszczególne wiersze, to też nie zawsze wiadomo, co się sypie. Nawet jak wiemy - dalej musimy tego szukać i analizować każdy błąd w kodzie ze względu na dodatkową kompilację CS -> JS. Rozwiązanie estetycznie ładne, ale w większych projektach więcej z tego bólu głowy niż pożytku.

konto usunięte

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Filip Sobczak:
Pomijając już wszystkie powyższe uwagi o preferencji składni (to dość subiektywna sprawa) jest chyba jeden zasadniczy problem z CoffeeScriptem, o którym Sebastian pisze - dorzuca dodatkową warstwę abstrakcji, nie dając wzamian żadnej nowej funkcjonalności.

Kiedy na konsoli w przglądarce pojawia się błąd - pojawia się numer linii w skompilowanym kodzie. Później trzeba jeszcze znaleźć błąd w CoffeeScripcie. Jeżeli nie wiemy dokładnie, w jaki sposób CoffeeScript kompiluje poszczególne wiersze, to też nie zawsze wiadomo, co się sypie. Nawet jak wiemy - dalej musimy tego szukać i analizować każdy błąd w kodzie ze względu na dodatkową kompilację CS -> JS. Rozwiązanie estetycznie ładne, ale w większych projektach więcej z tego bólu głowy niż pożytku.

O tym też mówiliśmy. W tym i bliźniaczym temacie.
Marcin Drwięga

Marcin Drwięga Programista PHP

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Czy mi się wydaje, czy większość poleca tu pisanie aplikacji w "gołym" języku? Myślałem, że "Era odkrywania koła na nowo" minęła jakieś 15 la temu ;)
Piotr Koszuliński

Piotr Koszuliński JavaScript ninja

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Marcin Drwięga:
Czy mi się wydaje, czy większość poleca tu pisanie aplikacji w "gołym" języku?

Nie. Raczej nikt tego nie poleca. Domyślam się, że wszyscy korzystają z różnego rodzaju bibliotek wspomagających pisanie aplikacji. Bibliotek JS-owych oczywiście.
Myślałem, że "Era odkrywania koła na nowo" minęła jakieś 15 la temu ;)

Wśród programistów ta moda zapewne nigdy nie przeminie (też zdarza mi się w ten sposób grzeszyć). Co ciekawe bardzo często tego typu podejście daje gorszy rezultat niż istniejące już rozwiązanie, mimo założenia sobie bardzo szczytnych celów. Interesującym przykładem może być CoffeeScript, który choć starał się poprawić język posiadający wiele wad, wprowadził tyle nowych, że te poprawione blakną.
Piotr Brzuska

Piotr Brzuska JavaScript + .Net
Developer

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

a co myślicie o Darcie ?

konto usunięte

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

dlaczego gołym? Są przecież różne biblioteki, frameworki. Chociaż znajomość vanilla javascript i tak myślę, że jest potrzebna programiście, na takiej samej zasadzie jak umiejętność chodzenia przydatna jest kierowcy.

konto usunięte

Temat: Dlaczego zrezygnowałem z pisania w JavaScript'cie?

Piotr Brzuska:
a co myślicie o Darcie ?

To samo co rok temu. Na czym chcesz go uruchomić ? Dartium ? Ktoś musiał by jeszcze tego używać

http://www.dartlang.org/dartium/

Zostaje opcja kompilacji do JS więc wracamy od punktu wyjścia. Chyba że coś się zmieniło ostatnimi miesiącami. Bardziej ciekawostka. Może za parę lat...

Następna dyskusja:

dlaczego nie ma?




Wyślij zaproszenie do