因為小編最近在寫兩套教程,分別是Java語言基礎教程和Go語言的基礎教程,並且這 2 門語言,小編在實際的工作中也都有用過
而且 www.helloworld.net 社區的后台,就是用Go語言寫的,而且正是小編負責的。況且小編在工作中是用Java的。
所以對這兩門語言還算比較了解,所以本文對這 2 種語言聊聊小編自己的感受與看法
,也順便聊聊小編這10年來,各種編程語言的一些感受
本文觀點僅僅代表自己,僅供參考
不希望引起語言好與壞之爭。
小編的C++開發經歷
最初小編我剛畢業的時候,是做C/C++開發的 , 主要是研發 Windows 桌面軟件。用過微軟的 MFC , WTL 也用過 Qt 跨平台的框架
了解過 C++桌面軟件開發的人都知道 ,C++寫界面,是非常痛苦的,沒有好用的界面庫,MFC丑陋,復雜,WTL 只是界面框架
但是也很難實現漂亮的界面,后來也接觸過 Qt 以及自繪的UI框架,總得來說,C++開發桌面客戶端軟件,真的沒有前端爽,很痛苦。
導致你整天想着這個按鈕怎么實現,那個編輯框文本怎么垂直居中,而不是把重心放在業務上。總之,吃力不討好。
況且C++不光是畫界面沒有其它端(比如前端,安卓,IOS)容易,連常用的庫也沒有他們的全。很多還要造輪子。
甚至每個C++開發工程師都有自己一套字符串操作的工具類,而Java中,一個 String 類全部搞定了。
做了 3 年的C++開發,但是隨着后來安卓手機的興起,越來越多的軟件開始有了安卓版本,安卓當時也越來越火了。
想到C++桌面軟件開發有可能會落寞,所以,在同學(安卓開發)的幫助下,小編轉行開始了 安卓開發的生涯。
小編的Android開發經歷
因為大學是計算機專業,在大學里面學過C/C++ , 也學過 Java ,所以,轉行做安卓,也不是太難。甚至有點驚訝的感覺。
記得有一件事記憶特別深,之前做C++開發的時候, 解析 json 串,忘了當時用的一個什么庫了,只是記得解析的時候,
需要手動一個key一個 key 的去解析,獲取值。
做安卓開發的時候,同學當時告訴我有一個 Gson 庫,可以直接把 json 串轉成對應的類,也可以直接把類轉成 字符串
當時看到這感覺用Java寫東西太爽了,庫那么多,很多事都不用操心 ,C++轉安卓后,寫Java那叫一個爽
感覺從原始的刀耕火種時代,到了現代時代 。
轉眼間,開發安卓也有了6,7年了,Java現在用的,不說是專家吧,至少也算是個高級水平吧,隨着Java語言的深入
也慢慢覺得Java雖好,但是也有一些不太好的地方了。
比如Java語言太啰嗦,現代的語言,比如 dart,go, swift ,這些出現的較晚的,都是簡單化了。
語法簡單,寫起來也舒服。Java 雖然在Java 10 也有了 var 關鍵字,定義變量不用再寫又臭又長的一大堆了,但是現在用的最多的還是 Java8
還有Java的虛擬機,導致特別的消耗資源 。
比如 Java 的 Spring 那一整套解決方案,有人戲稱是配置工程師,想要什么功能,只需要在配置一下就行了。(前提是你得記得住怎么配置或者知道怎么搜索)
可見 Java Spring 這套有多成熟 ,但是也帶來了,黑箱操作,很多人只知道配置,不懂得其中的原理
編譯出來的是什么?是一個可執行文件嗎?是可以 jar 包嗎? 監聽的 ip地址和 端口 是在哪里寫的?main 函數在哪?
很多初級的甚至做了5,6年 Java 的人(主要用 Spring的),並不清楚這里面的原理
當時Java的好處也是非常的多,Spring 那一套提供了一籃子解決方案,用來企業級開發,最穩定不過
國內的阿里,JD等公司,都是在大規模的用 Spring ,Spring幾乎成了Java的代名詞了
那小公司更不用說了,只要選擇Java開發,99%的都會選擇 Spring了
當然小編是做Android開發的,並不是做 Web 開發的。
后來接觸 web開發,也是因為要做一個 開發者專屬的技術社區,也就是本文剛開始提到的網站 www.helloworld.net
由此小編和后來的 Go語言有了交集
小編和Go語言的開發經歷
說到Go語言,不得不提HelloWorld開發者社區(www.helloworld.net) , 當初是在2018年,有了做一個開發者專屬的技術社區的想法
技術選型的時候,首先要決定的是,后台到底是用什么語言寫?用什么框架寫?
用 Java寫,用 SpringBoot 那一套,事實上這一套對我很有吸引力。至少以后有什么問題,這一套都有對應的技術方案。
但是同時,也在網上搜一些Go語言相關的文章 ,因為之前業余的時間了解過Go語言,所以知道Go語言有一些很棒的特性。
比如:語法簡潔,函數返回多值,天生支持並發,使用通道進行多個協程之間的同步和同信,豐富的網絡編程接口
當然還有人詬病Go沒有泛型,其實這一點吧,小編個人認為這是一個優點,因為小編在做C++的時候,泛型真的很難理解,泛型寫出來的代碼
也真的很晦澀難懂,尤其是 STL 中的源碼。
到了Java中,泛型雖然比C++中的簡單了點,但是還是太難理解,所以小編寧願多寫幾個函數,也不想要泛型,因為這玩意太費腦子了。
說了費腦子,小編了解到 swift 語言,把 ++ 操作符給廢除了。因為 ++ 可以用在前面++i ,也可以用在后面i++ ,而且意義還不一樣
所以啊,一個編程語言,主要看背后設計的思想,swift就認為這種 前加加, 后加加, 沒有必要,干嘛要費勁的去區分他們的區別呢
所以在 swift 中,只能使用 i = i + 1 這種方式(低版本的 swift 還是有 ++ 操作符的),我覺得這種解放心智的設計是好的。
因為前加加,后加加,區分得開,區分不開,反應不出啥,啥都反應不出來。
要跑題了,說到 www.helloworld.net 開發者社區, 最后各種資料學習Go, 也接觸到了 gin , iris 等框架, 至少用 go 寫web 程序
語言本身就支持的,就提供了一接口,net 包中提供了相當豐富的接口,用來寫 web ,而且 gin ,iris 這些web框架,封裝的也不是很深
這正是我所需要的:不想要那種封裝的太深的東西,只靠配置,讓我不知道里面的具體原理流程
但是又不想要那種最原始的,什么都不封裝,我覺得 gin , iris 正是我需要的這種框架。
還有一個原因,就是,Go語言編譯出來的,只有一個可執行文件 ,扔到服務器上就能跑起來,提供服務了
連 nginx 這種都不用安裝 。就直接提供80服務了,這個相於對 Java, 服務器上幾乎 什么都 不用安裝
編譯出來一個可執行文件,命令行執行,就OK了,這個對運維太友好了。不用安裝 tomcat ,不用安裝 JDK ,不用配置環境,不用安裝nginx
這一點也是最吸引我的地方
還有就是,Go語言開發的效率相當的高,性能也很高,被稱為 21 世紀的 C 語言
所以最終,還是選擇了 Go ,作為 www.helloworld.net開發者社區的后台語言
Java和Go的比較
這種話題最容易引起語言的好壞之爭,因為本身程序員手里都有一種用的非常熟練的工具,比如有的人用JAVA很多年了,用的很順手了
比如有的人只接觸過 Go ,就一直說Go的各種好。事實上這些是不公平的。至少你要2種語言都用過,都有過實際的項目經驗。
才能更公正一點,事實上,語言是分好壞的。這個小編認為是存在的。
Java與Go ,現在的爭論很多,Java 二十多年的歷史了,各種框架,庫,解決方案非常的成熟,而且性能不差
是現在很多企業的首選語言,但是也不否認Java存在的一些問題,而這些問題,在Go里面,可能就沒有。
Go語言,Google大力推廣的,內部也在使用的,它的出現,必然是因為解決一些問題而出的
但是出來的較晚,各種庫,解決方案沒有Java的豐富。
所以,現在這兩種語言誰也代替不了誰。但是小編個人認為,未來在服務端編程方面,一定是Go的未來
現在的Java和Go語言之爭,就像當年的 Java與PHP之爭一樣
歷史總是驚人的相似,時間會回答一切。我們安靜的見證就好。
至少在現在,會這兩種語言之中的任何一種,都是不缺少工作的。
C++到 Java,再到 Go, 有什么感受
作為過來人,可能第一感覺就是,C++ 吃力不討好,可能C++和Java,前端,安卓同樣的工資待遇,但是干 C++的心更累
Java真的很不錯,優等生,有時候找不出什么出挑的毛病。有一些不太好的地方,但都不是實質性問題
Go 我是真的很喜歡,寫過Go的人,都會有這樣一種感受吧,這語言寫起來要爽一點,但是Go的第三方庫,還是要再豐富一點才好
這10年的開發經歷,從 c++, java, go ,也寫過一段時間的前端(vue) ,中間創業過一年,寫過一年的PHP
總得來說,語言只是工具,能正確使用工具,解決問題就好
但是解決同一種問題,有多種工具時,這里面就有好有壞了,有取有舍了,個中選擇,懂的人自然懂
如果你是一個學生,如果你剛工作,如果你是做后端的,建議你一定要看看Go語言
如果你是一個工作多年的人了,相信哪種語言對你來說也不太重要了
