1. 你可能會(huì )常常發(fā)現,寫(xiě)了一段代碼后,編譯程序時(shí)是一大堆的出錯 (原因:語(yǔ)法不熟)
──別擔心,這是每個(gè)程序員必須經(jīng)歷的事,這時(shí)候你就需要更大的耐心及細心,
對每一行代碼進(jìn)行仔細人閱讀并改正,這個(gè)很重要,這可以培養你的理解代碼能力,所以要常讀程序,不要等到程序運行以后才知道你的程序的結果。
──如何避免:在寫(xiě)代碼以前,要認真的學(xué)習計算機語(yǔ)言的語(yǔ)法,如關(guān)鍵點(diǎn),易錯點(diǎn),易忘點(diǎn)。同時(shí)要自已動(dòng)手寫(xiě)自已的測試代碼,而盡量不要抄別人的代碼示例。即使抄,在學(xué)習階段也盡量不要每一行一模一樣的對著(zhù)抄。而應對著(zhù)代碼示例寫(xiě)有所不同的例子
比如:在學(xué)java 知識點(diǎn)時(shí),你最好建一個(gè)工程把所有的代碼都寫(xiě)到這個(gè)工程中,以便對照分析學(xué)習
2. 你可能會(huì )常常發(fā)現,寫(xiě)完一段碼后,編譯通過(guò),可是運行起來(lái)卻出來(lái)很多邏輯上的錯誤。(原因:理解錯誤或邏輯上想錯了
──提高邏輯思維和理解能力
3. 拿到一個(gè)需求卻不知從那里開(kāi)始(對系統不太了解)
4. 常常為了一個(gè)小小的錯誤用了很長(cháng)的時(shí)間,不知從那里查,也查不出結果
5. 常常做出來(lái)的東西是有了東卻少了西(考慮不全)
6. 有時(shí)為了一個(gè)特殊功能模塊的實(shí)現查了很工時(shí)間卻沒(méi)有查出結果來(lái)(備查的資料不全)
7. 有時(shí)是否要項目經(jīng)理叫你做東,你做了完全沒(méi)有必要的西?(溝通不及時(shí))
8. 有時(shí)為了能提前完成某一個(gè)任務(wù),加班到深夜,可是到了明天卻效率低下,還不如不加班(要注意休息
9. 有時(shí)自已認為已測好了好多次,可以保證不會(huì )出錯,可是經(jīng)測試人員一測試卻很多錯誤(不夠細心或測試方法有問(wèn)題
10. 有時(shí)為了避免出錯,常常全比寫(xiě)代碼的時(shí)間超出兩倍用于測試(方法有誤)
11. 有時(shí)寫(xiě)好了一段代碼給質(zhì)量管理人員時(shí)卻因為代碼不夠規范而導致重寫(xiě)?(代碼不夠規范)
為了寫(xiě)好代碼(包括,代碼沒(méi)有問(wèn)題,需求符合,健壯性好,總用時(shí)?。?,那我們應該怎么做呢,有沒(méi)有什么方法沒(méi)有.
回答是肯定的??!
可以總結為兩大關(guān)鍵點(diǎn):一是養成好的編程習慣,二是針對自已的工作提高自已的知識含量.
一. 好的編程習慣
1. 寫(xiě)程序前打個(gè)草稿可以在心里,最好在紙上:目的要從整體上考慮程序的實(shí)現。
如果公司采用建模的方式,有建模工具(rose ,visio )那是最好不過(guò)的了。
2. 注意休息,不要浪費自已的休息時(shí)間,用去了自已的時(shí)間不但會(huì )寫(xiě)出的代碼因為注意力不集中而會(huì )常常出現代碼的質(zhì)量有問(wèn)題,邏輯常出錯
3. 要善于收集相關(guān)的專(zhuān)業(yè)開(kāi)發(fā)上的資料,以便以后能更快更好的解決問(wèn)題目。提倡公司能提供內部知識勾通的工具(如知識論壇,內部即時(shí)聊天器);提倡公司內部有技術(shù)資料的共享庫,提高解決問(wèn)題的能力.
4. 提高對所寫(xiě)的模塊的相關(guān)全局把握能力,在寫(xiě)程序中要最好先詳細設計后再發(fā)布.
5. 要學(xué)會(huì )與他人溝通如非工程師,學(xué)會(huì )溝通的不同方式,提高溝通的效率。
二. 不同的目標不同的知識重點(diǎn)
(一) 目標:程序員
職責:根據詳細設計文檔,或根據高級程序員的設計進(jìn)行相關(guān)的開(kāi)發(fā)。
1. 要學(xué)會(huì )看相關(guān)的需求文檔及詳細設計文檔。
注意:你必須要通過(guò)閱讀這些文檔把握住其中的重點(diǎn),關(guān)鍵點(diǎn),相關(guān)易漏
2. 如果公司里會(huì )用UML來(lái)相互的溝通,這時(shí)你必須要深刻理解UML 的相關(guān)知識,一定要注意千萬(wàn)不要對UML圖一知半解的情況下,就著(zhù)寫(xiě)代碼,那樣會(huì )錯的很慘。
3. 學(xué)好對應的計算機語(yǔ)言的基礎知識,如:程序的語(yǔ)法,關(guān)鍵點(diǎn),易錯點(diǎn),對應的出錯如何出理,如何才能把對就的程序寫(xiě)的鍵壯一些
4. 如果用到數據庫的內容,在學(xué)會(huì )sql的前提下,盡量學(xué)會(huì )數據庫原理中的相關(guān)sql內容, 當然為了提高查詢(xún)的能力也可以增加一點(diǎn)
5. 如果用到面向對像的語(yǔ)言那最好學(xué)點(diǎn)相關(guān)的設計模式,這樣的可以增加代碼的擴展性,及可維護性等,能夠理解詳細設計中的模塊間的設計原則這個(gè)也可以提高對模塊的內容編寫(xiě)的正確性.
6. 你一定要學(xué)會(huì )公司內部的通用的編碼規范。
7. 學(xué)習如何做單元測試比較好.必須要熟悉相關(guān)的單元測試工具.
8. 要不斷的對相關(guān)知識進(jìn)行總結,同時(shí)也要必須把相關(guān)的資料進(jìn)行整理和學(xué)習,在學(xué)習過(guò)后的資料中你可以在遇到問(wèn)題時(shí)更快的找到問(wèn)題的答題。
9. 在開(kāi)發(fā)你必須記錄下大家常出錯的地方及大家的解決方法,這個(gè)對你以后錯誤的避免有很大的作用
10. 在寫(xiě)代碼中時(shí)必須把上面寫(xiě)過(guò)代碼記在心里,這樣就可以養成習慣,提高代碼的速度
11. 對數據庫操作時(shí),要盡量共用Connection,并小用以減少Connection的數量
(二) 目標:高級程序員
職責:對需求文檔進(jìn)行系統相關(guān)模塊的詳細設計,并負責對程序員的支持及指導和相關(guān)核心模塊的編寫(xiě)
所以不但要學(xué)會(huì )相關(guān)程序員要的知識,同時(shí)還要學(xué)會(huì )難度比較大的知識。
1. 程序員的知識,如設計模式你一定要不是簡(jiǎn)單的看要懂,你還要應用設計模式對相應的模塊進(jìn)行相關(guān)的詳細設計。
2. 要學(xué)好相關(guān)詳細設計的工具做的有的放矢,這樣可以更好提高對自已的設計的表達
3. 為了提高系統的運行效率會(huì )運用到
a. 數據庫的表結構如何建才能使應用的要查詢(xún)sql 更快。這時(shí)可要認真認真的學(xué)習一樣數據庫原理,千萬(wàn)不要以為采用數據庫的范式越高系統的運行效率會(huì )越好,有時(shí)候適當的表冗余可以大幅度的提高系統的查詢(xún)效率. 同時(shí)適當的建索引,視圖,存儲過(guò)程也是提高系統對數據庫的查詢(xún)的效率之一
b. 學(xué)習多線(xiàn)程的編程,不過(guò)千萬(wàn)不要以為線(xiàn)程數越多運行的速度會(huì )越快,一般線(xiàn)程的數量超過(guò)一定的數量后,系統的運行速度反而會(huì )變慢。為了應用好多線(xiàn)程,操作系統這本書(shū)也要關(guān)于同步及相關(guān)進(jìn)程和線(xiàn)程的知識必不可少。
c. 設計好的一程序的好的算法,可要比起解一道同一復雜的數學(xué)題,要難的多,所以要在學(xué)好的相關(guān)數學(xué)的知識上(如線(xiàn)性代數,離散數學(xué),概率論,數理統計)。更要深入計算方法,及數據結構,讓數學(xué)問(wèn)題用計算機來(lái)解決。
4.為了讓系統設計的更加的可擴展性,穩定性,設計模式和軟件工程可是不能少的東西。所以必須把設計模式用于模式級的設計.
5. 如果公司采用的是Rose (UML)進(jìn)行設計的話(huà),你對于UML 的理解一定要非常的準確,同時(shí)你要跟小組中的程序之間進(jìn)行充分的UML概念上及對應用例圖,類(lèi)型圖,對象圖,協(xié)作圖的意思多寫(xiě)一些注釋加深大家對你的設計上的理解。
(三) 目標:系統分析員
職責:做好與客戶(hù)之間的關(guān)系,同時(shí)對客戶(hù)的需求要正確的理解,要選擇合適的開(kāi)發(fā)技術(shù),同時(shí)做好與客戶(hù)間溝通交流,學(xué)會(huì )說(shuō)服對方。
1. 學(xué)會(huì )對客戶(hù)的溝通:要正確理解客戶(hù)的需求同時(shí)要保證相互之間的溝通順暢。
2. 對了解來(lái)的需求要能用筆正確的描述下來(lái),并能很好的傳敘給其他人。這時(shí)要學(xué)會(huì )用如ROSE 等的軟件建模的工具。和powerdesign等的數據庫建模工具。和相關(guān)的UML,數據流程圖及相關(guān)的內容的知識。
3. 不但要全面的了解客戶(hù)的需求而且還要對需求進(jìn)行未來(lái)的可能的改變要有相當多的了解。
4. 全面的了解客戶(hù)的需求后,要選擇合適的相關(guān)技術(shù)用于開(kāi)發(fā),:
這時(shí)要學(xué)習各種知識
a. 先擇數據庫:db2,infomix ,oracle ,sql server,mysql 的優(yōu)缺點(diǎn),可以從中選擇最適合的數據庫及理由。
b. 設計數據庫:要扎實(shí)在數據庫的理論(數據庫原理,數據庫系統設計)及相關(guān)數據庫設計經(jīng)驗,要盡量多的分析過(guò)去數據庫設計,分析這么設計數據庫的好處。這時(shí)可能要用到 powerdesign等工具。
c. 寫(xiě)需求說(shuō)明文檔和概要設計文檔,同時(shí)要學(xué)會(huì )要分析相關(guān)需求說(shuō)明文檔的需要的內容的相關(guān)知識,如人員工時(shí)的計算方法, 一般會(huì )用 project 來(lái)分析相關(guān)的項目的內容。
d. 選擇合適的程序語(yǔ)言及相關(guān)的架構,一般主流的架構是 J2EE和.net的相應的優(yōu)點(diǎn)及它們之間的結合,如采用soap xml進(jìn)行相關(guān)的結合,或用java-com 橋 進(jìn)行相關(guān)的功能的調用。和它們之間的相關(guān)語(yǔ)言?xún)?yōu)缺點(diǎn)
e. 還要根據b/s,c/s 結構對開(kāi)發(fā)的網(wǎng)絡(luò )影響的相關(guān)內容采取
5. 學(xué)會(huì )說(shuō)服對方,畢竟客戶(hù)都不是個(gè)個(gè)是軟件專(zhuān)家,他們的選擇有時(shí)未必是正確的所以學(xué)會(huì )說(shuō)服對方,是系統分析員必備的能力條件.
三. 訓練的
1. 計劃行事:
(1 設定你的未來(lái)的學(xué)習目標
a. 未來(lái)要成為什么樣的人(主要是工作角色,如程序員,高級程序員,系統分析員)
b. 你近期要成為什么樣的人(當前的工作職責是什么,如果只寫(xiě)代碼是程序員等)
c. 要完成近期的工作所必須要知識(如java 程序員,要學(xué)習java 基礎知識,等),關(guān)鍵的知識(如java中關(guān)鍵要用到的知識有,面向對象等),易錯的知識(比較原來(lái)的已有知識進(jìn)行合對)
(2 設定你的學(xué)習目標后,并要有針對性的對應目標設定學(xué)習時(shí)間的按排及學(xué)習路線(xiàn)。并直觀(guān)的記錄在案,以便以后隨時(shí)核對,
(3 常常抽出一定的時(shí)間認真核對計劃的完成情況,如果沒(méi)有按時(shí)完成計劃的內容。分析原因,盡量想法趕上計劃內容如果存認是計劃有誤,要認真總結計劃失敗出錯的原因,對你的未來(lái)有很大的幫助。
注意:不要對計劃的按排過(guò)于樂(lè )觀(guān) 要盡量的考慮實(shí)現中的各種情況,同時(shí)適當按排一些緩沖時(shí)間,以便真正能按照計劃行事,以提高按計劃行事信心,同時(shí)這能有效避免出現計劃中途成沒(méi)有意義的東西。
2. 針對工作角色對自已的能力進(jìn)行培養和知識進(jìn)行學(xué)習。
關(guān)鍵的能力
(1. 記憶能力:要學(xué)會(huì )把自已的寫(xiě)的代碼和改的代碼記的清清楚楚。要能提高效率。
(2. 邏輯思維能力:要多多的看別人的復雜邏輯的代碼,分析復雜邏輯的運算。
(3.全局能力: 不要再范改了東,卻西出錯。(構造軟件這個(gè)很重要)
4.學(xué)習能力: 并不是每個(gè)項目都你是所熟悉的項目的,并不是每個(gè)項目中的知識你都知道,要掌握最新的技術(shù)和最有用的知識,是最關(guān)鍵的。要學(xué)會(huì ),提高能力,這個(gè)東西是永遠對自己有好處的。
(5. 溝通能力; 學(xué)會(huì )幽默,學(xué)會(huì )講故事,學(xué)會(huì )交朋友,學(xué)會(huì )禮節
(6.自制能力:如果一個(gè)人不能自制那這個(gè)人以后,不會(huì )有很大成果,即使很大機會(huì )發(fā)展起了,可是因為沒(méi)有自制能力很容易被人利用,或自己明明知道怎么做,可是就是不能控制自己的欲望.而常做下無(wú)法挽回在錯誤.
四. 例:java 程序員的知識結構及學(xué)習流程:
(一) 學(xué)習相關(guān)工作必須的知識
1.Java 語(yǔ)言的基礎(推薦書(shū):《 java 編程思想》)
關(guān)鍵:
(1. java 面向對象及對應的程序現實(shí)
(2. java 多線(xiàn)
(3. java 網(wǎng)絡(luò ) socket
(4. 應用界面
2.學(xué)會(huì )用智能集成開(kāi)發(fā)工具jbuilder,eclipse等一種,根據資料里的內容,自已寫(xiě)與例程類(lèi)似的代碼,但注意不要直接抄它,一定要自已寫(xiě)。同時(shí)最好寫(xiě)到一個(gè)工程中以便對比。
3.如果用b/s結構要學(xué)習jsp的知識(推薦書(shū):《 JSP 2.0技術(shù)手冊 》)
關(guān)鍵:
(1. 界面處理:
a . HTML——超文本標志語(yǔ)言:用于顯示頁(yè)面如:超文本鏈接, 表格,各種標志等。
b. CSS———層疊樣式表:控制正文外觀(guān)的一組格式.用于美化HTML頁(yè)面。
c. javaScript—嵌入HTML頁(yè)面瀏覽器來(lái)執行的腳本語(yǔ)言:讓頁(yè)面可以根據用戶(hù)的操作或事先設置等在客戶(hù)端進(jìn)行動(dòng)態(tài)變化,而且不需傳回服務(wù)器。比如: 對表單輸入的正確性做客戶(hù)端驗證.
(2.jsp元素:如java代碼寫(xiě)法,對應標志---jsp:include,jsp:useBean,jsp:setProperty,
jsp:getProperty等.jsp的幾大對
(3. javaBean及其在jsp 中的調用和相關(guān)應用.
(4. 其他技術(shù):
a. 如何操作數據庫—用jdbc(可能要補充一些數據庫的知識,如oracle ,sql server,
包括如何寫(xiě)高效率的查詢(xún)sql,存儲過(guò)程等) ,
b. 如何發(fā)送email—用javaMail,
c. 如何學(xué)習如何用實(shí)現文件的上傳下載,如果操作文
d. 如何操作xml --用jdom 及 jaxp(這時(shí)有必要學(xué)習一下xml 的語(yǔ)法如 dtd等)
e. 如何遠程方法調用—用 rm
f. 如何進(jìn)行消息服務(wù) ---用 jm
5.再有些公司會(huì )用到 J2EE 的架構如 EJB 作為業(yè)務(wù)邏輯
(1.EJB中要分清
(2. struts MVC
(3. Hibernate 操作數據
6.最好學(xué)習一下UML
學(xué)用Rose建模
五 忠告:
1. 不要以為自已很差,要明白每個(gè)人都是這樣一步一個(gè)腳印的走過(guò)來(lái)的。(我們要有信心)
告訴自已:比爾蓋次,也是同我們一樣,出生時(shí)也是巴掌大.
我們只有多學(xué),多練才可能有出路.
2. 不要以為自已學(xué)的多就很強,世界上的高手多的是,問(wèn)問(wèn)自己,你每小時(shí)可以寫(xiě)幾行代碼,代碼一次寫(xiě)下來(lái)有多少錯誤,如果你一次寫(xiě)下沒(méi)有錯誤,一小時(shí)可以寫(xiě)1000代碼,那才是真正的高手.
3 . 不要以為自已沒(méi)有項目做就會(huì )落后于他人,人家是參加了很多項目,可是人家只是項目中的一個(gè)小角色,如果我們在空時(shí)能都寫(xiě)一些開(kāi)源的項目,或自己開(kāi)發(fā)和設計一些有用的開(kāi)源的項目,水平及能力很快就上來(lái)了.
4. 不要以為自己做過(guò)很多的項目就很了不起了。你能說(shuō)你做的項目中,你能體會(huì )整個(gè)項目為什么要這樣設計,為什么要這樣開(kāi)發(fā)嗎?相信絕大多數是否定的回答。那還不如多學(xué)習一些已做的項目,了解他們?yōu)槭裁匆@么做,為什么這么開(kāi)發(fā),多看一下它們的項目的文檔,我們能明白很多,這樣把他們的經(jīng)驗放于你未來(lái)可能要接手的項目,這樣不是更好嗎?
5. 不要以為自己的學(xué)習能力很牛,你能快速閱讀一本書(shū)又能快速掌握它的內容嗎?