職業程序員培養之道

作者:粘新育 任甲林 來源:希賽網 
http://www.csai.cn 2004年06月28日
軟件開發是以人為核心的過程,對人的依賴性遠高于傳統的硬件生產企業,為了保持開發能力的穩定性,一方面需要定義軟件過程,以過程為樞紐將人、技術、工具銜接起來,另一方面也要加強人才的培養,使人的工作能力能夠穩定、提高人員的自治性。隨著社會需求的膨脹,對程序員的需求量、對熟練的程序員的需求量在劇增,然而對程序員的培養問題卻成了一個盲點,學生在學校里學習的是關于軟件開發的基礎知識,軟件企業需要的是熟練的能夠快速開發出產品的程序員,需要程序員具有很強的實用知識,因而出現了明顯的學校教育與實際需求脫節的問題。企業反映新畢業的學生知識老化、動手能力太差、缺乏實用理論知識、缺少工程管理知識等問題。盡管社會上有各種各樣的專業程序員培訓班,但是距離企業的實際需求仍然有較大的差距。在企業中培養一名合格的程序員一般需要3個月到半年時間,對企業來講,這個周期就顯得太長了,所以一般的企業不愿要新畢業的學生,企業希望程序員能夠“來則戰之,戰則勝之”。無論如何,對程序員來講總是要面臨一個成長的過程,希望學校或者培訓班來解決這個問題很難,因為程序員不是標準件,程序員不是教育出來的,是在實踐中干出來的,最終還是要在實踐中來培養程序員,這是任何軟件企業必須承受的,因此,對軟件企業來講需要有一套機制,一套辦法來培養程序員。
那么,我們需要從哪些方面來培養程序員呢?大體來講,包括以下幾個方面:精神、能力、理論基礎、工作方法、工作習慣。
1、精神
軟件開發是一項智力勞動,需要開發人員很投入的工作,因而需要開發人員能夠熱愛軟件開發,有工作熱情,有投入的精神。如果一個程序員缺少一種投入的精神,他不可能在最需要他投入精力的時候來工作。有的人很聰明,但是他對軟件開發沒有興趣,或者他工作很不專心,雜事很多,工作效率很低,別人1天能干完的,他需要3天甚至5天才能干完,而且還漏洞百出,這樣的程序員需要盡早識別出來,盡早轉換工作。
現在的工作環境對程序員的誘惑很多,比如游戲、QQ、各種新聞等等,這些誘惑使不能很好處理這些關系的程序員瀏覽忘返,浪費了大量的時間,降低了工作效率。程序員的業績很大程度上不是取決于其智商,而是取決于其情商。
2、能力
程序員最主要的能力可以概括為3點:良好的邏輯思維能力、良好的溝通能力與良好的學習能力。
良好的邏輯思維能力
軟件的開發過程是解決復雜業務邏輯的過程,是簡化復雜邏輯的過程,是用精確來實現模糊的過程,開發人員需要具有良好的邏輯思維能力才能勝任。現實空間是模糊的,數字空間是精確的,在現實世界中很簡單的問題,在數字空間中來模擬時,就變成了一個復雜的問題。它要求程序員能夠全面、準確、簡潔地把握問題、分析問題、解決問題。
在筆者接觸過的很多程序員新手中,很少有程序員能將下列的題目解答的完全正確:
畫出解答下面問題的程序流程圖:輸入三個整數,作為三角形的三個邊,判斷是否構成:等邊、等腰、直角、銳角、鈍角三角形。
這個題目的邏輯很簡單,需要的處理的邏輯包括:
1 輸入的合法性判斷:輸入的是否是正整數
2 是否構成三角形:任意2邊之和大于第三邊
3 是否構成等腰或等邊三角形
4 是否構成鈍角、直角、銳角三角形
答題者常見的錯誤有: 序號 常見的錯誤
1
沒有判斷輸入的合法性
2 沒有判斷是否構成三角形
3 判斷為其中一種結論時就結束了,沒有考慮到:等邊三角形也是銳角三角形,等腰三角形可以是鈍角也可以是直角或銳角
4 程序內部邏輯復雜

上邊的題目是一個很簡單的程序,但是類似的邏輯問題在實際的軟件開發中是經常用到的,需要程序員能夠對各種情況進行仔細的分析、歸納、總結,如果在這樣的問題上出錯是很難成為出色的程序員的。
溝通能力
現在的軟件越來越龐大,根本不是單兵作戰能解決的,需要多人來協同工作,比如一套簡單的進銷存系統可能就要產生30萬行代碼,按每人天生產100行代碼來估算,也需要3人年,再加上分析、測試等的時間,需要6人年才能完成,因此就需要開發人員具有很好的溝通能力。作為程序員要善于溝通,習慣溝通。程序員在交流問題時,往往在描述問題是什么時要花費大量的時間。這種現象在項目組中是經常出現的:在給一個程序員布置任務時,講清楚任務比他完成這項任務花費的時間還要多,而有的程序員自己心里明白,但是說不清楚,或者干脆就不說,這些情況都會降低整個團隊的工作效率。
學習能力
軟件的新技術發展很快,開發人員必須能夠不斷的跟蹤、學習新技術,要有很好的學習能力。只有善于學習的人,才能夠不斷進步,在實踐中快速成長。真正優秀的程序員一定是掌握了很好的學習方法的程序員,否則現在是優秀的程序員,2年后可能就被淘汰了。
3、理論基礎
如果基于.net做多層結構的軟件開發,以下的知識是必須的:操作系統原理、實體關系理論、SQL語句、OO基本理論、數據結構、VC++/JAVA、COM/DCOM、ASP/HTML、PSP/TSP/ISO 9000/CMM、專業英語、程序設計風格等。可以看出如果沒有學過數據結構、程序設計方法、數據庫概論、以及軟件工程的基本知識,要想在現在的環境下成為一名合格的程序員顯然是很困難的,而且一名熟練的程序員需要的知識可能還遠不止這些。掌握了基礎的計算機科學理論,再擁有一定的學習能力,才能不斷的進步。
4、工作方法
有很多程序員不會高效率的編寫程序,也不知道如何高效的調試自己的程序,這不僅僅是對于工具掌握不熟練的問題,而是沒有掌握一些基本的方法。做為程序員來講需要掌握幾種最基本的方法如:程序的設計方法、程序的調試方法、新工具的學習方法等。
在很多程序設計的課程中都講解了程序的設計方法和調試方法,但大都是從理論的角度來講解的,而不是從工程的角度來論述的。比如說對于事件驅動的編程,在程序設計時首先要做的應該是窮舉事件,然后再設計事件之間的信息共享的機制,設計事件的內部處理邏輯等,這些基本的方法往往是程序員迷惑的地方。再如調試程序時采用常規錯誤檢查單、單步執行、內存變量查看等方法。
在實踐中經常看到很多程序員在學習一種新的開發工具時,不知道從何下手,對老師的依賴性很強,總是希望有師傅手把手地來教他,這一方面是個人的認知能力問題,另一方面也說明他沒有掌握基本的學習方法,如:
在學習一種新語言時,先通讀有關的類、標準函數,過程等,從整體上有個印象,當需要時可憑記憶查詢資料。
類比。 與以前熟悉的語言進行類比。
詢問他人,互通有無。
閱讀示范程序。
網上檢索相關的資料等。
5、工作習慣
良好的工作習慣是程序員個人開發過程成熟的體現,是效率的保證。程序員的培養很大程度上是習慣的培養。有的程序員總是沒有寫注釋的習慣,結果一個月后他要花費很長的時間才能讀懂自己寫的程序;有的程序員經過簡單考慮后就急于去寫程序,往往是把簡單的問題搞復雜了,復雜的問題搞亂了,效率很低。對于一個好的程序員必須養成一些好的工作習慣:
按照明確的編碼過程工作
職業的程序員設計的時間長于編碼的時間,業余程序員編碼的時間長于設計的時間;職業的程序員是設計程序,業余程序員是調試程序;職業的程序員是預防BUG,業余程序員是修改BUG。為什么會出現這種情況呢?因為職業的程序員一定是按照一個規范的編碼過程來工作,編碼的前期工作量超過了其實際的編碼工作量。在進行任何一項編碼工作時,需要按一個規范的過程來進行。首先要定義清楚做什么,包括功能范圍、接口,任務要明確,不能似是而非;其次要想清楚如何作,包括數據結構、算法;第三,要定義清楚驗收標準,如何檢驗自己做對了;第四,動手編程序、調程序;最后,測試程序。按照規范的過程來編碼,才能真正提高工作效率。
編碼之前寫文檔
軟件設計文檔是軟件實現思想的載體,是開發人員之間、開發人員與管理之間交流的工具,是設計人員與編碼之間、設計人員與需求人員之間的一種約定,是組織的軟件設計經驗的積累,是組織軟件財富的記錄,是軟件復用的基礎。只有真正認識到了設計文檔的重要性,才能積極主動的來寫文檔。對程序員而言,在動手編程之前通過寫文檔可以把實現的方法想清楚、表達清楚、討論清楚,這是已經通過無數的實踐來證明了的好經驗。 初級的程序員往往在寫程序的過程中發現越寫越覺的復雜,程序越改越亂,等真正把工作做完了,再反思一下,卻發現原來是很簡單的事情,為什么會有這種感覺呢?問題就在于事先沒有真正想清楚,弄明白,一旦進入問題的解決細節中,就很容易出錯了,所以職業的程序員應該是培養起寫文檔的好習慣。
遵循設計進行編碼
程序員不能隨意自己決策,不按設計人員的設計去施工。同一個問題,可能有多種解決方案,在考慮解決方案時,程序員想的是局部,設計人員想的是全局,因而在進行決策時,設計人員是從全局的角度的考慮問題。在這種情況下,程序員要嚴格按照設計去實現,不能在如何實現上偏離設計,造成隱患。對于設計中有疑問的問題,可以討論,但是不可以隨意變更。
按照良好程序設計風格編碼
有人講程序設計是一門個人藝術,他飽含了程序員個人的創造性,正是這樣,才使得很多程序構思精巧,耐人尋味。但是同時它卻使得程序的可讀性較差,尤其是在多個人合作開發一個軟件時,風格迥異的程序使得軟件的可靠性與可維護性大大降低。程序設計語言一方面是人與計算機之間進行交流的工具,它還是人與人之間進行交流的工具。單純的作為人機交流的工具,只要程序能夠正確地忠實地表達設計者的思想,也就發揮了其作用,但是人與人之間的交流沒有一種固定的統一的模式,因此作為人與人之間的交流工具,還要表達的清晰易懂,能夠為其他程序員所理解,這也正式要求程序員講究程序設計風格的主要原因。
維護好自己的開發環境
俗話講:磨刀不誤砍柴工。程序員的工具主要就是計算機,程序員必須維護好自己的開發環境,常用工具要裝齊,無用的軟件不要裝,要定期殺毒、定期備份,減少非正常停機,確保環境能夠正常進行,保證環境的干凈,否則就會因為環境的問題降低工作效率。
總之,培養程序員是一個長期的艱苦的過程,程序員是可以培養出來的,頂尖的程序員是在職業的程序員中選出來的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454273.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454273.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454273.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MongoDB啟動

詳細見大神鏈接 鏈接: https://blog.csdn.net/chenpuzhen/article/details/90642147.

Go 語言編程規范

1. gofmt 命令 大部分的格式問題可以通過 gofmt 來解決,gofmt 自動格式化代碼,保證所有的 go 代碼與官方推薦的格式保持一致,所有格式有關問題,都以gofmt的結果為準。所以,建議在提交代碼庫之前先運行一下這個命令。 2…

python去噪音_python中的噪聲是什么意思

你的序列均值為零嗎? 方差隨時間變化嗎? 值與延遲值相關嗎? 你可以用一些工具來檢查你的時間序列是否為白噪音: 創建一個折線圖。檢查總體特征,如變化的平均值,方差或延遲變量之間的明顯關系。 計算匯總統計。對照序列中有意義的連續塊的均值和方差&a…

pycharm 離線安裝插件

插件離線下載地址: http://plugins.jetbrains.com/ 1、下載插件:http://plugins.jetbrains.com/ 2、安裝插件: settings -> plugins -> install plugin from disk,然后重啟IDEA即可。

為機器學習占地16

是將若干個學習器(分類器&回歸器)組合之后產生一個新學習器。弱分類器(weak learner)指那些分類準確率只稍微好于隨機猜測的分類器(errorrate < 0.5)。 集成算法的成功在于保證弱分類器的多樣性(Diversity)。而且集成不穩定的算法也能夠得到一個比較明顯的性能提升。 …

VC DLL學習

1 用VC創建DLL動態鏈接庫1.1 創建dll項目1.2 為dll項目編寫源文件頭文件dllDemo.hextern"C"_declspec(dllexport) intSum(inta,intb);//加法函數。extern"C"_declspec(dllexport) intMax(inta, intb);//取較大值函數extern"C"_declspec(dllexpor…

mciSendString 多線程播放多首音樂 注意事項

昨天晚上遇到一個問題&#xff1a; 使用 mciSendString 控制播放多首音樂的時候&#xff0c;出現最后一次播放的音樂無法通過 mciSendString ("close mp3") 關閉音樂的播放。 mciSendString 在多個線程中調用。 到23點&#xff0c;問題依然沒解決&#xff0c;只好先…

python代碼比例_Python如何輸出百分比

Python 輸出百分比的兩種方式 注&#xff1a; 在python3環境下測試。 方式1&#xff1a;直接使用參數格式化&#xff1a;{:.2%} {:.2%}&#xff1a; 顯示小數點后2位 顯示小數點后2位&#xff1a; >>> print(percent: {:.2%}.format(42/50)) percent: 84.00% 不顯示小…

為機器學習占地15

是將若干個學習器(分類器&回歸器)組合之后產生一個新學習器。弱分類器(weak learner)指那些分類準確率只稍微好于隨機猜測的分類器(errorrat弱分類器的多樣性(Diversity)。而且集成不穩定的算法也能夠得到一個比較明顯的性能提升。 常見的集成學習思想有&#xff1a;Baggi…

編寫一個項目開發文檔

項目開發過程中為了增加程序的可讀性和程序的健壯性&#xff0c; 方便后期程序的調試和維護&#xff0c;所以需要在開發過程中統一技術規范&#xff0c;一般會在項目初期確定好相關文檔作為這一統一的規范。不同公司會對文檔做不同要求&#xff0c;劃不同的分類&#xff0c;但一…

樂在其中設計模式(C#) - 原型模式(Prototype Pattern)

[索引頁][源碼下載]樂在其中設計模式(C#) - 原型模式(Prototype Pattern)作者&#xff1a;webabcd介紹用原型實例指定創建對象的種類&#xff0c;并且通過拷貝這個原型來創建新的對象。示例有一個Message實體類&#xff0c;現在要克隆它。MessageModelusing System; using Syst…

python123添加列表元素_Python之列表

Python變量沒有數據類型&#xff0c;所以Python沒有數組。 整數&#xff1b;浮點數&#xff1b;字符串&#xff1b;對象 創建一個列表&#xff1a; 1.member[大魚,123,3.14,[1,2,3]] 2.empty[] 向列表添加元素&#xff1a; append&#xff08;&#xff09;&#xff1a; member[…

為機器學習占地14

是將若干個學習器(分類器&回歸器)組合之后產生一個新學習器。弱分類器(weak learner)指那些分類準確率只稍微好于隨機猜測的分類器(errorrate <。 集成算法的成功在于保證弱分類器的多樣性(Diversity)。而且集成不穩定的算法也能夠得到一個比較明顯的性能提升。 常見的…

優秀程序員 分析提高能力 程序進階

我出生在南方的一個農村。還記得小時候家里是很窮的&#xff0c;那時候上學也很便宜&#xff0c;我已記不清初中以前的學費是多少了。反正從小在家里玩泥巴&#xff0c;有一日村里兩個女孩去上學&#xff0c;看到我就說一起去上學吧。當時一想&#xff0c;玩泥巴也厭煩了&#…

html中通過點擊button標簽實現頁面跳轉的三種方法

方法1&#xff1a;使用onclick事件 <input type"button" value"按鈕"onclick"javascrtpt:window.location.hrefhttp://www.baidu.com/" />或者直接使用button標簽 <button onclick"window.location.href https://www.baidu.com…

mybatis調用存儲過程

直接貼代碼吧 注解式可以調用 但是不能返回結果 所有我就貼配置式的 有知道注解怎么返回結果的請評論 數據庫代碼 #表 DROP TABLE IF EXISTS p_user; CREATE TABLE p_user (id int(11) NOT NULL AUTO_INCREMENT,name varchar(10) DEFAULT NULL,sex char(2) DEFAULT NULL,PRIMAR…

java dump分析工具_Java 性能分析工具 (2):Java 內置監控工具

引言本文為 Java 性能分析工具系列文章第二篇&#xff0c;第一篇&#xff1a;操作系統工具。在本文中將介紹如何使用 Java 內置監控工具更加深入的了解 Java 應用程序和 JVM 本身。在 JDK 中有許多內置的工具&#xff0c;其中包括&#xff1a;jcmd&#xff1a;打印一個 Java 進…

Linux+php+memcache+APC加速PHP網站

一、前言對于一個站長而言不僅要做好網站內容外&#xff0c;還需要對網站做優化&#xff0c;如果速度訪問很慢的&#xff0c;沒有人下次再訪問你的站點&#xff0c;目前國內使用php的網站不計其數&#xff0c;這里用我的博客為例&#xff1a;http://chinaapp.sinaapp.com 以加速…

為機器學習占地13

是將若干個學習習 弱分類器間存在一定的差異性&#xff0c;這會導致分類的邊界不同&#xff0c;也就是說可能存在錯誤。那么將多個弱分類器合并后&#xff0c;就可以得到更加合理的邊界&#xff0c;減少整體的錯誤率&#xff0c;實現更好的效果&#xff1b; 對于數據集過大或者…

Python面試題(第二篇)

第二部分 網絡編程和并發&#xff08;34題&#xff09;1、簡述 OSI 七層協議。2、什么是C/S和B/S架構&#xff1f;3、簡述 三次握手、四次揮手的流程。4、什么是arp協議&#xff1f;5、TCP和UDP的區別&#xff1f;6、什么是局域網和廣域網&#xff1f;7、為何基于tcp協議的通信…