A. 為什麼越來越多的人不想做程序員了
作為一個在帝都混日子的程序員,經常能看到不少同事轉行。
最開始是一位年紀比較大了(快40歲,在這個行業算老了)的,回家開個小店去了。後面聊了聊,非常慶幸自己做出了辭職的決定,現在日子過得是滋潤得很。
再之後,有回老家小縣城干別的去了的。要准備好回縣城,恐怕就很難找到IT行業的工作,除非是自己干。但小縣城能幹起來的活不多,加上那裡這方面的人才也難找,也就基本認為是已經換行了。
最近,甚至身邊有剛在17年畢業後加入來的成員,都不想幹了,想要考公務員。現在究竟是一些什麼原因,導致這樣了了?
7.要創業了
不能光是說一些不好的,不想幹了的人中,肯定有不少是想要自己出來單乾的。創業也基本分為兩種,一種是自己出來接單,成立公司開始為別的企業做項目。另一種是自己做產品。這兩種其實都比較好起步,特別是第一種,有活就會盈利。而且成本基本只有人力和應酬,機器大部分也都是用戶負責的。第二種則是比較賭的,要麼很成功,要麼很快燒錢結束。不管怎樣,這都是不少程序員不再願意為別人碼代碼的原因。
B. 程序設計者應該具備的品質是什麼
程序員基本素質:
作一個真正合格的程序員,或者說就是可以真正合格完成一些
代碼工作的程序員,應該具有的素質。
1:團隊精神和協作能力
把它作為基本素質,並不是不重要,恰恰相反,這是程序員應該具備的最基本的,
也是最重要的安身立命之本。把高水平程序員說成獨行俠的都是在囈語,任何個人的力
量都是有限的,即便如linus這樣的天才,也需要通過
組成強大的團隊來創造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協作精神是
不可想像的。獨行俠可以作一些賺錢的小軟體發點小財,但是一旦進入一些大系統的研
發團隊,進入商業化和產品化的開發任務,缺乏
這種素質的人就完全不合格了。
2:文檔習慣
說高水平程序員從來不寫文檔的肯定是乳臭未乾的毛孩子,良好的文檔是正規研發
流程中非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而
作為高級程序員和系統分析員,這個比例還要高很多。缺
乏文檔,一個軟體系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇
到極大的麻煩。
3:規范化,標准化的代碼編寫習慣
作為一些外國知名軟體公司的規矩,代碼的變數命名,代碼內注釋格式,甚至嵌套
中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助於代碼
的移植和糾錯,也有助於不同技術人員之間的協作。fan
s叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自己壓根不配自稱
程序員。代碼具有良好的可讀性,是程序員基本的素質需求。再看看整個linux的搭建,
沒有規范化和標准化的代碼習慣,全球的研發
協作是絕對不可想像的。
4:需求理解能力
程序員需要理解一個模塊的需求,很多小朋友寫程序往往只關注一個功能需求,他
們把性能指標全部歸結到硬體,操作系統和開發環境上,而忽視了本身代碼的性能考慮
,有人曾經放言說寫一個廣 告交換程序很簡單,這種人從
來不知道在百萬甚至千萬數量級的訪問情況下的性能指標是如何實現的,對於這樣的程
序員,你給他深藍那套系統,他也做不出太極鏈的並訪能力。性能需求指標中,穩定性
,並訪支撐能力以及安全性都很重要,作為程序員需要
評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險和惡意
攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經驗才
有可能有心得。
5:復用性,模塊化思維能力
經常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是
重復寫一些沒有任何新意的代碼,這其實是中國軟體人才最大浪費的地方,一些重復性
工作變成了熟練程序員的主要工作,而這些,其實是完全可
以避免的。
復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要
多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系
統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣
就能極大避免重復性的開發工作,如果一個軟體研發單位和工作組能夠在每一次研發過
程中都考慮到這些問題,那麼程序員就不會在重復性的工作中耽誤太多時間,就會有更
多時間和精力投入到創新的代碼工作中去。
一些好的程序模塊代碼,即便是70年代寫成的,拿到現在放到一些系統裡面作為功
能模塊都能適合的很好,而現在我看到的是,很多小公司軟體一升級或改進就動輒全部
代碼重寫,大部分重復性工作無謂的浪費了時間和精力。
6:測試習慣
作為一些商業化正規化的開發而言,專職的測試工程師是不可少的,但是並不是說
有了專職的測試工程師程序員就可以不進行自測;軟體研發作為一項工程而言,一個很
重要的特點就是問題發現的越早,解決的代價就越低,程序
員在每段代碼,每個子模塊完成後進行認真的測試,就可以盡量將一些潛在的問題最早
的發現和解決,這樣對整體系統建設的效率和可靠性就有了最大的保證。
測試工作實際上需要考慮兩方面,一方面是正常調用的測試,也就是看程序是否能
在正常調用下完成基本功能,這是最基本的測試職責,可惜在很多公司這成了唯一的測
試任務,實際上還差的遠那;第二方面就是異常調用的測試,比如高壓力負荷下的穩定
性測試,用戶潛在的異常輸入情況下的測試,整體系統局部故障情況下該模塊受影響狀
況的測試,頻發的異常請求阻塞資源時的模塊穩定測試等等。當然並不是程序員要對自
己的每段代碼都需要進行這種完整測試,但是程序員必須清醒認識自己的代碼任務在整
體項目中的地位和各種性能需求,有針對性的進行相關測試並盡早發現和解決問題,當
然這需要上面提到需求理解能力。
7:學習和總結的能力
程序員是人才很容易被淘汰,很容易落伍的職業,因為一種技術可能僅僅在三兩年
內具有領先性,程序員如果想安身立命,就必須不斷跟進新的技術,學習新的技能。
善於學習,對於任何職業而言,都是前進所必需的動力,對於程序員,這種要求就
更加高了。但是學習也要找對目標,一些小coding有些codingTO就是這樣的coding上只
是一些Cfans們,他們也津津樂道於他們的學習能力,一會學會了asp,一會兒學會了ph
p,一會兒學會了jsp,他們把這個作為炫耀的資本,盲目的追逐一些膚淺的,表面的東
西和名詞,做網路程序不懂通訊傳輸協議,做應用程序不懂中斷向量處理,這樣的技術
人員,不管掌握了多少所謂的新語言,永遠不會有質的提高。
善於總結,也是學習能力的一種體現,每次完 成一個研發任務,完成一段代碼,都
應當有目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐
步提高,一個程序員才可能成長起來。
一個不具備成長性的程序員,即便眼前看是個高手,建議也不要選用,因為他落伍
的時候馬上就到了。具備以上全部素質的人,應當說是夠格的程序員了,請注意以上的
各種素質都不是由IQ決定的,也不是大學某些課本里可以學習到的,需要的僅僅是程序
員對自己工作的認識, 是一種意識上的問題。
那麼作為高級程序員,以至於系統分析員,也就是對於一個程序項目的設計者而言
,除了應該具備上述全部素質之外,還需要具備以下素質:
第一,需求分析能力
對於程序員而言,理解需求就可以完成合格的代碼,但是對於研發項目的組織和管
理者,他們不但要理解客戶需求,更多時候還要自行制定一些需求,為什麼這么說呢?
一般而言,進行研發任務,也許是客戶提出需求,也許是市場和營銷部門提出的需
求,這時候對於研發部門,他們看到的不是一個完整的需求,通常而言,該需求僅僅是
一些功能上的要求,或者更正規些,可能獲得一個完整的用戶視圖;但是這都不夠,因
為客戶由於非技術因素多一些,他們可能很難提出完整和清晰,或者說專業性的性能需
求,但是對於項目組織者和規劃者,他必須能夠清醒認識到這些需求的存在並在完成 需
求分析報告的時候適當的提出,同時要完整和清晰的體現在設計說明書裡面,以便於程
序員編碼時不會失去這些准則。
程序設計者必須正確理解用戶需求所處的環境,並針對性做出需求的分析,舉例而
言,同樣一個軟體通過ASP租用方式發布和通過License方式發布,性能需求可能就是有
區別的,前者強調的是更好的支撐能力和穩定性,而後者則可能更強調在各種平台下的
普適性和安裝使用的簡捷性。
第二,項目設計方法和流程處理能力
程序設計者必須能夠掌握不少於兩到三種的項目設計方法(比如自頂至下的設計方
法,比如快速原型法等等),並能夠根據項目需求和資源搭配來選擇合適的設計方法進
行項 目的整體設計。設計方法上選擇不當,就會耽誤研發周期,浪費研發資源,甚至影
響研發效果。
一個程序設計者還需要把很多功夫用在流程圖的設計和處理上,他需要做數據流圖
以確立數據詞典;他需要加工邏輯流圖以形成整體的系統處理流程。一個流程有問題的
系統,就算代碼多漂亮,每個模塊多精緻,也不會成為一個好的系統。當然,做好流程
分析並選擇好項目設計方法,都需要在需求分析能力上具有足夠的把握。
第三,復用設計和模塊化分解能力
這個似乎又是老調重談,前面基本素質上不是已經說明了這個問題嗎?作為一個從
事模塊任務的程序員,他需要對他所面對的特定功能模塊的 復用性進行考慮,而作為一
個系統分析人員,他要面對的問題復雜的多,需要對整體系統按照一種模塊化的分析能
力分解為很多可復用的功能模塊和函數,並針對每一模塊形成一個獨立的設計需求。舉
個例子,好比是汽車生產,最早每輛汽車都是獨立安裝的,每個部件都是量身定做的,
但是後來不一樣了,機器化大生產了,一個汽車廠開始通過流水線來生產汽車,獨立部
件開始具有一定的復用性,在後來標准化成為大趨勢,不同型號,品牌甚至不同廠商的
汽車部件也可以進行方便的換裝和升級,這時候,汽車生產的效率達到最大化。
軟體工程也是同樣的道理,一個成熟的軟體行業,在一些相關項目和系統中,不同
的部件是可以隨意換裝的,比如微軟的許多桌面軟體,在很多操作模塊(如打開文件,
保存文件等等)都是復用的同一套功能模塊,而這些介面又
通過一些類庫提供給了桌面應用程序開發者方便掛接,這就是復用化的模塊設計明顯的
一個佐證。
將一個大型的,錯綜復雜的應用系統分解成一些相對獨立的,具有高度復用性的,
並能僅僅依靠幾個參數完成數據聯系的模塊組合,是作為高級程序員和系統分析員一項
最重要的工作,合適的項目設計方法,清晰的流程圖,是實現這一目標的重要保證。
第四,整體項目評估能力
作為系統設計人員,必須能夠從全局出發,對項目又整體的清醒認識,比如公司的
資源配置是否合理和到位,比如工程進度安排是否能最大化體現效率又不至於無法按期
完成。評估項 目整體和各個模塊的工作量,評估項目所需的資源,評估項目可能遇到的
困難,都需要大量的經驗積累,換言之,這是一種不斷總結的累計才能達到的境界。在
西方一些軟體系統設計的帶頭人都是很年長的,比如4,50歲,甚至更老,他們在編碼方
面已經遠遠不如年輕人那樣活絡,但是就項目評估而言,他們幾十年的經驗積累就是最
重要和寶貴的財富。中國缺這么一代程序員,主要還不是缺那種年紀的程序員,而是那
種年紀的程序員基本上都是研究單位作出來的,都不是從專業的產品化軟體研發作出來
的,他們沒有能積累那種產品化研發的經驗,這也是沒有辦法的事情。
第五,團隊組織管理能力
完成一個項目工程,需要團隊的齊心協力,作為項目設計者或研發的主管人,就應
當有能力最大化發揮團隊的整體力量,技術管理由於其專業性質,不大同於一般的人事
管理,因為這裡面設計了一些技術性的指標和因素。
首先是工作的量化,沒有量化就很難做到合適的績效考核,而程序量化又不是簡單
的代碼行數可以計算的,因此要求技術管理人員需要能真正評估一個模塊的復雜性和工
作量。
其次是對團隊協作模式的調整,一般而言,程序開發的協作通常分為小組進行,小
組有主程序員方式的,也有民主方式的,根據程序員之間的能力水平差距,以及根據項
目研發的需求,選擇合適的組隊方式,並能將責權和成員的
工作任務緊密結合,這樣才能最大發揮組隊的效率。
一個代碼水平高的人,未必能成為一個合格的項目研發主管,這方面的能力欠缺往
往是容易被忽視的。
綜上可以看到,作為一個主管研發的負責人,一個項目設計者,所需要具備的素質
和能力並不是程序代碼編寫的能力,當然一般情況下,一個程序員通過不斷的總結提高
達到了這種素質的時候,他所具有的代碼編寫能力也已經相當不簡單了,但是請注意這
裡面的因果關系,一個高水平的項目設計者通常已經是代碼編寫相當優秀的人了,但是
並不是一個代碼相當優秀的程序員就可以勝任項目設計的工作,這裡面存在的也不是智
商和課本的問題,還是在於一個程序員在積累經驗,逐步提升的時候沒有意識到應當思
考哪方面的東西,沒有有意識的就項目的組織和復用設計進行揣摩,沒有經常性的文檔
習慣和總結習慣, 不改變這些,我們的合格的項目設計者還是非常欠缺。
另外,為防止有無聊的人和我較真,補充一點,本文針對目標是作商業化的軟體項
目和工程,那些科研機構的編程高手,比如演算法高手,比如圖象處理高手,他們的工作
是研究課題而非直接完成商業軟體(當然最終間接成為商業
產品,比如微軟研究院在作的研究課題),因此他們強調的素質可能是另外的東西,這
些人(專家),並不能說是程序員,不能用程序員的標准去衡量。
最後補充一點東西,一個軟體項目研發的設計流程是怎樣的呢?以通常標準的設計
方法為例,(不過筆者喜歡快速原型法)。
第一個步驟是市場調研,技術和市場要結合才能體現最大價值。
第二個步驟是需求分析,這個階段需要出三樣東西,用戶視圖,數據詞典和用戶操
作手冊。用戶視圖是該軟體用戶(包括終端用戶和管理用戶)所能看到的頁面樣式,這
裡麵包含了很多操作方面的流程和條件。數據詞典是指明數據邏輯關系並加以整理的東
東,完成了數據詞典,資料庫的設計就完成了一半多。用戶操作手冊是指明了操作流程
的說明書。請注意,用戶操作流程和用戶視圖是由需求決定的,因此應該在軟體設計之
前完成,完成這些,就為程序研發提供了約束和准繩,很遺憾太多公司都不是這樣做的
,因果顛倒,順序不分,開發工作和實際需求往往因此 產生隔閡脫節的現象。
需求分析,除了以上工作,筆者以為作為項目設計者應當完整的做出項目的性能需
求說明書,因為往往性能需求只有懂技術的人才可能理解,這就需要技術專家和需求方
(客戶或公司市場部門)能夠有真正的溝通和了解。
第三個步驟是概要設計,將系統功能模塊初步劃分,並給出合理的研發流程和資源
要求。作為快速原型設計方法,完成概要設計就可以進入編碼階段了,通常採用這種方
法是因為涉及的研發任務屬於新領域,技術主管人員一上來無法給出明確的詳細設計說
明書,但是並不是說詳細設計說明書不重要,事實上快速原型法在完成原型代碼後,根
據評測結果和經驗教訓的總結,還要重新進行詳細設計的步驟。
第四個步驟是詳細設計,這是考驗技術專家設計思維的重 要關卡,詳細設計說明書
應當把具體的模塊以最『干凈』的方式(黑箱結構)提供給編碼者,使得系統整體模塊化
達到最大;一份好的詳細設計說明書,可以使編碼的復雜性減低到最低,實際上,嚴格
的講詳細設計說明書應當把每個函數的每個參數的定義都精精細細的提供出來,從需求
分析到概要設計到完成詳細設計說明書,一個軟體項目就應當說完成了一半了。換言之
,一個大型軟體系統在完成了一半的時候,其實還沒有開始一行代碼工作。那些把作軟
件的程序員簡單理解為寫代碼的,就從根子上犯了錯誤了。
第五個步驟是編碼,在規范化的研發流程中,編碼工作在整個項目流程里最多不會
超過1/2,通常在1/3的時間,所謂磨刀不誤砍柴功,設計過程完成的好,編碼效率就會
極大提高,編碼時不同模塊之間的進度協調和協作是最需要小心的,也許一個小模塊的
問題就可能影響了整體進度,讓很多程序員因此被迫停下工作等待,這種問題在很多研
發過程中都出現過。編碼時的相互溝通和應急的解決手段都是相當重要的,對於程序員
而言,bug永遠存在,你必須永遠面對這個問題,大名鼎鼎的微軟,可曾有連續三個月不
發補丁的時候嗎?從來沒有!
第六個步驟是測試。
測試有很多種:按照測試執行方,可以分為內部測試和外部測試;按照測試范圍,
可以分為模塊測試和整體聯調;按照測試條 件,可以分為正常操作情況測試和異常情況
測試;按照測試的輸入范圍,可以分為全覆蓋測試和抽樣測試。以上都很好理解,不再
解釋。
總之,測試同樣是項目研發中一個相當重要的步驟,對於一個大型軟體,3個月到1
年的外部測試都是正常的,因為永遠都會又不可預料的問題存在。
完成測試後,完成驗收並完成最後的一些幫助文檔,整體項目才算告一段落,當然
日後少不了升級,修補等等工作,只要不是想通過一錘子買賣騙錢,就要不停的跟蹤軟
件的運營狀況並持續修補升級,知道這個軟體被徹底淘汰為
止。
寫這些步驟算不上賣弄什麼,因為實話講我手邊是一本《軟體工程》,在大學里這
是計算機專業的必修課程,但是我知道很多程序員似乎從來都只是熱衷於什麼《30天精
通VC》之類的,他們有些和我一樣游擊隊出身,沒有正規學過這個專業,還有一些則早
就在混夠學分後就把這些真正有用的東西還給了老師。
fans亂嚷嚷,混淆視聽,實際上真正的技術專家很少在網上亂發帖子的,如筆者這
樣不知天高地厚的,其實實在是算不上什麼高手,只不過看不慣這種對技術,對程序員
的誤解和胡說,只好挺身而出,做撥亂反正之言,也希望那些還fans們能認真想想,走
到正途上,畢竟那些聰明的頭腦還遠遠沒有發揮應有的價值。
從程序員到工程師
從程序員升級到工程師大多數象我這樣對軟體有濃厚興趣的人,畢業後義無反顧地
走進了企業,開始了程序員的生涯。那時,我們迷戀「大全」、「秘籍」一類的書籍,
心中只有代碼。當我看到一行行枯燥的代碼變成了能夠打電話的設備,變成了屏幕上漂
亮的表格,變成了動聽的音樂,成就感油然而生。我覺得自己也是一個出色的程序員了
。在用戶的機房中苦熬三晝夜解決軟體的bug,也成了一種可以誇耀的資歷。五年前的某
一天,我把曾經讓我興奮自豪的大量代碼和少得可憐的文檔移交之後,來到了華為。這
里有更多的年輕人,我如魚得水,可以充分發揮自己的想像力。依然是代碼,依然是匆
匆地在紙上記下稍縱即逝的靈感(我們把它稱作文檔),依然是無休止地和bug作斗爭。
當有一天,一個新來的同事拿著署著我的大名的文檔,小心翼翼地來問我時,我發現自
己好象有點不認識它了。我心裡有點沮喪,再看看代碼,發現文檔上記錄的一些靈感已
面目全非。我當時不知道那位新來的同事感受如何,但我從那時起,好象意識到什麼。
現在來看,那時的很多事情都是事倍功半。
我也見到了我的項目經理,一個個子較高,瘦瘦的年輕人,據說剛從美國回來,已
工作了五、六年。我聽了心裡很高興,這回要一招一式地學兩手。需求分析的時間是一
個月,項目經理和我們(實際上代表客戶 )討論了proposal中的內容,確定每一項都是
需要的。然後他把模塊大致劃分了一下,開始進入計劃中的學習階段。每個人在學習階
段要寫出功能描述的膠片,給其他人講解,不知不覺中,項目組的所有人對項目有了整
體的了解。
他還安排了一些培訓,如他們公司的軟體開發模型、項目組中各角色的定義,以後
及時的培訓不斷,只要項目組中有需求,他總是把qa或相關的人請來,培訓很專業。需
求分析完成後提交了一份四十多頁的文檔,當我看到這份英文文檔中我寫的部分整整齊
齊地列在其中時,我的感覺很復雜,有些喜悅,但更多的是苦澀,我以前怎麼就從來沒
有這樣做過需求分析呢。
在我寫文檔的過程中,qa給我們培訓過srs的寫作模板,後來我還是不放心,讓他們
一個有經驗的工程師寫了一段,我們再琢磨著照著寫。這份srs雖然是多個人合寫,但風
格一致,內容詳實。更為可貴的是,一直到最後,這份需求分析的內容都沒有改過,以
至於我們沒有機會走一下他們的需求更改流程。
需求分析是項目的第一階段,第二階段的開發時間要根據需求分析的結果來確定。
當對方的首席技術官(相當於我們業務部的總體組長)來和我們討論計劃時,他們已列
出了對每個 模塊的代碼行數的預測,可能存在的風險。根據他們公司的生產率--300
行/人月,他得出了項目第二階段需要多少周。
我們當時就提出了異議:1)公司對該項目需求很急;2)每月300行是否太少;3)
我們還有下載的源代碼參考。他解釋說,300行/人月是使得項目能達到他們質量標準的
經驗數據,考慮到有源代碼參考,生產率最多不能超過350行/人月。
當他問我們公司的生產率時,我腦袋裡轉了三個圈,沒敢多說,大概六、七百行吧
。他沉默了一會兒,然後堅定地說,我們這個計劃是建立在確保質量的基礎上的,我想
你們到印度來開發軟體,首先看中的應該是我們印度公司的
質量保證。我知道你們不缺乏軟體開發人員,你們為什麼不選擇下載的軟體呢。幾句話
說到了我的痛處,現在國內的弟兄們還在為使用下載軟體移植的產品四處奔波呢!
隨後的開發活動有條不紊,我們老老實實地跟著做。系統測試計劃、用例,概要設
計,集成測試計劃、用例,詳細設計,單元測試計劃、用例,編碼,單元測試,集成測
試,系統測試。一個完整的v模型開發過程,其中每個過程都有review。當我們對一些設
計的方法不太明白時,項目經理給我們發來了相關的資料,我不知道他當時是怎麼想的
,一些基本的分析、設計方法是十年,甚至二十年前的軟體工程書中就講到的,印度每
個計算機專業的人員都是必修這些內容的。而我們除了對一些具體協議的代碼很熟之外
,對這些常用的方法似乎一無所知。我感到一些羞愧,進城直奔書店,把他給我開列的
書找了出來,晚上躺在床上,仔細研讀,我彷彿突然又遇到了能給我指點迷津的良師益
友。現在印度所已形成了強烈的學習風氣。我回來後也推銷了700多本書,這些書教我們
如何用工程化的方法開發軟體,是成為一個軟體工程師必讀的資料。
我們的項目經理的計劃控制能力很強,當有什麼影響到項目計劃的事情發生時,如
人員辭職、實驗室搬家、某一模塊預測不準(該模塊是我們預測的),他總是採取必要
的措施,減少延期,調整計劃。剛開始,我們對他們每天上午11點,下午4點下樓喝咖啡
還有點意見,後來也跟著喝去了,原來,喝咖啡時的交流非常豐富,從項目管理到設計
方法,從技術發展到風土人情,無所不包,對我們互相之間的理解,對團隊的氣氛很有
幫助。我們項目的QA也在適當的時候出現在我們的面前,我們對她的工作只有一些感性
認識。她每次參加會議時,手裡時常拿著一個check list,項目經理准備相應的資料,
回答一些問題,她打著勾,或寫著項目經理的解釋。她給我們做培訓時也很耐心,體現
出很好的職業素養,我至今還在懷念她給我們的幫助。
我從事軟體開發已有九個年頭了,可我現在仍然不能說自己是個合格的軟體工程師
,更不用談什麼合格的管理者。我看到一份報道說,瑞士洛桑一權威機構把中國的科技
綜合競爭力從原來的第十三位調到二十多位,原因是他們調整了一些評估標准,其中有
一條是中國合格工程師的可獲得性非常低。想著弟兄們熬紅的雙眼,四處奔波升級的疲
憊身影,我有一個強烈的願望:快把我們自己升級成合格的工程師吧!
C. 為什麼有的程序員的代碼結構混亂
程序員都有一顆工程師的心,所以當他們到一片新的場地想做的第一件事就是,將舊的一切推倒重來。是的,他們決不會滿足於簡單的增量勞動。
或許這種微妙的心理定位可以解釋:為什麼程序員進入新項目組後寧願丟掉舊代碼重新寫,也不願意修修補補。他們認為舊代碼簡直一團糟。
但是,事實上真是這樣嗎?你之所以認為舊代碼一團糟,其實是由編程的一個基本定律決定的,那就是:寫代碼容易,讀代碼難。
為什麼你覺得舊代碼異常混亂?因為讀代碼更難。
這大概就是代碼Reuse難以實現的原因。 這就是你組里的每個人都喜歡用不同的功能將分割的字元串轉換成一個數組。比起猜測舊的功能是怎樣實現的,重新寫一個自己的功能要簡單和有趣多了。
作為這個公理的推論,你可以問問身邊的程序員他們正在奮戰的代碼怎麼樣?「簡直是一塌糊塗!」他們肯定會這樣說。「我簡直想推倒重來!」
為什麼認為代碼這么糟糕呢?「額,看看這個功能,竟然有兩頁長!完全不知道這些東西為什麼在這里!完全不知道這些API是干什麼的。」他們會這樣回答你。
漫畫:讀別人代碼是一種怎樣的體驗?
曾經,Borland的創始人 Philippe Kahn當初就是向記者們吹噓:Quattro Pro會比Microsoft Excel要好用得多,因為它是從頭開始編寫的,全部都是新的源代碼!
但是,認為新代碼比舊代碼好簡直就是荒謬。舊代碼是已經運行過的,測試過的。無數的bug在被發現前都上線運行過,發現之後程序員們可能在花了好些日子才修復了這些bug。這種修復可能是一行代碼,也可能是幾個字元,無數的時間和精力都花在了這些bug修復上。
當你決定拋棄這些舊代碼從零開始的時候,你也丟掉全部前任努力的結果。
新代碼一定比舊代買好?NO,重寫可能會帶來更大的風險。
對技術領導者來說,重寫項目的代碼也是一個異常艱難的決定。因為從公司層面說,重現代碼甚至會威脅產品的市場競爭力。一旦決定重寫代碼,那麼與競品相比,你可能落後了2~3年——在軟體行業,這時間可夠長的。
你理想中的新代碼會帶來產品功能的提升▼
但事實上,即便重寫的新代碼可以實現舊代碼的所有功能和需求,但是為產品帶來的市場競爭力只有邊際提升。因為重寫用的新技術、新語言、新框架並沒有給產品帶來質的飛躍。
更不用說在重寫的漫長過程中可能會遇到一些意外情況,比如:
1、缺錢:資金鏈的斷裂▼
2、缺人:核心程序員離職
最終導致效果不佳:達不到原產品應有的所有功能和需求,白白浪費了時間和金錢,也丟掉了市場競爭力。▼
所以重寫代碼意味著,你在把自己置身於非常危險的境地,可能幾年後你也寫不出比以前更好的代碼。你只是花了一大筆錢把已經存在的代碼又寫了一遍。
當你覺得眼前的舊代碼很爛時,該怎麼辦?
你覺得舊代碼寫的很爛,那又怎樣呢?它們已經上線,已經在實際運行中經受住了考驗。所以當你發現前任留下的代碼亂七八糟的時候,不妨冷靜下來,從以下三個方面入手理解代碼、改善代碼:
1、代碼的結構有問題
如果一段網路代碼突然彈出了自己的對話框,應該是UI代碼需要被處理。這些問題可以被解決掉,你要一次次小心地移動代碼,重構,改變介面。還需要一位細心的工程師立馬仔細地檢查這些改變是否有問題,從而不打擾到其他人。事實上,甚至比較大的結構變化也可以不扔掉代碼來完成。
大牛程序員Joel Spolsky回憶說,曾經在某個項目中,他和他的團隊花了好幾個月重新架構在一點上:把代碼動來動去、清理、創建有意義的基類,並創建了模塊之間的完美介面。但是他們始終非常小心翼翼,並沒有產生新的bug、也沒有丟掉任何舊代碼。
2、代碼的效率不高
曾經,Netscape的渲染代碼被傳非常緩慢。但事實上,這只會影響該項目的一小部分,這部分是你可以優化甚至重寫的。你完全不必重寫全部代碼。優化速度的1%工作量,會讓你獲得99%的爆炸性提高。
3、代碼寫得很醜
有些代碼真的寫的很醜,比如Joel曾參與一個項目,開始用下劃線做開始的成員變數約定,但後來改用更標準的「M_」。所以一半的功能用「_」開始,一半用「M」開始,這看起來真的很醜陋。但這個問題5分鍾就能解決,而不用從頭開始寫全部的代碼。
最後,你要記住,從頭開始再寫一遍並不意味著你會寫出比以前更好的代碼。因為你沒有參與到上一個版本的創建,所以你其實根本就不算有經驗。一旦你准備推倒重寫,你可能會再犯一遍版本一犯過的錯,甚至會產生更多的新問題。
一個總結:
面對糟糕的舊代碼,Keep Calm & Carry On !
在大型商業項目中,推倒重來是非常危險的行為。當然,如果你是在做實驗,想到新演算法可以隨時重寫。
D. 涓轟粈涔堥粦椹紼嬪簭鍛樺煿璁濡傛や箣榛戱紵
榪戝勾鏉ワ紝闅忕潃IT琛屼笟鐨勬寔緇鐏鐑錛岀紪紼嬪煿璁甯傚満涔熸剤鍙戠箒鑽c傞粦椹紼嬪簭鍛樺煿璁浣滀負鍏朵腑鐨勪竴鍛橈紝鉶界劧鏈夌潃涓瀹氱殑鐭ュ悕搴﹀拰甯傚満浠介濓紝浣嗏滃潙浜衡濈殑璐ㄧ枒澹頒篃涓嶇粷浜庤熾備笅闈㈡垜灝嗙粨鍚堢ぞ浼氬疄璺佃皟鏌ュ皾璇曚粠澶氫釜瑙掑害鍒嗘瀽榪欑嶈存硶鐨勪駭鐢熷師鍥犮E. 紼嬪簭鍛樼湡鐨勫ソ涔堬紵(紼嬪簭鍛樻湁浠涔堜笉濂)
鍒鏁村ぉ鐪嬪崕涓轟袱鐧句竾鎷涜仒鑻辨墠浠涔堢殑錛屽疄闄呬笂鍏朵粬琛屼笟鐨勯《灝栦漢鎵嶄篃宸涓嶅氳繖涓鏁般傚叾浠栧ぇ澶氭暟紼嬪簭鍛樺伐璧勭『瀹為珮涓鐐癸紝閬靛驚鐨勮勫垯涔熻茬┒涓涓鐗╀緷紼涓鴻吹錛屾瘮濡傜▼搴忓憳鍙浠ュ仛嫻佹按綰垮伐浜猴紝鍙鏄涓嶆効鎰忓幓鍋氥傛祦姘寸嚎宸ヤ漢鑳戒笉鑳藉仛紼嬪簭鍛橈紝灝變笉濂借翠簡銆備絾鏄錛屼篃浠呮よ屽凡浜嗭紝紼嬪簭鍛樻湰璐ㄤ笂榪樻槸鏃犱駭闃剁駭鍔沖姩鑰咃紝涓縐嶆瘮嫻佹按綰垮伐浜虹█灝戜簺鐨勫姵鍔ㄨ呰屽凡銆
鐪嬩竴涓宀椾綅濂戒笉濂斤紝鐪嬬湅宀椾綅涓婄殑浜烘効涓嶆効鎰忚╀粬浠鐨勫╁瓙騫插氨鐭ラ亾浜嗐傛瘮濡傛垙瀛愪滑錛屽╁瓙榪樻病鍑犲瞾鍛錛屽氨鎯崇潃鍑洪亾浜嗭紝璇存槑闂ㄦ涘湪鏌愮嶆儏鍐典笅鍙浠ュ緢浣庯紝鑰屼笖鍒╃泭鏋佸ぇ銆傜儫鑽夊唽灝樼數鍔涢兘甯屾湜瀛愭壙鐖朵笟錛屽叕鍔″憳涔熷笇鏈涜嚜宸卞╁瓙鑰冨叕銆傚啀鐪嬬湅錛屽弽闈㈠吀鍨嬶紝宸ヤ漢鍐滄皯錛屾湁甯屾湜瀛愭壙鐖朵笟鐨勫悧錛熶互榪欎釜鏍囧噯鐪嬪ぇ澶氭暟閮芥櫘閫氱▼搴忓憳錛岄棶闂浠栦滑鎰挎剰鑷宸卞╁瓙闀垮ぇ鍋氫粈涔堣亴涓氬氨鐭ラ亾浜嗐
浣滀負涓涓鍗佸勾紼嬪簭鍛樿佸叺錛屾垜鏉ュ洖絳旇繖涓闂棰樸
棣栧厛錛屽緢澶氫笢瑗誇笉鑳界敤綆鍗曠殑濂戒笌涓嶅ソ鏉ュ尯鍒嗐傚彧瑕佷綘閫昏緫鎬濈淮鑳藉姏寮虹偣錛屽氨閫傚悎瀛︾紪紼嬶紝鑳藉叆闂ㄣ備絾鏄鍏ラ棬鍚庡彂灞曞備綍錛岀湅鏈洪亣錛岀湅鍔鍔涚▼搴︺傚叾涓瀛﹀巻錛屾槸鍚︽槸璁$畻鏈轟笓涓氾紝鎴栬呮槸鍚︾啛鎮夎$畻鏈虹悊璁猴紝瓚婂埌鍚庨潰瓚婇噸瑕侊紝褰卞搷鏈洪亣鍜屾彁楂樼殑涓婇檺銆
鍏舵★紝紼嬪簭鍛樺伐璧勭浉瀵規潵璇存瘮杈冮珮銆傚傛灉浣犲湪35宀佷箣鎹炰竴鎶婂氨杞琛岋紝閭f病闂棰樸
鏈鍚庯紝瑕侀噸鐐硅寸殑鏄錛35宀侊紝瀵規瘡涓琛屼笟鐨勪漢閮芥槸涓閬撳潕銆傝繃浜嗚繖涓騫撮緞錛屽傛灉浣犺繕鍦ㄥ熀灞傚矖浣嶄笂錛岄兘涓嶄細榪囧緱澶濂姐傚逛簬紼嬪簭鍛橈紝濡傛灉鍦35宀佹椂鑳界嫭絝嬫壙鎷呴」鐩錛屽甫鍥㈤槦錛岄偅灝變笉鐢ㄦ媴蹇冦備絾鏄濡傛灉娌″﹀巻錛屽彲鑳芥満浼氳繕鏄浼氬皯涓浜涖
鎴戞槸灝忕尶鍝ワ紝鍗佸勾紼嬪簭鍛樿佸叺錛屽叧娉ㄦ垜錛屾垜浠涓璧鋒帰璁ㄧ▼搴忓憳鐨勫洶鎯戱紝涓璧鋒墦鎬鍗囩駭錛
鎰熻阿澶存潯鐨勯個璇鳳紝鎰熻夋垜璺熺▼搴忓憳鏉犱笂浜嗭紝涓鐩村湪緇欐垜鍒嗕韓紼嬪簭鍛樼浉鍏崇殑闂棰樸傞偅涔堜粖宸璁╁ぉ鎴戝氨鍐欎竴鍐欐垜鐨勭湅娉曘傚厛璇寸粨璁猴紝紼嬪簭鍛樺ソ涓嶅ソ錛岀瓟妗堟槸綆楁尯濂界殑銆
棣栧厛浠嬬粛涓嬫垜涓浜烘儏鍐碉細鏈浜2011騫存湰縐戞瘯涓氾紝姝︽眽鏌愭櫘閫氬ぇ瀛︼紝涓撲笟鏄鐢靛瓙淇℃伅宸ョ▼銆2014騫寸爺絀剁敓姣曚笟錛屽湪閲嶅簡閭鐢靛ぇ瀛︼紝涓撲笟鏄鐢靛瓙涓庨氫俊宸ョ▼錛岀洰鍓嶅湪鍗庝負瀛愬叕鍙稿伐浣溿傚矖浣嶆槸嫻峰栬В鍐蟲柟妗堥攢鍞錛屾垨鑰呭彨鍋氫駭鍝佺粡鐞嗐傜爺絀剁敓鏈熼棿鍦ㄥ煎笀鐨勫叕鍙稿疄琛屼簡16涓鏈堬紝鍏朵腑鍒氬幓鐨4涓鏈堝仛鐨勬槸鐮斿彂錛岀敤鐨勬槸C#錛屽仛浜嗕竴孌墊椂鍊欏彂鐜拌嚜宸辯湡鐨勫叴瓚d笉澶э紝鑳藉姏涔熶笉澶琛岋紝鍚庢潵杞鍘誨仛浜嗚繍緇淬傛瘯涓氭椂鍊欐病鏈夌暀鍦ㄨ繖涓鍏鍙革紝鍘葷殑鏄鍗庝負瀛愬叕鍙革紝宀椾綅鏄瑙e喅鏂規堥攢鍞銆備笉榪囨梺杈圭殑鍚屼簨榪樻槸浠ョ爺鍙戝拰嫻嬭瘯涓轟富錛屼篃灝辨槸澶у舵櫘閬嶈寸殑紼嬪簭鍛橈紝鎬諱綋涓婃垜瑙夊緱紼嬪簭鍛樻尯濂界殑錛屽緟閬囨媺榻愭墍鏈夋瘯涓氫笓涓氭潵鐪嬶紝綆楁槸姣旇緝楂樼殑錛岄珮鐨勫師鍥犱篃寰堢畝鍗曪紝闇奼傚氾紝浜у嚭濂姐傚叿浣撳師鍥犲備笅錛
1
寰呴亣鏂歸潰錛屼負浠涔堣侀珮涓浜涳紝鏄闇奼傞噺澶с傚ぇ姒傚彲浠ュ夠鎯充竴涓嬶紝20騫村墠鏈鐏鐨勬垨鑰呬粠浜嬫渶澶氱殑鏄浠涔堣屼笟錛熸槸宸ュ巶鐨勫伐浜猴紝鍏鋒湁涓瀹氱殑鎶鏈鑳藉姏錛屽湪宸ュ巶鐢熶駭綰誇笂鐢熶駭浜у搧銆傜幇鍦ㄦ渶鐏鐨勬槸浠涔堬紝鏄浜掕仈緗戱紝鏄搴旂敤錛屾槸鏅鴻兘鎵嬫満銆備換浣曟柟闈㈤兘紱諱笉寮杞浠跺簲鐢錛岄偅涔堣蔣浠跺簲鐢ㄥ氨闇瑕佹湁浜烘潵寮鍙戱紝涓嶇℃槸浼犵粺鐨勯摱琛岋紝宸ュ巶錛屽埗閫犱紒涓氾紝榪樻槸鏂板瀷鐨勪簰鑱旂綉錛岄氫俊絳夌瓑錛岄偅涓琛屼笟涓嶉渶瑕佸簲鐢錛屼笉闇瑕佸紑鍙戣蔣浠躲傜幇鍦ㄤ綘鍘婚摱琛屽姙涓氬姟錛屾槸涓嶆槸涓涓獮PP灝卞熀鏈涓婃悶瀹氥傜幇鍦ㄤ綘鍘繪斂搴滃姙鎵嬬畫錛屾槸涓嶆槸涓涓獮PP灝辮兘鎼炲畾銆傞渶奼傞噺鏄鐪熷ぇ鍟娿
2
寰呴亣鏂歸潰錛屼負浠涔堣侀珮涓浜涳紝鏄浜у嚭鏀剁泭楂樸傛瘮濡傜幇鍦ㄦ墜鏈烘父鎴忥紝鐜嬭呰崳鑰錛岀粷鍦版眰鐢燂紝鍘熷0錛屾瘮濡傞樋閲屽反宸達紝浜涓滆繖鏍風殑璐鐗╃綉絝欙紝榪欎簺鍏鍙哥殑鏀剁泭姣旀槸闈炲父楂樼殑錛屼綘涓瀹氬惉璇磋繃鑵捐浜哄潎80涓囧伐璧勭殑璇存硶銆備駭鍑洪珮錛岄偅涔堝緟閬囧繀鐒墮珮銆傛瘮濡傛垜鐜板湪鍦ㄧ殑鍗庝負瀛愬叕鍙革紝鍋氭暣浣撳氨涓氱幆澧冧腑寰呴亣鑲瀹氭槸灞炰簬澶撮儴鐨勮繖鎵規°
3
紼嬪簭鍛樹負浠涔堣繖涔堢炵橈紝鍏跺疄璺20騫村墠宸ュ巶閲岃竟鐨勬妧鏈宸ヤ漢娌″尯鍒銆20騫村墠鏄姣忎漢鍓嶈竟涓涓鍔犲伐杞﹀簥錛岀幇鍦ㄦ槸姣忎釜紼嬪簭鍛橀潰鍓嶄竴鍙扮數鑴戱紝閮芥槸閭d箞1-2騫崇背鐨勭┖闂達紝閮芥槸鎵嬭壓媧誨悆楗錛屽彧鏄鏃朵唬鍙樹簡錛屽叾瀹炴ц川娌℃湁閭d箞澶у尯鍒銆傜幇鍦ㄥ緢澶氳存硶鏄緙栫▼閮借佷粠灝忓﹀紑濮嬩簡錛屼粬鐨勫繀瑕佹у拰浠栫殑鏈夋晥鎬ф槸閫愬勾鎻愬崌鐨勶紝鏅閫氭皯浼椾細瓚婃潵瓚婃櫘鍙婁互鍙婇傚簲瀵硅櫄濮垮矓紼嬪簭鍛樼殑鐞嗚В銆
鏃朵唬鍦ㄥ彉錛岃佹寔緇瀛︿範錛屼笉鑳借惤浼嶃傚氨浠庡圭▼搴忓憳鐨勫嵃璞′竴鏍鳳紝涓嶉渶瑕佷互濂藉囨垨鑰呯壒孌婄殑鐪煎厜鏉ュ瑰緟錛屾湭鏉ワ紝姣忎釜瀹跺涵錛屽彧鏈夋湁涓涓浜叉垰鎴栬呮湅鍙嬫槸鍋氱潃紼嬪簭鍛樼殑鍩烘湰宸ヤ綔錛屼笉闇瑕佸ぇ鎯婂皬鎬銆
紼嬪簭鍛樻湁涓鏈夋剰鎬濈殑鐗圭偣錛屽氨鏄浠庝簨鐨勪簨鎯呮湁闈炲父楂樼殑瑙勬ā鏁堢泭鈥斺旇勬ā瓚婂ぇ錛屾垚鏈瓚婁綆銆
涓句釜渚嬪瓙錛氬井杞寮鍙慜ffice錛岄渶瑕1000涓囩編鍏冩垚鏈錛屽崠涓浠絆ffice鏄100緹庡厓錛屽垯鍗10涓囦喚鏃訛紝鏀舵敮騫寵銆備絾鏄涓嬮潰鏄鍏抽敭錛氬悗闈㈡瘡涓鍗栦竴浠斤紝鍙浠ヨや負鏄鍑璧100緹庡厓錛屽洜涓烘垚鏈涓嶉殢鐫瑙勬ā鑰屼笂鍗囥傚綋鐒惰繖鏄鐞嗘兂鎯呭喌銆
綾諱技錛屼綘寮涓涓緗戠珯錛1000涓浜鴻塊棶錛屾垚鏈涓1000錛屽垯涓涓囦釜浜鴻塊棶鏃訛紝鎴愭湰澶ф傚湪1250錛岃屼笉鏄10鍊嶃
鍙嶈繃鏉ワ紝鍋囪句綘寮瀹炰綋鐨勪功搴楋紝闆囦劍20涓浜猴紝鎴愭湰涓1000錛屽垯浣犲啀寮涓瀹朵功搴楋紝閭d箞鎴愭湰蹇呯劧涓2000錛屽氨鏄榪戜箮鎴愬嶅為暱鐨勩傚叾鎵╁紶鐨勮竟闄呮晥搴斾笉鏄寰堥珮銆
榪欐槸鍥犱負錛岀粷澶у氭暟瀹炰綋琛屼笟錛岀‖浠墮兘鏄鏀鍑虹殑澶уご錛屾棤娉曢伩鍏嶏紱鍞鐙杞浠惰屼笟錛岀‖浠剁浉瀵逛究瀹滐紝鑰屼漢鍔涢潪甯歌吹錛屾墍浠ユ墿寮犲規槗銆
鎵浠ワ紝寮鍏鍙哥殑璧勬湰瀹舵洿鍏沖績鎵╁紶錛氬備綍浠1000涓囩敤鎴峰炲姞鍒1涓囩敤鎴鳳紝鍥犱負鐢ㄦ埛瓚婂氾紝鎴愭湰瓚婁綆錛岃繖涔熸槸startup鈥滅儳閽扁濈殑鍘熺悊銆傛崲鍙ヨ瘽璇達紝鐢ㄦ埛鏁拌窡鍒╂鼎鎴愮嚎鎬х殑姝f瘮錛屼絾鐢ㄦ埛鏁拌窡鏀鍑哄彧鎴愮被浼煎規暟鐨勫叧緋匯備竴涓猻tartup鐜板湪鏈100涓囩敤鎴鳳紝鏀跺叆100涓囷紝浣嗗紑鍙戝拰緇存姢闇瑕300涓囷紝姣忓勾浜200涓団斺斾絾涓嶈佺揣錛屽傛灉鐢ㄦ埛鑳芥墿澶у埌500涓囷紝鏀跺叆灝辨槸500涓囷紝寮鍙戝拰緇存姢鍙鑳戒篃鍙闇瑕400涓囷紝姣忓勾灝卞噣璧氫簡錛岀敤鎴鋒墿澶у埌5000涓団斺旀伃鍠滀綘錛屽叕鍙鎬笂甯備簡錛岄噷闈㈠緢澶氫漢璐㈠姟鑷鐢變簡銆傝繖縐嶆ⅵ鎯抽┍鍔ㄤ笅錛岃祫鏈瀹舵湁蹇呰佺渷閭300涓囩殑浜哄姏閽變箞錛
鐢ㄦ埛鏁拌嚜鐒剁敱浜у搧璐ㄩ噺鍐沖畾錛屼駭鍝佽川閲忓垯鐢辯▼搴忓憳浠ュ強鍏朵粬鑱屼綅鍐沖畾銆傝繖灝卞喅瀹氫簡璧勬湰瀹舵洿娉ㄩ噸鐢ㄦ埛鍜屼駭鍝佽川閲忥紝鑰屼笉鏄紼嬪簭鍛樻嬁澶氬皯閽憋紝浠栦滑鎰挎剰澶氬紑鐐歸挶錛屼互鎹㈠彇紼嬪簭鍛樼殑蹇犺瘹鍜屽崠鍔涖
紼嬪簭鍛樿繖涓鑱屼笟鐨勭『鏄鏅閫氭妧宸ワ紝鏄宸ヤ漢闃剁駭銆備絾鎴戜釜浜烘渶澶х殑鎰熷彈鏄錛氳繖鍙鑳芥槸浜虹被鏂囨槑涓絎涓涓鍑虹幇鐨勬妧宸ヤ腑闇瑕佺儹鎯呭拰澹姘旂殑宸ョ嶃傛崲鍙ヨ瘽璇達紝浠庡墠鐨勫伐浜猴紝澹姘旈珮浣庛佹妧鑳界啛緇冧笌鍚︺佸壋鏂扮簿紲炲備綍錛屽規暣涓宸ヤ笟灞傞潰褰卞搷涓嶅ぇ錛屽洜涓烘瘡涓浜虹殑宸ヤ綔姣旇緝鍥哄畾鑰屼笖綆鍗曪紝姣斿傞摱琛屾敹閾跺憳錛屾壂澶ц楃殑錛涗絾鏄紼嬪簭鍛樹笉涓鏍鳳紝涓嫻佺殑紼嬪簭鍛樺傛灉澹姘旈珮鑳藉姏寮猴紝鏈夌簿鍔涳紝涓涓欏5涓10涓浜屾祦紼嬪簭鍛樺お姝e父銆傝嚦浜庣涔濇祦鐨勭▼搴忓憳錛屾洿鏄鍙鏈夊嵄瀹籌紝娌℃湁璐$尞錛屾槸灞炰簬鐮村潖鑰咃紝瀹屽叏鍚﹀畾浜嗕漢嫻鋒垬鏈銆
鎵浠ヨ繖灝遍犺嗕簡浼犵粺鐨勨滄崲璋侀兘鑳藉共錛屼笉騫蹭綘婊氳泲鈥濈殑瀵瑰伐浜虹殑钄戣嗐傚氨緹庡浗鑰岃█錛岃祫娣辯殑紼嬪簭鍛樻壘宸ヤ綔瀹規槗紼嬪害榪滆儨浜庡簳灞傜殑緇忓巻錛屾敹鍏ュ線寰涔熻儨榪囥
褰撶劧鑲瀹氭湁浜鴻存悶縐戠爺鐨勩佹斂搴滃畼鍛樹笉鏄榪欐牱鍟婏紝闂棰樹漢涔熶笉鏄宸ヤ漢瀵瑰惂錛熸垜璇寸殑鏄鏅閫氫駭涓氬伐浜恆
榪欐槸鍏朵竴銆
鍏朵粬鍘熷洜澶у氭暟鍥炵瓟涔熼兘鎻愬埌浜嗭細姣斿傝村為暱澶蹇錛屽煿璁璺熶笉涓娿傛湁浜鴻翠笉瀵瑰晩錛屽煿璁鐝鍒板勯兘鏄銆傞棶棰樻槸鍩硅鏈韜鐨勮川閲忔湁澶氶珮錛屾槸鍊煎緱鎬鐤戠殑錛屼竴涓涓婂崌鐨勮屼笟錛屾噦鐨勪漢鍙浠ヨ交鏉炬壘鍒板ソ宸ヤ綔錛屼綍蹇呭幓褰撹佸笀錛熸墍浠ュ叾瀹炲煿璁鐝鍑烘潵鐨勪篃鐩稿歸兘鍒濈駭銆
姣斿傝村伐浣滅瘡銆佺箒蹇欎篃灝辯艦浜嗭紝瀵規櫤鍔涙妧鑳藉拰鐭ヨ瘑緇撴瀯瑕佹眰涔熸瘮杈冮珮銆備綘浠ヤ負緹庡笣鎷涗竴鍫嗚磋嫳璇鍗楄厰鍖楄皟鐨勭Щ姘戠▼搴忓憳鏄澶氭や竴涓撅紵瀹炲湪鏄鏈鍦頒漢涓嶄簤姘斿晩銆傝嚦浜庤寸瘡姝葷殑闂棰橈紝鎷垮懡鎹㈤挶鐨勯棶棰橈紝涓鍥芥垨璁稿瓨鍦錛岀編甯濆緢灝戙傝屼笖鎴戠悽紓ㄧ潃錛岃繖縐嶅伐浣滃叾瀹炲唴鍦ㄥ己搴﹂潪甯擱珮錛屼絾涓鍛沖湴澧炲姞鏃墮棿鍏跺疄涓嶅垝綆楋紝姣斿傛垜涓澶╁共8涓灝忔椂錛屼駭鍑100%錛10涓灝忔椂錛屼駭鍑115%錛14灝忔椂鍙鑳藉彧鏈125%銆傝屼笖錛岃秴榪10涓灝忔椂錛岃繃鍑犱釜灝忔椂灝辮窇璺浜嗭紝鍏鍙告崯澶辨洿澶с傛墍浠ユ垜鐩磋夋槸996鍏跺疄鏁堟灉鏈蹇呯湡澶氬ソ銆
榪樻湁涓涓閲嶈佸師鍥狅細璐㈠瘜鍜屾祦閫氳漿縐匯侷T鍜岀▼搴忓憳鐨勫埄娑﹂櫎浜嗗壋鏂拌繕鏉ヨ嚜鍝閲岋紵榪樻潵鑷瀵逛紶緇熻屼笟鐨勬尋鍘嬨傛瘮濡備互鍓嶅紑涓涔﹀簵錛岃侀泧浣20涓浜猴紝縐熷満鍦幫紝鐜板湪浣犲壋涓氬紑浜嗕簹椹閫婏紝鍗栦功鍙鑳藉彧闇瑕2涓鐮佸伐2涓緇忕悊灝卞彲浠ワ紝閭d箞鐮佸伐鍜岀粡鐞嗙殑鏀跺叆鑷鐒跺彲浠ラ珮涓浜涳紝鍥犱負涔﹀簵鐨勬敹鍏ュ拰鍒╂鼎琚杞縐誨埌浜嗕簹椹閫婁笂銆
榪欎釜鍦ㄧ編鍥芥劅瑙夌壒鍒鏄庢樉錛屼竴澶у爢浼犵粺闆跺敭鍜屼功搴楃悍綰峰掗棴錛岃浜氶┈閫婃墦寰楁弧鍦版壘鐗欙紝鎵浠ヤ簹椹閫婂競鍊肩垎琛ㄣ傝繖浜涗環鍊礆紝鐨勭『鏄鐮佸伐鎶㈠ず鏉ョ殑錛屾墍浠ヤ漢澶氬悆鍑犲彛涓嶈佽翠粈涔堚滄嬁鍛芥崲閽扁濓紝澶ч儴鍒嗚亴涓氶兘鏄鍦ㄦ嬁鍛芥崲閽憋紝璀﹀療銆佹秷闃插憳銆侀┗澶栧+鍏點佸洓澶э紝璋佸規槗鍟娿
鎵浠ョ爜宸ラ櫎浜嗗壋閫犱竴浜涗駭鍝佷互澶栵紝榪樺湪浼樺寲浼犵粺浜т笟銆傞偅浜涘彧浼氬潗鏌滃彴銆佷粈涔堟妧鑳介兘娌℃湁鐨勯噸澶嶆у伐浣滃矖浣嶏紝灝嗗湪鏈鏉ヤ笉鏂琚鏈哄櫒浜哄拰紼嬪簭浠f浛銆傚ぇ閲忎腑闂存笭閬撲駭鐢熺殑鑱屼綅鍜屾祦紼嬶紝涔熼愭笎浼氭秷澶憋紝紺句細瓚嬩簬鏇翠紭鍖栧拰楂樻晥銆
榪欎釜榪囩▼灝嗘槸寰堟畫閰風殑錛屽緢琛鑵ョ殑錛屼絾涔熸槸寰堟縺鍔變漢蹇冪殑錛屾洿鏄鍏騫崇殑銆傛病鏈夋妧鑳界殑浜猴紝鍙浠ラ氳繃瀛︿範鏀瑰彉鍛借繍錛屾垚涓烘満鍣ㄥ拰紼嬪簭鐨勬搷綰佃咃紱鎷掔粷榪欎釜榪囩▼銆佷笉瀵繪眰鏀瑰彉鐨勪漢錛屽皢浼氳孌嬮叿鐨勭幇瀹炴墦璐ャ
璁$畻鏈烘槸闈炲父鍏騫崇殑涓撲笟錛屽傛灉涓嶆槸鏈鍏騫崇殑璇濄傚瘨闂ㄥIT錛屾f槸鍥犱負瀹冨彧璁虹粨鏋滐紝涓嶇湅鍑鴻韓銆
鍏蟲敞鎴戱紝鎴戞槸鈥滃寳婕傜▼搴忓獩鈥濓紝鐜板氨鑱屼簬鏌愬ぇ鍘傚悗絝寮鍙戝伐紼嬪笀錛屽彲鍐呮帹澶у巶錛岃茬偣鏈夎叮鐨勭▼搴忓憳鏁呬簨鍜屽唴瀹癸紝瀵圭▼搴忓憳濂藉囩殑鏈嬪弸錛屾垨鑰呭悓琛岋紝嬈㈣繋鍏蟲敞鐣欒█[鍛茬墮]
涔熷氨鏄涓縐嶈亴涓氾紝閭d釜琛屼笟閮芥湁浼樺娍鍜屽姡鍔匡紝鎰熻夋病鍟ョ壒孌婄殑銆
鐑熻崏鍏鍙稿ソ錛屼絾娌℃湁寰堥珮鐨勫﹀巻鍜屽緢寮虹殑瀹跺涵鑳屾櫙錛屾槸榪涗笉鍘葷殑銆傚叕鍔″憳銆佷簨涓氬崟浣嶅ソ錛屼絾鑳借冧笂鐨勬瘯絝熸槸灝戞暟銆
瀵逛簬鏅閫氬跺涵銆佹病鏈夎儗鏅銆佸﹀巻涓鑸鐨勪漢鏉ヨ達紝褰撶▼搴忓憳鏄鏉¤繕涓嶉敊鐨勮礬銆
絎涓錛屾敹鍏ラ珮銆傛垜璁よ瘑寰堝氫簩鏈銆佷笁鏈鐢氳嚦涓撳崌鏈鐨勭▼搴忓憳錛屼粬浠鍥犱負瀛﹀巻鐨勫師鍥狅紝鍦ㄥぇ鍘傞噷鍋氬栧寘錛屼竴涓鏈堣柂姘翠篃鏈変釜涓涓や竾銆傝嚦浜庨《綰уぇ鍘傞噷闈㈢殑鐗涗漢錛屽勾鍏ョ櫨涓囦互涓婄殑涔熸槸寰堝氱殑銆傜▼搴忓憳鐨勬敹鍏ヤ笌鍏朵粬琛屼笟鐩告瘮紜瀹炴瘮杈冮珮銆
絎浜岋紝宸ヤ綔鏈轟細澶氥備笉綆″︽牎濂藉潖錛岀▼搴忓憳閮藉彲浠ラ潬鑷宸辮兘鍔涙壘鍒頒竴浠藉伐浣滐紝涓嶅儚鏈変簺宸ヤ綔錛岄渶瑕佸幓鎵樹漢鎵懼叧緋匯傝嚦灝戠洰鍓嶇▼搴忓憳榪樻病鏈夊儚甯堣寖鐢熼偅鏍蜂漢鎵嶈繃鍓┿
褰撶▼搴忓憳鐨勬渶澶х己鐐規槸錛屽伐浣滆緵鑻︺佸姞鐝澶氥傚彲鏄瀵逛簬鎴戜滑榪欑嶆櫘閫氬跺涵鍑鴻韓銆佹病鏈夎儗鏅鐨勪漢鏉ヨ達紝騫插暐涓嶈緵鑻﹀憿錛熸垜浠鍙堣兘鏈変粈涔堟洿濂界殑閫夋嫨鍛錛
鍗充嬌楂橈紝涔熶粎浠呮槸鍚冮潚鏄ラキ鐨勯偅浜涘勾銆傚勾鍗庝笉鍐嶆椂錛岄潪浣嗛キ紕椾繚涓嶄綇錛岃屼笖宸ヨ祫涓钀藉崈涓堛
紼嬪簭鍛樹粠涓氭湡闂達紝澶栦漢鐪嬫潵錛屽湪鏁存磥銆侀珮澶т笂鐨勫姙鍏闂村唴鍔炲叕錛屽傚悓鐧介嗕竴鑸銆傚疄鍒欑墷絎間竴鑸錛岀柉鐙傚姞鐝銆佹濇兂灝侀棴銆佹矡閫氬叏鏃犮佷笌紺句細闅旂粷錛屽崟綰銆佹湪璁楓佸姙浜嬭兘鍔涘樊銆佽繃浜庣悊鎬ц緝鐪熷獎鍝嶆棩鍚庣敓媧匯
紼嬪簭鍛樺姞鐝鏄甯告侊紝濡傛灉灝嗕粬浠鍔ㄨ緞涓婁竾鐨勬湀鍚鎹㈢畻鎴愭椂鍚錛屽彧姣斿煄甯備綋鍔涘簳灞備綋鍔涘矖浣嶅伐璧勫20%宸﹀彸錛屼絾鏄鍒蹇樹簡錛屼粬浠閮芥槸澹騫淬
紼嬪簭鍛樻槸鍑犱箮娌℃湁浠涔堜綋鍔涘姵鍔ㄧ殑錛岃屾槸榪囧害鍦板帇姒ㄨ剳鍔涳紝甯曢噾媯銆佽佸勾鐥村憜銆佺対姝諱笉鏄鍗辮█鑰稿惉銆
紼嬪簭鍛樿佷笉鏂瀛︿範錛屾妧鏈鏇存柊鐨勬瘮瀛︿範蹇涓嶇煡澶氬皯鍊嶏紝鍩哄眰宀椾綅瀛︿竴嬈″悗緇瀛︿範鎴愭湰鏋佷綆銆
灝界″傛わ紝紼嬪簭鍛樹緷鏃ф槸鍙浠ヤ粠涓氱殑鑱屼笟錛屼絾涓嶈兘鍙鐪嬪伐璧勯珮銆傚簲璇ヨ村湪閫傚害婊¤凍鐨勫墠鎻愪笅鍋氱▼搴忓憳灝卞ソ錛屾瘮濡傚競鍦轟環8000鏃跺仛6000宸ヤ綔閲忕殑紼嬪簭鍛橈紝緇欑敓媧匯佺ぞ浜ゃ佷漢鎯呬笘鏁呯暀涓浜涚┖闂淬
濡傛灉浠庡氨涓氱殑瑙掑害鏉ョ湅錛屼竴鑸鎯呭喌涓嬮噾鋙嶃佹埧鍦頒駭銆佺戞妧琛屼笟鐨勪粠涓氫漢鍛樺伐璧勯兘姣旂ぞ浼氬鉤鍧囧伐璧勮侀珮錛屼篃姣旂ぞ浼氬伐璧勪腑浣嶆暟瑕侀珮銆備絾鏄鍜岀儫鑽夈佸尰鐤椼佹暀鑲層佺數緗戙佸叕鍔″憳鍜屼簨涓氬崟浣嶇浉姣旓紝紼嬪簭鍛樼殑緇煎悎鏀跺叆涔熻稿苟娌℃湁澶澶х殑浼樺娍銆傚湪寰堝氫漢鐨勭溂閲岋紝紼嬪簭鍛樼殑宸ヨ祫楂橈紝閭f槸鍥犱負鈥滃緢澶氫漢鈥濋兘鏄鎸f墡鍦ㄧぞ浼氬伐璧勪腑浣嶆暟涓婁笅錛屾垨鑰呮洿浣庛
紼嬪簭鍛樼殑宸ヨ祫紜瀹炰笉綆椾綆錛屽挨鍏舵槸鍦ㄤ竴綰垮ぇ鍩庡競錛屾櫘閬嶉兘鏄鍦ㄤ腑浣嶆暟浠ヤ笂錛屽嚭鑹茬殑紼嬪簭鍛樺伐璧勬敹鍏ュ緢涓嶉敊錛屽熀鏈涓婇兘鏄涓や笁涓囪搗姝ワ紝鍐嶅姞涓婂栭噾鍒嗙孩絳夊叾浠栨敹鍏ワ紝騫磋柂浜斿嶮涓囧強浠ヤ笂錛岀『瀹炴湁寰堝氫漢銆傚勾鍚鐧句竾鎴栬呭崈涓囩殑錛屾垜璁や負閭i儴鍒嗗凡緇忎笉鍗曠函鏄紼嬪簭鍛樹簡錛屽ぇ澶氭暟閮藉吋鏈夋妧鏈棰嗗啗浜虹墿澶磋旓紝鏈宸涔熸槸涓涓閮ㄩ棬鐨勬妧鏈棰嗗箋
紼嬪簭鍛樼殑宸ヨ祫涓轟粈涔堣繖涔堥珮錛熶富瑕佹槸榪囧幓浜屽嶮澶氬勾浠ユ潵錛屾垜鍥界戞妧椋為熷彂灞曪紝闇瑕佸ぇ閲忕殑縐戞妧浜烘墠銆傝屼笟鍐呯殑絝炰簤錛屽叏涓栫晫鑼冨洿鐨勭珵浜夛紝鎴戜滑闇瑕佸揩鑰屽噯銆傚洜姝わ紝灝遍渶瑕佸ぇ閲忕殑紼嬪簭鍛橈紝涓嶇℃槸鏅閫氱殑鐮佸啘錛岃繕鏄鎶鏈綺炬箾鐨勫伐紼嬪笀錛岀己鍙i兘闈炲父澶э紝浣嗘槸閫氳繃鍚勭嶆暀鑲插煿鍏誨嚭鏉ョ殑縐戞妧浜烘墠闈炲父紼緙猴紝榪欏氨瀵艱嚧浜嗏滄按娑ㄨ埞楂樷濈殑琛屾儏銆傚彟澶栦竴涓寰堥噸瑕佺殑鏂歸潰鏄錛屾垜浠涔熷湪鏃墮棿鐨勮禌閬撲笂榪借刀錛屽洜姝わ紝紼嬪簭鍛樼殑宸ヤ綔鏃墮棿澶ч儴鍒嗕漢宸茬粡榪滆繙瓚呭嚭鍏灝忔椂宸ヤ綔鍒訛紝996涓搴︽垚涓哄父鎬併傚綋鐒訛紝鎴戜滑鐜板湪騫朵笉鎻愬″苟涓嶉紦鍔996錛岄櫎闈炲伐鏈熺揣寮狅紝鍚﹀垯榪樻槸搴旇ュ潥鎸佸叓灝忔椂宸ヤ綔鍒朵負濂斤紝宸ヤ綔鏄涓轟簡鏇村ソ鍦扮敓媧伙紝涓嶈兘浠ョ壓鐗茬敓媧繪潵宸ヤ綔銆
紼嬪簭鍛樼殑宸ヨ祫楂樻湁涓涓寰堥噸瑕佺殑鍘熷洜鏄錛岀▼搴忓憳涓嶄粎浠呮槸鑴戝姏鍔沖姩錛岃屼笖榪樻槸闇瑕佺▼搴忓憳鎷ユ湁鎵庡疄鐨勭悊璁哄熀紜鍜屼赴瀵岀殑緇忛獙銆傝繖灝辨槸闇瑕佺▼搴忓憳鎷ユ湁澶у︿互涓婄殑鏁欒偛鑳屾櫙錛岃屼笖闇瑕佸湪宸ヤ綔涓涓嶆柇鍦頒赴瀵岃嚜宸辯殑鐭ヨ瘑鍜岀粡楠屻傝繖鍜屼竴鑸鐨勪綋鍔涘姵鍔ㄦ垨鑰呭皯閲忚剳鍔涘姵鍔ㄧ殑宀椾綅鐩告瘮錛岀▼搴忓憳闇瑕佷粯鍑哄緱鏇村氥
瀵逛簬澶у氭暟浜烘潵璁詫紝紼嬪簭鍛樺氨鏄鍚冮潚鏄ラキ鐨勩傝繖閲屾湁涓や釜鎰忔濓紝涓鏄騫寸邯澶т簡瀹規槗閬閬囪佸憳鍗辨満錛屼簩鏄娣鋒棩瀛愭懜楸間笂鐝銆傛垜瑙佽繃寰堝氱▼搴忓憳鍒頒簡35宀侊紝灝辮侀潰涓磋亴涓氬嵄鏈恆傚緢澶氫漢琚榪瑁佸憳鎴栬漿琛岋紝涔熸湁寰堝氫漢鑳界戶緇鍦ㄧ▼搴忓憳鐨勫矖浣嶄笂宸ヤ綔錛屼絾鏄鎶鏈鍩烘湰宸茬粡鍥哄寲鑰屼笖宸茬粡瑙﹀強澶╄姳鏉匡紝榪欓儴鍒嗗啀鎬庝箞宸ヤ綔錛屼篃闅句互鏈夋柊鐨勬垚緇╋紝澶у氭暟鍙鏄閲嶅嶆х殑騫插畬媧昏屽凡銆
涔熻稿緢澶氫漢浼氳達紝鍥藉栦篃鏈夊勾綰澶х殑紼嬪簭鍛樺晩錛屾湁浜涘ぇ鐗涘洓浜斿嶮宀侊紝浜斿叚鍗佸瞾閮藉湪緙栫爜錛岀敋鑷寵繕鑳藉仛鍑轟笉鑿茬殑鎴愮嘩銆傛槸鐨勶紝浣嗛偅鏄鍥藉栥傚浗澶栫殑紼嬪簭鍛樻槸涓涓姣旇緝鏅閫氱殑鑱屼笟韜浠斤紝鏅閬嶆敹鍏ヤ篃騫舵病鏈夊悜鎴戜滑閭d箞紿佸嚭銆傛渶鍏抽敭鐨勬槸錛屽浗澶栫殑鐮佸啘鏂扮敓鍔涢噺姣旇緝灝戱紝浜哄彛鍩烘暟灝戞槸涓涓瀹㈣傚瓨鍦ㄣ
鎴戣や負鎴戜滑鐨勭戞妧浠嶅勪簬楂橀熷彂灞曠殑闃舵碉紝灝ゅ叾鏄浠ュ崐瀵間綋鑺鐗囦負鏍稿績鐨勪駭涓氱戞妧錛屼緷鐒跺瓨鍦ㄩ潪甯稿ぇ鐨勫彂灞曠┖闂達紝鎵浠ョ▼搴忓憳鍦ㄦ湭鏉ュ緢闀跨殑涓孌墊椂闂村唴錛屼緷鐒舵槸寰堝悆棣欑殑鑱屼笟銆
紼嬪簭鍛樺氨鏄涓鏅閫氳亴涓氾紝娌℃湁濂戒笉濂戒箣鍒嗭紝涓昏佺湅浣犲枩涓嶅枩嬈錛屽枩嬈㈢殑宸ヤ綔鍋氳搗鏉ヤ笉瀹規槗鍘岀儲錛屽﹁搗鏉ヤ篃姣旇緝鐨勫揩銆傚緢緔鍙堣禋涓嶄簡寰堝氶挶錛氳繖閫傜敤浜庡ぇ閮ㄥ垎鐨勮亴涓氬拰浜虹兢錛屼笉鍙鏄紼嬪簭鍛橈紝闄や簡閭d簺鏈夋嵎寰勭殑浜猴紝鍏朵粬閮借佽繘榪囦竴涓縐緔鐨勮繃紼嬶紝鎵嶈兘鎷垮埌寰堜笉閿欑殑宸ヨ祫錛涚瘡涓嶇瘡錛屽緱鐪嬩綘鎵鍦ㄧ殑琛屼笟浠ュ強宀椾綅錛屽氨璇存垜錛屽尰闄㈢殑紼嬪簭鍛橈紝宸ヤ綔鏄寰堥棽錛屽伐璧勪箞灝變腑涓婃按騫籌紝瑕佹兂寰呴亣寰堥珮錛屾垜瑙夊緱鎴戠殑鎶鏈闇瑕佹彁楂樺埌鍏ㄥ競鏈夌煡鍚嶅害閭d箞鍘夊籌紝浣嗘槸鎴戣夊緱鎬曟槸涓嶅お鍙鑳斤紝鍥犱負姣旀垜鍘夊崇殑浜哄お澶氬お澶氫簡銆傛壘涓嶅埌濡圭焊錛氱▼搴忓憳澶ч儴鍒嗗畢錛屾崲鍙ヨ瘽璇村氨鏄澶ч儴鍒嗗氬氬皯灝戞湁鐐瑰唴鍚戱紝涓嶆噦浜烘儏涓栨晠錛屾渶涓嶄細鏉ヤ簨錛岃繖鏍風殑浜猴紝鍒板摢閲岄兘鎵句笉鍒板瑰瓙銆傛渶鍏抽敭鐨勪竴鐐癸紝浣犱笓涓氬︿粈涔堥兘鍏崇郴涓嶅ぇ錛屽仛鏈涓撲笟宸ヤ綔鐨勪漢灝戜箣鍙堝皯鐨勶紝榪樹笉濡傚氬氱殑鍘誨拰浜烘帴瑙︼紝鍙傚姞鍚勭嶇ぞ鍥錛屾悶濂藉悇縐嶅叧緋伙紝緇冨緱鍙浠ヨ佷漢璇翠漢璇濓紝瑙侀艱撮艱瘽姣旀妧鏈鍜屼笓涓氭湁鐢ㄧ殑澶氥傜幇鍦ㄦ垜浠鍥藉剁殑鎯呭喌灝辨槸錛屼細璇磋瘽鏈夌偣鎶鏈鐨勫湪棰嗗煎眰錛屼細璇磋瘽娌℃妧鏈鐨勫湪涓闂村眰錛屽共鎶鏈鐨勫湪搴曞眰錛岀函闈犳妧鏈鍙堝湪棰嗗煎眰鐨勶紝閭f槸鏋佸皯鏁幫紝浣犲彲浠ョ湅鐪嬬幇鍦ㄩ偅浜涚煡鍚嶇殑鎴愬姛浜哄+錛屽摢涓涓嶆槸鍢村帀瀹籌紝鎯呭晢楂樼殑錛屽氨綆楅偅浜涘瘜浜屼唬鍟婄′簩浠f牱寮忓傛わ紝浠栦滑鐨勪漢鑴夋瘮鎶鏈濂界敤寰楀氥
F. 程序員如何提高自己的工作效率
程序員如何提高自己的工作效率?程序員要在IT界混出個名堂,也要有高效的工作效率才行。下面我為大家整理了程序員提高工作效率的辦法,歡迎大家閱讀參考!
程序員如何提高工作效率
1)鍵盤功底要扎實
敲鍵盤時要使用標准指法。可能你認為這是程序員的基本功,可是我發現其實很多程序員都做不到這點。看著他們敲代碼時那笨拙的指法我就心急。其實煉成標准指法不難,相當年我還是一指禪,打字極慢,痛定思定,在一周內我打字必用標准指法,再別扭也要堅持,一周後就適應了標准指法了。現在不說運指如飛也算是略有小成。練習指法和鍵盤速度可以給大家推薦一些網站:http://10fastfingers.com/typing-test/english,這個就是練習標准指法的,我可以輕松上60 WPM(每分鍾60單詞),有個外國同事可以達到130以上,那才叫恐怖。http://typing.io/lessons,專門供程序員練習敲代碼的網站,融合了各種括弧和標點,難度有點大。
2)要熟悉IDE的各種快捷鍵及特性
IDE基本上是碼農們上班中使用時間最長的軟體。首先要選擇一個趁手的IDE,俗話說,工玉成其事,必先利其器嘛。如果是C#陣營的那肯定是最新版的Vistual Studio了,如果是java陣營的話當然是Intellij了(eclipse作為開源IDE,真心比不過Intellij)。我現在使用Intellij可以在95%的情況下不用滑鼠,全鍵盤完成開發過程中的大部分操作。我覺得沒有什麼常用快捷鍵、不常用快捷鍵之分,只要你知道的快捷鍵就要拿來用。
尤其是各種重構快捷鍵必須要熟練掌握,當我看到碼農修改變數名時不用重構快捷鍵,而是自己手動在引用的地方一個個改,然後編譯查錯時,真為他們捉急。還有各種inline,introce的快捷鍵真是好用到爆,掌握了這些快捷鍵可以說對代碼進行任何重構都不費除灰之力,我們的注意力也從手動修改代碼轉移到如何發現壞味道了。Vistual Studio中推薦安裝ReSharper,其開發公司與Intellij開發公司是同一家。除了重構快捷鍵,還要掌握一些IDE的特性,比如調試時可以插入指定條件來命中斷點等,這些就要平時的積累和學習,另外還有好奇心。我敢說你現在挨個看IDE菜單,至少有30%功能你從沒用過或不知道是干什麼用的,其實裡面有些功能是非常實用的,只是你沒嘗試而已。
3)至少熟練掌握一種shell終端
作為程序員老用圖形化界面咋行,要用那種古老的命令行界面才能顯示出你的高深嘛!滑鼠點界面誰都會,而命令行界面不是誰都能駕馭。有些功能在命令行下要比圖形界面下高效N倍。比如我使用git提交文件時都是在命令行下查看哪些文件被修改了,哪些是新添加的,修改的部分是哪些等。
使用圖形化界面要用滑鼠點來點去,效率實在太低。Linux系統下的終端太多了,就不推薦了。Mac系統下推薦使用iTerm2這個殼,其比MAC自帶的terminal多了不少實用的特性,也能方便切換自己喜歡的配色。Windows下當然首推Windows Power Shell了。Windows Power Shell本身集成了常用的實用工具,並且與.net framework無縫結合,這點是那些在Windows上的類Linux模擬器(比如Cygwin)是遠遠比不了的。
4)具有一定編寫shell腳本的功底
光會用現有的`腳本還不行,還要會根據情況編寫腳本來實現自己特定的一些目標。比如我使用MAC機上的終端時,經常需要在不同目錄間跳來跳去,每次都打一串的cd …..很麻煩,後來我就自己寫了一個小工具,可以給指定的目錄起別名,想要跳到這個目錄只要敲別名即可(參見 http://www.huangbowen.net/blog/2013/02/16/gtshell/)。
還有我在Windows系統上工作時,也經常編寫一些Power Shell腳本,比如一個命令就啟動指定的FTP伺服器,一些小命令用來實現快速在不同項目源碼間切換並執行構建命令等。這些命令編寫起來都很簡單,在提高工作效率方面很好幫助,因為一些常用的費時的操作每天重復N次,讓人很厭煩,如果能夠使用腳本將其自動化起來,豈不是就把自己給解脫了?
5)多語言編程
在這個世界有太多太多的編程語言,但凡稍微流行的編程語言都有自己獨特的優勢,而我們要善於利用每種編程語言的特點,而不是整天吵鬧那種語言更強大。我自己熟悉C#、java語言,也用JavaScript、Ruby、Python、Groovy做過一些東西,甚至為了理解函數式編程還專門學習了Haskell語言。這些語言都給我帶來了實用的效果。比如我用Ruby寫了一個插件,可以自動把我主站上的博客同步到博客園中的博客來。
我使用Groovy給我的Java代碼寫單元和集成測試,比使用Java語言編寫要快很多。我用Python和WebDriver寫了一個論壇灌水工具來刷積分。你掌握的語言越多,你的視野就越廣,你對編程的理解就會越深入。當然我不贊成盲目的求多,至少你要有2到3門精通的語言,從語言語法、語言運行時、語言特性、語言API等方面都要有深入學習和見解,當你再學習其它語言時也不會浮於表面的了。
6)這是最重要的一點,時刻保持一顆好奇心,一顆堅定不移的提高工作效率的決心
很多人都抱著差不多態度,心想“我雖不是標准指法,敲鍵盤速度也差不多”,“我IDE快捷鍵用的不多,也沒覺得那裡影響到我開發”,“我只會C#一種語言,還不照樣干到現在了嗎?”之所以有這種想法,是是因為你沒有見到真正高效的人。我曾看到某IT界牛人那出神入化的VIM操作,簡直已經超越了指哪打哪的境界,已經達到了鍵隨心動的境界。
我也看到某高級程序員使用IDE快捷鍵三下五除二就把一段醜陋的代碼給收拾的服服帖帖。耳濡目染之下讓我堅定了這個決心,不做差不多先生。所以平時我和同事一起工作時,就留心他們有哪些方法和工具來提高自己的工作效率。如果他們使用了一些好用的快捷鍵而我不知道,那我就會記下來下次自己用(快捷鍵熟練程度上我早已是我們項目組的number one)。
如果看到他們使用了一些好的工具我也會立馬回去下載下來自己用。(比如前兩天我看到同事使用SuperPutty來連接遠程主機,其支持多tab方式,這正是我想要的功能。我回去立馬下載下來,拋棄了以前的Putty)這樣時間長了,集眾人之所長,你自然也成為效率達人了。
G. 為什麼程序員做出來的東西和設計稿不能一致
因為程序壓根就沒有按照UI給出的標注圖上執行,比如UI給出的間距是10px,程序員非要靠肉眼憑感覺寫距離
H. 程序員在職業生涯中易犯的7個錯誤
1.沒有明確的職業目標
沒有目標的人生,就像無根的浮萍,水流到哪裡就飄到哪裡,一生漂泊。
如果你想要在軟體開發領域獲得真正的成功,那麼就必須知道該何去何從。或許面對遙遠的未來,你已經有了一個粗略的目標了。但是除了這點還不夠,你應當堅實自己的目標——清楚的定義在實現過程中的每個重要時間點所需要達到的效果。
我認識許多程序員和其它方面的專業人士,數十年來他們都在相同的職位上反復地做著同樣的事情。是的,你沒有看錯,是數十年。接受職業現狀,不做任何改變,是造成這種悲劇的根源。對於未來,如果你沒有明確的職業規劃,這樣的悲劇就很可能會發生在你身上。
面對於此,你該怎麼做呢?
從現在開始,花一些時間來認真規劃一下職業並確定最近的目標。一旦你達到了這個目標,你就要選擇一個新的目標了。在職業生涯中,這樣的目標會一個接著一個。你可以把這些目標寫下來,放在一個每天都可以看見的地方,這樣就可以讓你隨時回想起當前需要做的工作。
2.不重視「軟技能」或非技術的東西
我認識許多擅長寫代碼的程序員,他們可以用所寫的演算法把我耍得團團轉,他們對復雜架構的理解力和思考能力令我自愧不如。
但是真實的狀況卻是:技術不如他們的我,軟體開發領域的職業發展卻全面超過了他們,除了職位,還包括薪水、生產力等諸多方面。
在這里我並不是為了吹噓自己多了不起,而是為了向那些只埋頭專研技術的程序員們說明「軟技能」對於職業發展有多重要。
作為一個軟體開發者,我相信你也清楚,編寫代碼並不是工作的全部。在通往成功的道路上,還需要學習很多其它技能。我們需要長期與他人打交道,所以必須學習為人處事;軟體開發面臨長期的趕工與不同的需求變化,所以需要學習對心態和注意力的調整;在不斷變化的環境里有許多事情需要處理,所以應當學習對事情劃分優先順序以做到效率的最大化。另外,我們對待身體健康應當和對待自己收入一樣敏感,這個才是革命的本錢。
我還可以繼續列舉出更多的東西,關於了解開發者應當掌握的「軟技能」你可以去閱讀我寫的《SoftSkills:TheSoftwareDeveloper』sManua》一書。
總的來說,在生活中無論從事什麼樣的工作,那些軟技能通常都比硬性的技術能力更為重要,所以請保持不斷地學習這些技能。
3.不融入社區生活
在程序員生涯中有一樣東西令我受益頗深,它就是社區的幫助。成為這個大群體的一部分,不僅讓我擁有了歸屬感不再孤獨,也幫助我改進了自身的技能,向著更高的平台發展。
如果你還沒有參與社區生活的話,我強烈建議你融入這個圈子裡來。它是一個比自我寬廣得多的平台,有助於你的發展。
如果你感覺自己的軟體開發工作停滯不前,費勁腦力也無法獲得更大突破的時候,最好的方式就是加入社區,與一群有志同道合的人共同探討所遇到的困難,獲得有助於解決問題的建議。另外,融入社區生活還能夠聚集人氣,培養人脈,這對於提升自身的職業發展也有很大幫助。
但是,如何才能融入到社區生活中呢?
這很簡單,世界各地都有很多開發者團體,你可以通過程序員網站找到並加入到他們當中去。你還可以參加開源夏令營,這是一個一年一度的免費地方性活動,眾多開發人員會聚在一起分享他們的工作,任何人都可登記參加自己感興趣的話題。
如果你不希望在現實生活中與過多的人接觸,也可以選擇加入虛擬社區。
那些大眾的程序員社區會是你的第一選擇。在社區中你會發現有一些非常厲害的程序員,他們會在自己的博客上寫一些精闢的文章並解答大家的問題。除此之外,還有另外一些不錯的在線社區,比如大牛們的博客網站、各種技術論壇、討論群等。
當你開始學會分享,把自己的所知與所想都寫出來的時候,你就真正的融入進了社區生活——而這個博客就是我為自己加入這個程序員社區所做的第一件事。:-)
4.沒有專長
如果你過去常訪問我的博客或者YouTube視頻,你會發現我很多時候都在談論這個話題。這個話題是如此重要,以至於我一有機會就會說到它。
俗話說,術業有專攻。你應當選擇一項想要專精的技術並努力磨煉它。但這並不意味著你就可以放棄對其它技術的基本理解而一味地去專研某項技術——我對那些會數種語言的人是非常欣賞的。這一點非常重要,尤其是在你職業生涯的早期培養一技之長的時候。
專長可以滿足更高級的需求,因此,在同等條件下,它會帶來更豐厚的報酬並更快的積累聲望——這些對於業界對你的認可是很有幫助的。
有專長的人好比是小池塘中的大魚,受人矚目。或許最終這條大魚會跳入更寬廣的池子,但是所累積的聲望和名氣同樣有助於在軟體開發行業的其它領域的發展。
凡事只要七分就好,對於專長技術的研究學習同樣如此。過度的投入會對程序員的時間與精力造成浪費,這是得不償失的。
5.無視個人品牌價值
生活中充滿著各種變數:搬家、結婚、換工作、一夜暴富、突然發福等等。無論如何,有一樣東西始終會伴隨著你一生,而這個東西就是——名字。
你的名字會貫穿於你的全部生活,難道它還不值得你去重視么?
你的名字或者也可以稱作是你的個人品牌是一件非常有投資價值的東西,可許多軟體開發人員對此卻一無所知。
對於獲得工作、取得晉升、客戶端的登陸以及工作的開展等,名字無疑都展現了其強大的作用。毫不誇張的說,假如你臭名昭著的話,會萬事難行,而如果你有良好的名譽的話,大多事情只需通過簡單的握手就能搞定。
我認識很多的軟體開發人員,他們從不擔心自己會失業,這是因為他們投資了時間和精力來打造堅實的個人品牌。他們知道,無論發生什麼事情,在他們失業後的幾個小時內就可以獲得一份新的工作,這是因為他們在業界有良好的聲譽。
對產品和服務進行的投資看起來很正常,但是你是否考慮過自我營銷的價值?要在軟體開發行業建立起自己的個人品牌,我的建議是從創建自己的博客開始,選擇將自己的專長或者有很深了解的領域作為提高自己影響力的跳板,學會把自己的名字一步步做成行業的金字招牌。如何快速的提高自己的影響力呢?最好的方法之一就是創建對別人有幫助的文章。
就拿這個博客為例吧。這個博客建立了我在互聯網上的個人品牌和聲譽,如果你認為我的文章或者網站是有價值的,你會選擇進行分享。甚至你有可能把它列入收藏或者進行訂閱,以方便以後繼續訪問。而這只是其中一種打造個人品牌的方式。同樣的,你還可以選擇視頻網站、播客等媒體,或者在書刊上發表文章,在會議上演講等方式。如果你對如何在軟體開發領域深度挖掘自身的品牌價值很感興趣,這個網站會告訴你如何去做。
6.荒廢業務時間
在工作之餘,你應當做一些項目來練練手。
做業余工作有許多你不知道的好處。首先,它可以有效的改進你的專業技能,特別是那些在平時的工作中很少用到的技術。相比起平時朝九晚五的工作,業余工作類型多變,對於專業技能的提高更有好處。其次,它有助於你對新的開發技術和技巧的學習。這對於日後你想從事新的工作是很有幫助的。我碰到過許多程序員,他們向我抱怨在當前工作中沒有機會去學習新技術,這讓他們今後無法在工作市場上立足。而我向他們建議工作之餘去做一些小項目,使用他們今後想要立足的新技術——這種方式對於提高相關技術是很有幫助的。
除此之外,我們不要忽視做業余工作所帶來的經濟利益。人們常認為業余時間做的那些小項目是掙不到什麼錢的,而事實上它卻是額外收入的重要來源。4年以前,我在業余時間里開發了一個在Android和iOS平台上使用的應用程序,而到現在,這個應用程序還能為我創造價值。
我還認識一些程序員,他們從業余工作做起,最後把這些工作發展為了全職工作。而事實上我就是這些程序員中的一位。這個博客本身以及SimpleProgrammer周圍的其它部分現在成為了我的全職工作。我喜歡稱自己為程序員的生活導師,但是也有很多人認為我是一個專職的博客寫手。
業余工作可以讓你充滿樂趣,它能夠把你從那些你不喜歡但又必須去做的工作中解脫出來。作為一種釋放工作壓力的好方法,它會每天帶給你新的希望。
7.沒有自我學習的計劃
在我面試軟體人員的時候,我首先會問到的一個問題就是關於他們的自我學習和持續完善的計劃——如何進行自我完善。程序員如何在這個快速變化的領域保持技術與觀念上的更新?我希望獲得的回答是他們能告訴我對於自我學習與成長他們有著一個實際可行的計劃。因為一個致力於不斷學習進步的人不僅能夠讓自己邁向成功還能影響到周圍的人,使他們一同邁向成功。
然而,有如此之多的程序員對於自我學習沒有任何計劃。假如你是這些人中的一員,你就應該立即行動起來做一個自我學習的計劃。
這兒有一個可供參考的個人簡單計劃:
堅持每月讀一本關於技術學習或者職業發展的書籍。
這意味著一年時間里你需要閱讀12本書。對於我來說,我會在每天用至少45分鍾時間來閱讀。當我在跑步機上運動的時候我會同時閱讀一些與我個人職業發展相關的文章。
積沙成塔,集腋成裘。每天只需花費30分鍾時間來閱讀書籍,一兩年時間之後你的人生境遇就會發生很大的改變。
I. 為什麼越來越多的人不想做程序員了
作為一個在帝都混日子的程序員,經常能看到不少同事轉行。
最開始是一位年紀比較大了(快40歲,在這個行業算老了)的,回家開個小店去了。後面聊了聊,非常慶幸自己做出了辭職的決定,現在日子過得是滋潤得很。
再之後,有回老家小縣城干別的去了的。要准備好回縣城,恐怕就很難找到IT行業的工作,除非是自己干。但小縣城能幹起來的活不多,加上那裡這方面的人才也難找,也就基本認為是已經換行了。
最近,甚至身邊有剛在17年畢業後加入來的成員,都不想幹了,想要考公務員。現在究竟是一些什麼原因,導致這樣了了?
7.要創業了
不能光是說一些不好的,不想幹了的人中,肯定有不少是想要自己出來單乾的。創業也基本分為兩種,一種是自己出來接單,成立公司開始為別的企業做項目。另一種是自己做產品。這兩種其實都比較好起步,特別是第一種,有活就會盈利。而且成本基本只有人力和應酬,機器大部分也都是用戶負責的。第二種則是比較賭的,要麼很成功,要麼很快燒錢結束。不管怎樣,這都是不少程序員不再願意為別人碼代碼的原因。