<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          為什么 Java 后端開(kāi)發(fā)沒(méi)有大規(guī)模采用 Kotlin?

          共 3574字,需瀏覽 8分鐘

           ·

          2021-06-27 10:29

          你知道的越多,不知道的就越多,業(yè)余的像一棵小草!

          成功路上并不擁擠,因?yàn)閳?jiān)持的人不多。

          編輯:業(yè)余草

          juejin.cn/post/6844904122160775176

          推薦:https://www.xttblog.com/?p=5221

          今年以來(lái),公司來(lái)了不少新同事。其中有一位,推薦使用 Kotlin 編寫部分微服務(wù)程序。在各方考慮之后,婉拒了使用 Kotlin 的方案。本文分析一下,為什么 Kotlin 并沒(méi)有比想象中的強(qiáng)!

          在使用了 Java 15 年后,我寫了第一行 Kotlin 代碼,到現(xiàn)在已經(jīng)差不多 5 年了。我們的團(tuán)隊(duì)用 Utterlyidle 替代 Spring,用 Totallylazy 進(jìn)行函數(shù)式編程。我們是 IntelliJ 的忠實(shí)粉絲,并試著充分利用它提供的 Java 工具。

          那個(gè)時(shí)候,我們不只使用 Java。有一些團(tuán)隊(duì)對(duì) Scala 感興趣,并用它開(kāi)發(fā)了一些服務(wù)。但是,因?yàn)?Scala 與 Java 代碼庫(kù)協(xié)作的復(fù)雜性以及緩慢的構(gòu)建時(shí)間,對(duì)于我們大多數(shù)人來(lái)說(shuō),它并沒(méi)有太大吸引力。

          2017 年,谷歌宣布 Kotlin 成為 Android 的官方開(kāi)發(fā)語(yǔ)言,另一個(gè)與我們關(guān)系密切的團(tuán)隊(duì)開(kāi)始評(píng)估是否可以在他們的服務(wù)器端開(kāi)發(fā)中使用它。最后,我們大多數(shù)人都去嘗試了一下。

          我被 Kotlin 給代碼庫(kù)帶來(lái)的影響震撼到了。它給人的感覺(jué)是更高效、更安全,雖然開(kāi)發(fā)工具沒(méi)有 Java 那么成熟,但也足夠好了。

          從一門陳舊而冗長(zhǎng)的編程語(yǔ)言中解脫出來(lái),并探索哪些編碼風(fēng)格更適合 Kotlin 的特性,這本身就是一件非常有趣的事情。Kotlin 與 Java 出色的互操作性意味著我們可以增量地依賴現(xiàn)有的生態(tài)系統(tǒng)和過(guò)渡系統(tǒng),而不會(huì)對(duì)工作造成重大干擾。

          很快,由于對(duì) Kotlin 的興趣,我們一起開(kāi)發(fā)了 http4k,一個(gè)用于開(kāi)發(fā) Kotlin HTTP 應(yīng)用程序的工具包,并組織了 Kotlin 開(kāi)發(fā)研討會(huì),幫助其他團(tuán)隊(duì)嘗試使用 Kotlin。

          最后,我們看到其他各種項(xiàng)目也在服務(wù)器端使用 Kotlin,也看到了一些團(tuán)隊(duì)強(qiáng)烈不愿意采用 Kotlin 的原因。

          有意思的是,這種抗拒并不總是因?yàn)榫幊陶Z(yǔ)言本身。那么,為什么 Java 服務(wù)器端開(kāi)發(fā)社區(qū)沒(méi)有更多地采用 Kotlin 呢?

          以下是我和我的同事們看到的一些原因。

          我們沒(méi)有時(shí)間學(xué)習(xí)一門新語(yǔ)言

          這也就是我們?cè)谲浖_(kāi)發(fā)項(xiàng)目當(dāng)中經(jīng)常看到的“忙著砍柴沒(méi)時(shí)間磨斧子”現(xiàn)象。這通常預(yù)示著更深層次問(wèn)題,比如不斷增加的技術(shù)債務(wù)和開(kāi)發(fā)效率問(wèn)題。

          健康的軟件項(xiàng)目需要開(kāi)發(fā)者花大量時(shí)間去學(xué)習(xí)。一個(gè)有能力的 Java 開(kāi)發(fā)者可以在數(shù)小時(shí)內(nèi)掌握 Kotlin 的基本知識(shí),并在數(shù)天內(nèi)提高開(kāi)發(fā)效率。

          如果采用新語(yǔ)言可以讓他們寫的代碼更簡(jiǎn)單,遇到的問(wèn)題更少,那么投入就是值得的。

          Java 的每一個(gè)版本都在變得更好

          這是真的,Java 正在變得更好,而且發(fā)布的速度也越來(lái)越快。但是,對(duì)于處理空值這么簡(jiǎn)單的事情,仍然遠(yuǎn)遠(yuǎn)落后于 Kotlin。

          也許 Java 社區(qū)已經(jīng)習(xí)慣了這種演化速度。盡管如此,Kotlin 還是提供了一種方法,可以在項(xiàng)目中用上很多 Kotlin 特性。

          作為 Java 開(kāi)發(fā)者,我們感到很自豪

          這種想法是最要命的。如果一個(gè)程序員把他們的專業(yè)身份和一種編程語(yǔ)言聯(lián)系在一起,那就沒(méi)有辦法了。

          如果說(shuō) Java 開(kāi)發(fā)者不想賭上自己的事業(yè)踏入一門新語(yǔ)言的未知領(lǐng)域,我可以理解。或者他們可能想成為一個(gè)領(lǐng)域的專家,這也很合理。

          但是,我也并沒(méi)有看到哪個(gè) Java 開(kāi)發(fā)者因?yàn)槭褂?Kotlin 而“落后”了。相反,這表明他們一直在尋找適合自己的工具,這是一種積極的特質(zhì)。

          Kotlin 是一種被炒作的語(yǔ)言,它的未來(lái)是未知的

          這是我們?cè)?2017 年經(jīng)常聽(tīng)到的反對(duì)采用 Kotlin 的說(shuō)法。在那一年,谷歌宣布將 Kotlin 作為 Android 的官方開(kāi)發(fā)語(yǔ)言,讓我們確信科技巨頭們對(duì)這門語(yǔ)言是感興趣的。

          現(xiàn)在,Spring 和 Micronaut 等流行框架似乎已經(jīng)接受了這門新語(yǔ)言,之前的反對(duì)聲就不那么經(jīng)常聽(tīng)到了。

          希望這能讓更多的服務(wù)器端開(kāi)發(fā)對(duì)這門語(yǔ)言有足夠的了解,并嘗試一下。

          我正在使用 Eclipse,不想切換到 IntelliJ

          在 Eclipse 中使用 Kotlin 的體驗(yàn)與 JetBrains 的 IDEA 不太一樣。

          這是可以理解的,因?yàn)殇N售開(kāi)發(fā)工具是 JetBrains 的商業(yè)模式之一,而且這種情況短期內(nèi)不太可能改變。

          對(duì)于這些人來(lái)說(shuō),他們能夠期望的是 Kotlin 可以達(dá)到一個(gè)質(zhì)量臨界點(diǎn),證明 Eclipse 為它提供進(jìn)一步的支持是值得的。但在此之前,對(duì)于 Kotlin 開(kāi)發(fā)者來(lái)說(shuō),最好的開(kāi)發(fā)體驗(yàn)仍然是使用 JetBrains 產(chǎn)品。

          我認(rèn)為,IntelliJ 已經(jīng)是一個(gè)更好的 Java IDE 了,所以它也值得一試。

          Kotlin 開(kāi)發(fā)者太貴了,而且很難招到

          這一點(diǎn)很難說(shuō),從招聘網(wǎng)站的數(shù)據(jù)來(lái)看,Kotlin 開(kāi)發(fā)者的薪資總體上略高一些。

          如果我們只考慮服務(wù)器端開(kāi)發(fā)者,就很難進(jìn)行比較。一般來(lái)說(shuō),Java 開(kāi)發(fā)者的薪資是最高的,但在 Kotlin 方面并沒(méi)有足夠的數(shù)據(jù)來(lái)進(jìn)行比較。

          有趣的是,在實(shí)際當(dāng)中,我們可以看到高級(jí) Java 開(kāi)發(fā)者經(jīng)常是率先采用 Kotlin 的人,這可能會(huì)給人留下 Kotlin 開(kāi)發(fā)者很“貴”的印象。

          在招聘方面,我們并沒(méi)有覺(jué)得很難招到 Kotlin 開(kāi)發(fā)者。我們很清楚,有些工作需要使用這門新語(yǔ)言,并允許開(kāi)發(fā)者在工作中邊學(xué)邊用。

          這似乎讓 Java 開(kāi)發(fā)者放下心來(lái),并吸引了那些熱衷于學(xué)習(xí)新事物的人。

          Kotlin 太復(fù)雜了

          Kotlin 之所以成為 Scala 等語(yǔ)言的替代語(yǔ)言,其中一個(gè)原因是它在易用性和高級(jí)特性之間取得了良好的平衡,與 Java 具有更好的互操作性,所以更有可能被流行框架采用。

          在實(shí)際當(dāng)中,這種反對(duì)聲與團(tuán)隊(duì)的技能、風(fēng)格和習(xí)慣有關(guān)。

          初學(xué)者一般會(huì)像使用 Java 一樣使用 Kotlin,但隨著他們?cè)絹?lái)越熟悉這門語(yǔ)言,可能會(huì)深入使用一些特性(例如擴(kuò)展和內(nèi)聯(lián)函數(shù)),從而導(dǎo)致代碼庫(kù)變得越來(lái)越難以理解。

          在團(tuán)隊(duì)完全掌握新語(yǔ)言之前,我們建議盡可能長(zhǎng)時(shí)間地使用普通的 Kotlin 特性。最后,團(tuán)隊(duì)中的大多數(shù)人都會(huì)在選擇很酷的語(yǔ)言特性和保持代碼庫(kù)易于理解之間找到平衡點(diǎn)。

          在一個(gè)代碼庫(kù)中使用兩種語(yǔ)言讓人感到困惑

          這是在實(shí)際項(xiàng)目中沒(méi)有嘗試過(guò) Kotlin 的人經(jīng)常會(huì)有的擔(dān)憂。

          在實(shí)際當(dāng)中,當(dāng)團(tuán)隊(duì)意識(shí)到新的 Kotlin 代碼需要與 Java 共存,那么在一個(gè)項(xiàng)目中使用兩種語(yǔ)言并不會(huì)給他們?cè)斐珊艽蟮耐纯唷?/p>

          這里有一個(gè)有用的規(guī)則:“如果一個(gè)變更涉及到兩種語(yǔ)言,首先將舊代碼轉(zhuǎn)換成 Kotlin”。

          這樣,團(tuán)隊(duì)就可以避免大爆炸式的重寫,并將需要添加新特性的地方進(jìn)行逐步遷移。

          如果需要保留一些 Java 代碼,那也沒(méi)關(guān)系。很有可能是因?yàn)檫@些代碼仍然有用,并且沒(méi)有進(jìn)行重構(gòu)的迫切需求。

          我們更喜歡 Java

          在實(shí)際當(dāng)中,有一些場(chǎng)景不一定要使用 Kotlin,一切仍然能夠進(jìn)行得很順利,團(tuán)隊(duì)能夠以可接受的速度完成工作。

          然而,根據(jù)我們的經(jīng)驗(yàn),這是例外,而不是常態(tài)。通常情況下,這種對(duì)語(yǔ)言的抗拒源于缺少時(shí)間和興趣,而不是因?yàn)闆](méi)有可提升的空間。

          如果沒(méi)有在真正的項(xiàng)目中使用 Kotlin,是也很難體會(huì)到 Kotlin 的好處的。即使是作為一個(gè)實(shí)驗(yàn),也存在很多焦慮。

          對(duì)于這種情況,我們建議“在工作中邊學(xué)邊用”(以編碼道場(chǎng)、培訓(xùn)等形式),創(chuàng)造一個(gè)可以進(jìn)行這種實(shí)驗(yàn)的安全環(huán)境。

          這樣可以幫助團(tuán)隊(duì)評(píng)估他們對(duì) Java 的使用狀況,以及是否值得在 Kotlin 上投入。

          我看不出 Kotlin 會(huì)帶來(lái)什么好處

          有時(shí)候,Java 開(kāi)發(fā)者意識(shí)不到語(yǔ)言方面存在的限制,或者是因?yàn)樗麄円呀?jīng)習(xí)慣了。有時(shí)候,他們會(huì)抗拒新語(yǔ)言,因?yàn)樾抡Z(yǔ)言會(huì)讓他們質(zhì)疑自己正在使用的語(yǔ)言。

          在不深入細(xì)節(jié)的情況下,我們可以說(shuō) Kotlin 的簡(jiǎn)潔性和安全性是它的主要優(yōu)點(diǎn)。然而,有些人聲稱他們不認(rèn)為 Java 的冗長(zhǎng)有什么問(wèn)題,并且寫出來(lái)的代碼也很安全。

          在真正去嘗試 Kotlin 之前,人們很容易將其忽略掉。而在真正面對(duì)它的時(shí)候,一些人會(huì)繼續(xù)尋找不嘗試使用它的理由。

          一些想法

          采用一種新的編程語(yǔ)言,特別是在正在進(jìn)行的項(xiàng)目當(dāng)中,這對(duì)于大多數(shù)團(tuán)隊(duì)來(lái)說(shuō)都是一個(gè)挑戰(zhàn)。對(duì)變化的抗拒與特定的環(huán)境有關(guān),與項(xiàng)目需求和個(gè)人原因以及語(yǔ)言本身也有關(guān)。

          話雖如此,我仍然鼓勵(lì)更多從事 Java 服務(wù)器端的開(kāi)發(fā)者,如果有機(jī)會(huì)的話,可以嘗試一下 Kotlin。

          瀏覽 40
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  狠狠躁日日躁夜夜躁A片无码视频 | 在线看一区 | 亚洲AV电影免费在线观看 | 日韩有码第1页 | 黄色免费在线观看 |