程序員是否應(yīng)當(dāng)有權(quán)自主選擇語言以及框架?
譯文網(wǎng)友Spencer問道:
我目前就職于一家主要面向C#語言的公司,雖然公司內(nèi)部也有幾位喜歡Java與JRuby的同事,但大多數(shù)程序員都更傾向于使用C#。當(dāng)時(shí)我被錄用的理由是,我擁有豐富的Web應(yīng)用程序創(chuàng)建經(jīng)驗(yàn)而且比較喜愛JRuby on Rails或者node.js這類新型技術(shù)。
最近我開始接手一個(gè)Web應(yīng)用程序構(gòu)建項(xiàng)目,主要工作就是必須在短時(shí)間內(nèi)保證該應(yīng)用能夠?qū)崿F(xiàn)大量針對性功能。軟件開發(fā)負(fù)責(zé)人要求我使用MVC 4來取代Rails,這倒并不是什么過分的要求,但我對于MVC 4完全不了解、對于C#也一無所知。然而我又是惟一一位負(fù)責(zé)創(chuàng)建Web應(yīng)用程序服務(wù)器及前端UI的程序員。
難道說我就不能使用自己非常了解而且已經(jīng)熟練掌握的框架(Rails)來代替MVC 4嗎?之所以作出這樣的決定,是因?yàn)檫@位軟件負(fù)責(zé)人不知道如何運(yùn)用JRuby/Rails、當(dāng)然也就無法重復(fù)利用由此開發(fā)出的代碼。
反對意見:
• 既然他本人并不參與代碼編寫工作,那么坦率地講整個(gè)開發(fā)項(xiàng)目根本不需要他的參與。因此,無論他了不了解JRuby/Rails都并不重要。
• 我們實(shí)際上能夠重新使用這部分代碼,因?yàn)槲覀儞碛写罅縅ava應(yīng)用,因此與JRuby之間進(jìn)行代碼往來與交換。事實(shí)上,他還要求我們把一部分資源由Java庫轉(zhuǎn)換成C#,而不準(zhǔn)員工直接在JRuby on Rails應(yīng)用中運(yùn)行Java庫。這一切的惟一理由就是,他不喜歡Java或者JRuby。
我曾經(jīng)親自開發(fā)過很多Web應(yīng)用程序,但使用自己不熟悉的語言會給流程帶來障礙,而且我更沒辦法在這么短的時(shí)間里拿出像過去那樣令人滿意的成果。這倒不是什么無法接受的狀況,畢竟在開發(fā)領(lǐng)域?qū)W習(xí)新技術(shù)算是不可或缺的重要一環(huán)。但問題在于,在這個(gè)項(xiàng)目中我們不僅要頂住巨大壓力、還得盡快搞定這么多任務(wù)。
因此,開發(fā)人員要在怎樣的條件下才能自主選擇所使用的工具?這該由公司方面決定嗎?到底是我所在的公司糟糕透頂,還是說這已經(jīng)成為業(yè)界常態(tài)?我是否應(yīng)該選擇其它更適合自己的企業(yè)?我審視這個(gè)問題的角度是否有所偏差?
反饋意見
網(wǎng)友Telastyn的回答(得到111票贊成):
開發(fā)人員要在怎樣的條件下才能自主選擇所使用的工具?
當(dāng)這種選擇不會給整個(gè)團(tuán)隊(duì)帶來影響時(shí)。
我審視這個(gè)問題的角度是否有所偏差?
明顯是的。
沒錯,公司給你設(shè)定的截止周期實(shí)在太過緊張。沒錯,如果使用Rails,你能更快地完成任務(wù)。不過公司需要應(yīng)對與應(yīng)用程序相關(guān)的全部部署與維護(hù)工作。如果這家企業(yè)擁有一大批精通C#語言的開發(fā)人員,那么開發(fā)C#應(yīng)用很可能會帶來維護(hù)上的成本優(yōu)勢(以及應(yīng)用質(zhì)量優(yōu)勢)。
這家公司的數(shù)據(jù)庫管理員以及其他運(yùn)維同仁可能對于C#堆棧非常熟悉,而且擁有一整套應(yīng)對此類特殊堆棧的部署與更新流程。即使你個(gè)人能夠更快更好地完成代碼編寫工作,不同的編程方式也很可能給其他同事帶來困擾,并最終使這款專業(yè)Web應(yīng)用程序的調(diào)試與運(yùn)行周期變得更為冗長。
請記住,我們用在應(yīng)用程序維護(hù)方面的時(shí)間要遠(yuǎn)多于編寫應(yīng)用的時(shí)間,而優(yōu)化對于這部分成本顯然非常重要。
學(xué)習(xí)技能,賺取回報(bào)
網(wǎng)友Ampt的回答(獲得19票贊成):
堅(jiān)持使用Java/JRuby也未嘗不可
主要理由在于,老板的最終目標(biāo)是讓你完成生產(chǎn)任務(wù)。他們雇用了你,你也將因此為公司創(chuàng)造價(jià)值。請確保他們明確意識到強(qiáng)迫你使用自己不熟悉的框架會帶來哪些負(fù)面影響,例如:
1. 以較低的生產(chǎn)效率交付工作成果。
2. 所創(chuàng)建代碼的質(zhì)量較低。
即使是最優(yōu)秀的程序員,在接受新的語言/框架時(shí)也需要一段熱身過程。
關(guān)于學(xué)習(xí)MVC 4與C#的建議
學(xué)習(xí)新的編程語言絕對不是壞事。作為一名程序員,技能的培養(yǎng)與投入就像是一場冒險(xiǎn)——我們不知道自己已經(jīng)掌握的語言/平臺會不會在什么時(shí)候、甚至是不久的未來突然退出歷史舞臺。不過由于微軟始終保持著良好的發(fā)展態(tài)勢,我認(rèn)為投身這一陣營是個(gè)比較安全的選擇。C#與MVC最近剛剛完成又一輪更新,這證明了它們二者都具備出色的發(fā)展空間、并將在未來的前進(jìn)道路上繼續(xù)保持活力。
要想成為一位更為全面的開發(fā)者,你必須始終保持積極的接納與學(xué)習(xí)態(tài)度。從最理想的狀況出發(fā),你的老板可能愿意為整個(gè)學(xué)習(xí)過程承擔(dān)必要開支,這意味著你能在幫助自己提高身價(jià)的同時(shí)繼續(xù)領(lǐng)取目前的這份薪水。
總結(jié)陳詞
你也許最終能夠在這場沖突當(dāng)中實(shí)現(xiàn)自己的訴求,但隨之而來的則是面對同事們的不滿甚至對立情緒。請向你的經(jīng)理詳細(xì)解釋使用熟悉開發(fā)方式的優(yōu)勢與弊端,這樣雙方都能獲得相對令人滿意的處理結(jié)果。
把話說開
網(wǎng)友FrustrateWithFormsDesign的回答(獲得87票贊成):
在我看來,你需要跟開發(fā)團(tuán)隊(duì)負(fù)責(zé)人深入交流,并就以下幾個(gè)話題進(jìn)行溝通:
“我知道大家都是.NET的堅(jiān)定支持者,但我能夠加入這個(gè)團(tuán)隊(duì)、主要憑借的是自己豐富的Java/JRubyRails開發(fā)經(jīng)驗(yàn)。利用這些已經(jīng)非常熟悉的工具,我能夠在xx天之內(nèi)完成新應(yīng)用的開發(fā)工作。如果大家堅(jiān)持,我當(dāng)然可以從頭開始學(xué)習(xí)C#/MVC 4,但單這一項(xiàng)所需要的時(shí)間就將超過xx天。您對此怎么看?”
問題的實(shí)質(zhì)在于“之所以雇用你所看重的技能”與“你現(xiàn)在需要掌握的技能”之間存在沖突,但在表達(dá)這一點(diǎn)的同時(shí)你也強(qiáng)調(diào)了自己愿意學(xué)習(xí)各類新技能,只不過這會導(dǎo)致新應(yīng)用的開發(fā)工作耗時(shí)更長、畢竟目前要使用的工作集對你來說還太過陌生。再次強(qiáng)調(diào),你一定要充分表達(dá)自己對學(xué)習(xí)新技能的積極接受態(tài)度。如果你對于新技能的學(xué)習(xí)總是抱有抵觸情緒,那么一旦你的現(xiàn)有知識儲備無法幫助企業(yè)解決實(shí)際問題,下一個(gè)會被炒掉的員工肯定就是你了。
最后談?wù)勀闾岢龅膸讉€(gè)問題:
開發(fā)人員要在怎樣的條件下才能自主選擇所使用的工具?這該由公司方面決定嗎?到底是我所在的公司糟糕透頂,還是說這已經(jīng)成為業(yè)界常態(tài)?我是否應(yīng)該選擇其它更適合自己的企業(yè)?我審視這個(gè)問題的角度是否有所偏差?
問題的答案在不同的企業(yè)中往往有所區(qū)別。如果一家公司購買了微軟工具,并將VisualStudio平臺與.NET框架作為執(zhí)行標(biāo)準(zhǔn),那么開發(fā)者堅(jiān)持使用Linux與C語言的行為顯然有些不可理喻。這種情況非常正常。對于那些并不太挑剔具體編輯器類型的企業(yè)來說,上述矛盾可能會得到顯著緩解,例如允許開發(fā)人員選擇Vi或者Emacs,只要輸出結(jié)果不受影響即可。我見過的一部分企業(yè)甚至允許開發(fā)人員在Windows或者Linux之間自由切換,但前提是他們所使用的語言必須能在兩種操作系統(tǒng)平臺上順暢運(yùn)行并具備良好的支持。
為什么企業(yè)要部署這樣的流程?保持一致性是其中的一項(xiàng)重要原因。如果多位開發(fā)人員根據(jù)個(gè)人喜歡選擇語言/框架、采取不同的工具并在不同系統(tǒng)之上進(jìn)行測試,那么在為應(yīng)用程序代碼庫進(jìn)行補(bǔ)丁更新時(shí),企業(yè)方面將很難完成必要的調(diào)試工作。相比之下,如果所有開發(fā)人員都能在最大程度上使用相似的設(shè)置環(huán)境,那么這些難題將被消弭于無形。
在你的事例中,聽起來雇用你的這家企業(yè)并沒有就技術(shù)體系提出一套標(biāo)準(zhǔn)化流程。我個(gè)人對此不太理解,也許你該跟人事部門的負(fù)責(zé)人談?wù)?,了解一下他們?dāng)初為什么會按這樣的標(biāo)準(zhǔn)錄取新員工。