別被前端框架 PUA 了!
近日,有網(wǎng)友在社交平臺(tái)表示:React 新文檔寫(xiě)的很棒,把使用 React 過(guò)程中的許多坑都列舉出來(lái)了,非常直觀。對(duì)此,Vue 作者尤雨溪也發(fā)表了自己的看法。
圖片
Vue、Vite 的作者尤雨溪表示:
一個(gè)框架挖下許多艱深復(fù)雜的坑,然后不填這些坑,而是靠文檔去解釋如何繞開(kāi)這些坑。用戶看了不但不質(zhì)疑為什么這些坑有存在的必要,反而擊節(jié)贊嘆文檔寫(xiě)得太好了。雖然 Dan 的文檔寫(xiě)得確實(shí)不錯(cuò)… 但這心態(tài)真不是被框架 PUA 了嗎?
Vue 也難免有坑,但我如果看到用戶以知道怎么繞開(kāi) Vue 的坑而得意,我心里是很羞愧的,因?yàn)槲矣X(jué)得框架應(yīng)該努力去減少心智負(fù)擔(dān)而不是讓用戶去研究回字有幾種寫(xiě)法。
往更高一點(diǎn)的層面說(shuō):當(dāng)然可以 argue 心智負(fù)擔(dān)存在于不同的抽象層次,內(nèi)在復(fù)雜度總量不變,React 的日常心智負(fù)擔(dān)是為了解決更高層面的問(wèn)題,simple !== easy 等等… 但事實(shí)上絕大部分人相信這些的原因也無(wú)非是“既然 react 團(tuán)隊(duì)這么做了一定有他們的理由?!?/p>
這里就不得不說(shuō) React 最成功的地方在于塑造了一種幾近于 cult 的凝聚力,在長(zhǎng)期 over-promise & under-deliver 的情況下依然能讓大量用戶相信它沒(méi)有在一個(gè)錯(cuò)誤的方向越走越遠(yuǎn)。典型的例子在于當(dāng)其理念和宿主語(yǔ)言不合時(shí),用戶會(huì)責(zé)怪語(yǔ)言不力而不是 react 在不合適的語(yǔ)言上霸王硬上弓。
需要強(qiáng)調(diào)的是我一點(diǎn)也不否認(rèn)早期的 react 帶來(lái)的開(kāi)創(chuàng)性和其社區(qū)強(qiáng)大旺盛的創(chuàng)造力,正是這兩點(diǎn)讓 react 擁有了現(xiàn)在的一切。我只是覺(jué)得有些用戶們給予了今天的 react 過(guò)分的信任和寬容。
有人說(shuō):
我們每天用那么多 framework 和 library,這些都是認(rèn)知的負(fù)擔(dān)。當(dāng)某一個(gè)領(lǐng)域的心智負(fù)擔(dān)膨脹到如此之大,連官方文檔都需要把這些“技巧”作為框架知識(shí)體系一部分傳授給新人的時(shí)候,你不可能再靠這個(gè)框架對(duì)抗復(fù)雜性了。
要讓事物簡(jiǎn)化,就必須有所取舍。這就意味著為了獲得更大的價(jià)值,你需要放棄一些本身也很有價(jià)值的東西。沒(méi)有犧牲,就無(wú)法應(yīng)對(duì)復(fù)雜性。這正是概念壓縮(conceptual compression)的核心所在。
說(shuō)直接點(diǎn),多學(xué)習(xí)框架無(wú)關(guān)的知識(shí),多嘗試一些新的范式,多接觸一些其他框架(比如 Vue),就不會(huì)被某個(gè)框架綁架。然后,通過(guò)消滅復(fù)雜性的方式,解決復(fù)雜性暴漲的問(wèn)題。
我并不是說(shuō) React 不好,相反,我也是 React 用戶。
我嘗試了大部分流行框架,比如 svelte、vue、angular、emberjs、htmx 等。我感覺(jué),對(duì)我來(lái)說(shuō),最順手的還是 React。因?yàn)槲也惶?xí)慣在 html 里面寫(xiě)那些 directive。使用 Js 生成 Html 最符合我的習(xí)慣。
我想表達(dá)的是:
- 在 web 開(kāi)發(fā)中,不能被流行所綁架。當(dāng)我們了解一個(gè)事物的來(lái)源之后,就不會(huì)迷信。這就是為什么我在用 Rails+hotwire 做新項(xiàng)目,我想嘗試不使用 React 做出來(lái)同樣或者接近的效果。
- 框架開(kāi)發(fā)者應(yīng)該致力于減輕使用者認(rèn)知負(fù)擔(dān)。所以我更推薦 remix 而不是 nextjs。
有人說(shuō):
有些時(shí)候,無(wú)法避免的問(wèn)題其實(shí)是違反了設(shè)計(jì)的初衷。就像有些人喜歡把扳手當(dāng)錘子來(lái)使用,但我們不能因此就把扳手設(shè)計(jì)得更像一個(gè)錘子。像截圖中的問(wèn)題并不需要在框架層面去解決,因?yàn)檫@樣的解決方案往往會(huì)增加不必要的復(fù)雜性,從而讓框架產(chǎn)生許多意料之外的行為
有人說(shuō):
有道理,以前vue2和react都用得比較多,感覺(jué)react比vue2更靈活一些,當(dāng)然心智負(fù)擔(dān)也會(huì)更重,現(xiàn)在在用vue3,感覺(jué)對(duì)于使用者來(lái)說(shuō),相比于react的靈活性,大幅降低的心智負(fù)擔(dān)比靈活性要更實(shí)用的多
總結(jié):
首先,對(duì)于框架的設(shè)計(jì),其核心目標(biāo)應(yīng)該是提供一種簡(jiǎn)單、直觀的方式來(lái)幫助開(kāi)發(fā)者解決他們的問(wèn)題,而不是給開(kāi)發(fā)者制造更多的麻煩。正如尤雨溪所說(shuō),一個(gè)好的框架應(yīng)該努力減少用戶的心智負(fù)擔(dān),而不是讓他們?nèi)パ芯咳绾伪荛_(kāi)框架自身的問(wèn)題。
然而,框架的復(fù)雜性是一個(gè)無(wú)法避免的問(wèn)題。在提供更多功能和靈活性的同時(shí),框架必然會(huì)帶來(lái)更高的學(xué)習(xí)曲線和更多的心智負(fù)擔(dān)。因此,如何平衡簡(jiǎn)單性和功能性,是每一個(gè)框架都需要面臨的挑戰(zhàn)。
對(duì)于用戶來(lái)說(shuō),他們需要的不僅僅是一個(gè)好用的工具,更需要的是一個(gè)能夠幫助他們解決問(wèn)題的方案。因此,對(duì)于一些違反框架設(shè)計(jì)初衷的行為,有時(shí)候我們并不能簡(jiǎn)單地指責(zé)用戶。相反,作為框架的開(kāi)發(fā)者,我們應(yīng)該更多地思考如何通過(guò)改進(jìn)框架的設(shè)計(jì),使得用戶能夠更自然、更直觀地使用我們的工具。
此外,對(duì)于一些無(wú)法避免的復(fù)雜性,我們可以通過(guò)提供更好的文檔和教程來(lái)幫助用戶理解和使用我們的工具。但是,這并不意味著我們可以把所有的問(wèn)題都推給用戶自己去解決。作為開(kāi)發(fā)者,我們有責(zé)任為用戶提供一個(gè)簡(jiǎn)單、有效的解決方案,而不是讓他們自己去探索如何避開(kāi)框架的問(wèn)題。
總之,一個(gè)好的框架應(yīng)該盡可能地減少用戶的心智負(fù)擔(dān),提供簡(jiǎn)單、直觀的解決方案,同時(shí)也要允許用戶有一定的定制化和擴(kuò)展性。作為開(kāi)發(fā)者,需要不斷地反思和改進(jìn)工具,以便更好地滿足用戶的需求。