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

作者: TonyQ (自立而後立人。)   2020-11-17 09:46:27
其實我覺得戰場大家自己拉開的亂七八糟,
我也不過就是逐一回覆,
autocomplete 我也說了根本不是語言的重點,
是其他人重視,這樣可以說你們在討論缺陷,
我在討論 autocomplete 我也覺得是有趣。
另外,其實我回文在討論的,還是應用上的優點跟缺點,
單論「程式語言學」的優點跟缺點,
weak type 跟 strong type 本來就是各有信徒,
這個我覺得再吵十年也不會有結果,
十年前這個爭論就在,十年後恐怕還是在。
另外有些人不懂我對轉譯耗損的看法,
我只能說大家沒經歷過不需要轉譯的年代,
認知基礎是有差別的。
轉譯的差別是,es6 在很多地方都已邁入原生支援,而 ts 則否。
目前轉譯除了 import 跟 react 的 jsx/tsx 需求以外,
很多東西是可以不靠轉譯的。
而 import 如果跑在 node ,
那就更不需要轉譯,我在看的是長線規格。
我還是那句話,
沒經歷過不需要轉譯的人,很難理解轉譯的耗損。
當然老古板被認為這是吹毛求疵,我也覺得可以理解。
ts 如果有一天可以進 ecma stanard ,或是 browser native support,
這件事情會很棒,但還遠的很。
(要說的話,更希望的是 import 在 web,
能有更穩定的實作,等了十年了不知道有沒有等到。
web standard 在 loading,
包括 http2 在內一直都很有野心,
但這題大家目前共識都是把成本花在前面一次打包,
我覺得這應該還是一個過度做法,總有一天會被改掉的。)
國外抨擊 typescrip 給 developer 有 false sense of security.
多數人無法反對,而且回到最後本質,
原因還是 developer mindset。
ts 無法幫助你本質上直接上升生產力,
就跟 VAR 也沒辦法讓你速成一個專案一樣。
當你要進入一個世界,
那個世界就是有著各種不同的問題。
typescript 讓你體會一種安全跟安心感,
但那種安全跟安心感,不是真實的。
換言之,要用 typescript 不用 typescript,
我覺得是無所謂,重點是 coding sense 。
覺得 typescript 寫起來比較爽,ok go。
但別忘了他本質還是 js ,不管strong type 看起來多漂亮,
當別人要打要摸要用的時候,終究還是會出問題。
另外當 ecma script 有新的 spec ,
世界有新的 move 時,要有點耐心跟上這個世界。
有些人對這個論點可能會覺得,
啊如果 js 跟 ts 都要學怎麼寫 code,
為什麼我要特別找 ts 麻煩。
因為,js 要學的東西,
包含 callback 包含 promise async await ,
包含 error handing,fetch or request ,
避免 magic number ,避免 bad code pattern 。
更高階的要處理記憶力耗損跟運算量瓶頸。
這些東西,都需要時間關注,
使用 ts 這類工具,有時候會給新手一個錯覺是,
我就跟著使用說明書走就好。
其實包括 VAR 在內都有這個問題。
提出這個問題會讓人覺得說,好像在說這些工具都不要用,
但說真的,我覺得真正重要的是,
拿掉這些輔助跟限制,
還能寫出穩定的程式碼準則( coding principle)。
因為語言層的轉換還是會很頻繁的,
今日你覺得 ts 好,或許明日他們覺得 dart 更好。
諸如此類。
幾個不同層次的命題要分開看:
1. team :
對於 team 來說,
share type definition 是不是一個有幫助的事情,是。
但定義 type 則是個耗損,
這兩個權衡過是不是有幫助的,
這取決於團隊的平均能力。
在團隊裡面,每個要做的事情都是耗損,
但別誤會,有耗損不代表不值得做,只是要計算結果。
舉例,如果在一個只是反覆使用既有工具的環境,
如只用某些已經支援 ts 的 VAR 等核心環境,
自己幾乎不需要寫類別跟操作,
那這種耗損降到最低,結果升到最大化,自然就很有幫助。
如我前文講的,
討論這事情要看要解決的問題是什麼。
這句話老是被忽略不知道是舉不了例子還是怎樣。
但 team & code 多到一個階段,
即使是 java 這種 strong type,
我就看過印度人還是可以寫出,
methld1~7 這種莫名其妙的定義的。
這些就得用 coding principle 來約束,
事實上程式碼準則比環境要求更值得學,
但討論度從以前到現在都很低。
在這個年代很多人覺得過 lint 就是有遵守準則,
但 lint 只能處理機器語意,不能處理閱讀語意。
這幾篇你會看到我對 ts 評論者的敵意,
主要在於,當我們主觀推崇 ts 是更好的語言。
一樣的事情發生在 VAR 上,
我們引誘新手去學習這些東西,用掉他們的專注力。
學到的卻不是讓程式碼寫的更好的技巧,
而是某些高負債高學習曲線的東西。
而那些讓程式碼寫的更好的技巧,
則被埋在這些學習過程裡面。
type 這回事對老人家來說,並不是什麼太大的問題,
我們是用自己對 application 的經驗補完這些認知。
yes , 要說新手沒有這種認知我同意,
但要對老人開我們無法掌握 type 的地圖砲,
我覺得好像也是有些太有自信。
對新手,我覺得 ts 或 js ,跟著 team 用就好,
但不需要 ts 有比 js 高人一等的錯覺。
大家在處理得還是 web 的 layout/event /traffic,
戰場是 browser ,不是 type 。
browser 上的鐵律就是包含引用在內,少寫一點程式碼就是快。
所以以前大家在挑核心引用都是千挑萬選,
只挑最核心的東西,不會多拿。
這年頭因為 VAR 引入的關係,
複雜度越來越高,coding base 也越來越肥,
我還是那句話,感覺不到代價不代表代價不存在。
一個專案會多到 type 是個問題,
就過去經驗,通常是複雜度已經到真的太高的程度了。
這是一種天然的抑制器。
而這種時候通常我的目標會是降低複雜度,
來讓需要記得的事情比較少。
js 世界最煩的事情是,
前面無腦寫的爽,往往後面都是火葬場。
每一個函式把上下游看清楚,
記在心理,本來就很重要。
總之,要用不用是個人選擇,但凡事都有代價。
這裡的討論真是越來越無趣了,
都是精神論等級的,
「我用了 ts 以後,團隊的 quality 都覺得好一點了呢!」。
好好的就案例範圍分析適用性不是很好嗎?
反正黑的人就黑,反黑的人就反黑,文章會高來高去是因為,
沒有對手可以讓我們捉對廝殺進入具體的案例探討。
如果覺得沒有人看得懂,寫細節又何必?
反過來說,支持 ts 的又在這串中寫了什麼?
反駁的也都是軟趴趴的,前面拿 double 反駁的更是笑話。
作者: stopcrying (賣考)   2020-11-17 10:00:00
ts並不阻礙人學習你認為重要的哪些技能,不提那些奇怪陌生學術名詞,型別系統反映了一種拆解問題的思路ㄚ,有型別沒有型別的語言都要會,怎麼可以吵那麼多篇
作者: testPtt (測試)   2020-11-17 10:11:00
搞不好以後web不再傳文字html,js全部不支援
作者: alihue (wanda wanda)   2020-11-17 10:19:00
作者: CoNsTaR ((const *))   2020-11-17 10:26:00
我通篇看下來,你除了講話大聲態度強硬和敢操弄語氣嘲諷人以外論點和打太極拳胡扯有什麼兩樣?東扯西西扯東,最後再總結 js 沒問題 js 好棒棒自己這樣扯都不會心虛嗎?
作者: dreamnook (亞龍)   2020-11-17 10:27:00
支持ts的感想真的就是單純減少火葬場…XD
作者: alihue (wanda wanda)   2020-11-17 10:32:00
討論到最後就是貶低別人 認為自己才是真理 沒必要認真跟你討論
作者: strlen (strlen)   2020-11-17 10:39:00
沒有 今天是因爲主角是JS才戰得起來 換成python Java c++是沒什麼人要戰的 每個語言當然都有缺點跟弱項 但JS真他媽太扯
作者: lturtsamuel (港都都教授)   2020-11-17 10:41:00
vue跟angular都不用轉譯嗎 在三框架出來前大家難道都不做uglify嗎
作者: strlen (strlen)   2020-11-17 10:45:00
那你發一篇s/g有什麼缺陷啊 肯定沒人理你 因為沒人用 哈
作者: lturtsamuel (港都都教授)   2020-11-17 10:56:00
angular在html寫一堆js你跟我說成本比較少...?
作者: ldkrsi (衰神)   2020-11-17 10:57:00
因為提到了現代programmer的政治不正確的點 所以反彈特別大wwwwww
作者: lturtsamuel (港都都教授)   2020-11-17 10:58:00
我以為重點是轉譯製造的複雜度和設置成本 開發途中其實增量編譯都不會多慢 你專案如果大的增量編譯還慢到靠北 那是你專案架構的問題 不會因為捨棄react就變好
作者: for5566 (Yo)   2020-11-17 11:06:00
程式語言的發展方向就是往把成本損耗轉到機器上讓開發者更容易用的方向走啊,一直在講轉譯耗損怎麼不會去寫組合語言?或直接2進位,保證耗損最低
作者: BoXeX (心愛騎士團異端審判騎士)   2020-11-17 11:07:00
其實就前端被強迫用js 爭議才那麼大 就算用啥ts的也不可能不學js 所以討厭js的我直接不寫前端 完美
作者: testPtt (測試)   2020-11-17 11:10:00
我直接學blazor
作者: yeurus (yeurus)   2020-11-17 11:21:00
而且還說大家都沒經歷不需要轉譯的時代,哪來的自信?不需要轉譯的時代不就搞了個jQuery來解決API不相容問題在,現在jQuery呢?
作者: x123356 (x123356)   2020-11-17 11:35:00
JS很爛(X) 爛的人寫什麼語言都爛(O)
作者: yeurus (yeurus)   2020-11-17 11:36:00
你是看不懂嘲諷?不需要轉譯的jQuery這麼好,怎麼大家都不繼續用?現在三大frameworks哪個是不需要轉譯的?而且處理API相容性問題主流也變成babel了
作者: x123356 (x123356)   2020-11-17 11:36:00
以為強型別語言就都沒事的人真的滿幸福的
作者: strlen (strlen)   2020-11-17 11:40:00
就是不是沒事 大家都有事 JS事特多
作者: iterator (rotareti)   2020-11-17 11:57:00
若在80年代,比起C語言,你應該是大聲疾呼組合語言那派的若在90年代,比起C++,你應該是大聲疾呼C語言那派的..
作者: meowyih (meowyih)   2020-11-17 12:03:00
雖然你叫人咬你, 但網路上咬不到, 所以噓一個, 說真的你是不是真的太閒了啊? 一頁15篇文有5篇是你的 = =a
作者: king22649   2020-11-17 12:21:00
最近確實很頻繁
作者: iterator (rotareti)   2020-11-17 12:26:00
那時候也都有類似的說法, 其實是差不多的.當然論點也都有他的理由, 也的確都說得通
作者: superpai (超級白)   2020-11-17 12:29:00
編譯時間你買 M1 就沒了,根本不需要在意
作者: stopcrying (賣考)   2020-11-17 12:30:00
不幸身為全能接盤俠,legacy js code 清不完,薪情沒你好,下班還要自修 PL ,哪有時間寫文章 lol
作者: gn01838335 (寂靜的生存者)   2020-11-17 12:56:00
我覺得你的損耗論點要不要補充一下。你很多是主觀認定,並非軟體工程類的認知。人月神話,軟件工程之類的都和你相反重構這本書也是
作者: CoNsTaR ((const *))   2020-11-17 13:32:00
要你提出論點什麼都講不出來,反而反過來要別人舉例這不是 csfgsj 的招式嗎?你怎麼可以偷用可能我資質駑鈍,只看到自說自話從東講到西又講回東,觀察舉證分析結論通通沒看到,大概是我的問題吧 Q
作者: s106667 (PHPJQJS)   2020-11-17 18:35:00
作者: samuel1988 (小羊快跑啊)   2020-11-17 19:24:00
重構就很大部分強調type的重要性你把type當耗損論點哪來的?
作者: Lushen (wind joker!!!)   2020-11-18 10:04:00
還小的時候覺得你蠻厲害的到 30 以後的表現還是只有自己休學可以拿來說嘴以自我為中心的人 QQ問題從來不是你爽就好 事實就是需要團隊合作你寫 JS 很久可以熟各種 best (坑) practice 好棒棒重點是你很難短時間教會一個新人所有 JS 遺留下來的坑TS 的編譯器可以教你做人 帶團隊這麼久還不明白(?
作者: pttworld (批踢踢世界)   2020-11-18 10:35:00
下面幾篇谷歌臉書微軟文跟這裡比較真是諷刺啊
作者: stopcrying (賣考)   2020-11-18 12:59:00
欸,你崇拜的 capita 在學 Rust 、跟青年人打成一片,你在這裡跟人戰工具與慣例,還要抓圖曬在 fb
作者: alihue (wanda wanda)   2020-11-18 19:12:00
你的回應一直貶低別人和硬凹不就超有格調?
作者: lemontea0328 (魔幻檸檬)   2020-11-19 01:37:00
JS很爛(X) 爛的人寫什麼語言都爛(O)
作者: dophin332 (...)   2020-11-20 09:27:00
謝謝分享

Links booklink

Contact Us: admin [ a t ] ucptt.com