Re: [討論] 請大家聊聊 JavaScript的缺陷

看板Soft_Job作者 (得理饒人)時間3年前 (2020/11/15 23:39), 3年前編輯推噓16(193104)
留言126則, 21人參與, 3年前最新討論串7/19 (看更多)
是說應該要定義什麼是好什麼是爛, 我是覺得啦, 能解決問題叫好, 不能解決問題叫爛. 但這就有一個操作空間, 就個人對語言的掌握程度/能力程度, 會影響到一個人對語言的判斷. 像是有人對直譯器(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
比如 new 的對象,有傳統 function this prototype 寫法
11/16 00:41, 3F

11/16 00:41, 3年前 , 4F
也有 ES6 後為了迎合物件導向而給的 class
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
當然不是用啥都行,稍有規模的公司都有coding style吧
11/16 01:30, 7F

11/16 01:31, 3年前 , 8F
為了style的一致性用舊語法寫應該是滿常見的
11/16 01:31, 8F
這其實還是回到團隊共識問題,正常來說,架構師會選擇對當時最適合的結構。 不一定是舊的也不一定是新的,舊 code 也能翻新,只是需要轉換過程。

11/16 02:21, 3年前 , 9F
我個人是覺得TypeScript目的是增加多人協作時的可維護性
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
要開發快速當然不要去搞什麼TS,但人多的時候欲速則不達
11/16 02:23, 12F
多人協作強調的是工作方法論跟模組切分的能力,用 TS 並不意味著你可以更好的做到這些事情。

11/16 02:37, 3年前 , 13F
推寫不好就怪工具
11/16 02:37, 13F

11/16 06:40, 3年前 , 14F
這篇可以被戰,就我所知人才不會去寫前端xd
11/16 06:40, 14F

11/16 06:44, 3年前 , 15F
聰明人不會浪費時間處理特例和例外。
11/16 06:44, 15F

11/16 07:40, 3年前 , 16F
當年寫jq的都去寫angular/react/vue了,哪年ARV三大會不
11/16 07:40, 16F

11/16 07:41, 3年前 , 17F
被別的技架(如webassembly)取代都不知道,也只能說,
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
sorry,打錯,是技術框架。:P
11/16 07:48, 20F

11/16 07:49, 3年前 , 21F
js是要編譯的喔
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
不只是單兵作戰,避免 antipattern 也應該考慮在語言能
11/16 07:58, 24F

11/16 07:58, 3年前 , 25F
力之中;講 js 有他的任務有歷史包袱無可厚非但我不覺得
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
我覺得ts 方便的點在於我們看到變數時我們知道他的資
11/16 12:03, 27F

11/16 12:03, 3年前 , 28F
料結構長怎樣,不然只能爬code然後console 看他吐出
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
讓世界的天氣照著天氣預報走」XDDXXD
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
當你在討論語言的時候,缺點/優點不能 imply 缺陷...
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
缺陷:不能表達某個在 System-F 中可以表達的 term/不能
11/16 16:07, 98F

11/16 16:07, 3年前 , 99F
deduce 某個 term 的 type/不能區分某兩個不同的 term..
11/16 16:07, 99F

11/16 16:07, 3年前 , 100F
.
11/16 16:07, 100F

11/16 16:07, 3年前 , 101F
just to be correct,我說的很多人意思是在那些不認同的
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
像是這篇很多人提到的 NaN 之類的問題不是都屬於缺陷的
11/16 16:28, 103F

11/16 16:28, 3年前 , 104F
部分嗎?
11/16 16:28, 104F

11/16 16:28, 3年前 , 105F
例如 NaN 屬於數字,意思就是它無法區分 NaN 和數字之間
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
說引入 cost 低所以缺陷都不存在,我想你也同意這點
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
唸過PL的人 在這邊幫沒念書的人上課 我是覺得白費力氣
11/17 00:41, 113F

11/17 00:42, 3年前 , 114F
你就讓他在他的世界活得好好的, 不是很好 他也不介意
11/17 00:42, 114F

11/17 00:49, 3年前 , 115F
那些複雜的Church-Turning, Curry-Howard 一點意義
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
你真的修過PL會不知道Curry–Howard–Lambek correspons.
11/17 10:14, 116F

11/17 10:14, 3年前 , 117F
帶來的意義? type = logic = catgory?
11/17 10:14, 117F

11/17 10:15, 3年前 , 118F
說啥type跟calc分開 你好像不知道他們就是等價的
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
不可否認JS爛是有背景因素啦 就是各家大廠對前端各懷鬼胎
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
想不到tonyQ大大還蠻懂css,沒flexbox的時代切版很累
11/17 14:24, 125F

11/20 08:44, 3年前 , 126F
推情境和要解決的問題是關鍵.
11/20 08:44, 126F
文章代碼(AID): #1ViKkc5p (Soft_Job)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 7 之 19 篇):
文章代碼(AID): #1ViKkc5p (Soft_Job)