從實踐上來說, 我最近在考慮清除掉Java的依賴. 盡管Java現(xiàn)在仍然是最流行的平臺, 我也是通過學(xué)Java開發(fā)進入技術(shù)領(lǐng)域的. 但是先不說繁瑣的語法和龐大的類庫, 光是JVM的內(nèi)存占用和啟動速度就很讓人心煩. 很多人會說內(nèi)存便宜, 但是真要買的時候就不一定是那么回事了, 看看網(wǎng)上云服務(wù)器的價格, 想要比較便宜實惠的基本就是1G或2G的內(nèi)存, 跑個windows也就勉強夠用, 再啟動JVM又占用幾百兆, 就不用干別的了. 有人說用Linux, 但是工作的環(huán)境就是比較傳統(tǒng), 大家都說沒用過, 不會用, 短時間也改變不了. 最重要的是, 明明實現(xiàn)一樣的功能, 人家用C/C++的nginx或PostgreSQL就占十幾兆, Go和Haskell可能稍微多點, 就是node也比Java省. 想想真是挺心煩的,
這個問題不只是存在于服務(wù)器端, 就是在開發(fā)時, 運行和重啟JVM都是一筆不小的負擔(dān). 也包括開發(fā)工具, Idea雖然不錯, 但是受累于JVM, 在我的電腦上長期占用將近2G內(nèi)存, 最近也是有點煩這種大個頭了, 不過其實找一個合適的編輯器也不容易, 久負盛名的sublime在我電腦上打開某些文件夾時會出現(xiàn)瘋狂的磁盤占用, 一直沒找到解決方案. notepad++顏值實在不忍直視, 啟動速度和功能上也不太滿意. 最近考慮換到VScode, 雖然占內(nèi)存也不低, 比Java系的還是要好一些. 不過這個新軟件更新頻繁, 主要也是為前端準(zhǔn)備, 還沒有體驗過作為完整的Java開發(fā)環(huán)境.
去掉JVM, 很多依賴JVM的語言也都跟著被冷落了. 包括Kotlin, Clojure, Scala. 自己之前在這些方面有一些投入, 鑒于JVM如此流行, 以后估計還是會有遇見和用到的機會. 不過這些語言也都早早做了多手準(zhǔn)備, 基本都可以編譯到j(luò)s或native了.
如果能夠換掉Java, 應(yīng)該就會有更多內(nèi)存去運行程序. 據(jù)我這些年的觀察, 技術(shù)開發(fā)還是要用一些native的語言, 比如C/C++, Go, Rust之類. 業(yè)務(wù)開發(fā)可以用一些聲明式的動態(tài)語言, 比如SQL, js, shell. 不過這些腳本寫起來基本大同小異, 雖然Python很火, 但是我就覺得沒必要作為主選項, 用到的時候copy過來改改就行了, 語法和API大概看看, 都是差不多的. 其他類似的還有PHP, Ruby, Lua, Dart等等.
更具體來說, SQL進步太慢, 各個實現(xiàn)也沒有一個統(tǒng)一的演進方向. 只能根據(jù)具體的數(shù)據(jù)庫去學(xué)習(xí)一些高級特性了. 既流行又靠譜的選擇還是JavaScript, ES2015之后, 保持了高速發(fā)展的勢頭, 實現(xiàn)也比較及時和統(tǒng)一(還是要緊跟最新版本). 特別是靠著Babel的幫助, 現(xiàn)在不管哪種環(huán)境的問題, 基本上都可以用js搞定了. 通過Babel插件, 輕松體驗最新的語言特征, 甚至可以自定義語法. 運行環(huán)境也很普及, 現(xiàn)在基本上只要開著電腦都會開著瀏覽器, 想編碼運行只需要隨時打開console. 說實話, js讓我們多少找回一些編程的樂趣. 所以我一直都建議新手從學(xué)js開始, 既方便又實用.
當(dāng)然要真正使用js開發(fā)還是會有很多需要掌握的. 包括上面說的瀏覽器的開發(fā)人員工具, HTML新舊標(biāo)準(zhǔn)定義的API, 異步和事件機制, node環(huán)境, 模塊和打包機制(webpack之流), babel轉(zhuǎn)譯, 流行前端框架等. 自己對于這些基本只是在工作中接觸一些, 會簡單使用, 深入的東西也不了解, 鑒于js如此流行和在可預(yù)見的將來前途光明, 還是值得深入去學(xué)習(xí)一下的.
由于現(xiàn)在人們對于界面的要求越來越高, 作為界面布局主力的CSS也需要認(rèn)真學(xué)習(xí)一下. 自己對于CSS一直迷迷糊糊, 當(dāng)然一方面也是因為之前標(biāo)準(zhǔn)落后, 既不方便也不清晰, 隨著最近幾年標(biāo)準(zhǔn)和實現(xiàn)的不停進步, 現(xiàn)在應(yīng)該是認(rèn)真對待CSS的時候了. 比如由來已久的布局難題, 現(xiàn)在就有了felxbox和grid等各種新的解決方案. 本著面向未來的原則, 應(yīng)該努力去明白界面構(gòu)建的思路和原則, 不管怎樣, 比起前輩來說, 我們所能實用的工具已經(jīng)方便太多了.
另外一個重要的方面就是網(wǎng)絡(luò). 之前就是由于沒有實驗條件, 自己對網(wǎng)絡(luò)也一直處于一知半解的狀態(tài), 雖然看了很多原理, 但是沒有足夠的折騰和實踐的話其實很難有深刻的理解. 網(wǎng)絡(luò)知識的特點是這樣, 有一定的學(xué)習(xí)成本, 但也正因為這樣, 有著很高的實用價值. 甚至有專門的網(wǎng)絡(luò)工程師的職業(yè). 作為興趣, 自己當(dāng)然希望了解更多網(wǎng)絡(luò)的細節(jié), 包括硬件和低層協(xié)議, 甚至火爆的移動網(wǎng)絡(luò), 衛(wèi)星網(wǎng)絡(luò). 但是從工作實際看, 還是首先要熟悉上層接口, 尤其是每天要用的HTTP, 現(xiàn)在也更新出了2代, 3代版本(即將), 還有WebSocket等技術(shù). 希望通過了解這些協(xié)議, 加快開發(fā)進度, 方便技術(shù)選型和性能優(yōu)化, 遇到一些問題也可以有排查的思路. socket通信有時也會遇到, 但是會涉及到更多和系統(tǒng)內(nèi)核, 以及底層內(nèi)存的交互, 處理的也都是字節(jié)信息. 并且會衍生出另外一個重要的問題就是IO性能. 畢竟很多異步和并發(fā)的復(fù)雜處理都是為了更高效的IO, 不惜使用簡陋的socket通信的很多場景也是為了追求極限性能. 雖然理論上說應(yīng)該是用底層框架去更多屏蔽這些技術(shù)細節(jié), 但是至少需要了解原理, 方便選擇, 萬一沒有合適的實現(xiàn), 需要自己去折騰的時候, 也能夠有思路和方向, 能實現(xiàn)出功能.
關(guān)于更底層的技術(shù), 存儲, 文件系統(tǒng), 固件, 嵌入式, 操作系統(tǒng)等方面, 有機會就作為興趣學(xué)習(xí)和了解吧. 畢竟自己之所以從事這個行業(yè)就是源于興趣, 即便不為上班, 很多時候也是在琢磨和折騰電腦. 上學(xué)的時候就天天泡在機房倒騰, 裝那些沒太多實用價值的操作系統(tǒng), 現(xiàn)在雖然時間緊, 很多時候還是愿意跟蹤一下新系統(tǒng)的動向. Windows和Ubuntu現(xiàn)在都是半年發(fā)一版, 對于我們這些折騰狂人來說, 真是有了足夠的素材. 其實很多時候想想也沒什么意思, 系統(tǒng)裝一個穩(wěn)定好用的就行了, 但是不管怎么折騰, 總是感覺哪塊不夠完美, 想試試有沒有更好的選擇, 結(jié)果一折騰進去就很難出來. 要不說感覺自己是天生的愛折騰, 小時候一去姥爺家就翻箱倒柜, 尋找各種稀奇好玩的東西, 現(xiàn)在趕上日新月異的IT時代, 給了自己最好的借口去放縱. 如果沒有主的拯救, 自己這一輩子真的是要全都消耗在這些事上了. 無論如何人還是要學(xué)習(xí)節(jié)制, 在欲望的驅(qū)使下失去控制, 不由自主的做一些事情, 并不是真正的自由.