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