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