軟件工程誕生背景:
幾十年前,軟件行業(yè)很不規(guī)范,小程序雖然個(gè)人能很好完成,但缺乏良好的代碼管理;大程序設(shè)計(jì)人員多,工程復(fù)雜,由于缺乏相關(guān)理論知識(shí)和經(jīng)驗(yàn),導(dǎo)致很多失敗的大項(xiàng)目產(chǎn)生,為了解決這種情況誕生了軟件工程。建議你去讀《人月神話》,能管窺一二。
軟件工程專業(yè)誕生背景:
當(dāng)年中國這片神奇的大地上缺少計(jì)算機(jī)方面剛畢業(yè)就能很好與企業(yè)接軌的人,因?yàn)楦咝9┙o企業(yè)的生源往往只知道理論知識(shí),卻不能又快又好地上手工作,企業(yè)又往往不愿意花費(fèi)太多精力去培養(yǎng)這樣的人,所以為了解決這種蛋疼的狀況,中國的軟件工程專業(yè)誕生了,更重視計(jì)算機(jī)實(shí)踐方面的教學(xué)!
軟件項(xiàng)目管理的提出是在20世紀(jì)70年代中期的美國,當(dāng)時(shí)美國國防部專門研究了軟件開發(fā)不能按時(shí)提交,預(yù)算超支和質(zhì)量達(dá)不到用戶要求的原因,結(jié)果發(fā)現(xiàn)70%的項(xiàng)目是因?yàn)楣芾聿簧埔鸬模羌夹g(shù)原因。
于是軟件開發(fā)者開始逐漸重視起軟件開發(fā)中的各項(xiàng)管理。到了20世紀(jì)90年代中期,軟件研發(fā)項(xiàng)目管理不善的問題仍然存在。
據(jù)美國軟件工程實(shí)施現(xiàn)狀的調(diào)查,軟件研發(fā)的情況仍然很難預(yù)測(cè),大約只有10%的項(xiàng)目能夠在預(yù)定的費(fèi)用和進(jìn)度下交付。1995年,據(jù)統(tǒng)計(jì),美國共取消了810億美元的商業(yè)軟件項(xiàng)目,其中31%的項(xiàng)目未做完就被取消,53%的軟件項(xiàng)目進(jìn)度通常要延長50%的時(shí)間,只有9%的軟件項(xiàng)目能夠及時(shí)交付并且費(fèi)用也控制在預(yù)算之內(nèi)。
軟件項(xiàng)目管理和其他的項(xiàng)目管理相比有相當(dāng)?shù)奶厥庑?。首先,軟件是純知識(shí)產(chǎn)品,其開發(fā)進(jìn)度和質(zhì)量很難估計(jì)和度量,生產(chǎn)效率也難以預(yù)測(cè)和保證。
其次,軟件系統(tǒng)的復(fù)雜性也導(dǎo)致了開發(fā)過程中各種風(fēng)險(xiǎn)的難以預(yù)見和控制。Windows這樣的操作系統(tǒng)有1500萬行以上的代碼,同時(shí)有數(shù)千個(gè)程序員在進(jìn)行開發(fā),項(xiàng)目經(jīng)理都有上百個(gè)。
這樣龐大的系統(tǒng)如果沒有很好的管理,其軟件質(zhì)量是難以想象的。軟件項(xiàng)目管理的內(nèi)容主要包括如下幾個(gè)方面:人員的組織與管理,軟件度量,軟件項(xiàng)目計(jì)劃,風(fēng)險(xiǎn)管理,軟件質(zhì)量保證,軟件過程能力評(píng)估,軟件配置管理等。
這幾個(gè)方面都是貫穿、交織于整個(gè)軟件開發(fā)過程中的,其中人員的組織與管理把注意力集中在項(xiàng)目組人員的構(gòu)成、優(yōu)化;軟件度量把關(guān)注用量化的方法評(píng)測(cè)軟件開發(fā)中的費(fèi)用、生產(chǎn)率、進(jìn)度和產(chǎn)品質(zhì)量等要素是否符合期望值,包括過程度量和產(chǎn)品度量兩個(gè)方面;軟件項(xiàng)目計(jì)劃主要包括工作量、成本、開發(fā)時(shí)間的估計(jì),并根據(jù)估計(jì)值制定和調(diào)整項(xiàng)目組的工作;風(fēng)險(xiǎn)管理預(yù)測(cè)未來可能出現(xiàn)的各種危害到軟件產(chǎn)品質(zhì)量的潛在因素并由此采取措施進(jìn)行預(yù)防;質(zhì)量保證是保證產(chǎn)品和服務(wù)充分滿足消費(fèi)者要求的質(zhì)量而進(jìn)行的有計(jì)劃,有組織的活動(dòng);軟件過程能力評(píng)估是對(duì)軟件開發(fā)能力的高低進(jìn)行衡量;軟件配置管理針對(duì)開發(fā)過程中人員、工具的配置、使用提出管理策略。因?yàn)榇蠹覍?duì)人力資源管理和軟件過程能力比較有興趣,下面就詳細(xì)的對(duì)這兩方面展開討論。
軟件工程師需要學(xué)習(xí)以下知識(shí):
(1) 熟悉計(jì)算機(jī)系統(tǒng)的基礎(chǔ)知識(shí);
(2) 熟悉網(wǎng)絡(luò)操作系統(tǒng)的基礎(chǔ)知識(shí);
(3) 理解計(jì)算機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)和開發(fā)方法;
(4) 熟悉數(shù)據(jù)通信的基礎(chǔ)知識(shí);
(5) 熟悉系統(tǒng)安全和數(shù)據(jù)安全的基礎(chǔ)知識(shí);
(6) 掌握網(wǎng)絡(luò)安全的基本技術(shù)和主要的安全協(xié)議與安全系統(tǒng);
(7) 掌握計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)和網(wǎng)絡(luò)協(xié)議的基本原理;
(8) 掌握計(jì)算機(jī)網(wǎng)絡(luò)有關(guān)的標(biāo)準(zhǔn)化知識(shí);
(9) 掌握局域網(wǎng)組網(wǎng)技術(shù),理解城域網(wǎng)和廣域網(wǎng)基本技術(shù);
(10) 掌握計(jì)算機(jī)網(wǎng)絡(luò)互聯(lián)技術(shù);
(11) 掌握TCP/IP協(xié)議網(wǎng)絡(luò)的聯(lián)網(wǎng)方法和網(wǎng)絡(luò)應(yīng)用服務(wù)技術(shù);
(12) 理解接入網(wǎng)與接入技術(shù);
(13) 掌握網(wǎng)絡(luò)管理的基本原理和操作方法;
(14) 熟悉網(wǎng)絡(luò)系統(tǒng)的基本性能測(cè)試和優(yōu)化技術(shù),以及可靠性設(shè)計(jì)技術(shù);
(15) 理解網(wǎng)絡(luò)應(yīng)用的基本原理和技術(shù);
(16) 理解網(wǎng)絡(luò)新技術(shù)及其發(fā)展趨勢(shì);
(17) 了解有關(guān)知識(shí)產(chǎn)權(quán)和互聯(lián)網(wǎng)的法律、法規(guī);
(18) 正確閱讀和理解本領(lǐng)域的英文資料。
軟件工程誕生背景:幾十年前,軟件行業(yè)很不規(guī)范,小程序雖然個(gè)人能很好完成,但缺乏良好的代碼管理;大程序設(shè)計(jì)人員多,工程復(fù)雜,由于缺乏相關(guān)理論知識(shí)和經(jīng)驗(yàn),導(dǎo)致很多失敗的大項(xiàng)目產(chǎn)生,為了解決這種情況誕生了軟件工程。
建議你去讀《人月神話》,能管窺一二。軟件工程專業(yè)誕生背景:當(dāng)年中國這片神奇的大地上缺少計(jì)算機(jī)方面剛畢業(yè)就能很好與企業(yè)接軌的人,因?yàn)楦咝9┙o企業(yè)的生源往往只知道理論知識(shí),卻不能又快又好地上手工作,企業(yè)又往往不愿意花費(fèi)太多精力去培養(yǎng)這樣的人,所以為了解決這種蛋疼的狀況,中國的軟件工程專業(yè)誕生了,更重視計(jì)算機(jī)實(shí)踐方面的教學(xué)。
初級(jí)部分:
1. Java 面向?qū)ο蟪绦蛟O(shè)計(jì)、Java API使用、數(shù)據(jù)結(jié)構(gòu)及算法基礎(chǔ)、Java高級(jí)類特性、異常處理;
2. AWT及Swing圖形程序設(shè)計(jì)、流、網(wǎng)絡(luò)程序設(shè)計(jì)、對(duì)象序列化、Applet、多線程程序設(shè)計(jì)、Java應(yīng)用國際化基礎(chǔ);
3. Java桌面系統(tǒng)項(xiàng)目開發(fā);
4. Java編程基礎(chǔ)提高課程:反射機(jī)制、設(shè)計(jì)模式(I)、正則表達(dá)式,Java SE5.0新特性等;
5. 基于Oracle的數(shù)據(jù)庫開發(fā)及管理、數(shù)據(jù)庫設(shè)計(jì)、標(biāo)準(zhǔn)SQL、PL/SQL編程;
6. JDBC、JSP2.0、Servlet2.4、JavaBean編程;Tomcat服務(wù)器使用、Jbuilder及Eclipse 等集成開發(fā)環(huán)境;
7. Linux操作系統(tǒng)中的Java程序開發(fā)、Linux系統(tǒng)管理;
8. Java Web編程提高課程:JDBC進(jìn)階、高效分頁處理、過濾器使用技巧、Struts中動(dòng)態(tài)表單驗(yàn)證、DispatchForm等;
高級(jí)部分
1. MVC設(shè)計(jì)模式、Struts架構(gòu)核心工作機(jī)制、國際化、驗(yàn)證框架、Struts Taglib、ORM基礎(chǔ)、基于Hibernate的企業(yè)級(jí)應(yīng)用;
2. JavaME手機(jī)游戲設(shè)計(jì)、界面程序設(shè)計(jì)、數(shù)據(jù)庫程序設(shè)計(jì)、手機(jī)短信、多媒體短信(彩信)開發(fā);
3 .JavaEE核心技術(shù)、XML、Web Service、異構(gòu)系統(tǒng)整合、分布式應(yīng)用開發(fā)、WebLogic和JBoss等應(yīng)用服務(wù)器;
4 .CMM、UML與系統(tǒng)建模和設(shè)計(jì)、Rational Rose、軟件工程和軟件過程模型、版本控制及設(shè)計(jì)模式;
6. Java 企業(yè)級(jí)應(yīng)用開發(fā)提高課程:Hibernate使用技巧、設(shè)計(jì)模式(II)、Spring編程入門、提高Java EE應(yīng)用的性能;
.NET程序設(shè)計(jì)
.NET架構(gòu)、.NET桌面和Web程序設(shè)計(jì)、.NET與JavaEE平臺(tái)應(yīng)用的整合;
職業(yè)素質(zhì)
IT職業(yè)規(guī)劃、溝通技巧、團(tuán)隊(duì)合作、專業(yè)技術(shù)規(guī)范、面試技巧等職業(yè)技能培訓(xùn)。
完成以上培訓(xùn)課程后,通過考核就可以獲得培訓(xùn)機(jī)構(gòu)頒發(fā)的合格證書。
現(xiàn)在比較吃香的是JAVA,特別是J2EE,未來3G出來后,手機(jī)編程將成為熱點(diǎn),J2EE當(dāng)然就會(huì)很吃香了。
關(guān)于證書的權(quán)威性,建議你要去知名的培訓(xùn)機(jī)構(gòu)去,最好是像SUN這類國際大公司有關(guān)認(rèn)證所指定的培訓(xùn)機(jī)構(gòu),這樣權(quán)威性高些。
一般來講,軟件公司是非常喜歡通過了軟件工程師的人員,學(xué)歷對(duì)他們來說并不重要,而重要的是能力。如果你的能力夠強(qiáng),在一個(gè)好的公司的話,這個(gè)月薪我想應(yīng)該是可以拿到的。
開發(fā)過程 軟件開發(fā)過程分為5個(gè)階段:分析 軟件需求分析就是回答做什么的問題。
它是一個(gè)對(duì)用戶的需求進(jìn)行去粗取精、去偽存真、正確理解,然后把它用軟件工程開發(fā)語言(形式功能規(guī)約,即需求規(guī)格說明書)表達(dá)出來的過程。本階段的基本任務(wù)是和用戶一起確定要解決的問題,建立軟件的邏輯模型,編寫需求規(guī)格說明書文檔并最終得到用戶的認(rèn)可。
需求分析的主要方法有結(jié)構(gòu)化分析方法、數(shù)據(jù)流程圖和數(shù)據(jù)字典等方法。本階段的工作是根據(jù)需求說明書的要求,設(shè)計(jì)建立相應(yīng)的軟件系統(tǒng)的體系結(jié)構(gòu),并將整個(gè)系統(tǒng)分解成若干個(gè)子系統(tǒng)或模塊,定義子系統(tǒng)或模塊間的接口關(guān)系,對(duì)各子系統(tǒng)進(jìn)行具體設(shè)計(jì)定義,編寫軟件概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)說明書,數(shù)據(jù)庫或數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)說明書,組裝測(cè)試計(jì)劃。
在任何軟件或系統(tǒng)開發(fā)的初始階段必須先完全掌握用戶需求,以期能將緊隨的系統(tǒng)開發(fā)過程中哪些功能應(yīng)該落實(shí)、采取何種規(guī)格以及設(shè)定哪些限制優(yōu)先加以定位。系統(tǒng)工程師最終將據(jù)此完成設(shè)計(jì)方案,在此基礎(chǔ)上對(duì)隨后的程序開發(fā)、系統(tǒng)功能和性能的描述及限制作出定義。
設(shè)計(jì) 軟件設(shè)計(jì)可以分為概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩個(gè)階段。實(shí)際上軟件設(shè)計(jì)的主要任務(wù)就是將軟件分解成模塊是指能實(shí)現(xiàn)某個(gè)功能的數(shù)據(jù)和程序說明、可執(zhí)行程序的程序單元。
可以是一個(gè)函數(shù)、過程、子程序、一段帶有程序說明的獨(dú)立的程序和數(shù)據(jù),也可以是可組合、可分解和可更換的功能單元。模塊,然后進(jìn)行模塊設(shè)計(jì)。
概要設(shè)計(jì)就是結(jié)構(gòu)設(shè)計(jì),其主要目標(biāo)就是給出軟件的模塊結(jié)構(gòu),用軟件結(jié)構(gòu)圖表示。詳細(xì)設(shè)計(jì)的首要任務(wù)就是設(shè)計(jì)模塊的程序流程、算法和數(shù)據(jù)結(jié)構(gòu),次要任務(wù)就是設(shè)計(jì)數(shù)據(jù)庫,常用方法還是結(jié)構(gòu)化程序設(shè)計(jì)方法。
編碼 軟件編碼是指把軟件設(shè)計(jì)轉(zhuǎn)換成計(jì)算機(jī)可以接受的程序,即寫成以某一程序設(shè)計(jì)語言表示的"源程序清單"。充分了解軟件開發(fā)語言、工具的特性和編程風(fēng)格,有助于開發(fā)工具的選擇以及保證軟件產(chǎn)品的開發(fā)質(zhì)量。
當(dāng)前軟件開發(fā)中除在專用場(chǎng)合,已經(jīng)很少使用二十世紀(jì)80年代的高級(jí)語言了,取而代之的是面向?qū)ο蟮拈_發(fā)語言。而且面向?qū)ο蟮拈_發(fā)語言和開發(fā)環(huán)境大都合為一體,大大提高了開發(fā)的速度。
測(cè)試 軟件測(cè)試的目的是以較小的代價(jià)發(fā)現(xiàn)盡可能多的錯(cuò)誤。要實(shí)現(xiàn)這個(gè)目標(biāo)的關(guān)鍵在于設(shè)計(jì)一套出色的測(cè)試用例(測(cè)試數(shù)據(jù)和預(yù)期的輸出結(jié)果組成了測(cè)試用例)。
如何才能設(shè)計(jì)出一套出色的測(cè)試用例,關(guān)鍵在于理解測(cè)試方法。不同的測(cè)試方法有不同的測(cè)試用例設(shè)計(jì)方法。
兩種常用的測(cè)試方法是白盒法測(cè)試對(duì)象是源程序,依據(jù)的是程序內(nèi)部的的邏輯結(jié)構(gòu)來發(fā)現(xiàn)軟件的編程錯(cuò)誤、結(jié)構(gòu)錯(cuò)誤和數(shù)據(jù)錯(cuò)誤。結(jié)構(gòu)錯(cuò)誤包括邏輯、數(shù)據(jù)流、初始化等錯(cuò)誤。
用例設(shè)計(jì)的關(guān)鍵是以較少的用例覆蓋盡可能多的內(nèi)部程序邏輯結(jié)果。白盒法和黑盒法依據(jù)的是軟件的功能或軟件行為描述,發(fā)現(xiàn)軟件的接口、功能和結(jié)構(gòu)錯(cuò)誤。
其中接口錯(cuò)誤包括內(nèi)部/外部接口、資源管理、集成化以及系統(tǒng)錯(cuò)誤。黑盒法用例設(shè)計(jì)的關(guān)鍵同樣也是以較少的用例覆蓋模塊輸出和輸入接口。
黑盒法。維護(hù) 維護(hù)是指在已完成對(duì)軟件的研制(分析、設(shè)計(jì)、編碼和測(cè)試)工作并交付使用以后,對(duì)軟件產(chǎn)品所進(jìn)行的一些軟件工程的活動(dòng)。
即根據(jù)軟件運(yùn)行的情況,對(duì)軟件進(jìn)行適當(dāng)修改,以適應(yīng)新的要求,以及糾正運(yùn)行中發(fā)現(xiàn)的錯(cuò)誤。編寫軟件問題報(bào)告、軟件修改報(bào)告。
一個(gè)中等規(guī)模的軟件,如果研制階段需要一年至二年的時(shí)間,在它投入使用以后,其運(yùn)行或工作時(shí)間可能持續(xù)五年至十年。那么它的維護(hù)階段也是運(yùn)行的這五年至十年期間。
在這段時(shí)間,人們幾乎需要著手解決研制階段所遇到的各種問題,同時(shí)還要解決某些維護(hù)工作本身特有的問題。做好軟件維護(hù)工作,不僅能排除障礙,使軟件能正常工作,而且還可以使它擴(kuò)展功能,提高性能,為用戶帶來明顯的經(jīng)濟(jì)效益。
然而遺憾的是,對(duì)軟件維護(hù)工作的重視往往遠(yuǎn)不如對(duì)軟件研制工作的重視。而事實(shí)上,和軟件研制工作相比,軟件維護(hù)的工作量和成本都要大得多。
在實(shí)際開發(fā)過程中,軟件開發(fā)并不是從第一步進(jìn)行到最后一步,而是在任何階段,在進(jìn)入下一階段前一般都有一步或幾步的回溯。在測(cè)試過程中的問題可能要求修改設(shè)計(jì),用戶可能會(huì)提出一些需要來修改需求說明書等。
編輯本段 開發(fā)平臺(tái) 軟件開發(fā)平臺(tái)源于繁瑣的實(shí)踐開發(fā)過程中。開發(fā)人員在實(shí)踐中將常用的函數(shù)、類、抽象、接口等進(jìn)行總結(jié)、封裝,成為了可以重復(fù)使用的“中間件”,而隨著“中間件”的成熟和通用,功能更強(qiáng)大、更能滿足企業(yè)級(jí)客戶需求的——軟件開平臺(tái)應(yīng)運(yùn)而生。
平臺(tái)是一段時(shí)間內(nèi)科研成果的匯聚,也是階段性平臺(tái)期的標(biāo)志,為行業(yè)進(jìn)入新的研發(fā)領(lǐng)域提供了基礎(chǔ)。由于平臺(tái)對(duì)企業(yè)核心競爭力的提升非常明顯,目前國內(nèi)的管理軟件市場(chǎng),軟件開發(fā)平臺(tái)的應(yīng)用已經(jīng)成為一種趨勢(shì)。
由于開發(fā)環(huán)境、開發(fā)人員、功能定位、行業(yè)背景等的不同,不同品牌的平臺(tái)存在較大差別。編輯本段 開發(fā)環(huán)境 軟件開發(fā)環(huán)境在歐洲又叫集成式項(xiàng)目支援環(huán)境(Integrated Project Support Environment,IPSE)。
軟件開發(fā)環(huán)境的主要組成成分是軟件工具。人機(jī)界面是軟件開發(fā)環(huán)境與用戶之間的一個(gè)統(tǒng)一的交互式對(duì)話系統(tǒng),它是軟件開。
如何成為好的程序員?How To Become a good Programmer?首先問你一個(gè)問題:你們?cè)趯W(xué)校都學(xué)些什么課程?問這個(gè)問題的原因是,我認(rèn)為學(xué)校的計(jì)算機(jī)科學(xué)基礎(chǔ)課很重要。
如果你所在學(xué)校的課程設(shè)置合理,那你應(yīng)該先把主要精力花在這些基礎(chǔ)課上。很多學(xué)生看到基礎(chǔ)理論就茫然,不知道這些圖表,符號(hào),甚至硬件的知識(shí)對(duì)將來的軟件開發(fā)有什么用。
用處大得很哪。比如,操作系統(tǒng)課里講到的多線程的東西在系統(tǒng)編程里很有用。
又比如,盡管你將來不會(huì)去涉及電腦的硬件,計(jì)算機(jī)架構(gòu)里的知識(shí)對(duì)分析算法的性能(快慢等等)很有用??梢园延?jì)算機(jī)語言和開發(fā)工具比作文字,而把計(jì)算機(jī)科學(xué)的知識(shí)比做思想。
只有思想,不會(huì)行文,不行;但是,行文流暢,思想空洞,也不行。大學(xué)的階段正是打好基礎(chǔ),豐富思想的年代。
成為一名好的程序員,不是簡單地通過學(xué)幾門課程就能做到的。我個(gè)人認(rèn)為成為一名好的程序員的要素有:1。
扎實(shí)的基礎(chǔ)知識(shí);2。很強(qiáng)的解決問題的能力;3。
熟練的編程調(diào)試能力;4。創(chuàng)新能力;5。
團(tuán)隊(duì)合作能力;6。持續(xù)的自學(xué)能力;7。
好奇心 這些能力和品質(zhì)(甚至可以說是習(xí)慣)都應(yīng)該從大學(xué)階段就著手培養(yǎng),并且從身邊的小事開始培養(yǎng)。比如,很多中國的大學(xué)畢業(yè)生都缺乏編程和調(diào)試經(jīng)驗(yàn)。
學(xué)習(xí)C語言,考試過關(guān)就算學(xué)會(huì)了。課題項(xiàng)目中,只要程序能夠編譯,運(yùn)行,并且輸入輸出滿足要求就了事了。
但是,寫程序的時(shí)候是否想過如何把程序?qū)懙酶泳珶挘咝?,高質(zhì)量?對(duì)程序調(diào)試中出現(xiàn)的問題是否刨根問底知道原因,還是不求甚解搪塞過去算數(shù)?還有,很多中國的大學(xué)畢業(yè)生對(duì)于知識(shí)的掌握膚淺,機(jī)械,沒有好奇心,不會(huì)刨根問底。比如,學(xué)會(huì)了C++,有沒有看過一個(gè)object在編譯后,在匯編代碼中是如何被初始化的?這個(gè)object的各個(gè)成員在內(nèi)存中是如何放的?在一個(gè)成員函數(shù)被調(diào)用的時(shí)候編譯器在匯編代碼中加入了哪些額外的動(dòng)作?虛函數(shù)的調(diào)用是如何實(shí)現(xiàn)的? 這些東西恐怕在編程語言或編譯原理中都沒有詳細(xì)提到。
但是,你是否有過好奇心去知道?最后,一些中國學(xué)生的大問題就是死記硬背,沒有學(xué)到某種算法技術(shù)的根本原理,沒有應(yīng)變和創(chuàng)新的能力。比如,有個(gè)問題是如何在不用額外內(nèi)存的情況下把一棵樹的同一層節(jié)點(diǎn)都連起來。
很多學(xué)生都能夠回答這是一個(gè)廣度遍歷的問題。但是,課本上說了廣度遍歷是一定要有額外數(shù)據(jù)結(jié)構(gòu)輔助的(隊(duì)列)。
所以,不給額外內(nèi)存怎么行?請(qǐng)看,課本上說的用隊(duì)列的方法記住了,但是就是不知道為什么要用隊(duì)列。如果深刻掌握了這個(gè)隊(duì)列的作用,那么這個(gè)問題是很容易的。
舉了這么多例子,我想說明的事,想成為一位好程序員(其實(shí)從事任何一個(gè)行業(yè)都是如此),重要的是要養(yǎng)成一個(gè)鉆研,好奇,創(chuàng)新,動(dòng)手,合作,不滿足于填鴨,不滿足于考試交差,不滿足于表象的一種優(yōu)秀的習(xí)慣。這不是學(xué)幾門課能夠一蹴而就的。
當(dāng)然,如果你的在校課程不能使你滿足,我以及論壇上的朋友可能能夠給你推薦一些書或科目。我覺得要提高編程的能力,有一位良師很重要。
這位良師可以是在編程方面比你走在前面的同學(xué),也可以是學(xué)校里你幫他做項(xiàng)目的老師,也可以是校外公司里的老師或老板。很多東西在實(shí)際的項(xiàng)目中,有一位良師察看你的程序,幫你指出不足,手把手地指導(dǎo)你調(diào)試,會(huì)對(duì)你很有幫助。
所以,當(dāng)學(xué)會(huì)了書本上的基本知識(shí)以后,可以努力尋找一些有實(shí)用性的項(xiàng)目,借機(jī)在項(xiàng)目中找到高手指導(dǎo)。這個(gè)項(xiàng)目可以在學(xué)校找,也可以到校外找。
一開始不要計(jì)較報(bào)酬,甚至如果能夠?qū)さ礁呤种更c(diǎn),白干也行。其次是讀好的源代碼。
多讀好的源代碼就象多讀好的文章,會(huì)有利于自己寫作。能夠讀懂別人的代碼也是一門硬功夫。
將來很多項(xiàng)目中你不會(huì)重頭做,而是在半途加入(一般文檔又不很齊全),因此需要能夠很快讀懂別人代碼和想法的能力。再次是看一些編程方面的好書。
Writing Solid Code是一本很經(jīng)典的書。最近出的Writing Secure Code也不錯(cuò)。
在你熟練掌握C以后,可以學(xué)一下C++并熟悉面向?qū)ο蟮某绦蛟O(shè)計(jì)思路。在掌握C++的基礎(chǔ)上可以看一下Design Patterns。
看你要把編程學(xué)到多么專業(yè)。到一定程度,你會(huì)發(fā)現(xiàn)如果沒有學(xué)過數(shù)據(jù)結(jié)構(gòu),算法原理,編譯原理和操作系統(tǒng),可能在某些方面會(huì)遇到一些障礙。
所以,如果有精力和條件的話,可以同時(shí)了解這些方面的知識(shí)。最后,我要提醒你不要因?yàn)榫幊踢@一業(yè)余愛好而影響了你本專業(yè)的課程,除非你決定轉(zhuǎn)行。
對(duì)很多在校學(xué)生來說,本專業(yè)的成績很重要,因?yàn)檫@個(gè)成績可能會(huì)影響到將 來找工作,申請(qǐng)研究生院等等。英語也很重要。
我讀翻譯的計(jì)算機(jī)書總覺得隔了一層,翻得不貼切。能夠直接閱讀英文資料更好。
計(jì)算機(jī)專業(yè)修煉和武俠小說中功夫修煉都是一樣的:金庸先生小說中提到高手習(xí)武包括內(nèi)功和外功,其實(shí)這個(gè)道理在計(jì)算機(jī)專業(yè)同學(xué)中一樣適用!內(nèi)功包括:基本心法和高級(jí)心法 基本心法需要每個(gè)習(xí)武者必須修煉,包括:數(shù)據(jù)結(jié)構(gòu)、編譯原理、計(jì)算機(jī)組成原理、高等數(shù)學(xué)、線性代數(shù)以及外語等。高級(jí)心法根據(jù)個(gè)人需要定,比如:網(wǎng)絡(luò)類需要學(xué)習(xí)包括TCP/IP原理等;軟件工程需要學(xué)習(xí)包括軟件工程的基礎(chǔ)課程。
外功包括:基本招。
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時(shí)間:3.417秒