導(dǎo)讀:Java很難再做出更多的改變了,,那么它會被替代嗎?它的替代者是誰,? Bruce Eckel為什么最喜歡Python,,Python究竟好在哪? Kotlin是怎樣為程序員提高效率的,? 大齡程序員應(yīng)如何規(guī)劃自己的未來,? 在本文中,Bruce Eckel將給你這些問題的答案,。 這兩天,,Bruce Eckel來到中國,這是他的中國首秀,。5月22日,,Bruce Eckel發(fā)表了他的最新演講,與在場的1000多人分享關(guān)于編程語言的一些思考,,并講解了Kotlin的一些優(yōu)勢,。本文將送上完整演講稿,希望能讓你開腦洞,、漲姿勢,! 大數(shù)據(jù)(ID:hzdashuju)小編也追到了這位大神,大神說了一句話,,并向你扔了一張二維碼,! ▲戳視頻看會動的大神 Bruce Eckel是MindView公司的總裁,該公司向客戶提供軟件咨詢和培訓(xùn),。他是C++標準委員會擁有表決權(quán)的成員之一,,擁有應(yīng)用物理學(xué)學(xué)士和計算機工程碩士學(xué)位。從1984年至今,,他已經(jīng)發(fā)表了超過150篇計算機技術(shù)文章,,出版了6本書。他的《C++編程思想》一本書在1995年被評為“最佳軟件開發(fā)圖書”,,《Java編程思想》被評為1999年Java World“最受讀者歡迎圖書”,,并且贏得了編輯首選圖書獎。這兩本書的英文影印版及中文版均已由機械工業(yè)出版社引進出版,。 ▲大神的簽名也是萌翻了 接下來就是演講全文: 01 Kotlin是怎樣為你提高效率和生產(chǎn)力的 大家經(jīng)常會問我,,Java之后的繼承人會是哪一門語言?我給出的答案可能是帶有偏見的,,因為我在寫這本關(guān)于Kotlin的書《Atomic Kotlin》,,所以從我的個人想法來看,,Kotlin將會成為Java的下一個繼承人。這就是今天為什么我來分享這本書,。 這個就是這本書的封面,,我和Svetlana Isakova共同寫了這本書。 因為Svetlana本身是JetBrain這個組織里面的一個負責(zé)人,,她負責(zé)測試很多的功能,,所以她能夠保證這本書里面的內(nèi)容都是非常準確的。這本書最后的出版大概會在今年秋天,,和關(guān)于Kotlin的一個在阿姆斯特丹的大會同時進行,。 今天主要是給大家講一講我這個書里面的幾個例子,主要是給大家一個整體的對這門語言的感覺,。Kotlin這種語言是基于對象和函數(shù)混合的這樣一種語言,,它跟Scala很像,但是Scala更多是一種實驗性的語言,。Kotlin側(cè)重于可供生產(chǎn)使用,,能夠讓大家編程的整體體驗感覺更好。 大家可以發(fā)現(xiàn),,Kotlin這種語言它是有修飾函數(shù),,然后它的標識符是在fun這個函數(shù)后面,后面會緊跟著一個冒號,。這個方法首先是從fun這個關(guān)鍵詞開始,,接下來是這個函數(shù)的名稱,然后是它的參數(shù),、冒號,,以及這個參數(shù)的類型,冒號之后是這個方法返回值的類型,。 大家看第二個函數(shù),,我覺得這種風(fēng)格的編程方法可能是來自于Scala,首先是fun這個關(guān)鍵詞,,然后是函數(shù)名,,接下來你用一個等號表達這個函數(shù)的具體內(nèi)容。這是我們第一次看到這種類型推測,,和第一個方法進行對比,,這個函數(shù)沒有返回值的具體類型,編譯器在看到這個方法具體構(gòu)造的時候就能夠知道這個返回值是一個String的類型,。這個地方大家可以注意到,,這是和Java很不一樣的一點,就是我們不需要一定有一個類,這個地方我們只要確定一個方法,,然后把它帶的參數(shù)全部列出來,,然后我們就可以進行運行了,不需要一個類去包裹它,。 大家可以觀察到,,print的方法也會變得簡單了很多,大家不用再打“System.out.println()”,,這個地方很簡單的用println()就可以打印出來。剛才那個PPT里面也提到了Java的泛型,,Kotlin泛型,,但是它會比Java的更簡單,我今天不會給更多具體的細節(jié),,但是大家可以自己去學(xué)習(xí)一下,。 接下來是一個for循環(huán)的例子,不像Java會寫很多的參數(shù)和條件在for loop里面,,寫出1..10 就可以循環(huán)從1到10的所有整數(shù),,這個讓我想起類似Python的這樣一個風(fēng)格。Print這個語句大家可以看到它是冒號里面有一個$,,這樣會把for loop里面具體的數(shù)一個一個寫入String里面去,,這個讓我想到了Python最新的版本3.7是如何處理String這種類型的。 大家不要忘記,,今天講授的例子都來自于這本書,,這本書里面我們創(chuàng)造的一個庫,是專門負責(zé)測試的庫,,就是atomictest.eq,,通過簡單的一個命令行就可以對你的代碼進行測試。Listof()這個方法創(chuàng)造了一個list,,大家看一下,,這個地方我們沒有對list這個變量的類型做出任何的說明。 在Kotlin里面一共有兩種變量,,一種叫做val,,一種是var。現(xiàn)在我們看到的這個是val,,這種是不可變的標識符,。另外一種var是可變的標識符,我們可以對它進行重新賦值,。在大多數(shù)情況下,,我們會使用val這種不可變的變量,這也是函數(shù)類編程的一個基礎(chǔ)思想,。這個地方list我們沒有給它任何具體的類型,,編譯器能夠推測它的類型是什么,,在大多數(shù)情況下我們都是可以這樣去做的,不用告訴他類型是什么,,有一種例外就是在方法帶的參數(shù)里面我們這個地方是要標示出它的類型的,。 lst[1],這是一種創(chuàng)造索引的方法,,在這個時候我們對“1”,,就是1號這個元素進行了索引,然后通過eq這個測試方法測試它是否等于88.3,。這種方法也是Kotlin作為DSL一個非常好的語言的一種展示方法,。 接下來大家可以看到也是這種函數(shù)類編程的一種自己特有的方式,lst.reversed(),,還有l(wèi)st.sorted()這兩種其實并不會對原來的list進行修改,,它會創(chuàng)造兩個新的list。這也就是為什么函數(shù)類編程是比較安全的一種方式,,我們盡量的不要去修改原來的數(shù)據(jù)結(jié)構(gòu),。這個是我們在編程當中經(jīng)常會遇到的一個問題,就是當一個對象是在被共享的時候它的狀態(tài)發(fā)生改變的時候我們是比較難控制的,,所以我們希望盡量不要去修改原來的變量,。Reversed(), sorted()這兩個方法創(chuàng)造了兩個新的list,還想再強調(diào)一遍,。同時,,大家看到的這五種方法,比如,,max,、main、sum等都是Kotlin的標準庫里面給大家提供的方法,,大大家不需要自己再重新寫了,。 類的寫法也被大大的簡化了,現(xiàn)在看到的class NoBody后面沒有跟著大括號,,里面也沒有具體的內(nèi)容,,這是一種很像Python的寫法,這也是Kotlin自己的一個理念,,就是說如果你不需要做這樣的事情,,它不會強制你去做。 大家可能也注意到了,,Kotlin不要求大家打分號,,這是我不太喜歡Java的一點,就是Java本可以也不用寫分號的,我認為這是Java語言的創(chuàng)造者偷懶,,所以導(dǎo)致我們現(xiàn)在必須要多打一個分號,。我本人是很討厭讓我去做本可以去省略的一些事情的。 這個類SomeBody它的內(nèi)容就是它的構(gòu)造器,,就是它的構(gòu)造函數(shù),。在這個構(gòu)造函數(shù)當中,創(chuàng)建了一個屬性,,就是name,,在這個地方再一次的就是我們沒有去給它一個類型,而是通過類型推測來知道它是一個String,。 第三個class EveryBody,,這個地方的時候就是我們創(chuàng)建了一個list,里面包含了三個SomeBody這個類,,大家可以注意到,這個時候我們在構(gòu)造一個新的SomeBody的時候沒有用像類似Java一樣的關(guān)鍵詞new,。大家就會注意到Kotlin這種語言,,它的很多的細節(jié)都是從其他的語言中獲取靈感的,它其實是集很多語言的優(yōu)點于一身,。 Badger這個類大家可以看到它必須強制的帶兩個參數(shù),,一個是id String類型,一個是age,,是一個Int的類型,,就是Kotlin你在構(gòu)造函數(shù)里面的時候必須要說明它的類型是怎么樣的,因為編譯器是無法推測出你這個帶的參數(shù)的類型是什么樣的,。所以,,這是一個非常特別的一個地方。 這邊我們創(chuàng)建了兩個屬性,,一個是name,,一個age,它們兩個的賦值來自于構(gòu)造函數(shù)的參數(shù),。接下來可以看到我們這邊有一個是override的方法,,叫toString,這個跟Java的toString是一樣的,,這是Kotlin的一個特點,,就是它其實希望能夠跟Java非常緊密的結(jié)合,非常緊密的能夠互通的,。在Kotlin的時候如果我們想要去override一個方法的時候,,我們是必須要加上這個關(guān)鍵詞的,要不然這個編譯器會報錯。 這是另外一個類,,叫Snake,,它也有自己的變量和override的一個方法,大家看它和上一個Badger之間的區(qū)別就在于Badger的構(gòu)造函數(shù)里面帶了兩個參數(shù),,但是Snake這個構(gòu)造函數(shù)里面用到了var這種變量,。 還有一點不同的就是在Badger里面的時候我們是必須要明確的寫出來,明確的定義剛才的兩個,,那個里面的var,、val,然后在Snake里面我們不需要把它明確的定義出來,,但是在toString的方法里面也可以調(diào)用到它,,因為它是屬于Snake這個類里面自己的變量。 所以說,,這邊如果大家想做出類似的改變,,最關(guān)鍵的是要把剛才構(gòu)造函數(shù)里面的那個參數(shù)拿出來,然后做出聲明,,說這是一個var的類型,。這是一個我們在構(gòu)造函數(shù)里面遇到val的一個例子,我希望大家能夠知道Kotlin這種語言的魅力就在于它極大的簡化了工程師的工作量,,并且能夠減少工程師閱讀其他工程師代碼時的痛苦,。這邊在main方法里面我們創(chuàng)造了三個對象,Badger,、Snake和Moose,,然后調(diào)用eq這個測試方法測試它們的值,在這里面其實toString這個方法也是被默認的調(diào)用了,。 這是又一個類,,叫JetPack,這個例子里面主要想為大家展示Kotlin也是支持Private,、public和protected這三種訪問符,,你默認的情況下,如果你不做任何聲明它是一個public的變量,,但是你也可以說明它是一個private或者protected,。 在這里if被用作一個表達式,這個方法check()通過一個等號來調(diào)用這個表達式,,最后的結(jié)果就是如果是“是”就是warning,,如果是“否”,就是OK這樣結(jié)果,。 我想再重申一下,,Kotlin從它誕生的那個時候我們就希望它是能夠非常緊密的和Java能夠結(jié)合在一起的,。所以,你可以創(chuàng)造這樣的一個Kotlin的類,,但是從Java的代碼當中調(diào)用這個類,,同樣的你也可以在Kotlin的代碼中調(diào)用Java的類。這樣做的原因是,,我們希望使用Java的編程人員能夠從他們代碼的很小的地方開始試一試Kotlin,,從一些小的地方進行修改,這樣不需要大費周章的把整個代碼全部改成Kotlin這種語言,。 在這個例子當中,,我想說明的是關(guān)于泛型這樣的一個例子。大家可以看到,,numbers,、strings之后都有一個冒號,會有一個它們具體的類型,,你在做Kotlin編程的時候可能會遇到你不得不,,或者你希望去說明它的類型是怎么樣的,有時候你不得不去說明,,因為你不說明Kotlin,,就會給你提示你是錯誤的。 Kotlin也支持可變參數(shù)這種類型,,它通過這個關(guān)鍵字vararg來支持。在這個函數(shù)里面,,“s”是一個string,,“ints”它是可能有多個int組成的這樣一個變量。在這個例子當中,,ints就是一個數(shù)組,,我們可以用for loop,然后說in這個數(shù)組,,然后把數(shù)組里的每一個進行循環(huán)調(diào)用,,然后把它打印出來。下面這個main函數(shù)就是調(diào)用了上面的這個vararg這個方法,,你可以看到我在后面打了多個質(zhì)數(shù),。 在這個例子當中,我是想給大家看一下這三個引號這種寫法,,三個引號幫我圈起來文本的區(qū)塊,,在這種寫法當中,比如說像換行之類的,,或者單引號之類的,,都會被這個寫法照顧到,。我非常確定這種功能,這種寫法是來自Python的,,因為我只在Python見過這樣的寫法,。 接下來我們調(diào)用了split這個方法,然后在里面代入了一個正則表達式,,這個regex正則表達式是直接來自于Java的庫,。大家都很熟,這個正則表達式我們是在尋找一個或多個空格,,然后通過一個或多個空格把上面的這個String進行分隔,。而這個最后返回的結(jié)果可以是一個list,也可能是一個數(shù)組,,比如這個數(shù)組的情況下,,接下來我們調(diào)用sort的這個方法把它進行排序。 接下來大家可以看到一些Kotlin自帶的一些方法,,比如說,,我們剛才把這個顏色colors這個數(shù)組進行排序,排序之后我們可以調(diào)用toSet這個方法,,把它變成一個集,,然后下一個操作是減去所有里面空白的格。 接下來我們可以把兩個iSet加在一起,,這邊應(yīng)該它已經(jīng)變成了一個集,,所以我們可以這樣去做,這個也是很好的去解釋Kotlin的一個特性,,就是它能夠重載一個運算符,。這個“+”和上面這個“-”都是重載運算符的一個例子,因為它已經(jīng)是一個Set,,一個集合,,所以iSet+iSet最后的結(jié)果還是等于iSet,所以這兩行打印出來的結(jié)果應(yīng)該是一樣的,。color.toSet這個方法創(chuàng)造了一個不可變的Set,,MutableSet的Set。 接下來我們可以調(diào)用ToMutableSet這個方法,,重新創(chuàng)造一個新的Mutable可變的一個集,。接下來我這邊又是有一個運算符的重載,就是“+=”,,這個時候我們把color這個數(shù)組切割,,讓它從第3到第5這樣序列的三個字符,然后加到mSet這個可變的集合當中,。 接下來給大家展示的是如何能夠確認一個詞語是在一個集合當中,,有兩種方法,,一種是用in,或者是用“.contains”這種方法能夠確認,。大家可以看出來,,第一種方法,in iSet會比第二種讀起來更好讀,,這也是為什么我覺得Kotlin是一種很好的作為DSL的一個語言,。 在這邊我做了一個例子,創(chuàng)建了一個map,,大家可以看到to,,這個to不是一個關(guān)鍵字,是一個Kotlin作為DSL這種方式創(chuàng)造的一種方法,,這邊我把一個string和一個Int的映射關(guān)系存入map當中,。理所當然,我們也可以看到,,我們可以把它的一個key放進去,,看它的值是多少,或者把它所有的key全部列出來,,或者把它所有的值全部列出來,。 接下來我把這一個map里面的每一個Entry對象循環(huán)一遍,Entry是作為一個類定義出來的,,然后我把每一個打印出來,,Entry這個類有兩個自帶的變量,一個是key,,一個是value,。我還想再給大家看一下,在這個for循環(huán)里面,,我們沒有說Entry包含的值是什么類型的,編譯器在這個時候它能夠知道你現(xiàn)在是在每一個的檢驗map里面的這個值,。所以,,它會給你自己去推測它的類型。 接下來我給大家看一下這種Data class,,Data class是來自于Scala,,但是在Python的3.7版本中我也見到了類似的這種表達方法。在Scala里這種表達方法叫做case class,,case類,。 這個Data class主要的好處是在于它幫你創(chuàng)造了,一般在Java上一個類的時候里面自帶的一些比較瑣碎的方法,,比如,,getter,、setter這樣的方法,它都幫你自動創(chuàng)建了,,并且能夠幫你把它們都寫對,。因為我把“i”這個變量聲明成var這種方法,所以我可以對它進行重新賦值,,我現(xiàn)在把它的Data.i的賦值是20,。Data class幫你創(chuàng)建了比如像hashcode、 toString,、getter,、setter這樣的方法,就是避免你忘記寫這些方法導(dǎo)致運行錯誤,。 還有一個就是Kotlin做的很好的是關(guān)于getter和setter的方法,,這個其實是Java被詬病很長時間的,但是一直大家也沒有解決的一件事情,。Kotlin的做法就是可以先聲明一個var這樣的類型,,緊接著你可以寫一個get或者一個set,或者兩個都寫,,當每次你去讀寫這個變量時,,get或者set方法會被自動執(zhí)行。 Field是Kotlin里面一個特殊的提示符,,在這個情況下,,如果把“i”這個變量改名字了,叫做“j”或者其他的什么,,但是你并不需要改變Field,,因為它能夠通過Field這個特殊的關(guān)鍵詞,能夠?qū)@個類的變量,,這個“i”進行修改,。當大家看到這個方法的時候,我們創(chuàng)建了一個GettersAndSetter這個類,,我們現(xiàn)在要調(diào)用“gs.i”,,這是一個Set的方法,或者我們做一個Println(gs.i), 這是一個get的方法,,因為大家可以看到,,剛才get() 和set里面都有打印,所以,,在我們在做這兩行操作的時候,,那兩個方法都會被調(diào)用,然后我們也會看到相應(yīng)的打印,。 今天給大家展示的只是Kotlin的冰山一角,,其實還有非常多的內(nèi)容,。我其實是希望大家通過今天的這個展示能夠了解Kotlin語言背后的原理,希望大家作為編程人員能夠編的更順,、編的更快,。 在我這本書《Atomic Kotlin》里面有非常多這樣的例子,為什么我叫做Atomic Kotlin(原子Kotlin)呢,?就是我們希望把每個章節(jié)都編的足夠小,,不能再被拆分了,里面包含這樣的小例子,,讓大家最快的學(xué)習(xí)到這種語言,。我們管這本書里面的每個章節(jié)都叫一個原子。我希望今天的這個演講以及這本書能夠吸引你們?nèi)u漸的嘗試使用Kotlin,。 02 關(guān)于Kotlin的現(xiàn)場問答:為什么Kotlin比Java更好,? Q1:我是一個Android開發(fā)者,我平時發(fā)現(xiàn)Java需要通過jvm生成Native代碼跟底層進行交互,,我之前看過Kotlin可以直接編程二進制碼,,可以繞過JVM這一步,我想知道更多這樣的細節(jié),。 Bruce Eckel:在Android上編程的同學(xué)可能都有了解,,Google從去年開始把Kotlin作為Android編程的第二個語言,但其實我個人認為,,相對于Java來講,,Google更希望用Kotlin作為他首要的Android的編程的語言。我個人來講,,其實并不是希望對JetBrain這個組織的動態(tài)做出發(fā)言,,我更多希望大家去了解Kotlin的這門語言。 我可能不會把所有細節(jié)都講的很正確,,我現(xiàn)在理解,,一共有兩件事情正在發(fā)生,第一件事情就是我覺得Google正在推廣關(guān)于native code的生成,。第二件事情就是希望能夠通過單一源的代碼能夠生成native code,,能夠給iOS和Android的同事使用。在這個過程中會遇到非常多的困難,,因為需要做非常大的抽象才能把這個代碼給兩個平臺都同時使用,有一些可能就無法完成,,但大多數(shù)的應(yīng)用都是能夠?qū)崿F(xiàn)這樣的一個單一源代碼,。 同時,我覺得Google那邊也是在致力于用單一源代碼提供給更多的平臺,,我不知道這件事情什么時候會發(fā)生,,或者怎么發(fā)生,,但是我非常期待這件事情。 Q2:我是讀您的書長大的,,這本書之前是C++編程思想和Java編程思想,,我覺得最重要的不僅是語言的本身,可能還是背后的十多年前的這種面向?qū)ο蟮臇|西,。所以,,您的那本書是Kotlin語言的本身,未來您對于設(shè)計的這種方面,,比如說,,現(xiàn)在微服務(wù)比較火,關(guān)于這方面您有什么樣的想法,? Bruce Eckel:我非常感謝這個問題,,但是我打算先把這本書好好寫好。我現(xiàn)在還不想想的那么遠,,因為這本書已經(jīng)完全占據(jù)我的頭腦,。但是,你的這個想法非常好,。 Q3:我想問的問題就是剛才您說過您的語言Kotlin,,里面涉及到我們寫的編程的class類,class類里面涉及到之前Java一直垢病的一個Setter和Getter方法,,您這邊簡化了一個方式,,不用考慮是是set還是get,我們直接復(fù)制,,讓編程直接執(zhí)行set和get獲取到我們所需要的結(jié)果,。我想知道的是,當您決定了您這個編程想法,,您怎么會覺得您是否失去了這個效率,,而獲得了更好的體驗,是什么讓你覺得您的選擇是正確的,? Bruce Eckel:我剛才的這個例子只是非常初步的展示了Kotlin的語法,。我認為,這樣做的好處主要有兩個原因:第一個原因,,因為當大家做getter,、setter這個方法的時候其實只是想訪問類里面的一個值,并不是想調(diào)用一個方法,。第二,,我做這樣一個語法設(shè)計的時候?qū)懫饋頃啽愫芏啵奖愫芏啵@是最主要的原因,,我希望大家自己更多的去探索,。 Q4:Kotlin我也看過一些,也寫過一些代碼,,因為我寫Java已經(jīng)寫了13年,。所以,處理問題的時候也是用這種Java的思維這樣去寫代碼,。然后,,我會發(fā)現(xiàn)自己寫出來的代碼雖然是用Kotlin來寫,但是它的風(fēng)格仍然是Java style,,我想了解的是怎么才能寫出具有Kotlin style這樣的風(fēng)格的代碼,,怎么能夠用Kotlin的思維去處理我的問題,去分解我的問題,。 Bruce Eckel:當大家剛從C轉(zhuǎn)換到C++這種語言的時候大家也面臨過類似的問題,,雖然在寫C++還是C的風(fēng)格。我其實會建議你多去學(xué)習(xí)和了解函數(shù)式編程,,因為Java強調(diào)的是面向?qū)ο蟮木幊?,我們會非常熟悉面向?qū)ο蟮倪@種思考方式。但是,,函數(shù)式的編程如果我們更多的了解它,,會以它的這種方式去思考。我在寫這本書之前,,寫了關(guān)于Scala的這本書,,Scala是一門函數(shù)式編程的這樣一種語言,同樣還有類似像Elm這樣的編程語言,,我在做這件事情的過程中,,通過幾年的學(xué)習(xí)漸漸的理解了函數(shù)式編程這樣的內(nèi)涵。如果你認為主要是面向函數(shù)式編程這樣的風(fēng)格困擾著你,,那就是應(yīng)該你著重去學(xué)習(xí)的部分,。 Q5:Java是企業(yè)級開發(fā)比較好的一個選擇,我就想知道如果我們選擇Kotlin能比Java帶來哪些優(yōu)勢,? Bruce Eckel:首先,,這是一個非常大的問題。其實我這本書的主要目的也是為了回答你這樣的問題,,就是為什么Kotlin會比Java更好,。我其實建議大家在讀書的過程中自己去尋找這個答案,一邊讀就會靈光一現(xiàn),,突然想到這個原來就是Kotlin比Java更好的原因,。比如說你能寫出更簡潔的代碼,或者效率更高,或者你的代碼更容易被大家懂,,這是我希望大家在學(xué)習(xí)這個語言當中自己去摸索,自己去體驗的,。 Q6:考慮到剛才那個問題我延伸一下,,Java現(xiàn)在團隊開發(fā)的話,如果換到Kotlin,,看單個的代碼會容易理解一些,,但是對于從系統(tǒng)設(shè)計的這個層面來講,還會那么簡潔嗎,? Bruce Eckel:首先Kotlin這個語言的發(fā)明就是為了簡化工作量,,我自己其實并沒有真的實際做這樣的一個大的工程,所以我無法具有權(quán)威性的去說這個東西一定就是好的,。但是,,我認為,這個語言因為它的來源就是希望幫大家簡化工作量,,所以我認為應(yīng)該是沒有問題的,。很多編程語言我希望最終解決的問題就是如何把你的項目能夠越做越大,能有延展性,。Kotlin這個語言從其他編程語言當中吸收了很多的精華,,其實就是希望能夠解決這樣的問題。 03 應(yīng)該如何關(guān)愛大齡程序員,?Python到底有什么好,? Q1:Java未來的趨勢是什么?它會如何演變,?會被替代嗎,?如果會的話,將發(fā)生于何時,,誰又是它的繼承人呢,? Bruce Eckel:在Java 8里面已經(jīng)發(fā)生很多改變,Java 8進行了一些改造,,如果你要學(xué)習(xí)Java 8,,還是有很多困難需要面對。Java8,、Java9,、Java10也都會在后面的幾個月中進行一些探討。我在新書里面對Java9,、Java10會做更多的闡述,。但是我的理解是,Java是很難再被改變的更多了。當我在寫《Atomic Scala》(原子Scala)這本書的時候,,我覺得Scala有可能會成為Java的一個繼承人,,但是我不是特別的確定。但是我在Kotlin出來之后,,覺得Kotlin可能會比Scala更有希望去替代Java,。我們都知道Java語言有很多的惰性,有很多難以改變的東西,,但是Kotlin的出現(xiàn)就可以跟Java進行一個無縫的切換和整合,。Kotlin現(xiàn)在正在悄悄的溜進一些Java的工程,會使Java開發(fā)變得更快,。 Q2:現(xiàn)代技術(shù)發(fā)展的如此迅速,,請問Bruce Eckel是如何保持不斷更新自己的技術(shù)庫呢? Bruce Eckel:因為我用互聯(lián)網(wǎng),。我自己去參加很多會議,,然后我自己也會舉辦會議,我也會舉辦一些開發(fā)者的活動,,邀請可以容納到我客廳的一些人數(shù)來一起探討最新的進展,。我現(xiàn)在更多的使用線上視頻來跟會,因為很多會議的演講都會被放到網(wǎng)上去,,我發(fā)現(xiàn)這種方式比我自己親自到會議現(xiàn)場參加更好,。舉個例子,我剛從一個Python國際會議上過來,,我并沒有參加每一個單獨的話題討論,,我只是參加了開場儀式。 我覺得在語言方面,,我更多關(guān)心的議題是:第一,,如何讓開發(fā)者更多產(chǎn)。我自己更關(guān)心的是,,第一,,多產(chǎn)。第二,,多線程的問題,。第三,錯誤,,如何發(fā)現(xiàn)跟錯誤相關(guān)的一些議題,。(關(guān)于這個主題詳細探討,請戳Bruce Eckel最新演講:調(diào)bug就是浪費生命,!放棄吧,!)我并不能全面的跟隨所有科技,,你知道這樣做是不實際的。 Q3:請問Bruce Eckel對大齡程序員有什么職業(yè)建議,? Bruce Eckel:自己開公司,。不管怎么樣都是需要不斷的去學(xué)習(xí),無論是初級還是高級程序員,。有一段時間我會特別的痛苦特別的掙扎,,我會覺得自己做不了或?qū)W不下去,但是我同時腦子里也會不停的告訴自己,,一定堅持學(xué)習(xí)。有時候我覺得可能真的是已經(jīng)年紀大了,,或者可能真的已經(jīng)不夠聰明了,。但是,無論如何我腦子里的聲音都在支持自己不斷的學(xué)習(xí),,堅持下去,。 Q4:請Bruce Eckel介紹一下您在不同場景下選擇不同編程語言的動因,比如Java,、Scala,、Python等。 Bruce Eckel:坦白來講,,我最喜歡的語言是Python,。因為基本來說,每當我有問題需要被解決的時候我發(fā)現(xiàn)Python是最快可以給我結(jié)果的一個語言,,所以我很喜歡,,很享受Python。當然,,現(xiàn)在情況發(fā)生了一點改變,,我覺得Kotlin是一門非常好的語言,所以現(xiàn)在Kotlin是我的第二喜歡的,。我已經(jīng)可以想像出來一個畫面,,我用Kotlin寫一些我的項目,但是目前只是一個想象的東西,。底線就是每當我有問題,,我覺得需要被解決的時候,我第一個想到的就是Python,。除此之外,,從Python社區(qū)發(fā)展開始,我就在他們的官方會議上有過兩次的筆記分享,,我覺得我對于Python在方向上的把控上是有一定的影響力的,,而且我發(fā)現(xiàn)Python的社區(qū)是我見過的,,我覺得這個世界上最友善的社區(qū)。 但是,,回到之前說的那個話題,,我覺得語言方面我最關(guān)注的是多產(chǎn)這一個方向。所以,,我覺得我在任何一個語言里都學(xué)到了很多東西,。每一種語言都有它的優(yōu)勢和劣勢。雖然我自己偏好于Python,,但是我并不建議每個人都去用Python,,我更多的是建議每個開發(fā)者都找到合適自己解決問題的那個語言,不要固定或者局限于某一種語言,,我發(fā)現(xiàn)當我去學(xué)其他的語言的時候,,我對于編程的能力也是在不斷的擴展的。 Q5:我剛才聽到Bruce Eckel說您對Python比較喜歡,,第二喜歡是Kotlin,,Python在機器學(xué)習(xí)和AI方面有很多的用處,比如說Python Machine Learning比較好,,我想知道Kotlin在Machine Learning方面有什么優(yōu)勢,,比Python更好一些。 Bruce Eckel:Scala里面有一個關(guān)于機器學(xué)習(xí)的一個庫,,我覺得Kotlin有可能也會有類似的這樣的一些庫,。我主要解釋一下為什么Python會作為機器學(xué)習(xí)非常好的一種語言,因為Python把其他語言做了一個封裝,,調(diào)用其他語言做的包,。很多的數(shù)據(jù)科學(xué)家他們其實是不希望學(xué)習(xí)過于復(fù)雜的編程語言,能夠把他們關(guān)于數(shù)據(jù)方面處理的智慧進行封裝起來,,通過Python來調(diào)用這樣會方便很多,,這也是為什么Python這幾年這么流行的原因。 04 《Atomic Kotlin》的中文版哪里有,? 5月24日,,Bruce Eckel來到機械工業(yè)出版社,商討《Atomic Kotlin》等新書出版事宜,。Bruce Eckel最新著作的中文版已經(jīng)在路上,,各位就等待查收吧! |
|
來自: heii2 > 《大數(shù)據(jù)》