如何看待 Google 宣布 Kotlin 正式成為 Android 的開發語言?
一大批具有一個月開發經驗的Kotlin自學者正在申請知乎Live教你開發android的路上;
一大批打算轉行計算機,剛學了kotlin入門語法就準備精通android開發的文科正在準備滋滋送錢。
google 從 棄用 eclipse 啟用 androidstudio 開始就是下定了離開 oracle 投奔 jb 的決心了(as是狗狗跟 jb 合作開發的)。而 kotlin 意味著 google 與 jb 的合作又進了一步,看來狗狗跟 jb 合作挺愉快的,後續應該會繼續跟 jb 合作把 kotlin 推廣下去。
這個與蘋果搞 swift 性質不同, objc 本身是開源的,蘋果有掌控力,所以蘋果根本不會有強烈的替換掉 objc 的壓力跟動力,你用不用 swift 對蘋果來說其實無所謂。
而對 java 來說 google 沒有掌控力還隨時有吃官司的風險。 google 有強烈的逃離 java 的動力跟壓力,所以會一直試圖尋找 java 的替代方案,因而 google 如果找到了合適的語言就很可能是真的想用來替代 java,而不僅僅只是想共存。瀉藥。剛好今年有幸現場見證這一幕,當宣布這個消息的時候現場呼聲超級嗨,我也一直很早看好 Kotlin 的未來,只是這麼快就被 Google 認可還是很驚訝的,消息一出,我公號上很多讀者都在問這個問題,於是寫了一篇文章解惑,我就把關鍵部分貼在這裡吧,以下是原文:
首先,毫無疑問,Kotlin 一定是 Android 開發的未來,即使在之前 Google 沒認定 Kotlin 的時候,我都這麼認為,現在 Kotlin 轉正了更沒疑問。Kotlin 語言擁有雄厚的背景,有著新時代語言的各種新特性,寫過 Kotlin 你真的再也不想寫 Java 了,Java 有著沉重的歷史包袱,想要完全靠自身脫胎換骨幾乎不可能,而 Kotlin 除了語言上的優勢之外,JetBrains 比較正確的一個決策是,它完全兼容 Java,允許你的項目同時支持 Java 和 Kotlin 語言,這就留給開發者足夠的時間去把項目過度到 Kotlin,哪怕你真的很懶,不想對老舊代碼做處理,只想新寫的代碼用 Kotlin,那也沒任何問題。
雖然 Kotlin 還不成熟,還在慢慢優化更新中,但是這不會阻礙它是 Android 開發者未來的趨勢,就如當初的 Android Studio,在它剛出來的時候,問題更多,有多少人質疑它是垃圾,但是我堅定的認為 AS 一定是 Android開發者 的未來,事實證明,在 Google 的不斷完善之下,它已經完全普及,即使現在它還有一些這樣那樣的問題,但是也比你用 Eclipse 開發效率高的多。
其次,雖然 Kotlin 是 Android 開發的未來,但是它沒法改變移動時代已經走下坡路的趨勢,它只能加快你的開發效率,讓你代碼寫的更爽,所以,我看到有些學習其他方向的,比如 iOS 開發、Web 前端、Machine Learning 等之類的,看到這個消息,彷彿看到 Android 的又一個春天到了,轉而又開始學習 Android,這個完全沒必要,語言雖然是新的,但是平台還是那個平台,這跟一種新的行業機會出現是兩碼事。
然後,毫無疑問,Kotlin 肯定會對 Android 開發者有影響,它將改變 Android 開發者的方式,效率會極大提高,所以 Android 開發者肯定是要學習下這門語言的,但是也沒有那麼想像的那麼緊迫,好像比別人晚學一步就丟掉飯碗一樣,畢竟一種語言的過度,一定是需要一個過程的,它不是創造了一種新的職業機會,它還是服務於現有的 Android 職位的,所以你比別人早點學會,或者比別人晚點學會,差別沒那麼大,但是長期來看,一旦普及,Kotlin 一定會極大提升開發人員的效率,我姑且大膽的認為,Java 被 Kotlin 替代用來做 Android 開發是早晚的事,所以,Android 開發者有時間就學習下吧,至於學習資源,GitHub 上搜 「Kotlin」一大堆。
最後,還有讀者留言,說現在正在學習 Android,但是 Java 已經學的差不多了,要放棄直接學習 Kotlin 么?這個當然不能放棄,我們前面說了,Kotlin 和 Java 是完全兼容的,而且一門語言的完全替代是需要蠻長時間的,所以,即使 Kotlin 能在一家公司普及,成為主流開發語言,但是老的代碼還是用 Java 編寫的,對老舊代碼的處理,想完全用 Kotlin 替換過來還是很耗費時間與精力的事,所以,我認為,在很長一段時間裡,都是看到一個項目是混合著 Java 和 Kotlin 語言的,新功能用 Kotlin 編寫,老代碼用的是 Java,故學習 Java 還是很有必要的,更何況 Kotlin 本身也是一種基於 Jvm 的語言,跟 Java 還是有著很強的關係的。
對了,明天的 IO 有「Android 之神」Jake Wharton 關於 Kotlin 的一個 Session,期待這場演講。作為一個多年來一直推廣Java語言很糟糕這一觀點的人,我表示很欣慰。簡而言之:
JB就是屌。之前因為@大笨蛋千里冰封 安利的原因一直對Kotlin也有一些關注,看著kotlin發展我也是有一些期待的。不過看到這個新聞我就想棄坑了。
----------------------
順便發個圖:
Null safe
培訓班就要來了,本來一片凈土,將變得魚龍混雜。
原本一門Null safe的優雅語言,將變成var與!!的世界。今天,我加的那幾個Kotlin群平均智商變成了昨天的5%。
我真他媽想讓Haskell變成官方語言,媽賣批如果下個版本的framework開始逐步用kotlin替代JAVA,JAVA在安卓上怕是要血崩。
作為一個Swift iOS程序員,給Android開發者一點建議。
建議Android開發者立刻上Kotlin的車。無論是Objective-C還是Java肯定在相當久遠的時期內都會存在。混編是真正的開發常態,早點踩坑才是正道。
Kotlin之於Java,Android。正如Swift之於Objective-C,iOS。Kotlin無論語言語法,自身定位,發展處境,都和Swift 超級像。要說最大的區別:一個是親生的,一個還是領養的。昨晚看了下kotlin語法,簡直是拯救java神器。
重要的是,他開源。再也不用陪oracle打無聊的官司了。
Oracle在作死的路上越走越遠。kotlin剛出時用過,bug一大堆,在編譯層面上就有各種問題,而且還沒有成熟的文檔來解決,遂放棄。
kotlin出正式發布版時又撿起來試了一下,仍然有之前用時的問題,但是至少我能找到解決的方案了,然而在編譯時總會出現各種無法預料的問題,可能是因為習慣了java的思想,導致寫法的不同吧,為了減少排錯的時間,加快項目進度,再次放棄。
現在谷歌開始挺kotlin,我準備再試一次,看看它發展到什麼程度了。
但是不管谷歌怎麼說,如果kotlin不能完全替代java在安卓開發中的作用(甚至做到java做不到的)的話,我無法說服自己在項目中使用它。
不吹不黑,對kotlin真心沒什麼感覺,作為新語言了解一下沒問題,我也很願意,但是成本(時間和精力)必須是優先考慮的事情,興趣如果不能轉換為飯碗,也就只是玩具而已沒有分號我用的很不習慣ヽ( ̄д ̄;)ノ
被智子鎖禁錮了多年的 Android 開發玩家終究有了解脫。要知道 Java 是語言界中十分保守的一門語言,大多數 Android 開發者對語言界流行 Feature 缺乏認識,例如對 FP 毫不了解,而實際上 FP 近年來被逐漸證明很適合解決前端的一些問題,這直接導致了大多數人對 Android 開發的理解只停留在三方庫應用的層面上。而 Google 這支強心針打得正是時候,這次欽定必然掀起一股浪潮,讓更多人對現代語言以及語言思想有所感知。
原先就知道google在找第二個語言來取代對java的依賴。還猜測是swift,沒想到是(聽都沒聽過的)Kotlin!
管他呢,我照樣用C++。
官方背書使得Kotlin的影響力正在極度放大。
鑒於Kotlin可以和Java混合使用的特點,會有越來越多的項目開始使用它。也會漸漸成為Android程序員必須掌握的一種語言。目前只是簡單了解,有新的體會再更新
這些是必然的原因,因為Google深陷與oracle的訴訟中,為了避免訴訟Google層想使用open jdk作為andriod的開發語言,這下可以了非常符合google的尿性。Java可以開發andriod,所以有的人為了開發安卓就會去學習java,現在google不用了java,java的地位可能會受到影響,python,go的可能會崛起!有些語言比java好用只是某些原因一直沒能火起來,說不定借著這個機會就會火一把!
之前把語法層面的都學的差不多了。至於真正的要在項目中使用,還是過個兩三年再說吧。
Android Studio 切換過去也不是很難。完全可以把現有的代碼直接右鍵轉換過去,然後再去慢慢觀察就好。如果真要過渡過去也十分簡單。
目前,沒有必要,也沒有驅動力去做這件事。
如何看待?對於向公司建議使用 Kotlin 參與項目開發這一點,當然是件大好的新聞。
那些不懂技術的 Leader 和二流程序員總算不能以: 「Kotlin 屬於第三方支持,不考慮使用」 來作為借口了。(當然他們可以換個借口,例如剛被官方支持肯定還不成熟之類的,逃
謝謝評論指正,kotlin的泛型還是受制於jvm的歷史包袱,還是type erasure
-------------
一兩個月前我被java的一個問題(好像是反射相關)困擾,在谷歌上搜索,在谷歌的issue反饋上看到這是一個bug... 當時我也對java比較煩了,lambda經常報ClassNotFoundException(rebuild一下就好了,所以這是個bug),streamapi要api24,連個try with resource我記得都要api21。然後我看那個bug下的回帖,有個人說他受不了垃圾java,要轉去用kotlin了,然後我也跟著學了。
對java和c#比較了解的朋友知道,c#語言特性甩垃圾java20年。然而他有個叫巨硬的爹,造開源輪子那幫人都不喜歡他,所以開源輪子遠沒有java上多。 剛學kotlin我就很興奮,因為這玩意兒可以跟java無縫互操作,甚至你項目里可以混用java和kotlin,這就意味著他能夠利用現有的java輪子。同時有問題的地方(比如反射,kotlin整了新的一套,用到了反射的庫可能有點問題)你可以切換到java去寫。這就等於說是繼承了java的優勢,並且現行項目可以慢慢過渡到kotlin上去。 同時他又吸收了很多現代語法。比如他把java泛型的坑填上了,kotlin里的泛型是類似於C#那種的泛型,不再是java里的類型擦除;他的函數變成了一等公民,函數式特性我感覺是比c#更明顯一點的。還有什麼擴展啊屬性啊尾遞歸檢查啊這些的,不一一列舉了,這一切都只需要java6的jvm就可以運行。 簡而言之,這個語言可以終結c#黨和java黨之間的戰爭了。另外,jb還打算讓kotlin能編譯成native,他們官方說是以後可以在mac和iOS上跑(看到這裡你他喵的還沒心動?)。 總之我今天早上看到這個新聞是挺激動的...為什麼不把js變成官方開發語言?搞完android之餘,順便可以做個ios應用和網頁應用,多好。搞啥kotlin,最後還不是變成位元組碼運行在vm里
這兩天公眾號和知乎到處都是kotlin專欄和文章,馬上有一批人要交智商稅了。IT界現在一堆浮躁的的人,每天說風就是雨。不想想怎麼提高自己,天天就知道一味追求新技術
推薦閱讀: