Re: [討論] 請大家聊聊 JavaScript的缺陷
是說應該要定義什麼是好什麼是爛,
我是覺得啦, 能解決問題叫好, 不能解決問題叫爛.
但這就有一個操作空間, 就個人對語言的掌握程度/能力程度,
會影響到一個人對語言的判斷.
像是有人對直譯器(interpreter) 的理解不夠,
對 contract based 的程式邏輯掌握度不夠.
所以騎個腳踏車還需要裝兩個輪子(TS/TSX)在旁邊輔助, 才能正常寫程式.
這是能力的問題.
但雖然裝輔助輪慢了點, 久了總是會到終點了, 歡喜甘願就好.
當然, 自古以來許多人能力不好就怪環境不好,
這自然是可以理解的, 但這種情況要互相討論, 可能就有點高處不勝寒了.
動態語言跟強型別語言本來從開發工作,
開發方法, 工作做法都會不一樣,
拿十字鍬去伐木, 砍不斷樹是自然的.
所謂的缺點跟優點是相對於要解決的問題的,
就以控制 dom event, render html/css , 發起請求等來說, 他已經夠好了.
該有的語法特色都有, 喜歡 class 的也終於在 ES6 邁向皆大歡喜.
主流的 async 處理方針, async/await 也都在ES7 都跟上了.
如果我們今天說的是十年前, CORS 還沒發展好, fetch 不完整,
display 還沒好好的實裝, float 還很難用沒有 flexbox 的年代.
要說的話就是要引用的基礎類別有點多, 計算量有點大.
當年還要面對 js interface 不統一的問題 (該死的 document.all ),
而且當時還要引入 jQuery 才有 selector.
但到這個年代,早期最被詬病的那些問題早就都有解法,
要討論優點跟缺點, 要同時把要解決問題拉出來談, 不然這都是瞎談.
不然直接說一句 js 要移殖 c++ 程式很難寫, 大家就散會就好.
(啊 其實也有 wasm 可以用啦)
每個語言都有他的樣態跟生態, 跨語言比較的盲點就在,
你會其中一個, 但你不會另一個啊.
你不懂得理解兩個不同的語言的差異之處啊.
程式只是工具, 人才是決定 code 是不是垃圾的載體.
--
網頁上拉近距離的幫手 實現 GMail豐富應用的功臣
數也數不清的友善使用者體驗 這就是javascript
歡迎同好到 AJAX 板一同討論。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.231.44.97 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1605454758.A.173.html
※ 編輯: TonyQ (61.231.44.97 臺灣), 11/15/2020 23:40:16
推
11/16 00:15,
3年前
, 1F
11/16 00:15, 1F
推
11/16 00:40,
3年前
, 2F
11/16 00:40, 2F
→
11/16 00:41,
3年前
, 3F
11/16 00:41, 3F
→
11/16 00:41,
3年前
, 4F
11/16 00:41, 4F
→
11/16 00:42,
3年前
, 5F
11/16 00:42, 5F
→
11/16 00:42,
3年前
, 6F
11/16 00:42, 6F
基本上看 code 寫的乾不乾淨,如果寫的乾淨清楚,用啥都行。
寫不乾淨就別跟我談什麼套件語法,
好好練基本功吧。
組織函式,組織功能,訂好介面是所有語言必要的項目。
syntax 是用來幫助這些事情的,不是拿來當藉口的。
※ 編輯: TonyQ (61.231.44.97 臺灣), 11/16/2020 01:16:38
→
11/16 01:30,
3年前
, 7F
11/16 01:30, 7F
→
11/16 01:31,
3年前
, 8F
11/16 01:31, 8F
這其實還是回到團隊共識問題,正常來說,架構師會選擇對當時最適合的結構。
不一定是舊的也不一定是新的,舊 code 也能翻新,只是需要轉換過程。
→
11/16 02:21,
3年前
, 9F
11/16 02:21, 9F
→
11/16 02:22,
3年前
, 10F
11/16 02:22, 10F
→
11/16 02:22,
3年前
, 11F
11/16 02:22, 11F
→
11/16 02:23,
3年前
, 12F
11/16 02:23, 12F
多人協作強調的是工作方法論跟模組切分的能力,用 TS 並不意味著你可以更好的做到這些事情。
推
11/16 02:37,
3年前
, 13F
11/16 02:37, 13F
→
11/16 06:40,
3年前
, 14F
11/16 06:40, 14F
→
11/16 06:44,
3年前
, 15F
11/16 06:44, 15F
→
11/16 07:40,
3年前
, 16F
11/16 07:40, 16F
→
11/16 07:41,
3年前
, 17F
11/16 07:41, 17F
→
11/16 07:41,
3年前
, 18F
11/16 07:41, 18F
→
11/16 07:42,
3年前
, 19F
11/16 07:42, 19F
→
11/16 07:48,
3年前
, 20F
11/16 07:48, 20F
→
11/16 07:49,
3年前
, 21F
11/16 07:49, 21F
interpreter 那段是要討論 js 是有機會從 runtime 再塞東西進來的,在一些情境下,這是個要留意的特點。
推
11/16 07:57,
3年前
, 22F
11/16 07:57, 22F
→
11/16 07:58,
3年前
, 23F
11/16 07:58, 23F
→
11/16 07:58,
3年前
, 24F
11/16 07:58, 24F
→
11/16 07:58,
3年前
, 25F
11/16 07:58, 25F
→
11/16 07:58,
3年前
, 26F
11/16 07:58, 26F
again ,這是相對於目標的。如果我們今天談的是 ui handling ,放眼望去在所有語言(如 windows form or android),要處理 dsp 跟 requesting,同時不 block UI thread ,這些都是複雜的。
如果單談可以快速寫個 for 或 資料處理,純語言面特性。
我還真沒看過有人嫌 js 難上手的,畢竟不用裝複雜的環境,語法內建就靈活,array 就能當 list 用還不需要定義長度。
object 內建就是 map。
js 談的就是好寫,被靠北的多是 async 的複雜度跟 error handling ,
async 是相對於 ui 的需求,
error handling 其實不是做不到,該有的語法都有,
但我覺得本質上就是語法特性太好寫,大家根本懶得寫 error handling 。
所以要說 js 的學習成本高,
很多人都會說一些特別比較不好懂。
但說真的,寫這麼久 js ,
真的要用到那些不好懂的東西還真的少。
所以,好歹定義一個情境他解題起來,比其他語言差吧。
我剛有想到一個啦,他的 reduce api 開爛了,在拿來對 collection 拿來做加總之類操作時,實在是很難寫。
不過可以用別的簡單方法替代,就是有點鳥。
寫久了對他哪邊好哪邊不好,自然會很清楚。
另外只要你倚賴語言,所有語言都有 antipattern,要避免 antipattern 靠的是對「情境」的瞭解。
也是我這篇在強調的,你不能把語言跟工具脫離於情境。
ex. Lua 我寫過覺得不是個好寫的語言,但他在 game 曾經有過輝煌的歲月。
有些 dsl 被創造出來是有其目的跟意義的,這不是任務跟歷史價值,而是他的需求。
也不用拿著一把刀解決所有的問題,要用適當的工具解決適當的問題。
※ 編輯: TonyQ (114.136.69.202 臺灣), 11/16/2020 09:04:29
※ 編輯: TonyQ (114.136.69.202 臺灣), 11/16/2020 09:05:51
※ 編輯: TonyQ (61.231.44.97 臺灣), 11/16/2020 09:16:57
※ 編輯: TonyQ (61.231.44.97 臺灣), 11/16/2020 09:22:04
→
11/16 12:03,
3年前
, 27F
11/16 12:03, 27F
→
11/16 12:03,
3年前
, 28F
11/16 12:03, 28F
→
11/16 12:03,
3年前
, 29F
11/16 12:03, 29F
問題是你沒辦法讓整個世界照 ts 的規矩走,
而且還有 any 的存在, 這只是個不會到達的理想國.
而且即使他宣稱是這個結構, 實務上他還是可以傳入不是這個結構的程式給你.
噓
11/16 14:01,
3年前
, 30F
11/16 14:01, 30F
→
11/16 14:01,
3年前
, 31F
11/16 14:01, 31F
所以你每天早上都看天氣預報決定自己要做什麼反應嗎?
選用基礎環境工具意味著你每件事情都不得不參考他,
你幹嘛花這麼大的代價綁住自己只為了一個看不見的餅.
這就跟當初 java 體系一堆人跑去搞 scala/groovy, 因為不喜歡 java的一些特性,
有些人會寫的很爽, 我不反對, 事實上也是.
但他們要紅就得自己去感染世界,
而不是宣稱在原本世界的人都是蠢人吧. 誰蠢都還有得討論咧.
拿出情境, 拿出案例, 講清楚哪個案例他更有優勢,
如果你覺得自己可以完全不學 js, 只在 ts 世界度過一輩子, 那ts 肯定很適合你.
但如果你得回到 js 世界, 恭喜你, 你學習成本一定大於只學 js 的人.
※ 編輯: TonyQ (210.61.209.201 臺灣), 11/16/2020 14:10:20
推
11/16 14:16,
3年前
, 32F
11/16 14:16, 32F
還有 62 則推文
還有 8 段內文
有人, 不等於很多人.
反過來, 也有人支持我的 claim.
另外我沒宣稱 ts 是不好的, 我說的是他有他適合的用途, 也有他的問題.
cost 低當然是一個優點, cost 高就是一個缺點, 為什麼不能說,
你的邏輯看起來充滿著選擇性呢.
※ 編輯: TonyQ (210.61.209.201 臺灣), 11/16/2020 16:00:03
推
11/16 16:07,
3年前
, 95F
11/16 16:07, 95F
→
11/16 16:07,
3年前
, 96F
11/16 16:07, 96F
→
11/16 16:07,
3年前
, 97F
11/16 16:07, 97F
→
11/16 16:07,
3年前
, 98F
11/16 16:07, 98F
→
11/16 16:07,
3年前
, 99F
11/16 16:07, 99F
→
11/16 16:07,
3年前
, 100F
11/16 16:07, 100F
→
11/16 16:07,
3年前
, 101F
11/16 16:07, 101F
→
11/16 16:07,
3年前
, 102F
11/16 16:07, 102F
說真的, i don't care what you think.
推
11/16 16:28,
3年前
, 103F
11/16 16:28, 103F
→
11/16 16:28,
3年前
, 104F
11/16 16:28, 104F
→
11/16 16:28,
3年前
, 105F
11/16 16:28, 105F
→
11/16 16:28,
3年前
, 106F
11/16 16:28, 106F
→
11/16 16:28,
3年前
, 107F
11/16 16:28, 107F
→
11/16 16:28,
3年前
, 108F
11/16 16:28, 108F
沒用到就不算是缺陷.
就跟我們不會說菜刀砍不了樹, 電鋸切不了魚是缺陷一樣.
NaN 搭配 isNaN 來說有他的用法,
也可以考慮在 parse 之前先做檢查.
NaN 是不是個問題也要看前後文.
我不會說缺陷不存在, 但重點是你想拿他來做什麼.
另外我也沒有想討論有沒有缺陷, 我想討論的是,
在討論這些缺陷之前, 我們要解決的問題跟這些缺陷到底有沒有關係.
※ 編輯: TonyQ (210.61.209.201 臺灣), 11/16/2020 16:34:58
→
11/16 17:00,
3年前
, 109F
11/16 17:00, 109F
推
11/16 21:40,
3年前
, 110F
11/16 21:40, 110F
→
11/16 22:52,
3年前
, 111F
11/16 22:52, 111F
噓
11/17 00:23,
3年前
, 112F
11/17 00:23, 112F
這麼說也沒錯啊,這輔助輪棒的呢。
推
11/17 00:41,
3年前
, 113F
11/17 00:41, 113F
→
11/17 00:42,
3年前
, 114F
11/17 00:42, 114F
→
11/17 00:49,
3年前
, 115F
11/17 00:49, 115F
我 2006 年就修過 PL 了,但這串到底誰在談 PL 啊,靠北,PL 是這樣談的嗎? XD
※ 編輯: TonyQ (61.231.44.97 臺灣), 11/17/2020 10:09:40
※ 編輯: TonyQ (61.231.44.97 臺灣), 11/17/2020 10:10:31
推
11/17 10:14,
3年前
, 116F
11/17 10:14, 116F
→
11/17 10:14,
3年前
, 117F
11/17 10:14, 117F
→
11/17 10:15,
3年前
, 118F
11/17 10:15, 118F
啊我沒講的東西,你要假設我不會我是沒意見,PL 一個三學分的課我確實只修了些該學的。
但你可以不要罵錯我沒講的東西嗎?
我可從來沒否定型別的價值,我只是在意成本。XDDDD
推
11/17 10:22,
3年前
, 119F
11/17 10:22, 119F
※ 編輯: TonyQ (61.231.44.97 臺灣), 11/17/2020 10:26:25
→
11/17 10:30,
3年前
, 120F
11/17 10:30, 120F
→
11/17 10:30,
3年前
, 121F
11/17 10:30, 121F
→
11/17 10:32,
3年前
, 122F
11/17 10:32, 122F
→
11/17 10:32,
3年前
, 123F
11/17 10:32, 123F
→
11/17 10:32,
3年前
, 124F
11/17 10:32, 124F
倒也沒有要說 js 沒有爛的部分,看大老那本 js the good part 的人都不會反對js 有爛的部分。為了 js 強說讚的大老很多,我們大腿抱緊包好。
只是 ts 是不是解決 js 爛的方法,抱著問號而已。
※ 編輯: TonyQ (61.231.44.97 臺灣), 11/17/2020 10:38:03
推
11/17 14:24,
3年前
, 125F
11/17 14:24, 125F
推
11/20 08:44,
3年前
, 126F
11/20 08:44, 126F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 7 之 19 篇):