国产高清在线免费观看-国产高清在线免费无码-国产高清在线男人的天堂-国产高清在线视频-国产高清在线视频精品视频-国产高清在线视频伊甸园

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

引入新編程語言的經(jīng)驗(yàn)教訓(xùn)

admin
2012年3月13日 14:10 本文熱度 3148

引言:這些年我(在工作中)使用過很多編程語言:(馬上能夠想到的有)Cold Fusion、HTML、Javascript、php、 SQL、 CSS,、ASP(經(jīng)典ASP和.net)、C#、Ruby、Flex、Java以及Clojure。每個(gè)語言都有自身的優(yōu)缺點(diǎn)。作為一名程序員,你可以很容易地指出這些缺點(diǎn)——概括起來就是一句話:

我痛恨所有的編程語言—— Matt Foemmel

我認(rèn)為一開始就考慮到這個(gè)問題很重要。在某些時(shí)候,你會(huì)對(duì)現(xiàn)在提倡的東西開始厭惡,所以請(qǐng)想象一下別人對(duì)它的感受。

在2008年,我在DRW的一個(gè)代碼庫中引入Clojure語言。這篇博客討論了過去幾年中,我在引入新語言的過程中得到的經(jīng)驗(yàn)和教訓(xùn)。

選擇語言

在組織里引入一門新的語言并非易事。如果你想要成功,你需要選擇一門編程語言,它不但能夠滿足廣泛的技術(shù)要求同時(shí)還要得到大家的認(rèn)可。在加入DRW 的時(shí)候,我100%用Java編程,盡管事實(shí)上我編寫的大部分代碼只需要在眨眼之間運(yùn)行完成(250毫秒)。我們編寫代碼要求運(yùn)行時(shí)間比眨眼還要 短,Java是絕對(duì)正確的選擇,但使用Java編寫其他代碼讓我感覺Java成為了一種負(fù)擔(dān)。

偶爾我會(huì)抱怨這種負(fù)擔(dān),我的老板開始對(duì)JRuby發(fā)生了興趣。我認(rèn)為選擇JRuby對(duì)我們已經(jīng)是一個(gè)勝利,但就我個(gè)人而言更想聽到支持非Java語言的呼聲。如果考慮JRuby,那么我認(rèn)為任何高級(jí)的動(dòng)態(tài)類型語言都可以勝任。

然而,在我對(duì)JRuby生成好奇心之前,我已經(jīng)開始學(xué)習(xí)Haskell了。總的說來,在貿(mào)易公司使用的軟件要求運(yùn)行“快速”。如果我要成功地引入一 門新語言,它必須運(yùn)行得“幾乎和Java一樣快”。Haskell執(zhí)行速度很快我已有所耳聞,它同時(shí)也滿足了我的另一個(gè)選擇條件:

一門編程語言,如果不能對(duì)你思考編程的方式產(chǎn)生影響,就不值得去學(xué)習(xí)。——  Alan Perlis

我認(rèn)為,如果我發(fā)現(xiàn)一門編程語言“性能足夠好”,發(fā)布程序速度更快,并且能夠提高我們的編程水平,那么在它上面花時(shí)間就是值得的。

我玩過一點(diǎn)Haskell,但是學(xué)習(xí)曲線似乎太陡峭。學(xué)習(xí)Haskell需要一些時(shí)間,但更重要的是:我們的產(chǎn)品已經(jīng)運(yùn)行在JVM上。如果我需要得 到任何幫助,應(yīng)該能夠輕易地融入現(xiàn)有的基礎(chǔ)設(shè)施。想想Clojure,它的性能足夠好,比Java更簡(jiǎn)潔,并且比我之前用過的其他語言更加有效。 Clojure同時(shí)也是動(dòng)態(tài)類型的高級(jí)語言(像Ruby一樣),所以我希望能夠得到老板的支持。

讓同事們盡可能地減少學(xué)習(xí)的痛苦是一個(gè)很大的要求——我認(rèn)為這是接受新語言的關(guān)鍵。Clojure看上去是最佳的選擇,因?yàn)槲覀儸F(xiàn)在已經(jīng)在工作中已經(jīng)使用下列工具:

• 整天使用IntelliJ

• 使用JUnit運(yùn)行所有測(cè)試

• 使用TeamCity創(chuàng)建CI和artifact

• 在服務(wù)器上運(yùn)行JVM

• 使用Yourkit進(jìn)行動(dòng)態(tài)分析

Clojure能夠滿足我的所有條件,其他同事接受起來也會(huì)更容易。

作為學(xué)習(xí),我更推薦Haskell或者OCaml,但他們并不適合在實(shí)際中選用——我懷疑是否能夠成功地將他們應(yīng)用到開發(fā)中。當(dāng)我需要在 Clojure方面給與專業(yè)指導(dǎo)時(shí),我會(huì)依賴其他人認(rèn)可的“最佳”JVM服務(wù)器設(shè)置。如果一旦選擇了Haskell或者OCaml,我將需要在更多方面成 為專家(例如部署、內(nèi)存模型、函數(shù)庫、新開發(fā)工具等等)。

不論是當(dāng)時(shí)還是現(xiàn)在,我都認(rèn)為Clojure是在技術(shù)要求和公司環(huán)境下的最佳選擇。

Hello World

引入一門新的語言是一個(gè)微妙的行為。你需要兼顧很多的相關(guān)內(nèi)容。我不確定同事們會(huì)對(duì)使用Clojure作何反應(yīng),所以我在家里預(yù)先寫好了代碼。雖然 大家都需要集成測(cè)試,然而沒有人積極行動(dòng)。于是我開始用Java編寫集成測(cè)試,然后寫出了Clojure的版本。我非常了解Clojure并能夠向其他人 展示它的簡(jiǎn)潔——這是團(tuán)隊(duì)在集成測(cè)試中最看重的東西。除此之外,因?yàn)闇y(cè)試并不是實(shí)際產(chǎn)品運(yùn)行的代碼,因而并不真正需要考慮實(shí)際執(zhí)行速度。

集成測(cè)試是一個(gè)引入新語言的好地方,其實(shí)任何非產(chǎn)品代碼都是好的選擇。例如,你也可以選擇數(shù)據(jù)庫遷移腳本、日志文件解析器、第三方軟件模擬器或者軟件部署。只要你的選擇不會(huì)馬上帶來痛苦,你應(yīng)該能夠很容易地從任何遷移到新語言的失敗中恢復(fù)過來。

當(dāng)我完成了Java和Clojure版本的測(cè)試以后,我給開發(fā)組里的其他人展示了這兩個(gè)版本。我告訴他們?yōu)槭裁次彝扑]Clojure版本,并詢問他們能不能用Clojure做一次嘗試。我也做出承諾,讓他們很難拒絕做這樣的實(shí)驗(yàn)。

hello world
( Credit: Windell Oskay )

 

 

你的使命

為了讓我的伙伴們減少接受新語言的恐懼,我做出了下列承諾:

• 如果你想要編寫代碼,我會(huì)和你一起做(假如你想要和我一起工作的話)

• 如果你不想編寫代碼,我會(huì)將缺失的部分補(bǔ)上

• 如果你覺得用新語言寫代碼讓你難以接受,我會(huì)在我的個(gè)人時(shí)間將所有的內(nèi)容重新用Java寫一遍

很明顯地,你需要在使用新語言編寫很多代碼之前讓團(tuán)隊(duì)接納——否則你會(huì)獨(dú)自一個(gè)人在晚上和周末加班。

工具支持

運(yùn)氣好的話,你的團(tuán)隊(duì)已經(jīng)有了一套他們喜歡的工具。不論工具是什么,你的新語言應(yīng)該能夠很好地被支持。對(duì)我而言,這就意味著在IntelliJ上 Clojure應(yīng)該像Java一樣被執(zhí)行。很大程度上La Clojure插件完成了這項(xiàng)重任;然而,我需要編寫一個(gè)而是框架讓我能夠運(yùn)行指定的測(cè)試并且無縫地將現(xiàn)有JUnit測(cè)試集合集成進(jìn)去。這里要說的是,請(qǐng) 為團(tuán)隊(duì)成員消除所有新語言可能帶來的阻力。學(xué)習(xí)一門新語言的要求是合理的,但僅僅為了適應(yīng)一個(gè)(在那個(gè)團(tuán)隊(duì)里)未經(jīng)實(shí)際驗(yàn)證過的語言而改變團(tuán)隊(duì)的工作,這 也許是一個(gè)過分的要求。

你也可能需要作出一些犧牲。我喜歡在emacs中編寫Clojure;然而我寧愿在IntelliJ中編寫Clojure而不是Java。在轉(zhuǎn)向新語言剛開始的脆弱時(shí)期,你會(huì)是需要作出妥協(xié)最多的人。

尋找同盟軍

對(duì)新語言熱愛程度的不同會(huì)讓事情的發(fā)展也有所不同。當(dāng)別人開始感興趣的時(shí)候,你應(yīng)當(dāng)盡己所能地鼓勵(lì)他們。然而,不要強(qiáng)迫別做事情——這是最容易樹敵 的辦法。希望你能找到一些和你一樣對(duì)新語言感興趣的伙伴——與他們一起緊密工作并提高你的水平。你需要尋找更多的支持者,否則你會(huì)成為團(tuán)隊(duì)中唯一強(qiáng)迫別人 做他們不喜歡事情的人。

你不可避免地需要做一些調(diào)研,需要相關(guān)工具的支持,而且需要處理比開始預(yù)期更多的問題。當(dāng)你發(fā)現(xiàn)自己捉襟見肘的時(shí)候,會(huì)需要其他人來助你一臂之力。即使一切運(yùn)轉(zhuǎn)正常,你也會(huì)發(fā)現(xiàn)需要一些支持者來幫助你維護(hù)日益增多的新語言代碼。

最后,最糟糕的情況是當(dāng)你離開團(tuán)隊(duì)時(shí)沒有一個(gè)留下的人愿意維護(hù)這些代碼。當(dāng)人員發(fā)生調(diào)整時(shí),采納新語言會(huì)很容易成為大問題。

了解所有事情

很明顯地你不可能確切地了解所有的事情,但當(dāng)問題出現(xiàn)時(shí)你需要能夠馬上給出或想出一個(gè)答案。在將新語言放進(jìn)如何代碼庫之前,你一定要通讀幾本新語言 的書,因?yàn)榇a庫是你的同事賴以工作的基礎(chǔ)。這樣還不夠,你還要知道如果遇到問題你能夠去哪里尋求幫助。對(duì)于Clojure,得到問題回復(fù)方式就是 IRC,如果問題不是很緊急或者需要詳細(xì)描述你的問題,你可以通過郵件列表來尋求答案。如果你真的想要掩蓋自己的不足,你需要和語言的作者或者社區(qū)的領(lǐng)袖 人物建立某種關(guān)系。

一旦人們接受了你介紹的新語言,他們會(huì)開始做一些你意想不到的事情。你需要了解語言的缺點(diǎn),并想到可能因此帶來的后果。你還需要成為一名專家,通曉內(nèi)存分配、性能、部署、工具集成、函數(shù)庫支持、升級(jí)計(jì)劃以及除了語言文法之外的所有問題。

你的支持者越多,需要“知道所有事情”的情形就越少。然而,在每天完成工作以后,你還是應(yīng)當(dāng)盡可能地去了解相關(guān)的技術(shù)。如果出現(xiàn)問題,所有人都會(huì)認(rèn)為這是你的錯(cuò)。這就是引入新語言應(yīng)當(dāng)承擔(dān)的責(zé)任,所以你應(yīng)當(dāng)更好地理解你正在做什么。

獲得幫助

如果你的公司愿意讓你引入新的語言,那它一定愿意提供支持。有可能你已經(jīng)得到了一些培訓(xùn)預(yù)算。看看有沒有機(jī)會(huì)能夠讓語言作者或者社區(qū)領(lǐng)袖和你一起工 作,或是提供相關(guān)的培訓(xùn)。如果你在新語言的各個(gè)方面都有問題,那么讓語言的作者和你一起工作會(huì)帶來巨大的好處。當(dāng)然一切進(jìn)展順利的時(shí)候,如果團(tuán)隊(duì)中其他對(duì) 新語言感興趣的同事能夠從語言作者(或者某個(gè)社區(qū)領(lǐng)袖)那里學(xué)習(xí),那么將預(yù)算投給這樣的培訓(xùn)會(huì)給你帶來巨大的好處。無論是你自己或是感興趣的支持者,利用 公司的培訓(xùn)預(yù)算來推廣新語言都是有益的事情。

成為擁護(hù)者而不是狂熱分子

每天結(jié)束工作的時(shí)候,并非每個(gè)人都能會(huì)妥協(xié)。 這沒有關(guān)系。不要將自己的觀點(diǎn)強(qiáng)加給對(duì)此沒有興趣的人。最有可能的情況是,總會(huì)有人對(duì)“正確”選擇充滿熱情。也許你對(duì)自己推薦的語言報(bào)以熱情,但你的隊(duì)友 可能非常喜歡之前的語言。你們不必為此分出誰對(duì)誰錯(cuò)。人們只會(huì)用自己喜歡的語言編程,任何試圖讓他們嘗試別的方式都會(huì)弊大于利。喜歡用新語言的人們會(huì)聚集 在一起,而不喜歡的人也會(huì)如此。沒有任何理由強(qiáng)迫別人接受。

起初我對(duì)這個(gè)問題的看法是“如果我提出一個(gè)好的辦法,那么所有人都會(huì)接受它。”事實(shí)并非如此,所以我寫了一篇軟件開發(fā)中的妥協(xié)。我了解到一個(gè)人眼中“更好的辦法”在另一個(gè)人看來卻是“更糟糕的選擇”。最后,團(tuán)隊(duì)分成了用Clojure編程和不用Clojure兩個(gè)小組。這對(duì)兩方都有好處,想要用Clojure的人會(huì)有更好的環(huán)境,而其他人也不用強(qiáng)迫使用Clojure.

這種劃分當(dāng)然只是私下的,在公司里我們?nèi)匀皇恰耙粋€(gè)團(tuán)隊(duì)”。但我們開發(fā)不同的應(yīng)用程序,通過發(fā)消息交流或者不溝通。我強(qiáng)烈建議一個(gè)小組按照不同的想 法和規(guī)模分開(7個(gè)人的團(tuán)隊(duì),我認(rèn)為分成4人和3人兩個(gè)小組是可以接受的),但永遠(yuǎn)不要在公司里公開。逐漸的,其他因素會(huì)讓團(tuán)隊(duì)規(guī)模縮小,這種劃分會(huì)變得 多此一舉。如果團(tuán)隊(duì)沒有因?yàn)槠渌蛑亟M,我仍然堅(jiān)信組內(nèi)劃分是最好的選擇。

尾聲

引入一門新語言對(duì)于任何上規(guī)模的組織都是一件需要多年才能完成的事情。自打引入新語言開始,你的責(zé)任就永遠(yuǎn)不會(huì)“結(jié)束”。反過來說,你已經(jīng)開始使用 適合這項(xiàng)工作最好的工具。希望所有說過和做過的事情都是值得的。就自己而言,我對(duì)自己的選擇感到高興,但我也期待未來的幾年里在“引入新語言”這個(gè)話題上 能有更多的收獲。


該文章在 2012/3/13 14:12:03 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 亚韩精品视频二三四区 | 亚洲AV综合久久九九 | 精品私库av在线 | 亚洲AV无码综合一区二区三区 | 日本一级一二三不卡 | 亚洲宅男精品一区在线观 | 亚洲精品国产电影 | 中文字幕人妻少妇伦伦伦 | 91精品免费久久久久久久久 | 成人国产色情免费观看 | 成人国产在线观看 | 国产精品日韩欧美一区二区三区 | 免费无码毛片一区二区本码 | 绝色影院一区二区无码 | 亚洲国产综合精品中文第一 | 夜色在线一区h | 免费精品国产人妻国语色戒 | 国产精品沙发午睡系列990531 | 亚洲av午夜福利精品香蕉麻豆 | 另类专区另类专区亚洲 | 中文日产无乱码AV在线观 | 国产一区二区在线视频 | 亚洲浮力影院久久久久久 | 在线欧美精品第1页 | 在线看免费不卡av | 国产极品美女高潮无套在线观看 | 国产老熟女网站 | 亚洲精品无码午夜福利中 | 无码人妻少妇久久中文字幕蜜桃 | 无码高清视频在线播放十区 | 免费无码av片在线观看播放 | 国产成人精品视频一区二区三区 | 日韩人妻无码精品无码中文字 | 欧美人与拘牲交大全 | 国产一区二区不卡老阿姨 | 精品久久久久久中文字幕人妻最新 | 国产日韩欧美一区二区三区四区 | 亚洲三级无码经典三级 | 夜夜嗨av一区二区三区 | 国产成人精品无缓存在线播放 | 精品视频国产 |