Skad hejt na JavaScript

Skad hejt na JavaScript
AK
  • Rejestracja:ponad 7 lat
  • Ostatnio:5 miesięcy
  • Postów:44
0

Witam, jakieś 2 miesiące uczyłem się Javy, niekoniecznie po to aby pracować z tym językiem ale aby zrozumieć obiektowość. Tak teraz pomyślałem co naprawde chciałbym robić i co mi się podoba i.... no właśnie... Podoba mi się możliwość zrobienia aplikacji webowej i jednocześnie na przykładowo androida. Poczytałem trochę poczytałem i stwierdziłem, że będzie dla mnie idealne nauczyć się JS > Angular + NativeScript lub JS>React>ReactNative ... bo w końcu gier na androida/ios i tak nie chcę robić a czytałem że w JS powstają frameworki na desktop również takie jak Electron w którym napisany jest Discord.

No więc skąd ten cały hejt na javascript? Jest to spowodowane tym, że kiedyś frontend to był głównie html + css + ociupinka kodu JS? Zauważyłem, że bloggerzypodzieleni są na trzy części: na tych kórzy uważają że JavaScript to nie jest programowanie nawet w dzisiejszych czasach oraz na tych, którzy mówią, że JavaScript ma przed sobą świetlaną przyszłość (frameworki).

Po ofertach pracy, widzę też że programiści np Reacta nie zarabiają wcale mniej niż inni w Php, czy C# lub Javie.

NO
Nie jestem pewien, ale jeśli od razu rzucisz się na JS pod web czy mobilne to zbierz na początek zbierzesz mega duży worek złych praktyk. Lepiej ogarnij sobie taki język byś mógł łatwiej znaleźć w pracy kogoś od kogo warto czerpać przykład. I pamiętaj: dobry programista JS to ktoś kto wyginął razem z dinozaurami.
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 8 godzin
1

Podstawowym problemem JavaScriptu z perspektywy programisty Javy/ C#/ C++/ itd jest jego pokręcona semantyka. Obiektówka w JSie działa zupełnie inaczej niż w każdym innym języku i to jest powód do frustracji - co z tego, że składni można się szybko nauczyć skoro wiedza nabyta podczas programowania w Javie/ C#/ C++/ itd przeszkadza zamiast pomagać? Ja w JSie grzebię okazjonalnie, pierwszy raz miałem okazję w nim grzebać kilkanaście lat temu, ale w zasadzie za każdym razem czuję się jakbym grzebał w g****e. Poradnik https://github.com/getify/You-Dont-Know-JS pomógł mi nieco rozjaśnić JSową niefrasobliwość, ale przez to, że JSa rzadko tykam to i tak zapomniałem co i jak się dzieje (w sensie głównie np do czego odnosi się słówko kluczowe this w rozmaitych przypadkach).


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
Maciej Cąderek
Maciej Cąderek
w sensie głównie np do czego odnosi się słówko kluczowe this w rozmaitych przypadkach - jest na to rada - nie używać this ;)
DE
  • Rejestracja:ponad 14 lat
  • Ostatnio:6 miesięcy
  • Postów:112
0

Do tego dochodzi rozwój różnej maści frameworków i narzędzi do JS. Nowe powstają raz na miesiąc i coś co używałeś rok temu, dzisiaj już jest przestarzałe. To też troszkę demotywuje.


FI
FI
  • Rejestracja:około 10 lat
  • Ostatnio:około 4 lata
  • Postów:471
0

czy js stanie sie mlotkiem do wszystkiego?

MA
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 lata
  • Postów:337
1

http://bonsaiden.github.io/JavaScript-Garden/pl/

https://www.destroyallsoftware.com/talks/wat

Są pewne limity złego zaprojektowania języka programowania. Akurat js ma dosyć dużo złych cech, by móc spokojnie na niego narzekać. Natomiast należy zwrócić uwagę na pewne bardzo pozytywne cechy jak np. Dziedziczenie prototypowe czy świetny engine v8.

Maciej Cąderek
Maciej Cąderek
Engine nie jest cechą języka.
Patryk27
Dlaczego uważasz dziedziczenie prototypowe za bardzo pozytywną cechę?
hauleth
Dziedziczenie prototypowe jest ciekawe i całkiem fajne jak się zna. Jednak JS nawet to skaszanił i Io ma to dużo lepiej zrobione. Jednak nie nazwałbym tego "bardzo pozytywną cechą" a po prostu "cechą", bo ma swoje zalety i wady.
MA
@Maciej Cąderek: ok v8 nie jest cechą, moje złe dobranie słów. Każdy język ma swój ekosystem, I chcąc nie chcąc też na to należy zwrócić uwagę.
MA
@Patryk27: ponieważ możesz.dowolnie modyfikować w prosty sposób obiekty. Czy to przez dodawanie / dekorowanie / usuwanie attrybutów I mogę zrobić to w dowolnym momencie w runtimie. Przydatna rzecz, ale jak się nie wie co się robi to lepiej nie tykać by nie napsuć
0

A ja zamówiłam książkę z heliona pt. "Mistrzowski JavaScript. Programowanie zorientowane obiektowo". Zamierzam sie rozwijać w kierunku JS i JS-owych FW.

Haskell
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:4700
1

Nie lubię JS, ponieważ programiści tego języka nie traktują go jako obiektowy. Większość kodu pisanego w tym języku używa klas, bo framework to wymusza i trzeba rozszerzyć jakąś klasę. Przypomina to trochę programowanie w Delphi albo C++ Builder na końcu lat 90 i początku lat 00, gdzie aplikacja składała się z jednej, ew, kilku klas TForm1, TForm2 itd. a resztę leciało się proceduralnie.


Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
flowCRANE
Co Ty opowiadasz… Wspomniane środowiska aż po dziś dzień niczego takiego nie wymuszają. Każdy formularz ma swoją klasę (a tym samym moduł) i to jest poniekąd narzucone (bo nie jest absolutnym wymogiem). Jednak nic nie stoi na przeszkodzie, aby stworzyć sobie bądź ile dodatkowych modułów i bądź ile dodatkowych klas, oddzielając warstwę prezentacji od całej machinerii zarządzającej aplikacją.
flowCRANE
Tak więc jeśli wspomniane przez Ciebie praktyki były popularne i większość projektów zawierała ”god object” w postaci klasy formularza to cóż – większość autorów tych projektów nie miała większego pojęcia o tym co robi i nie można tego uznać za sensowny argument. Po dziś dzień Delphi/C++ Builder/Lazarus działają w ten sam sposób i po dziś dzień upychanie całej logiki w klasie formularza w dalszym ciągu świadczy o niedoświadczeniu programisty.
hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:5 dni
3

Głównym problemem JSa jest absolutny brak biblioteki standardowej. Tylko absolutne minimum helperów jest zawarte w specyfikacji, co powoduje, że drzewo zależności zawiera czasem absurdalne elementy (left-pad czy const-pi).

Ogólnie JS ma wiele wad, gdzie główną wadą są programiści, którzy "odkrywają" nagle wiele rzeczy, które cała reszta zna od dawien dawna, i nazywają to "rewolucją". Olbrzymia ilość osób o bardzo niskich kompetencjach ląduje na różnego rodzaju kursach i potem stara się "zabłysnąć" co powoduje u reszty epickiego facepalma.


Zobacz pozostałe 4 komentarze
Maciej Cąderek
Maciej Cąderek
Co nie zmienia faktu, że jest częścią obecnego standardu - patrz mój poprzedni komentarz
hauleth
@Maciej Cąderek: a no ma dość dużo kiedy dana rzecz została wprowadzona do JSa, dla tego, że często musisz wspierać runtime, który niekoniecznie będzie posiadał implementację danej metody. Więc niestety w takich przypadkach musisz się ratować shimami.
Maciej Cąderek
Maciej Cąderek
Shimami w sensie polyfillami? Jasne, ale najważniejsze jest to, że istnieje standard na którym taki polyfill się może oprzeć. Btw nie dotyczy to tylko JSa, tyle, że nie w każdym języku da się tą metodę dołączyć. Transpilowanie i polyfillowanie JSa to i tak standard, ze względu na producentów przeglądarek - także trochę narzekasz na rozwiązany problem ;)
Wibowit
Lambdy to element składni, a nie biblioteki standardowej.
Maciej Cąderek
Maciej Cąderek
Wiem, nie zmienia to sensu mojej wypowiedzi
Prav
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Postów:25
0

Mnie najbardziej boli brak dobrych narzędzi do statycznej analizy i IDE. Dla przykładu WebStorm ma problem z:

  • Podpowiedzi "po kropce", extendowanie czegokolwiek jest równoznaczne pozbawieniem się sensownych podpowiedzi.
  • Kolorowanie składni jest dosyć losowe np. czasem obj.start (gdzie start to pole obiektu obj) zostaje pokolorowany jak metoda, bo gdzieś w zaimportowanym module jest klasa, która ma taką metodę, albo w ogóle nie może znaleźć takiego pola, działa to też w drugą stronę, to że IDE nie zgłasza błędu w obj.start nie oznacza, że obj faktycznie zawiera cokolwiek nazwanego start.

Przez co refaktorowanie przypomina bardziej znajdź i zastąp w notatniku niż operacje na kodzie. Pisanie JSDoc do każdej funkcji i każdego obiektu rozwiązuje większość z ww. problemów, ale stanowi problem sam w sobie, bo jest relatywnie wolniejsze niż zdefiniowanie klasy w języku silnie typowanym dodatkowo przy zmianie w kodzie trzeba pamiętać o zaktualizowaniu JSDoca.

Nie do końca przemawia do mnie idea zbudowania języka bazując na pojedynczym event loopie z magią libuv. Bardziej uniwersalne są rozwiązania przyjęte w Go czy Elixirze.

Niesamowicie frustrujące jest też to, że nawet syntax errory są zgłaszane dopiero w runtime. Szczególnie, że można poprosić V8/node.js o wyplucie bytecodu/assemblera.

A moim osobistymi faworytami są:

Tak właściwie nie lubię języków Interpretowanych, ale np. Python ma wystarczająco dużo zalet, żeby warto było przeboleć jego wady. JavaScript nie oferuje na dobrą sprawę nic.

Podsumowując, pisząc JSa czuję się bardziej jakbym pisał esej po węgiersku niż programował. Także jeśli JS to raczej TypeScript, który zresztą ma swoje ułomności.

edytowany 1x, ostatnio: Prav
Zobacz pozostałe 12 komentarzy
LukeJL
w sensie, że Webstorm (i nie tylko, w VSCode jest to samo) chce być na siłę mądry i pokazać ci wszystko, co wie, i jeśli ma gdzieś zapisaną właściwość test w 15 innych klasach, to ci to musi pokazać, żeby się pochwalić, że taki mądry jest, że ma taką bazę danych, że 15 klas wykrył, nawet jeśli w tej chwili będzie to z d**y.
LukeJL
to trochę jak uczeń czy student, który nie zna odpowiedzi na pytanie i próbuje zgadywać i rzuca z 10 różnych odpowiedzi, w nadziei, że któraś będzie dobra.
Prav
Nigdzie nie pisałem, że to wina JS. Chociaż ekosystem (w tym i narzędzia) pełni równie ważną rolę przy wyborze języka jak on sam. Zastanawiam się czy nie można byłoby zrobić do JS czegoś takiego jak Clang Code Model w QtCreatorze https://4programmers.net/Profile/63110/Microblog.
LukeJL
ale takie narzędzia do JSa przecież już są (choćby ESLint), tylko kwestia ich jakości oraz tego, w jakiej formie to będzie zaprezentowane użytkownikowi. (chociaż jeśli chodzi o tzw. "banalne błędy" to dobrze skonfigurowany ESLint raczej daje radę).
LukeJL
swoją drogą stary dobry Tern zrobił to dobrze https://codemirror.net/demo/tern.html
NO
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:165
0

Ja tam JS lubię, ale tylko dlatego, że jeśli w nim programuje to tylko własne projekty. Firmowy kod w JS to g*wno, które mnoży się w nieskończoność.

Podstawowa rzecz jaka sprawia, że ten język nie nadaje się do pracy zespołowej to jego giętkość (podobnie mam z lispami), dlatego żeby tutaj coś z tego wyszło to konieczne jest wyjście od pragmatycznych decyzji (lista poniżej) oraz konsekwentnego przestrzegania.

[0] Najważniejsze to poznać ograniczenia i używać możliwie proste narzędzia. Często zwykłe jQuery styknie.
[1] Stosować testy jednostkowe jeśli projekt ma pożyć dłużej niż 1 miesiąc.
[2] Najtrudniejsze: nie wymóżdżać kodu <- co rok to pojęcie co innego dla mnie znaczy więc i tak pewnie tu się nie zrozumiemy
[3] Stosować spójne nazewnictwo.

Zobacz pozostałe 9 komentarzy
jarekr000000
@vpiotr tekst jest czego nie wprowadza. Po prostu w jQuery nieraz zobaczysz jQuery("<div>" + textPersistedInDb + "</div>"). I masz cudowne persisted XSS. To by nie był, aż tak duży problem (analogiczny jak SQL Injection) gdyby nie fakt, że w zależności co masz zrobić potrzebujesz innego eskejpowania.... łatwo się pomylić: https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet Bagatelizowanie XSS to typowy problem... a straty niestety mogą być duże.
jarekr000000
@vpiotr: po prostu manipulowanie DOMem przy pomocy jQuery i sklejanych stringów to ten sam level co sklejanie SQL w kodzie serwera. Jak będziesz bardzo uważać to nie zrobisz błędu.... ale jednak lepiej użyć bilblioteki, czegoś a la PreparedStatement, który Cie przed problemem chroni nawet jak się zapomnisz.
vpiotr
@jarekr000000: ale na ile to cecha jQuery a na ile całego JavaScriptu? Może w jQuery łatwiej wyłapać bo są automatyczne analizatory kodu i tyle.
jarekr000000
@vpiotr: to nie jest żadna cecha JavaScriptu tak, jak SQL Injection nie jest cechą Javy. Angular, React,secure handlebars w prosty sposób zabezpieczają. Do tego stopnia, że nawet trzeba się nieźle natrudzić, żeby te zabezpieczenia obejść.
jarekr000000
@vpiotr tak są toole, nawet automaty do "penetracji". To co mi wyszło, to generalnie jak dużo używasz jQuery to w końcu znajdzie sie tam zwałka, kwestia czasu. Bardzo trudno niestety analizując kod oparty o jQuery upewnić się, że jest odporny na XSS. Duża męka i czas na review.
AK
  • Rejestracja:ponad 7 lat
  • Ostatnio:5 miesięcy
  • Postów:44
0

To jak to wszystko działa? Przykładowo w Gdańsku i Poznaniu, 2 miasta które biorę pod uwagę, większośc ofert dla programistów to java i c#/php dla seniorów a dla mid i juniorów c#(głównie .net) ale zawsze z dołączonym javascriptem jako wymagania lub też bezpośrednio javascript developer ze znajomością np react/angular/nodejs

NO
Wtedy robisz rzeźbę w brązie.
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
0

Jak ktoś nie zna JavaScript, to go nienawidzi, bo próbuje w nim robić Javę/C#, a ten język ma zupełnie inne zasady działania (np. nie ma klas i koniec - nie ma co ich na siłe robić (ok w ECMA 6 są) )
Jak ktoś pozna JS to go nienawidzi za zmarnowany potencjał. Za bardzo ciekawy rdzeń (Lispowy) do którego ktoś dosrał zupełnie nonsensowne reguły i pułapki (truthy/falsy, equality ===/==, var hoisting, this/context, implicit semicolon ).

Ogólnie po wprowadzeniu szkoleń i narzędzi (JSHint/Lint + Testy) da się z JS pracować... ale po jakimś czasie i tak wychodzi duża wada... jest skrajnie nieprzyjemny w refaktoringu.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
azalut
  • Rejestracja:około 12 lat
  • Ostatnio:ponad rok
  • Postów:1129
4

chyba np stąd:
![] - false
[] - true

![] == [] - true

ale ja tam go lubie :P

edytowany 1x, ostatnio: azalut
Haskell
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:4700
0

Mnie najbardziej wkurzało:
null == false // -> false


Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
AK
  • Rejestracja:ponad 7 lat
  • Ostatnio:5 miesięcy
  • Postów:44
0

Z tego co czytam, to niemal wszędzie jest mówione, że javascript to przyszłość... A jednak wiele ludzi nie lubi tego języka.... Tylko teraz pytanie, czy nie lubią go głównie np c#'powcy lub javovcy czy programisci którzy piszą głównie w JavaScript? Czy w takim razie mój plan z poświęceniem 2-3 miesiące na nauke JavaScript jest stratą czasu? bo tak czy siak chciałbym kiedyś nauczyć się c# ale chwilowo bardzo podoba mi się możliwość budowania API i chciałbym mieć coś z np Reacta do portfolio, coś własnego. To źle czy dobrze?

azalut
  • Rejestracja:około 12 lat
  • Ostatnio:ponad rok
  • Postów:1129
0

@Akinwoktyzuawzan:
kiedyś mi powiedziano, że jak się czegoś nie umie to się nie lubi - i to jest wg mnie odpowiedź na pytanie
obstawiam że z całego grona hejterów JSa nieliczni będą go na prawde dobrze umieć, a po prostu nie lubić

Haskell
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:4700
0
azalut napisał(a):

kiedyś mi powiedziano, że jak się czegoś nie umie to się nie lubi - i to jest wg mnie odpowiedź na pytanie

W przypadku JS smutne jest to, że mało kto go lubi, a jeszcze rzadziej umie.


Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
Maciej Cąderek
Maciej Cąderek
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Warszawa
  • Postów:1264
2
Prav napisał(a):

Mnie najbardziej boli brak dobrych narzędzi do statycznej analizy i IDE. Dla przykładu WebStorm ma problem z:

  • Podpowiedzi "po kropce", extendowanie czegokolwiek jest równoznaczne pozbawieniem się sensownych podpowiedzi.
  • Kolorowanie składni jest dosyć losowe np. czasem obj.start (gdzie start to pole obiektu obj) zostaje pokolorowany jak metoda, bo gdzieś w zaimportowanym module jest klasa, która ma taką metodę, albo w ogóle nie może znaleźć takiego pola, działa to też w drugą stronę, to że IDE nie zgłasza błędu w obj.start nie oznacza, że obj faktycznie zawiera cokolwiek nazwanego start.

Przez co refaktorowanie przypomina bardziej znajdź i zastąp w notatniku niż operacje na kodzie. Pisanie JSDoc do każdej funkcji i każdego obiektu rozwiązuje większość z ww. problemów, ale stanowi problem sam w sobie, bo jest relatywnie wolniejsze niż zdefiniowanie klasy w języku silnie typowanym dodatkowo przy zmianie w kodzie trzeba pamiętać o zaktualizowaniu JSDoca.

Niesamowicie frustrujące jest też to, że nawet syntax errory są zgłaszane dopiero w runtime. Szczególnie, że można poprosić V8/node.js o wyplucie bytecodu/assemblera.

To, że nie znasz takich narzędzi, nie znaczy, że nie istnieją. Jeśli WebStorm serio tak słabo sobie radzi z kodem (raczej wątpię, choć kto wie) to przerzuć się na inne IDE/edytor. Ja używam VS Code i lintera:

  • nie ma problemów z podpowiedziami (nawet bez JSDoców, tyle, że wiadomo - wszędzie gdzie typu nie da się inferować masz podpowiadane any),
  • błędy składniowe i wtf'y języka załatwia ESLint,
  • nieistniejące metody, sporą cześć niezgodnych typów itp. wykrywa opcja "javascript.implicitProjectConfig.checkJs": true w edytorze (lub // @ts-check na poziomie pojedynczego pliku),
  • o aktualność JSDoców też dba typechecker w edytorze (dodatkowo jest też plugin do ESLinta, choć nie tak dobry),
  • rename symbol dzaiła jak powinno

Ogólnie pisanie kodu JS z JSDocami wyłapuje znakomitą większość błedów jeśli wiesz jakich narzędzi uzyć, choć TS jest tu oczywiście lepszy.

Eh, trochę zabawne te hejty - o wadach JSa możnaby książkę napisać, ale duża część argumentów z tego watku jest tak bardzo nietrafiona i świadczy o nieogarnięciu piszącego ;)

edytowany 7x, ostatnio: Maciej Cąderek
Prav
Sprawdzę VSCode chociaż znalezienie wszystkich przydatnych pluginów (auto formatowanie, git, itp.) trochę zajmie :-). o wadach JSa możnaby książkę napisać i do wszystkich da się przyzwyczaić do niedziałających narzędzi, nie bardzo.
AK
  • Rejestracja:ponad 7 lat
  • Ostatnio:5 miesięcy
  • Postów:44
0

Jeśli jest tu ktoś kto głównie w JS pisze(a raczej w głównej mierze) a po komentarzach zakładam że jest to mam pytanie. Czy pogodzenie przykładowo pisania w c# i np w react w js naprawdę tak bardzo utrudnia życie? Chciałbym zaznaczyć że nie chodzi o łączenie tych języków w jednym projekcie ale przykładowo jeśli ktoś pisze w c# a jednocześnie czasami lubi walnąć sobie apke na weba w react js to to jest taka mordęga, czy zwyky hejt bo ktoś nie lubi jsa ale w jakimś projekcie musiał go użyć a nie chciało mu się go uczyć?

NO
No i teraz właśnie powinieneś odejść, by na żywo się przekonać.
Maciej Cąderek
Maciej Cąderek
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Warszawa
  • Postów:1264
2

@Prav
Tu masz listę moich pluginów, możesz obczaić:

Kopiuj
DavidAnson.vscode-markdownlint
PeterJausovec.vscode-docker
Zignd.html-css-class-completion
christian-kohler.npm-intellisense
dbaeumer.vscode-eslint
eamodio.gitlens
eg2.tslint
eriklynd.json-tools
formulahendry.code-runner
joelday.docthis
kisstkondoros.vscode-codemetrics
msjsdiag.debugger-for-chrome
robertohuertasm.vscode-icons
shyykoserhiy.vscode-spotify
streetsidesoftware.code-spell-checker
vscodevim.vim
wix.vscode-import-cost
xabikos.JavaScriptSnippets

i config:

Kopiuj
{
    "editor.fontFamily": "Fira Code",
    "editor.fontLigatures": true,
    "editor.fontSize": 14,
    "editor.tabSize": 2,
    "editor.tabCompletion": true,
    "editor.minimap.enabled": true,
    "editor.renderIndentGuides": true,
    "vim.disableAnnoyingNeovimMessage": true,
    "workbench.editor.showTabs": false,
    "explorer.openEditors.visible": 0,
    "docker.showExplorer": true,
    "gitlens.gitExplorer.enabled": true,
    "gitlens.blame.line.enabled": false,
    "workbench.iconTheme": "vscode-icons",
    "javascript.implicitProjectConfig.checkJs": true
}
edytowany 1x, ostatnio: Maciej Cąderek
hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:5 dni
2

JS vs Good Parts

Klasyczne śmieszki, ale całkowicie się zgadzam z @jarekr000000, że każdy widzi w JSie inne wady, w zależności od tego jak ten język zna.


LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:minuta
  • Postów:8414
0

Wszystko można polubić. Dla mnie takim złem wcielonym jest CSS, a jednak mimo wszystko lubię pisać animacje w CSS, czy bawić się efektami, bo to jest po prostu cool. Mimo, że dla mnie CSS to jak dla jakiegoś backendowca coś takiego jak JavaScript, że nielogiczne i pełne WTFów.


Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 8 godzin
0
azalut napisał(a):

@Akinwoktyzuawzan:
kiedyś mi powiedziano, że jak się czegoś nie umie to się nie lubi - i to jest wg mnie odpowiedź na pytanie
obstawiam że z całego grona hejterów JSa nieliczni będą go na prawde dobrze umieć, a po prostu nie lubić

To rozumowanie można zaaplikować do każdego innego języka, np: hejterzy Javy nie lubią jej, bo jej nie umieją. QED
Pokażcie mi hejtera Javy, który potrafi się nią płynnie posługiwać :]


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
0

somdekin?

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:Wrocław
2

Główny problem polega na tym, że fanatycy mylą krytykę z hejtem. Ktoś zwróci uwagę na prosty fakt jak np. to, że w JS jest wiele nieintuicyjnych konstrukcji, albo że Java nie ma generyków w runtime, i zaraz rzucają się na niego stada fanbojów wyzywając od hejterów.

AK
  • Rejestracja:ponad 7 lat
  • Ostatnio:5 miesięcy
  • Postów:44
0

Rozumiem... a tak teraz z innej beczki żeby nie zakładać nowego tematu... Czy dla .netowca bardziej przyszłościowe jest nauczyć się Reacta, czy Angular bedzie królował? Ja stawiam na Reacta bo mi się bardziej podoba ale chciałbym poruszyć tę kwestię i co o niej myślicie.

flowCRANE
Źle robisz – jeden problem to jeden wątek, więc jeśli masz pytanie z innej beczki to nie krępuj się i załóż kolejny.
AK
Okej, w takim razie popełniłem błąd, po prostu uznałem że pytanie nie jest na tyle ważne ale zapamiętam na przyszłość.
flowCRANE
Nie ma problemu – w końcu jesteś tu dopiero jeden dzień. ;)
0

Angular jest bardziej "naturalnym wyborem" dla .NET'owca.

Akinwoktyzuawzan napisał(a):

Rozumiem... a tak teraz z innej beczki żeby nie zakładać nowego tematu... Czy dla .netowca bardziej przyszłościowe jest nauczyć się Reacta, czy Angular bedzie królował? Ja stawiam na Reacta bo mi się bardziej podoba ale chciałbym poruszyć tę kwestię i co o niej myślicie.

LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:minuta
  • Postów:8414
0

Czy (...) bardziej przyszłościowe jest nauczyć się Reacta, czy Angular bedzie królował?

Nie myśl o tym, co będzie przyszłościowe w kategoriach frontendu, bo w 2018 może zdobyć popularność jakiś inny framework. Więc okej, nauczysz się Angulara albo Reacta, to i tak będzie inwestycja krótkotrwała (we frontendzie okresowo się zmieniają frameworki i potem wszystko trzeba przepisywać na nowy bardziej modny framework). Chociaż myślę, że najbardziej przyszłościowe może być paradoksalnie nauka AngularJS (wersja 1.*), bo zawsze będą jakieś kobyły do utrzymywania z legacy kodem albo do przepisywania na jakiś nowszy framework.

(Tak ogólnie piszę o frontendzie, bo na trendach dot netowych to się nie znam).


edytowany 1x, ostatnio: LukeJL
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 8 godzin
0
somekind napisał(a):

Główny problem polega na tym, że fanatycy mylą krytykę z hejtem. Ktoś zwróci uwagę na prosty fakt jak np. to, że w JS jest wiele nieintuicyjnych konstrukcji, albo że Java nie ma generyków w runtime, i zaraz rzucają się na niego stada fanbojów wyzywając od hejterów.

Ja za to dodam, że trzeba odróżnić konstruktywną krytykę od zwykłego narzekania. Jak powiem, że w C# nie ma wielodziedziczenia to znaczy, że przez to C# jest upośledzony? Wymazywanie typów nie zachodzi tylko w Javie ale też np w Haskellu. Czy Haskell na tym traci?

Mechanika wokół słówka this jest podobna w C++, Javie, C# i innych popularnych językach obiektowych natomiast w JavaScripcie jest zupełnie odmienna. To mocno utrudnia pisanie poprawnego kodu ludziom nieprzyzwyczajonym do JavaScriptu, ale za to do innych języków obiektowych. Natomiast brak genericsów w runtime mi rzadko kiedy przeszkadzał. Jak dla mnie jest nawet plusem bo zmniejsza ilość okazji do (nielubianego przeze mnie) przeciążania metod. W zasadzie to w dużej mierze zgadzam się z tym gościem: https://stackoverflow.com/a/22667958


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit
Zobacz pozostałe 22 komentarze
Wibowit
@somekind: Nie rozumiem. To te generatory generują klasy, w sensie hierarchię klas? Myślałem, że chodzi o instancje klas produkcyjnych.
Wibowit
Generalnie, gdybym chciał testować klasy lub funkcje na losowo wygenerowanych danych to użyłbym biblioteki typu https://www.scalacheck.org/ Przykłady użycia np tutaj https://github.com/rickynils/scalacheck/blob/master/doc/UserGuide.md Dzięki ScalaCheck mogę sobie napisać np generator regularnych drzew binarnych albo np listę ruchów w szachach. Sam ScalaCheck ma opcję skracania przykładów na których testowana funkcja się wywala, a więc jeśli np pierwsza porażka jest dla wejścia "asdfsdfss" to ScalaCheck próbuje np losowo skracać ten ciąg. Prostsze dane łatwiej się analizuje.
somekind
Ja nie wiem co Wasze generatory generują, ale skoro można nimi zastąpić refleksję, to znaczy, że potrafią operować na kodzie jeszcze nie istniejącym. Dla przykładu - jak napisać narzędzie, które na podstawie grafu klas generuje SQLa tworzący odpowiadający schemat bazy danych. Dla mnie jest jasne, że trzeba użyć refleksji, ale jak rozumiem w Scali wystarczy kompilator. Dla mnie brzmi to jak kompletna magia.
Wibowit
Kompilator Scali pozwala pisać dla niego makra. Makro w skrócie to refleksja na etapie kompilacji. Makro przegląda struktury wewnątrz kompilatora i wypluwa dodatkowy kod w miejscu wywołania tego makra. Szczegóły tutaj: https://docs.scala-lang.org/overviews/macros/overview.html
Wibowit
Tak w ogóle makra to nie jest coś specyficznego dla Scali. Innym w miarę popularnym (czy tam zdobywającym szybko popularność) językiem z makrami jest Rust ( https://doc.rust-lang.org/book/first-edition/macros.html ). W przeciwieństwie do Scali Rust w ogóle nie oferuje refleksji w runtime. Mimo tego dzięki makrom działa serializacja do JSONa ( https://github.com/serde-rs/json ) czy integracja z bazami danych ( https://github.com/diesel-rs/diesel ).
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:Wrocław
0

Nie ma preferencji, część projektów pisze się w Angularze, część w Reakcie, część w jeszcze czymś innym.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)