歡迎光臨
每天分享高質量文章

“技術小黑屋”段建華:Kotlin 是 Android 開發者近在眼前的一種小確幸

來自:開源中國【開源訪談】

連結:oschina.net/question/2720166_2273049


有資料預測,到 2018 年底,在 Android 開發領域,Kotlin 將超越 Java,成為開發 Android 應用的第一語言。的確,我們看到,自去年 5 月份在谷歌 I/O 大會上 Kotlin 被宣佈成為 Android 領域官方支援的開發語言以來,Kotlin 的使用量完全呈爆炸式增長。


Kotlin 的快速增長是由於它的現代性。Kotlin 是一門更現代化的語言,更容易理解,更容易編寫,抽象性也比 Java 高,而且它在設計之初就考慮到了移動裝置。


這門年輕的 JVM 語言究竟有著怎樣的魔力使得它“俘虜”了廣大開發者的心?為此,在 12 月 23 日開源中國源創會年終盛典上,我們採訪了早期便在公司內部使用 Kotlin 進行 Android 開發的資深工程師段建華,相信不少 Android 開發者都訪問過他的個人技術部落格 —— “技術小黑屋”,作為一名資深的 Android 研發工程師,他和我們分享了使用 Kotlin 的心得和經驗、學習 Kotlin 的方法以及對 Kotlin 未來發展的看法。


【本期嘉賓】


段建華,Flipboard 中國 Android 研發工程師,多年從事 Android 研發工作,網路 ID 為技術小黑屋,喜歡分享技術,長期維護個人技術部落格(droidyue.com),出產高質量的 Java 和 Android 技術文章。多次在 droidcon Beijing, GDG, CSDN, Stuq 等會議做 Android 和 Kotlin 相關的分享。


【採訪實錄】


1、先請老師簡單的介紹一下您自己,以及您最近研究的技術。


大家好,我是段建華,網路 ID 為技術小黑屋,droidyue.com 的部落格博主,也是一名任職於 Flipboard 中國的研發工程師,多次在 droidcon Beijing、GDG 等技術會議做過分享。


我目前研究的技術主要有 Kotlin、Android things 和近期接觸的函式式程式設計等。


2、您在 Flipboard 中國工作多久了,當前主要負責什麼工作?


加入 Flipboard 中國接近兩年,在這期間,作為團隊的一員,我們順利地實現了中國版本的落地,目前我所負責的不僅有 Flipboard 中國版本-紅板報的工作,還包含了一些和三星合作的專案的工作。


3、在你們團隊內部推廣使用 Kotlin 有遇到什麼阻礙嗎,是如何解決的?


我們的團隊使用 Kotlin 可以說是很順利,當然這一點也不同於國內的團隊。


在 2017 年以前,中國區的程式碼和 Flipboard 美國是在同一個 repo 下共用的。而 Flipboard 美國那邊的 Android 團隊引入 Kotlin 最早可以追溯到 2015 年的時候,這是一個相當早期的時刻。那時的 Kotlin 並沒有像現在這樣完善和穩定,但是卻沒有阻擋它在 Android 專案的應用。這也是我最初接觸到 Kotlin 的機緣。


中國團隊應用 Kotlin 是在 2017 年伊始,當時才確定全面使用 Kotlin 作為開發語言,不過也並沒有遇到什麼所謂的阻礙,還算是比較順利,但是對於國內的團隊推廣 Kotlin,也可能有很多問題。


在國內的團隊推廣 Kotlin,我覺得遇到的最大的問題之一就是需要有人來推動。

首先,這個人需要良好地掌握 Kotlin,而不是簡單停留在會使用的層面。然後這個人還需要來說服團隊的成員,尤其是技術領導。在說服過程中,需要回答來自大家的質疑和提問,甚至是挑戰。


這個人還需要提供一系列的資料或分享,比如如何配置、sample code、troubleshooting 等等。有時候甚至要經常兼職做 mentor 指導工作,這也就意味著你手頭上的其他工作需要被打斷。


4、當時已有的 JVM 語言也有很多選擇,Kotlin 的什麼特性吸引了您,或者說為什麼您選擇了 Kotlin?


當時確實有很多的 JVM 語言可以選擇,對於 Android 開發也是,比如 Scala 也可以用於開發 Android 應用。但是我們並沒有採用。


由於美國團隊率先引入了 Kotlin,我們或多或少的瞭解了很多關於 Kotlin 的優秀特性,比如空指標安全、Collection 的 Streams API, Lambda 等等。當時我們就嘗試如何在現有的專案中應用這些很 cool 的特性來提高開發效率。當然方案有兩種,一種是使用 Kotlin,另一種是引入相應的 Java 的庫。經過再三的對比和權衡,我們最終達成了共識,選擇了比較激進的 Kotlin,畢竟那個時候 Kotlin 還沒有被“欽定”為 Android 官方支援的開發語言。


概括而言,是 Kotlin 簡潔、實用高效和低成本的切換和遷移使得我們選擇了它。


5、前陣子 Kotlin 釋出的新版本已經開始支援跨平臺開發了,您對此如何看待?


是的,Kotlin 目前支援了 JVM、Android、Web(翻譯成 Javacscript)、WebAssembly、Native 等等。這不難讓人認為只要學好 Kotlin,任何平臺開發都不怕。


但是呢,依個人淺陋之見,目前適合應用 Kotlin 作為專案開發語言的還是那些 Java 專案,因為這是目前 Kotlin 的主要方向。就像創業公司給投資人講故事一樣,JetBrains 把支援全平臺的故事講給了更多的開發者聽,藉此獲得更多的關註和持續曝光。


不過對於 Kotlin 的新版支援跨平臺開發這件事,個人還是持肯定態度的。因為它的出現和流行,對(Java 和 Android)開發者是利好的,著實解決了很多 Java 和 Android 程式員的痛楚,相信並希望以 JetBrains 的基因和理念能夠直接或者間接推動更多的開發語言更加快速的進步和發展,最終使更多的開發者從中受益。


6、有谷歌和 JetBrains 背書的 Kotlin 看上去近期發展勢頭很好,您認為未來五年內 Kotlin 將如何演化?


我認為在未來,Kotlin 會做的有:


  • Kotlin 編譯器的最佳化,Kotlin 在編譯上還是有比較大的最佳化空間。

  • 現階段 Kotlin 是 target 到 Java 6,導致了很多 Java 7 和以後的 API 無法被利用。以後可能會整體提升到更高版本的 JVM 上。

  • Kotlin 會在去 JVM 化方面邁出更大的一步,Kotlin 被直接編譯成機器碼會有很大的改善。


7、Android 開發者都應該學習並使用 Kotlin 嗎,為什麼?


是的,我不僅認為每個 Android 開發者都應使用 Kotlin,我覺得每個 Java 程式員都應該去嘗試接觸 Kotlin。


Kotlin 在語言層級提供了大量的非常方便的實現,比如空指標安全、擴充套件方法、Lambda 等等。Kotlin 是相對更為最佳化的語言,讓我們可以不再忍受 Java 相對冗餘囉嗦的語法。利用 Kotlin 中集合的 API 我們更加接近 Declarative  Programming(宣告式程式設計)而不是 Imperative Programming(指令式程式設計),無形中使我們的程式碼更加具有描述性。


如此種種,Kotlin 是一門提高開發效率堪稱利器的語言。對於 Android 開發者來說,這無疑是一種近在眼前的小確幸。


8、那麼,對於那些學習 Kotlin 的開發者,您推薦的第一步是什麼?


我推薦的第一步就是先上岸,即先把 Kotlin 的程式碼寫起來。俗話說,萬事開頭難,當學習者開始寫 Kotlin 程式碼的時候,就會逐漸地被 Kotlin 的程式碼迷住,甚至會達到欲罷不能的情況。


相比第一步而言,我更想談一談所謂的第二步,當你開始寫 Kotlin 程式碼,嘗到了 Kotlin 帶來的種種甜頭,那麼接下來該做什麼呢,這就是所謂的第二步。


我推薦的第二步是去搞清楚 Kotlin 這些特性或者是語法糖的實現原理。程式員想要精進,探究原理,做到知其然知其所以然是一種很好的方法。明白了內部的原理實現,可以讓我們更好的去運用特性,規避和排查問題。


9、您是否願意向我們介紹一下您自己、您的工作,或是其它一些我們沒有提及的方面?


前面的問題中已經或多或少介紹到了我的工作,這裡我來講一講我的部落格和成長歷程相關的一些故事。


大概在我剛畢業的時候,參加了幾次新浪雲的公開課,當時坐在臺下的我就給自己定了一個時間,五年之內我也要成為舞臺上的分享嘉賓。在這接下來的日子裡,在工作中每每接觸到新的技術或者是解決的問題,我都會記錄下來,等到休息的時候,我就嘗試去研究這些技術和問題的原理和內在,然後整理成部落格,記錄下來並分享給大家。於是部落格的訪問者越來越多,點贊也日益增多。在不到 3 年的時間內,我終於登上了 GDG(Google Developer Groups) 北京的分享講臺,在北航完成了我的首場線下分享。


在最近的三年裡,我經常推薦認識的技術人嘗試寫部落格來記錄問題,並深耕原理。這裡也不例外,我希望大家嘗試去記錄工作遇到的技術問題,以部落格的形式去梳理,日積月累,完善自己的技術棧。


●本文編號282,以後想閱讀這篇文章直接輸入282即可

●輸入m獲取文章目錄

推薦↓↓↓

 

Java程式設計

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂