如何看待Kotlin成為Android官方支持開發語言?
Google IO 2017宣布了Kotlin會成為Android官方開發語言。一時間朋友圈和Android圈被各種刷屏。當然我也順勢而為發布了一篇的文章《為什麼我要改用Kotlin》,著實狠狠地蹭了一波熱度(儘管這樣會被鄙視)。眼下Android圈已經躁動了,甚至嚴重到如果對Kotlin視而不見就顯得自己不像一個合格的Android程序員。
本文嘗試從一個客觀全面一點兒的角度來看待這件事情,儘力為大家提供一個比較理性的觀點供參考。
為什麼會選用Kotlin
關於 Google 為什麼會選擇 Kotlin,我認為有兩方面的原因。
1. 為了逐漸擺脫專利流氓Oracle。從去年的轉向OpenJDK,到現在的支持Kotlin作為官方語言,某種意義是為了擺脫藉由9行代碼敲詐獲取天價賠償的Oracle。
2. 選用Kotlin,實至名歸,這個榮譽它值得擁有。Kotlin確實以其實用,高效贏得了海外很多公司和開發者的認可,比如Square的Jake大神一直在推Kotlin。Kotlin在國外至少有將近2年的應用生產環境的實踐(非JetBrains內部實踐應用)。在移動開發中,相比iOS程序員,Android程序員總是很幸運,因為我們有很多優秀好用的工具(Android Studio等),選用Kotlin,則是Google 為開發者提供高效的開發工具的一貫作風。
成為Android官方開發語言意味著什麼
官方:工具支持(Android Studio 3.0附帶Kotlin),官方的宣傳(教學視頻,主題演講等)
對於社區來說,Kotlin版本的庫和框架如雨後春筍般湧現
對於Java,曾經藉助Android這場春風,著實讓遲暮的它再度輝煌,現在和將來在Android領域可謂是棋逢敵手,Java的在Android開發語言市場份額會降。但是這也並不一定是壞事,有競爭才能更好進步。
對於Android 開發者,我們多了一種開發Android的語言選擇,那些對於之前由於前景不明朗卻對Kotlin躍躍欲試的人可以放心使用了。有了Kotlin意味著開發效率應該會有所提升。
對於團隊,這往往帶來了一個選擇的問題,Use Kotlin or not, That』s a question. 團隊中總有人想要嘗試Kotlin,而另一些人則興緻不那麼高。由於歷史包袱,團隊成員興趣,對於已有項目採用Kotlin和Java長期並存是實際可行的方案。而新項目則應該鼓勵使用Kotlin,但具體還需要結合團隊的能力和其他因素。
Kotlin的魅力究竟在哪裡
Kotlin的有很多特點,比如簡潔,安全實用,開發效率高和提升可讀性,更好的函數式編程支持。
1. 簡潔,Kotlin的代碼確實比Java更加簡潔,比如類型推斷,省去結尾的分號等等,然而這遠不能成為我們改用Kotlin的原因。
2. 安全,這是Kotlin的一個很重要的特性。Kotlin是空指針安全的,JetBrains做了一件很聰明的事情,它們將運行時才能空指針的檢測提前到了編譯時,主要方式是增加了Any?這種可為空的類型,使用Kotlin之後,我們程序的空指針會得到明顯的改善。
3. 實用,高效率。Kotlin的實用具體表現在:
引入Object,便於我們更好的應用單例模式
引入data class, 避免了我們手寫getter/setter/toString等方法
引入參數默認值和具名參數,避免了不必要的方法重載
支持擴展方法,讓我們可以省去好多必須要的代碼
4. Kotlin引入了Lambda,Streams API 和函數式編程支持。
5. 可讀性:從客觀上,Kotlin語法和特性上讓代碼更加具有描述性而已。但是不得不指出代碼可讀性主要依賴編寫者的編碼素質和能力。
對我個人而言,高階函數和方法擴展這兩個特點著實真心受用。方法擴展會讓我有一種創造感,這是Java種的Util方法所無法比擬的。
Kotlin是否會取代Java
這個很難說,因為這個世界上並不是一件事物好,就會必然得到廣泛應用的。一件事物的推廣開來靠的是一群人,但阻力也往往也來自一群人,只不過和前者不是相同人群。
從個人主觀來看這個問題,我更加願意看到這種現象發生。原因並不是因為我更喜歡Kotlin,而是在於我更願意看到事物在進步,在變得優秀,所以即便某一天Kotlin被更加優秀的語言取代,我也是很歡迎的。
哪些人適合率先應用Kotlin
Kotlin適用於多個平台,並沒有對學習者做限制。任何有學習意願的人都可以習得這門語言。
但是考慮到國內 Kotlin 資源不夠豐富,網路不夠暢通等問題,所以導致了很多人變成了吃瓜群眾進行觀望。
然而,對於一個項目和團隊來說,總需要有第一個人先來推進。而且這個推進過程並非順利,這其中包括:
首先你需要足夠了解Kotlin
你需要說服團隊,這期間你會接收到很多challenges,有時候你會很沮喪和生氣
你需要提供一系列的資料或分享,比如如何配置,sample code, troubleshooting等等
有時候甚至你經常兼職做mentor指導工作,這也就意味著你的手頭上的其他工作需要被打斷
上述推進 Kotlin 觀點部分參考自Life is Great and Everything Will Be Ok, Kotlin is Here (Google I/O 『17) 中 Christina Lee(Pinterest Software Engineer,國外 Kotlin 美女佈道師之一)的分享內容。
雖然 Kotlin 很優秀,但是推動在項目中推動 Kotlin 應用並非易事,因為這對於新事物來說在正常不過了,就像明治維新一樣看起來很光鮮,成功,但是它的變革進程並非順利,先是血雨腥風的倒幕運動,再到明治六年爆發的標誌武士時代結束的西南戰爭,經過數十年的努力才算取得成功。
因此關於哪些人適合率先應用 Kotlin,我認為需要具備以下幾點:
Java 技術和基礎要好,這一點很重要
英語要好,因為目前 Kotlin 的資料幾乎都是英文的,當然也推薦看英文的
願意承擔在項目團隊推進工作,有耐心,敢挑戰,負責任
關於Kotlin項目應用中的一些顧慮
目前想到了一些關於 Kotlin 應用在項目中的一些顧慮。這些顧慮目前並非全面,但是提出來,希望大家可以規避和改善。
1. 寫出來的代碼並不是 Kotlin style。解決這個問題,還是需要多學習和思考。
2. 擴展方法的濫用,Kotlin 的擴展方法很好,我們可以擴展很多方法,彌補Framework的一些不完善,但是擴展時我們需要謹慎,一定要把合適的方法放到合適的類型上,不可為了簡單增加不符合某些類不應該具備的職責。 具體需要最好以下兩點:
選擇在合理範圍內的最抽象類增加方法,比如我們想為Activity增加一個longToast,應該想一想是不是放在更加抽象的Context會更好一些
同時也不能為了便利,增加和當前類不相關的方法,比如我們想為每個Context增加顯示一個簡單dialog的擴展方法,這顯然不是很合理,因為對於非UI的Context這是有問題。
Android程序員的核心競爭力在哪裡
Kotlin出來之後,聽到了兩種不同的聲音:
太好了,終於可以有理由改用Kotlin了,寫代碼更加高效了。可以逐漸開始放棄Java了。
WTF,又要學新的語言,感覺好累,會不會以後面試不會Kotlin就被pass掉呢。
出現以上兩種不同的聲音,不得不引起我們對於 Android 程序員的核心競爭力的思考。那麼到底什麼才是 Android 程序員的核心競爭力呢?
Android程序員和其他程序員甚至其他職業並無二致,我認為這種競爭力表現在解決問題的能力。想要具備這種能力,極其依賴我們對問題和技術的準確認識和紮實的基礎。
編程語言本質上還是工具,好的工具能帶來更好的效果,但是如何運用好,將效率和質量提升到最高,則還是更主要的依賴於開發者的能力。
選用好的工具,更側重夯實基礎和加強對事物本質認識的能力,我想這樣才能讓我們的競爭力更強。
總結而言,Kotlin是一個更好的工具,沒有它,並不影響我們日常的 Android 開發工作。但是我還是建議開發者和團隊去嘗試這種語言,抓住這個近在咫尺的小確幸。
額外的話
事情的發展越來越顯得不可控了,推介Kotlin和不看好Kotlin的人逐漸分化出來,更準確的說,甚至這件事已經快要演變成了從對事變成了對人。
Kotlin 成為 Android 官方語言的消息一出來,一下子出來了很多被當做投機蹭熱點的Kotlin推介者,當然還出現了一些看不慣這些做法的人,他們認為前者刻意拔高了Kotlin。因而討論越來越偏向從事情到人的方面。我想要說的是,就像商人追求利潤,資本家攫取剩餘價值那樣,投機者蹭熱點,以及招致他人批評,這都是正常的事情,但是我們不能讓討論脫離問題的本質,我們需要回歸。
很多人說Kotlin無非就是很多語法糖,沒什麼突破
沒錯,Kotlin是有很多很多的語法糖。有必要簡單普及一下語法糖的概念(如下摘自維基百科):
In computer science, syntactic sugar is syntax within a programming language that is designed to make things easier to read or to express. It makes the language 「sweeter」 for human use: things can be expressed more clearly, more concisely, or in an alternative style that some may prefer.
由定義可知,語法糖的目的就是讓代碼更簡單,更可讀。
決定Kotlin使用這麼多語法糖的除了簡潔,高效可讀之外,還有一個原因,是因為kotlin編譯生成的class文件是目標到JVM 6(基於JVM 6 是一種權衡後的結果),比如我們在Kotlin中使用了Lambda,它是不可能編譯成invokedynamic指令的,因為那樣會導致在JVM6上根本無法識別,所以經常通過翻譯成內部類的形式來實現。
使用語法糖又能怎樣,它的目的是好的,畢竟它真真實實介紹了開發人員的代碼量。
Kotlin是一門實用語言,這是它的基因,它不是學術語言,它的目標是減輕開發者的負擔。它很適合 Android,因為大多數的 Android 的程序員是做工程。
基於JVM沒有什麼不好
Kotlin,是基於JVM的編程語言,但是基於JVM的編程語言並沒有什麼不好。(J)VM的出現無非也是一種平衡的結果。在犧牲部分執行效率的前提下,提供了一定的抽象,加快了開發者的效率。這種tradeoff其實更加有利於人的一側,這也是編程語言發展的趨勢和目標。
Kotlin 在國內推廣應用的道路可謂是 漫漫而修遠兮。因此更需要真正實踐,去踩坑的人開始on board,去出產更多的真正能推動 Kotlin 應用的文章,分享等這些有實質性意義的行動。
※巧用React Fiber中的渲染字元串新功能
※ColumnStore在大數據中的應用實踐
※支持自動水平拆分的高性能分布式資料庫TDSQL
※为什么我要改用Kotlin
※Yelp是如何做到每天運行成千上萬個測試
TAG:CSDN |
※哄搶模式開啟!Virgil Abloh x Air Jordan 1發售信息官方確認!
※谷歌Advanced Protection Program現支持iOS官方應用
※細節高清欣賞!Air Jordan 1「Shattered Backboard」Satin 官方照釋出!
※Air Jordan 1 Low Flyknit「Shattered Backboard」配色官方圖片釋出
※Virgil Abloh x Air Jordan I 官方預覽照發布
※入手有難度!Nike Air Force 1 「PlayStation」 迎來官方發布
※adidas Originals 個性鞋款 Sobakov 官方圖片釋出
※Kendrick Lamar x Nike Cortez Kenny 3 官方預覽照釋出
※這雙Virgil Abloh x Air Jordan 1完勝官方?Bred才是最酷的配色?
※官方新聞/Adidas Originals By Pharrell Williams Hu 限定系列
※你的腎怎麼樣?那雙「北卡藍」Virgil Abloh x Air Jordan 1 官方發售信息也曝光了!
※任天堂的Virtual Boy以非官方的Cardboard形式返回
※官方聯名看膩了?Virgil Abloh x Air Jordan 1 雙勾版考慮一下?
※Off-White? x Nike聯名Zoom Fly Mercurial Flyknit官方圖釋出,還有原價發售信息!
※「黑色」官方圖片中的Air Jordan 1 Low Flyknit
※美輪美奐!Air Jordan 11 Low 「Rose Gold」 釋出官方圖片!
※疑似官方 Supreme + OW 定製風格 Air Jordan 1 釋出!
※Air Jordan 13「Hyper Royal」配色官方圖片釋出
※Air Jordan 1 Rebel 全新「Chicago」配色官方發售詳情公開
※Virgil Abloh x Air Jordan 1 白色版官方圖片及發售信息