自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

掌握多種語言是我的財富 —— 來自《高效程序員的45個習(xí)慣》作者

開發(fā) 開發(fā)工具
Venkat Subramaniam 博士是 Agile Developer 公司創(chuàng)始人,Jolt 圖書大獎獲獎作者,現(xiàn)在休斯敦大學(xué)計算機系兼職任教。作為敏捷開發(fā)方面的權(quán)威人士,他培訓(xùn)并指導(dǎo)了美國、加拿大、印度和歐洲多國的上千名軟件開發(fā)人員,并 多次在各種大會上發(fā)表演講。

Venkat Subramaniam 博士是 Agile Developer 公司創(chuàng)始人,Jolt 圖書大獎獲獎作者,現(xiàn)在休斯敦大學(xué)計算機系兼職任教。作為敏捷開發(fā)方面的權(quán)威人士,他培訓(xùn)并指導(dǎo)了美國、加拿大、印度和歐洲多國的上千名軟件開發(fā)人員,并 多次在各種大會上發(fā)表演講。Venkat 是一位多產(chǎn)的技術(shù)作家,他著有《Groovy 程序設(shè)計》、《Scala 程序設(shè)計:Java 虛擬機多核編程實戰(zhàn)》,以及 Jolt 大獎獲獎圖書《高效程序員的 45 個習(xí)慣:敏捷開發(fā)修煉之道》。

[[125067]]

《高效程序員的 45 個習(xí)慣:敏捷開發(fā)修煉之道》作者

問:在《高效程序員的 45 個習(xí)慣》中,你告訴了我們很多絕妙的技巧。你是從哪里得到這些想法的?

大多數(shù)是通過對于軟件項目觀察和批判思考得來的。長年以來,通過在商業(yè)軟件項目上的工作經(jīng)驗,我們觀察到了哪些做法是有效的,而哪些做法并不管用。 我們真心誠意地想要分享所學(xué)到的知識,這就是這本書的寫作動機。書中的想法來源自個人經(jīng)歷、觀察、思考,以及討論核心問題及其解決方案。當(dāng)我們回想這些項 目的時候,通過我們倆人(Andy Hunt 與 Venkat Subramaniam)的個人經(jīng)歷,以及咨詢對象的意見,一些最為基礎(chǔ)的實踐浮現(xiàn)了出來。我們意識到這些實踐可以幫助到在軟件開發(fā)道路上追求精益求精的 人。

問:Java 的特性越來越像 Scala 和 Groovy,考慮到 Java 在性能方面的優(yōu)勢,Scala 和 Groovy 的地位是否會有所動搖?這三種語言在未來會是什么樣?

Java 正在向函數(shù)式編程看齊;這種思想在很多語言中都已經(jīng)存在很久了,比如 LISP,Erlang,以及 Haskell。對于這門被很多人稱為“世界上***”的語言來說,這是正確的方向。但是我并不認為這對于任何其他語言是一種威脅。以前,和 Java 相比有些語言可以多做n件事?,F(xiàn)在,我們?nèi)匀豢梢远嘧龌蛴貌煌绞絹硗瓿蒼-1 件事。

如果真要發(fā)生的話,Java 的進化只會讓其他這些 JVM 語言變得更強大。Java 對于 lambdas,streams 以及 invokedynamic 的支持提升了這個生態(tài)系統(tǒng),使其更加支持函數(shù)式編程風(fēng)格。JVM 的其他語言可以從中獲益。那些因為編程風(fēng)格而不愿意接觸 Scala 或 Groovy 的程序員很快就會在 Java 中喜歡上這種風(fēng)格。隨著 Java 在正確的道路上不斷前進,差距就變小了。這對于其他語言來說是好事,對于 JVM 程序員來說是好上加好。

問:Groovy 之父 James Strachan 曾經(jīng)說過 Scala 會取代 Java,你同意這種說法嗎?相對于 Scala 而言,Groovy 有什么獨特的優(yōu)勢嗎?

如果真要發(fā)生的話,那***的時機就是在幾年以后。但是看起來語言的應(yīng)用應(yīng)該會是分散的。當(dāng) Java 還在充當(dāng)排頭兵的時候,應(yīng)該還有其他幾種語言也應(yīng)用在生產(chǎn)環(huán)境中。很難相信會有某種語言完全取代 Java,在 5 年內(nèi)肯定不會發(fā)生。但是十年后呢?真希望我有這種預(yù)測能力。

語言吸引著我。Scala 很好玩,Groovy 也很有趣。Groovy 的真正魅力在于它的元編程能力以及輕易和 Java 集成的能力。Groovy 在大多數(shù)地方保留了 Java 的語義,并增加了流暢性。但是 Groovy 的制勝法寶是利用運行時間和編譯時間的元編程進化程序,這也讓 Gradle 和 Grails 這樣的工具有了用武之地。

問:什么樣的項目最適合應(yīng)用 Groovy?

幾乎所有需要 Java 的項目都可以用 Groovy。幾年前,大部分人對 Groovy 還有性能方面的憂慮,但是隨著靜態(tài)編譯的出現(xiàn),這種憂慮已經(jīng)很大程度消失了。

Groovy 對于各種各樣的項目都適用,從小程序到企業(yè)級應(yīng)用。

對于還不太熟悉 Groovy 的人來說,可以選擇從 Spock 開始,這是一個用 Groovy 元編程寫的很不錯的自動測試工具。一旦我們習(xí)慣了 Groovy,就可以繼續(xù)用 Groovy 完成自動化任務(wù)了,比如發(fā)送大部分郵件,運行背景任務(wù),處理 XML 文件、字符串以及文件處理等等。

任何可以在 Java 里面做的事,我們都可以用更少的代碼在 Groovy 更流暢地完成。接下來我們可以去創(chuàng)建 web 應(yīng)用,在這里,我們還可以利用 Groovy 的元編程用代碼合成行為,而不需要為不同類型的對象寫多余的代碼。

我自己已經(jīng)為很多大公司采用 Groovy 和 Grails 進行過咨詢和培訓(xùn),他們都在生產(chǎn)力上有所提升,也能更輕松地開發(fā)和部署了。

問:Groovy 已經(jīng)可以在 Android 上使用了,有人預(yù)測一旦程序員們嘗試過 Groovy,就會拋棄 Java。Groovy 在 Android 上運行地如何?它會是革命性的嗎?

我已經(jīng)用 Groovy 和其他 JVM 語言完成了很多工作,在設(shè)備上說,我大多數(shù)時候都在為 iPhone 開發(fā)。我在 Android 上的經(jīng)驗仍然有限,所以無法更好地回答這個問題。

問:Scala 是一種能力很強的語言,但是很多開發(fā)者也說它是宇宙中最難的語言。有很多對這門語言感興趣的程序員,對于他們你有什么建議嗎?

我經(jīng)常開玩笑說 Scala 就像一座城市,你應(yīng)該知道哪個部分是可以拜訪的,而哪個部分是應(yīng)該避開的。話雖如此,如果我們只熟悉一門語言,那么學(xué)習(xí)一門完全不同的新語言通常都是很困難的。

我們不需要學(xué)會關(guān)于 Scala 的一切或者學(xué)習(xí) Scala 的所有部分才能有效地使用它。如果發(fā)現(xiàn) Scala 的某些領(lǐng)域比其他部分更難學(xué),那么我們可以從那些不太嚇人的地方開始。從語法上說,Scala 可以用很多不同的方法來完成同一件事。我們可以從最熟悉的地方開始,然后逐漸熟悉整個語言,我們可以探索用不同的方式來完成相同的動作。如果語法變得讓人 迷惑,我們可以后退,給變量更有表現(xiàn)力的名字,避免一開始看起來就很神秘的運算符。

要想學(xué)習(xí)這門語言有很多可用的資源。比起讀書,花時間寫代碼更加重要。只有寫更多代碼,我們才能更好地掌握語言。所以,把恐懼放到一邊,讓實踐和激情指引我們吧。

問:你覺得讓團隊所有成員都接受一套語言和工具有必要嗎?為什么?

有兩類團隊。一類是特定人在特定領(lǐng)域工作,其中某一個開發(fā)者會對特定部分的代碼負責(zé)。另外還有一種團隊,他們集體對代碼負責(zé),任何愿意和有能力修改代碼的人都可以這么做。我是集體負責(zé)制和合作開發(fā)的倡導(dǎo)者。這樣做可以降低很多方面的風(fēng)險,比如降低單點失敗的可能性。

在團隊中存在大多數(shù)人無法理解的代碼已經(jīng)是一個很大的風(fēng)險了。我們不想再加上大多數(shù)成員無法理解的語言和工具。另外,對于實踐集體負責(zé)制的團隊,擁有整個團隊都能維護的語言以及共同的開發(fā)環(huán)境,是合作工作方式能夠成功的唯一方法。

問:通過 scriptEngine,Java 調(diào)用 Groovy 的代碼的方式性能比較差,Groovy 和 Java 配合有什么更好的方式?

Groovy 身上的一大好處就是用來編譯的-j選項。通過這個選項,Groovy 的編譯器 groovyc 會讓 Java 編譯器來編譯.java文件,讓 groovyc 編譯器來編譯.groovy文件。一旦這些文件由不同編譯器編譯,其最終結(jié)果就都是字節(jié)碼。一旦我們把代碼都編譯成字節(jié)代碼,不同語言寫出的代碼就沒什么實際上的區(qū)別了。只要在類路徑中還有必要的jar文件就沒問題。所以其實沒什么必要利用 scriptEngine 把 Java 代碼調(diào)入到 Groovy 代碼中。

問:對于你來說學(xué)習(xí)新語言和新工具意味著什么?***的獎賞是什么?

我可以毫無壓力地用十幾種語言編程。學(xué)習(xí)前幾門語言確實很難,后面的那些就容易多了。其背后的原因我認為在于一點一滴積累式的學(xué)習(xí)。我們并不善于一口氣學(xué)習(xí)很多新概念。我們漸進式學(xué)習(xí),每次知識的體量都很小。

我堅定地相信學(xué)習(xí)一門新語言的難度和我們所熟悉掌握的語言數(shù)量成反比例。如果僅僅熟知一門語言,那么要學(xué)習(xí)和***門語言截然不同的第二種語言就會花 很多時間。另一方面,如果我們花時間研究不同的范式和呈現(xiàn)方式,思維就會迅速比對新語言中的特性。有可能我們可以在熟悉的特性中找到類似的。但是如果我們 只知道一種范式或呈現(xiàn)方式,那么這個可能性就很低,所以學(xué)習(xí)起來就很費勁。

十幾年前,我用 Basic 和C編程。然后我又用C++, Java,以及 C# 編程。Ruby 對我來說是一個很大的改變,學(xué)習(xí)起來有些困難。我用 Ruby 編程了幾年之后,再學(xué)習(xí) Groovy 就變得很簡單。隨后我又開始對 Erlang 感興趣。這也是一次大改變。但是在我用 Erlang 編程的幾年之后,學(xué)習(xí) Scala 變得非常容易,因為它們的角色模型、功能類型等方面都很相似。

在我看來學(xué)習(xí)語言和工具的收獲是很大的:

首先,這讓我擁有一個很大的客戶基礎(chǔ)。最近我?guī)椭艘患掖蠊具m應(yīng)了關(guān)鍵性敏捷技術(shù)實踐,比如測試驅(qū)動開發(fā)以及有效模仿。作為一家國際化的大公司, 他們擁有不同語言寫成的應(yīng)用。我需要在不同地點使用 8 種不同語言幫助他們。我無法想象如果不會這些語言,我將如何指導(dǎo)這家公司。

另外,由于接觸了各種不同的語言,對于我來說學(xué)習(xí)新語言的時間成本已經(jīng)變得很低。

我在教授軟件設(shè)計和編程語言課程的時候,我給學(xué)生百分百的自由來挑選自己想學(xué)的語言。對于我來說解釋概念是很容易的,比如設(shè)計模式,我可以用他們熟知的語言舉例子。作為一位訓(xùn)練者,我在這方面也受益匪淺,掌握多種編程語言的感覺就想像用不同的自然語言進行交流一樣。

原文鏈接:http://www.ituring.com.cn/article/131909

責(zé)任編輯:張偉 來源: 圖靈社區(qū)
相關(guān)推薦

2013-07-11 17:18:17

程序員習(xí)慣

2019-08-14 17:20:40

程序員人生第一份工作Google

2012-06-25 10:05:10

程序員

2019-04-16 14:03:47

編程程序員代碼

2012-05-22 00:16:47

2021-11-01 22:39:14

程序員專業(yè)技術(shù)

2011-05-24 17:20:57

程序員

2011-03-07 09:45:51

FileZilla

2009-02-23 13:00:17

程序員職業(yè)習(xí)慣

2012-12-04 10:08:25

程序員

2009-06-02 13:43:04

程序員定義職場

2013-06-08 14:12:13

程序員招聘

2013-07-24 14:17:10

2010-03-02 10:13:56

程序員面試

2015-06-10 10:43:07

2015-11-23 09:27:39

程序員不良編程習(xí)慣

2011-07-15 15:10:37

PHP

2016-02-01 15:43:37

成功程序員習(xí)慣

2017-04-06 15:00:38

編程語言

2021-02-20 13:55:35

程序員計算機技術(shù)
點贊
收藏

51CTO技術(shù)棧公眾號