首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 面授課程 模擬考試 實用文檔 繽紛校園 英語學(xué)習(xí)
2010考研 | 自學(xué)考試 | 成人高考 | 專 升 本 | 法律碩士 | MBA/MPA | 中 科 院
四六級 | 商務(wù)英語 | 公共英語 | 職稱日語 | 職稱英語 | 博思 | 口譯筆譯 | GRE GMAT | 日語 | 托福
雅思 | 專四專八 | 新概念 | 自考英語 | 零起點英、、、韓語 | 在職申碩英語
在職攻碩英語 | 成人英語三級
等級考試 | 水平考試 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證
公務(wù)員 | 報關(guān)員 | 報檢員 | 外銷員 | 司法考試 | 導(dǎo)游考試 | 教師資格 | 國際商務(wù)師 | 跟單員
單證員 | 物流師 | 價格鑒證師 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 人力資源管理師 | 管理咨詢師
期貨從業(yè)資格 | 社會工作者
會計職稱 | 注會CPA | 經(jīng)濟師 | 統(tǒng)計師 | 注冊稅務(wù)師 | 評估師 | 精算師 | 高會 | ACCA | 審計師
法律顧問 | 會計證
建造師一級、二級) | 造價師 | 監(jiān)理師 | 安全師 | 咨詢師 | 結(jié)構(gòu)師 | 建筑師 | 安全評價師
估價師房地產(chǎn)估價、土地估價) | 設(shè)備監(jiān)理師 | 巖土工程師 | 質(zhì)量資格 | 房地產(chǎn)經(jīng)紀人 | 造價員
投資項目管理 | 土地代理人 | 環(huán)保師 | 環(huán)境影響評價 | 物業(yè)管理師 | 城市規(guī)劃師 | 公路監(jiān)理師
公路造價工程師 | 招標師
執(zhí)業(yè)護士 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 衛(wèi)生資格
 丹丹云 
您現(xiàn)在的位置: 考試吧(Exam8.com) > 軟件水平考試 > 心得技巧 > 正文

給編程入門者的建議

    前幾天重讀Eric S. Raymond的How to become a hacker,看到他推薦編程入門選用Python,突然覺得很壓抑,有了些想法。我建議編程入門的人學(xué)C或者Pascal,如果更進一步的話可以用匯編語言,因為這樣能更清楚的了解底層。

  下面針對一些支持選用Java, Python, C++(指用了非C特性的C++)等高級的OO語言入門的人可能的原因作些說明。

  1. Pascal, C太老了,過時了,平時用得很少,現(xiàn)在流行Java等等。

  標準Pascal的確是比較老了,不過有Delphi后繼呢,說C老恐怕就是無知了,C現(xiàn)在用得很廣泛,似乎sourceforge.net上的項目還是C的最多。推薦Pascal不是因為Delphi。選擇Pascal, C是覺得兩個現(xiàn)在很常見,語法很有代表性,簡潔明了。

  不要動不動覺得什么東西過時了,COBOL還有OO版本面世,還有FORTRAN,LISP,好古老的語言吧,現(xiàn)在還用得很廣呢。

  2.入門要從OO開始,培養(yǎng)用OO方式思考的習(xí)慣。

  首先要說明,OO是方法,不是語言,初學(xué)者一入門便擺弄Java, Python, Delphi等很容易形成誤解,似乎OO=Java, Python, C++...

  其次,過程式語言(或者說結(jié)構(gòu)化方法)的精髓不會消亡,OO里面也不可能擺脫掉一條條的語句、函數(shù)調(diào)用,結(jié)構(gòu)化方法還是需要提倡的。OO方法不是那么容易學(xué)會的(OO語言的語法弄得很熟練不代表你懂OO),而結(jié)構(gòu)化那套方法,自個寫個千把行的程序就很能體會了,我是說寫個實用點的東西,比如試著自個實現(xiàn)一些數(shù)據(jù)結(jié)構(gòu)和算法,寫幾個小游戲等。寫個一千行Hello world等于沒寫。

  我覺得方法是實踐中體會出來的,不是看看書就能學(xué)會的,你看Design Patterns等把模式背的滾瓜爛熟很可能會陷入過度設(shè)計的泥潭,你寫了幾千行代碼,然后再去讀一讀,改改調(diào)試調(diào)試,慢慢增加功能,你就會發(fā)現(xiàn)自己代碼寫的有多么臭了,然后看看書聽聽別人意見你就知道什么叫Best practice了,最好的經(jīng)驗就是在焦頭爛額之際得到的。

  過程式語言的代碼一般比較簡練,我們編程序最終的目的是要解決問題,是要計算,是要獲取信息,不要被OO, pattern, EJB, Web Services等迷糊了(我不是反對這些技術(shù)).

  強烈建議各位多讀代碼,你去看看萊昂氏的那本UNIX v6源碼分析,仔細看,慢慢看,你就能體會到什么叫精致的代碼了,然后嘗試按照那個風(fēng)格寫代碼。

  3.過程式語言弄久了,很難轉(zhuǎn)入OO的思維模式

  我以前也沒有深想過這個理由,不過時間久了,發(fā)覺自己不過是把數(shù)據(jù)和方法集中在一起而已,看著方便,其實有很多不合理的東西,這里頭就需要OO的理論指導(dǎo)了,還是需要時間來體會。我相信有很多用OO語言的人也不過是在框架里頭添添代碼,調(diào)用來調(diào)用去而已,把人類當作數(shù)據(jù)和操作的打包器。

  個人覺得只有在用過程式方法做了十來年,編碼上十萬行后才有思維定勢,難以習(xí)慣用OO的眼光看待系統(tǒng),然而這個轉(zhuǎn)變,我仍覺得比改變一個人的惡習(xí)容易許多。OO方法不是學(xué)了個Java, Python, C++等就能掌握的,需要實踐,需要時間。過程式語言也容易培養(yǎng)一個人嚴謹?shù)淖鍪聭B(tài)度,比如用Pascal, C等寫代碼,沒有namespace,沒有function overload, 沒有reference(Pascal有,呵呵,我喜歡),沒有template, 沒有exception, 你要花很多心思處理一些細節(jié),比如警惕數(shù)組索引越界,懸掛指針,野指針等等,請不要覺得麻煩,這個就是計算機啊,底層就是這樣的啊。 4.別用C, Pascal了,看我用Java, Python, Delphi, VB, VC等輕輕松松就寫了個PP的GUI,NB的分布式應(yīng)用...

  這篇文章是給初學(xué)者看的,也可以給一些浮躁的人看看(我也反省,呵呵),初學(xué)編程的人精力應(yīng)該放在數(shù)據(jù)結(jié)構(gòu)、算法上面,盡量多看一些底層的東西,數(shù)字邏輯,操作系統(tǒng),編譯原理,計算機組成、體系結(jié)構(gòu),計算機網(wǎng)絡(luò)等等基礎(chǔ)知識。編寫GUI拖幾個控件有什么好吹的,你懂界面設(shè)計的原則么,你知道窗口消息怎么回事么,你編的界面是把易用放在第一位呢還是把漂亮放在第一位呢,你的GUI程序容易修改嗎?比如我一會要加個button,一會去個listbox,你會不會改的瘋掉呢?你是不是在OnClick里頭寫了大段大段的代碼,做類似“從edit1.text中去掉不是數(shù)字的字符,搜索xxx再轉(zhuǎn)成16進制,再復(fù)制到edit2.text”的事?

  嗯,你socket弄得熟練,recv來,send去,可是如果你不懂tcp/ip協(xié)議那就有點可笑了,除了用別人做好的函數(shù)庫你還能搞出什么新花樣?弄分布式應(yīng)用的知道“分布式”怎么回事嗎,

  你是否只是在用API堆砌代碼呢?倘若有一天這個函數(shù)庫沒人支持了,你是不是就傻眼了?

  比如編游戲,沒看過3D圖形學(xué)便搞DirectX,也是比較可笑的。

  我并不是說你編比較高層的東西就必須先得透徹了解底層怎么實現(xiàn)的,我只是建議你好歹把底層的東西混個臉熟,遇到問題時心里有個譜,查查資料,別動不動撲某個論壇求救。以前在BBS上看到某人的話,說BBS不是學(xué)習(xí)的地方,是開拓眼界的地方。深以為然。

  學(xué)習(xí)還是找紙版的書老實的看比較好,想想你積攢了多少電子書而又看了多少。

  底層不了解,僅多也就飄在別人上頭,別人一閃身,你就得摔下來。

  初學(xué)編程的人一來就IDE, GUI, Network啥的猛搞,能不浮躁么?還是沉下心來研究一下基礎(chǔ)知識吧,我以腦袋擔(dān)保你有生之年會覺得他們有用的(呵呵,你轉(zhuǎn)行我就沒轍了),別看著別人弄JFC, Socket了你還在頭大這個quick sort怎么就不對呢就心里惶惶的,你要知道在一批API不被支持后不少人心里空空的沒個著落:天啊,我除了那個就啥都不會了,郁悶啊,花了我那么久時間鉆研那套API,嗚嗚。。。。

  5. C好難啊,我入門還是從Java,Python開始吧

  首先,是自個要做程序員的嗎?是想編程還是想賺錢啊?

  其次,我們來比較一下難易:

  C: k&r那本書真的不算厚,經(jīng)典的C的書很少,說C難,大概是傳說中C的指針很難吧,C的語法很簡明的,就是指針,只要你認真看看書,寫幾個程序試一試,那幾個指針的用法不難掌握,另外大家千萬不要去死鉆*++ ++*之類的語法,關(guān)于這點在《開發(fā)高手》最后一期上裘宗燕老師有一篇精彩的文章。大家記住寫代碼是要維護的,別耍弄語法技巧給自己或后人制造麻煩,你想想自己看別人寫的天書代碼是贊嘆還是咒罵?

  Java: 書太多了啊,就說Gosling(沒拼錯吧)那本,相當厚,學(xué)Java的人一開始都被classpath和package的問題煩過吧,還有Java的關(guān)鍵字,語法,Sun鼓搗出來的一堆堆Java技術(shù)名詞,是不是有點暈了?

  C++的確有難度,你可以看看C++語言的設(shè)計和演化,就可以知道C++怎么這個德行了,呵呵。有意思的是Java現(xiàn)在加入模版,而且因為偽模版的實現(xiàn)被人詬病,還有那個EJB的轉(zhuǎn)變,有意思,大家可以思考一下“復(fù)雜”、“實用”這些詞。

  Python的確比較清爽,不過深入一點后其內(nèi)部對象模型也不簡單,想想操作一個列表有多少方法,各種功能強大的操作符,而且現(xiàn)在的OO語言逼著你OO, 結(jié)果往往是語法OO而已,沒多大新意,我還是欣賞Perl, C++這類語言,你想怎么就怎么,重要的是要用合適方法,趁手工具,最少的時間做有價值的東西,把你鉆研語言的語法的時間拿來鍛煉一下身體,泡杯茶看看小說我覺得更好一些。

  語言只是表達思想的工具,不要只局限于一種語言,不要狂熱于某一門語言。

  學(xué)編程時選書最好先看一看書中的代碼,是取自實際應(yīng)用中的嗎?寫的漂亮嗎?(指代碼自身的精致,以及排版是否工整)代碼中有語法錯誤嗎?(鄙視某些沒編譯試試就把代碼copy到書里的作者)

  有本Essential C#,取的是.Net類庫的代碼,很棒,講delegate(希望沒拼錯,好久沒弄這個了)時舉的例子很清楚地讓人看到這個東西該怎么用。

  另外推薦Learning Perl,我個人覺得是我看過的最好的關(guān)于編程的書,該講么,不該講什么,按什么順序講,很好,也許是Perl的精神的感染吧,當初看這本書很有震驚的感覺,原來程序設(shè)計語言還可以這么使!爽!

  斷斷續(xù)續(xù)寫了這么長,xxx的xx布,又x又長,呵呵,希望大家踏實一些,不要浮躁。

轉(zhuǎn)帖于:軟件水平考試_考試吧
文章搜索
給編程入門者的建議網(wǎng)友評論網(wǎng)友評論
版權(quán)聲明 --------------------------------------------------------------------------------------
    如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系,我們將會及時處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。