首先,假設這個程序員是一位職場新手甲。他剛大學畢業,沒有工做經驗。來自產品的需求,他要理解好久才能作。而後開發的過程當中會遇到各類問題,若是經驗不足以支撐他快速完成任務,那麼只能求助於網絡,書籍,熟人。若是這些都幫助不了他。他須要求助於同事。可是次數頻繁,同事會厭倦於幫他解答;他也會羞於諮詢。這時,他一天下來,基本都會卡在一個很簡單的問題上。下班了,他尚未完成任務。沒錯,他須要加班了,由於他的編程能力很是差。 程序員
大概沒有人會知道他是由於須要處理一個並不是高科技的問題。不懂技術的上司覺得他是個勤奮的員工,很是看重他。但是,這什麼進度仍是會這麼慢呢?創業的公司可等不起。這一切,若是招到一個有經驗的開發人員,這一切的加班彷佛都不須要。 編程
好吧,公司開除了這名程序員或者他因「我的緣由」辭職了或者公司再招到一個相對有經驗的程序員乙。固然,有經驗的代價就是公司要付雙倍的薪水。全部以前的需求在他這邊都沒有遇到過加班的狀況。他是一名很是有經驗的程序員,他在過去的二年時間一直在處理相關的開發工做。到這邊來,全部的問題都是小意思。他的優秀表現讓公司驚喜和意外,公司以爲即便再招十個以前的員工也比不過他一我的。因此,雙倍的薪水又有什麼呢? 網絡
一段時間後,公司開始提各類各樣的需求,他終於開始加班了。加班不是由於某段時間需求的總量多了。而是由於隨着公司的快速發展,需求也愈來愈多樣化。他的知識儲備不足以令他總能輕鬆應付。他變得和第一個程序員同樣,也加班了。只不過加班的緣由不同,第一個程序員是由於一些代碼的調試的緣由,而這位有經驗的程序員是由於一些從沒據說過的技術。他的加班讓公司一樣對他很重視,甚至認爲是一位好夥伴。 學習
與此同時,公司在招他的時候也招進來了一名優秀的畢業生。他一樣是一名沒有經驗的程序員,可是他有很好的學習能力。開發進度緩慢讓產品人員和運營人員都難以接受。可是他總能在最後關頭交付代碼,儘管上線後須要修修補補。他常常加班來學習以便攻克技術難點,公司對加班的員工表示歡迎,由於沒有人讓他們加班,也不須要給他們加班費或者調休。公司爲全部加班的人員提供良好的晚餐。他能夠接大大小小的各類需求,只是,開發時間要比較長。可是他不會遇到那種代碼調試不經過的簡單的問題。相比程序員乙,程序員丙因爲常常拖慢進度常常被產品和運營建議開除或者調崗。 測試
但是後來,公司對他欣賞有加。緣由有二:一是他終於能夠用和程序員乙接近的時間來作任務;二是在程序員乙那裏看似不可能的任務,程序員丙總能在最近關頭給出解決方案和代碼,只是時間比較長。產品和運營的觀點發生了改變,向公司建議開除程序員乙。程序員丙是一個學習型的員工,時間讓他有經驗後,他成長成爲一名更優秀的員工。 spa
公司有過教訓後,終於不惜花重金去請各類優秀的程序員。由於只要有一名這樣的程序員,就能夠少請許多敗壞項目的程序員。因而,公司有了程序員丁。他在過去的一段時間裏有着不錯的工做經歷,幫助過所在的公司完成了各類重大的項目解決了至關多的行業技術難點。他的到來爲公司帶來了很好的活力,全部以前遇到的問題都不復存在。他成爲了全部程序員的主管。後來,他仍是加班了。由於公司的良好發展,因而聘請了更多的產品和運營。開發團隊忙不過來了,他做爲主管要求你們一塊兒加班。 調試
爲了緩解這種局面,他向公司申請增長程序員。公司答應了並再招了二各分別相似乙和丙的程序員,沒錯,公司不會再招聘相似甲的程序員。團隊不須要加班了。 項目管理
好景持續不長久,一段時間後,加班的狀況再次出現了,由於競爭對手的努力,讓產品和運營提出更多的需求。他發現產品和運營的需求源源不斷地輸入。但是有些需求可能用戶永遠用不到或者三天後就變化了。爲了解決這種局面,他找來領導和各部門的負責人來商討解決的辦法。有人提出走敏捷開發。公司決定新成立一個小團隊來作測試。因而公司每個敏捷開發團隊成立了。時間證實了,這個新團隊終於能夠不加班了。而對需求的完成整體讓產品和運營滿意。 開發
樂觀的局面總不能持續好久,由於線上出了一個令用戶急劇降低的bug。他們須要加班通宵,或者回退代碼,或者修復這個bug。沒有使用很好的版本回退辦法,只能是一場惡夢。持續集成和自動發佈加入到他們的團隊。沒錯,程序員丁開始在團隊裏實施很是好的項目管理的方案。起碼發新版後,非工做時間在線上出bug,任何有權限的人員均可以輕鬆地一鍵回退。剩下的,上班再說。 產品
... ...
這就是我要講的程序員爲何要加班的幾個故事,歡迎各位補充。之後我也會補充更多的故事。其實全部的後面都不重要,我只但願各位創業者,在招聘程序員時,避免遇到程序員甲,爭取找到程序員丁。做爲開發人員的咱們,也要努力成爲程序員丁,保證本身的職場競爭力。仍是那句話,軟件開發不是高科技的東西,這世上並無軟件科學家一說。咱們能作的是讓開發更像一門藝術。