有一些技術(shù)觀點,如果要一一細(xì)說,只怕得搞出幾萬字來,所以趁著春節(jié)放假,先寫個概要出來,不打算仔細(xì)說,否則肯定寫不完,又弄成虎頭蛇尾的東西了。
一、相對于后端,前端是幸運的
后端的系統(tǒng),運行的花銷,是老板掏錢。前端的系統(tǒng),運行的花銷,是用戶自己的電費和硬盤。目前的計算機(智能手機)已經(jīng)足夠強大,使得大多數(shù)用戶,都不太在乎執(zhí)行效率、網(wǎng)絡(luò)傳輸、空間占用之類的問題(大型游戲除外)。尤其是在瀏覽器中運行的程序,現(xiàn)在的網(wǎng)絡(luò)速度那么快,加載幾百K的js,簡直就是一眨眼的功夫。雖然還是會有人去優(yōu)化、壓縮js的大小,其實主要還是出于對服務(wù)器壓力的考慮。
為什么就說前端幸運呢?因為后端掌握在公司自己手里,所以會考慮各種選擇,比如后端的操作系統(tǒng)、硬件配置、語言選擇、框架與類庫等等等,排列組合,簡直有幾十萬種選擇。
而對于前端來說,唯一的選擇就是HTML+CSS+JavaScript,而且考慮到很多用戶,從來不會升級自己的瀏覽器,前端開發(fā)也不必(不該、不能)專門發(fā)揮某種特定瀏覽器的特長。 btw:JS這種語言,地位事實上無可動搖。
另一方面,也可以認(rèn)為前端還是很不幸的。因為:后端的優(yōu)劣標(biāo)準(zhǔn)已經(jīng)很明確了,單臺服務(wù)器的負(fù)載能力,多臺服務(wù)器的平行擴展能力,系統(tǒng)的穩(wěn)定性、可靠性,都是可以有確切的量化指標(biāo)的。對于老板來說:同樣的訪問量,他需要花費的成本是否合理,能不能更加減少,這是硬指標(biāo)。
因此,雖然后端系統(tǒng)看起來花樣繁多,其實架構(gòu)模式、最佳實踐,都已經(jīng)相當(dāng)成熟,現(xiàn)在新出現(xiàn)的容器化浪潮,也不過是在省錢、省電的道路上,更進(jìn)一步而已。
但是,前端的優(yōu)劣,現(xiàn)在還沒有什么特別剛性的標(biāo)準(zhǔn)。公說公有理婆說婆有理,說起花樣繁多,后端完全自愧不如。前端工程師疲于奔命,也是難免的。當(dāng)然,亂世出英雄,也不能說完全是不幸。
二、對于Ruby而言,成也Rails,敗也Rails
沒有rails,ruby大概只會是一門和Java同樣古老,卻始終默默無聞的語言。但是由于rails的火爆,很多人開始關(guān)注并喜歡上ruby這門優(yōu)秀、優(yōu)雅、但是運行效率卻不夠快的語言。
而且,在硬件高速發(fā)展的時代,語言、框架慢一點,似乎也并不要緊,再過18個月,新的服務(wù)器就會解決所有性能問題。
但是,隨著后端發(fā)展大潮的日趨明確,云計算和容器化的興起,榨干服務(wù)器的每一滴性能,成為語言和框架的使命。不能很好的契合這一使命的技術(shù),就會變成事實上落后于時代的技術(shù)(即使我們依然喜歡)。
如果展開討論,實在是要說太多,就一句話吧:Rails并沒有什么跡象,考慮對docker的支持。而且,要讓rails對docker有很好的支持,需要在架構(gòu)層面,做天翻地覆的改造。但是這對于一個誕生接近12年的框架,幾乎不可能。
也許,最理想的期望是:ruby社區(qū)誕生一個更好的框架,能夠更加完美的支持容器和微服務(wù)的架構(gòu)。
三、對于后端來說,node.js的潮流會過去的
這個話一出,估計就會有很多人不同意了,比如非常了解我的朋友:雪愚現(xiàn)在就一心認(rèn)為nodejs非常有前途。
就像我在上一篇文章里說的:“后端開發(fā)...真正需要解決的問題,都不是語言層面的,也不是前端知識領(lǐng)域的。一個曾經(jīng)的后端程序員,能夠用好nodejs。一個專攻前端的程序員,其實用不好nodejs?!?/p>
對于后端有好奇心的前端程序員,他們在到達(dá)某種階段時,難免會出現(xiàn)力不從心的現(xiàn)象。而對于一個有著豐富經(jīng)驗的后端程序員來說:其實他們現(xiàn)在有了更好的選擇——“go”。因此,我的判斷是:node.js的潮流會過去的。
四、對于前端來說,TypeScript只是又一個微軟發(fā)明的攪局語言而已
“還記得VBScript,JScript,J++,J#嗎?為何我對TypeScript保持警惕,就是因為前面這些技術(shù)。 ”
這是我在微博上寫的一段話。微軟曾經(jīng)發(fā)明過很多攪局性的語言,目標(biāo)都是為了挑戰(zhàn)當(dāng)時市場上的事實標(biāo)準(zhǔn)——然而,始終沒有成功過。
在上一篇文章里,很多人因為這個觀點,和我爭論,我也不打算再仔細(xì)表述,立此存照吧。
五、語言看起來層出不窮,其實卻越來越像了
還是不打算細(xì)說,那些編程語言的特性,其實在不同的語言之間,正在不斷的互相借鑒,在實際編程實踐中,各種語言特性,也在不斷的經(jīng)受檢驗,然后互相學(xué)習(xí)。
然后,語言的選擇,很多時候就是“偶然+品味+偏好+誤會”的結(jié)果,幾乎很難有啥對錯。比如說:我曾經(jīng)因為go語言的fmt,感覺不爽,就一直沒有下決心開始學(xué),現(xiàn)在想來,也有些后悔。
六、比起語法特性,語言的生態(tài)圈更加重要
其實,我一直認(rèn)為類似于gem、bundler、npm、maven、pip之類的包管理工具,是構(gòu)筑編程語言生態(tài)圈的關(guān)鍵設(shè)施。
語言在Github開源+依托網(wǎng)絡(luò)的包管理工具+所有包也在Github,基本上,現(xiàn)代編程語言,都在走這條路。至于優(yōu)劣高下,完全取決于生態(tài)圈的健康繁榮程度了。
《開源也要講注意力經(jīng)濟(jì)》,學(xué)會運營社區(qū),非常重要。