從劍到板磚——JAVA到Golang的碎碎念


如果程序員的世界是江湖,那麼java程序員肯定是用劍的。



劍,短兵之祖,百兵之君,近博之器。劍作爲一種兵器,超越了戰場,在歷史、文化、宗教中都有無可替代的作用。招式衆多,輕攏慢撚抹復挑,啊不對,是劈砍刺截掃掛挑,劍招耍起來龍飛鳳舞,飄灑大方,行走江湖,哪個俠客不會幾手劍招?顏值高的的學落英劍法,悟性好的的練成獨孤九劍。
JAVA,也可以稱作編程語言之君了,從95年正式創立以來,經過衆多java程序員的發展,從sun到oracle,這門語言不僅沒有沉寂下去,反而越發壯大,雖然每年都有人說java是不是不行了,可是按照目前的生態來說,java語言的堅挺不容置疑:
  • 從語言特性的層面上來說,對於鎖、gc、併發包的優化,引入函數式編程、閉包;
  • 從框架的角度上來說,服務微型化的springboot,大數據的Hadoop,讓java連續十年成爲最受歡迎的語言。
說不好是軟件的工程化促進了java的發展,還是java的發展促進了軟件的工程化,但是毋庸置疑,java肯定是軟件工程的最佳實踐之一。跨平臺,萬物皆對象,gc,這些在當時都是讓人驚呼的特性,可以說java將編程語言設計帶到了一個新的高度。
劍固然是一種很好的武器,什麼招數都有,什麼事情都能做,就是每次打架前要先耍一套太極七十二式。曾經念大學的時候,導師說過我們專業大學期間要寫1w行代碼,java程序員就得寫10w行 /滑稽。那可不是嘛,定義幾個bean,每個bean光get、set方法就能上百行了,當時用ssh,配置文件又得幾百行。算上導入包,聲明對象,異常處理,一個類上千行輕輕鬆鬆。
JAVA的語法繁瑣是一方面,豐富的庫帶來的是依賴的難以管理。一個簡單的http服務,開發上需要依賴框架 SSH或者springMVC或者springBoot,運行環境需要依賴JVM,容器需要依賴Tomcat或者Jetty服務,在大規模微服務的互聯網架構中,集羣運維難度大,可靠性低。

每一個武器,都有其最適合的場景。go語言就相當於板磚,小巧便攜,好發力。有道是亂拳打死老師傅,板磚的優勢就是貼身肉搏,流氓鬥毆。
在高併發服務這一塊,go語言的表現已經遠遠超過了java。
最近在使用go語言寫rpc服務的過程中,深刻體會到了go語言的簡單粗暴。畢竟是站在巨人的肩膀上,專門爲網絡編程,高併發而生的語言。大部分常用的包全部內置,即使是依賴,使用起來也非常簡單。放棄了萬物皆對象的思想也使go語言的開發效率極高,gofmt又保證了代碼風格的統一和良好的可讀性。還有goroutine,go協程,比java線程更加輕量級,開發效率更高,運行速度更快,很容易開啓上萬個go協程進行高併發的服務,這也是go語言的精華所在。。另外go的部署運行也要簡單的多,直接構建出一個可執行的腳本,運行就啓動了服務。腳本本身小,佔的資源也非常少。
Java依然是排名第一的語言,但是對於工程師來說,語言只是工具,擁抱變化,保持學習纔是我們必須要一直做的事情。
最後,我並不是go語言的專家,這只是我幾周以來學習的主觀感受,如果有不同的意見,歡迎留言,
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章