如何學編程,這是一個老話題,是一個老生常談的話題。百度一下,找到相關網頁約195,000篇(2009.11.15),除了重復的文章外,足以知道多少人在問,多少人在談,但是還有多少人迷茫?
關于這個問題自然是仁者見仁,智者見智。如果你在網上百度一下和編程相關內容,一定會看到:Visual Basic 、Delphi 、C、C++、VC++、匯編語言、Visual Foxpro 、SQL Server、Oracle、DB2、Sybase、Power Builder、Java、J2SE、JavaEE、JavaScript、PHP 、ASP(ASP.NET) 、JSP 、ISAPI 、NSAPI 、CGI、VS2005/VS2008 等等(這些有語言、數據庫或者開發
工具)。
這些不是全部,如果你在網上問該怎么學呢?有讓你從C語言開始學的,也有讓你從Pascal開始學的,也有讓你從VB開始學的,也有讓你直接學習C#的,更有讓直接學Java的……,網友的熱心反而讓你更是一頭霧水,很難知道誰對誰錯。
實際上如果是學習一門入門語言,任何一個都夠了,區別僅在于入門的難與易。但是倘若作為“就業”之本,僅有一門語言基礎顯然不夠,欲知后事,請接著往下看:
一、學習目的與軟件企業招人要求 (一)準備從事軟件開發職業:無論你是一個在校大學生也好,還是一個已經在職但準備轉行也罷。
1、首先,最好了解一下軟件的開發模式:C/S模式、B/S模式。
C/S模式:我們看到的一些客戶關系管理、進銷存軟件、醫院管理
系統。顯著特點需要在
電腦上裝一個軟件才能使用。可以使用語言有:VB、Delphi、PB、VC++等。多用于局域網,但也有不少用于互聯網(典型的有QQ等)。
B/S模式,也稱WEB開發:網上銀行、163與126電子郵件、網上納稅等。只需要瀏覽器就可以了。可以使用語言有:VB Script(ASP)、C#(ASP.NET)、JAVA(JSP)、PHP等。多用于互聯網,但也有不少用于局域網。
2、其次,你看一下軟件企業都招什么樣的人。
除了個別領域,不難看到目前主要分為兩大陣營:.NET陣營和JavaEE陣營。兩大體系都非常不錯,不要看網上互相攻擊的那些無聊文章。在后面我會談到,這只是工具。
看看用人單位要求:這才是你真正的學習導向。
.NET體系 (1)計算機相關專業大專或本科學歷,二年以上.NET開發工作經驗;
(2)熟練C#語言、.net平臺,vs2005,vs2008開發環境;熟練C/S,B/S結構軟件,有相關項目經驗。
(3)熟練運用SQL Server數據庫設計與開發,熟悉存儲過程及觸發器,有過大批量數據處理與優化經驗;
(4)精通ASP.NET、WebService進行相關的開發,有HTML、XML、JavaScript經驗者優先;
(5)良好的團隊開發意識,較強的溝通、學習能力,認真負責的工作態度。
.JavaEE體系 (1)計算機相關專業,大專或本科學歷,具有1年以上相關工作經驗;
(2) 要求精通Java語言,精通JavaEE
技術框架,熟悉SPRING、HIBERNATE、STRUTS、WEBWORK、MVC架構,熟悉Weblogic,jboss,Tomcat等應用服務器,并可做應用部署及調優;
(3)對
網絡系統有相當的理解,熟悉Oracle/SQL-Server/Sybase等數據庫,可以熟練的使用PL/SQL語言進行存儲過程和函數等的編寫;
(4)熟悉UML建模技術優先,熟悉現代軟件項目管理優先,英語技能較好者優先;
(5)具有編寫需求說明書、設計說明書等軟件開發相關文檔的能力;
(6)思路清晰,工作規范,良好的執行能力、較強的團隊協作精神和高度的責任心;
(7)2年以上軟件開發工作經驗。
.其他 諸如單片機、PLC等也很多。
――――――――――――――――――――――――――――――――――――
不難看出,近年來盡管學歷一路飆升,但是軟件企業卻仍然定位是大專或者本科學歷,但是都要求有項目經驗(對此,你將來當了老板會更明白,你也不愿意替別人作嫁衣)。
選擇一個體系作為你的目標很重要,無論是.NET還是JavaEE都行,千萬不要什么都學,最終卻什么都不懂。
另:你在網上也許看到很多這樣的建議,學習C語言、C++ For Dos(面向對象的思想用DOS就足夠了)、C For Windows、C++ For Windows(MFC),我是這樣一路學過來的,更知道其中的艱辛。但是我更堅信按照這個建議,更多人的不到山頂就放棄了。并不是學美術的一定都要成為畫家,做廣告設計也是挺有意思的一件事。
(二)純粹的編程愛好者 這個我沒有太多的發言權,只要你認為怎么適合你都行。
二、關于文化基礎: (一)數學:很多人都談到要有高數、離散、線性等基礎。但如果你做的只是一個網站后臺、普通的管理系統,那么也許有高中的數學知識足夠了。
(二)英語:入門學習編程不需要過四、六級,高中英語基礎學習編程沒有一點問題。但是還是希望英語你能夠更上一層樓。道理很簡單,原因有二:
1、如果你英語不好,不可能等你過了六、八級再學編程,可以邊學編程邊學英語,畢竟英語
高手≠編程高手。即使先用拼音作為變量名,先學會編程也是好的,但最好能用英文命名。請看一個表名Yybrdab(拼音首字母),你再看一個表名Yiyuanbinrendanganbiao(拼音全拼),再看表名PatientFiles(英文縮寫),你有什么看法呢?Yybrdab很難猜,Yiyuanbinrendanganbiao全拼太長了,英文命名PatientFiles是不是更容易理解一些,
2、畢竟國外在軟件開發方面比我國先進不少,有時你查閱的是英文資料,如果你的英語好自然會助你一臂之力。
三、語言是工具、功夫在詩外 你想一下,一個知名作家,不會用電腦而是用普通的鋼筆寫文章、甚至是鉛筆,一個打字員每分鐘在電腦打一百字以上,那么誰寫的文章好呢?編程語言也一樣,你應聘工作時說:我會VB、Delphi、JAVA、C#等等,但是什么樣的項目也做不出來,和那個打字員有什么區別呢?
李白的《靜夜思》我們每一個字都認識,是否每一個人都能寫得一首好詩呢?我們知道一個演員、一個作家、一個詩人必須要具備更多的生活閱歷與歷練才能演出好作品、寫出好文章、寫出好詩,我們程序員又何嘗不是呢?
當然能夠用好工具則能更好的為你服務,作家能夠用電腦寫文章,估計效率更高一些,你選擇正確的編程語言,至少會讓你如虎添翼,但千萬不要認為你學的是比較流行的語言而對別人學的可能不入時的語言而不屑一顧,你的道行修得越高才會知道高手并不是都寫在臉上,你會有更好的心態去學習,明白人外有人,天外有天,自己實在微不足道。
知識是無窮的,但我們生命是有限的,所以我們應該在有限的生命里學習更有用的知識應用到實踐中來。學習編程是為了更好
解決我們工作和生活中的問題,而不是讓你成為紙上談兵的軍事家。
四、如何學習? 就像武術一樣,門派如此之多,很難一下都告訴你。我也從一個門派說起吧,就從.NET體系(B/S模式)說吧。
(一)打基礎
勿在沙丘上建浮雕!
避免眼高手低,切忌急功近利! 你可能要學習的有以下內容:Dreamweaver、HTML/XHTML、CSS、JavaScript、XML、SQL SERVER、VS2005/VS2008與IIS
設置、C#、WebForm(ASP.NET)、Ajax。
1、Dreamweaver:可能沒有人會把它和編程聯系起來,我們更多的認為它是做網頁用的(網頁三劍客之一),的確是這樣,之所以我列出來,是希望你如果做B/S模式開發,它做界面有時比VS2005/VS2008好的多,這可能要引出你可能還要懂點Photoshop。門面也很重要,它會讓你的程序增色不少,不見得你進的公司都會給你配一個專業美工。
2、HTML/XHTML:超文本標記語言/擴展超文本標記語言,盡管聽起來是個“語言”,但嚴格來說,它確實不是語言,只是一堆標簽而已。在瀏覽器上點右鍵,“查看源
文件”,里面有不少類似HTML、TABLE、TR、TD等,這些都是HTML的一部分。懂了它你會更明白將來Javascript腳本語言放在哪。
3、CSS:層疊樣式表,它常常和HTML、Javascript結合起來做出更絢麗和大方的界面。
4、JavaScript:這是客戶端的腳本語言,你可能還不能一下子理解什么是客戶端、什么是服務器端,這都沒有關系。你一定見過很多網站顯示今天是:xxxx年xx月xx日,大多數就是用Javascript做的,曾記得1998年,一個朋友問我是不是每天晚上要把網頁上傳一遍,我奇怪問他為什么?(他那時不懂腳本編程),他說日期每天都要變的。也許今天很多人看了都是笑話(但他現在已經是高手了)。
5、 XML:擴展標記語言,盡管它與HTML名字很相似,但骨子里面的東西卻大不一樣,如果讓我說有什么用還真得想一想怎么給你說,但將來你一定會明白,它真的很有用。
6、SQL SERVER:數據庫,你去銀行取錢,你的信息存在哪呢?就是在數據庫中。所以如果你開發的是管理系統,那么數據庫是非常有用的。還有Oracle、DB2,這些你只要懂一個就行了,它們都是相通的。盡管數據庫系統往往是幕后英雄,紅花尚需綠葉襯。
7、VS2005/VS2008與IIS設置:前者是搭建C#運行的集成環境IDE,后者則是學習ASP.NET的環境搭建。
8、C#:這是一門真正的語言,
微軟比爾·蓋茨靠basic起家,直到現在.NET框架中都有VB.NET語言,但C#則更是其
推薦語言,如果你懂點C++或者Java學習一定會很輕松,沒有也沒有關系,很重要的語言啊。
9、Asp.NET:.NET體系不僅可以開發B/S模式的程序,還可以開發C/S模式的程序或者
手機WinCE上的程序,當然Asp.NET則是指B/S模式開發。
10、Ajax:你一定有過在網上注冊過,發現有的是在你填入用戶名尚未登錄就提示有重復的登錄名,而有的直到你提交后才提示,你輸入的東西可能還要重新輸入,這就是前者利用了Ajax的妙用。
上面列出的十項是不是已經嚇住你了,如果你感覺太多了,不妨先學第6、8、9項,其余的放到后面再學也可以。
紙上得來終覺淺,絕知此事要躬行。 ——陸游 學習每一門都要理論與實踐相結合,不要認為這個簡單那個簡單,一看都明白,做起來眼高手低,唯有實踐才能有更深的體會。看看書做做題,這個時候你僅僅學會了造句而已,還要參考一些優秀的文章和代碼,模仿著寫才能真正的提高。
大多數人學習主要還是靠自學的,但學習方法還是至關重要的,有的人喜歡從第一頁一頁頁往后翻,一種可能是堅持下來了,最后可能會“頓悟”,還有一種可能每次都是看前面幾十頁,不信你可以看一下,你的多少本書都是開了個頭,從側面看前面黑乎乎的(不是你手臟),而后面卻是嶄新的。最終也未能攻克。放棄了重新撿起再放棄。
我推薦一種方法先囫圇吞棗,你想一下你做的第一道菜是如何做出來的(從沒有做飯經驗的朋友是沒有……),難道是一字不拉地研究了一遍菜譜嗎?NO,這就對了,計劃做什么樣的一道菜,然后挑相關章節選讀,有些難以讀懂的章節暫時跳過去,等以后再回來讀,你應該有這種體會,剛開始看時很難的東西,過一段時間再看卻變得如此易解。注意我說的是先囫圇吞棗,想成為廚師還是要好好研究菜譜了。但往往是萬事開頭難,等你熟悉了就可以在業界內為解決實際問題而結交高手的時候了。絕不會像BBS中許多問的傻呆問題了。
學而不思則罔,思而不學則殆。 ——孔子 你在學習任何一門編程語言一定學過循環與條件,你會讓電腦計算1+2+3+…+100也是會用循環了;先給x賦值為9,會讓電腦判斷x的值大于5輸出“大于”,否則輸出“小于”,也是你會了。
但是如果你模擬一下銀行取款的過程:在ATM上可以有機會輸入三次密碼,如果密碼正確則可以進行取錢操作,密碼錯誤提示重新輸入,一旦超過三次則卡被吞掉,相信你的功力已經提升了不少,而且感覺編程與現實并不遙遠。
(二)仿照真實項目
經過基礎知識的修煉,也許你已經感覺自己差不多了,滿懷信心的去應聘工作,結果卻碰壁了,問你有項目經驗嗎?你一臉的委屈:沒有上過班則沒有項目經驗?沒有項目不能上班?是不是陷入兩難境地?你可能說我在你們這實習吧,不要工錢都可以,你會發現這個機會對方一般都不會給你,別怨天尤人了,求人不如求己!
實際上現在網上已經有很多試用版,你完全可以比葫蘆畫瓢,你能真正的做一個項目,對前面知識的理解和運用一定會更上一個臺階!
(三)提升
不登高山,不知天之高也;不臨深溪,不知地之厚也。——荀子 我們看電視,看到高手總是殺人于無形,編程也一樣,經過第二階段,這回你可能已經躊躇滿志了,呵呵,一不小心又碰壁了,但也許你幸運的找到了一份工作,這是軟件企業急著用人,看你“孺子可教”,收留了你。如果不要你,一點也不奇怪,是別人比你優秀!
比如,添加一個客戶,你是不是在頁面上畫了幾個文本框和按鈕,然后再按鈕上寫了個事件就提交到數據庫了,能夠做得出來固然比不會要好,但是你面向對象了嗎?太多太多的人學的是面向對象的語言,但是寫的卻是面向過程的程序。關于學習.NET體系的不妨看一下伍迷先生的《戲說面向對象程序設計C#版》、《大話設計模式》,我與伍迷先生不認識,沒有替他推銷圖書之意,只是他的創作與我心有戚戚焉,挺適合入門或者進階者。然而由于很多面向對象以及軟件工程、項目管理、設計模式之類的書籍過于深奧,或者國內有些為了評高級職稱而胡拼亂湊的狗屁書籍,讓更多人忘而卻步。
能不能更上一層樓,那就看你的造化了!
不經歷風雨,哪能見彩虹!五、學習編程的捷徑 我們做任何事情都喜歡找捷徑,世上根本沒有捷徑!實際上不走彎路就是捷徑!
我的這篇文章就是力爭讓你避免或少走彎路,也就成為了捷徑。
當然加入我們的QQ群(95472365)也是一個不錯的方法!
或者到“
跟我學編程”網站轉轉也許有一個意外的收獲!
六、成功和失敗的唯一區別,就是堅持與否 “想起來一件有意思的事情,上大學時,到了晚上11點就關燈,我是很喜歡看書,就跑到男廁所去看看技術方面的書籍,唉想想那時候的確是苦了一點兒,不過沒有當時的努力,怎么可能就有今天的我呢,雖然比上不足,比下還是蠻有余的,知足常樂,何必跟自己過不去呢。”
這是從網上看到的一位,與我當年頗為相似。不過似乎我比他幸運一些,圖書館里面老書居多,平時省吃儉用買一些書,盡管父親告訴我:孩子,買書只管買,不要為了學習舍不得花錢!所以過早的學習了C語言、數據結構(那時候教學語言Pascal幾乎一統天下),有一次去圖書館借一本新書,圖書館管理員認為我看不懂,就是不借給我(當時恨透她了,這個老太太,太可惡了)。我固執地說可以看懂,這位老師說明天你來一下,第二天接到了一份試卷,所幸我答的不錯,后來我借書幾乎不限本數,因為老師知道書的資源不多,總是借給需要的學生和老師,那種恨瞬間變為一種感動。
再后來,由于前面打的基礎,班主任(輔導員)把我推薦給了我們學校一名權威,這是一名我們當時只能仰視的學者,自己比較愚笨,此后得到導師一年有余的指導,平生受益匪淺。自此我也幾乎是在宿舍熄燈后才從教研室回到宿舍,故而在靜謐的晚上經常有繁星或明月相伴,工作這么多年則很少看到星星,很懷念大學那段時光。