一、學程式設計要學演算法
二、要明確什麼是物件導向
幾年前,程式設計從來不用提物件。那時候在basic和c中的輸入輸出是這樣編的:
◆basic:
rem ----------輸入輸出---------
input age promapt "請輸入你的年齡:"
print "你的年齡是:";age;"歲"
◆c://------------輸入輸出---------
printf("請輸入你的年齡:");
scanf("%d",&age);
printf("/n你的年齡是:%d歲/n",age);
那年頭學過程式設計的朋友一定還記得這樣的語句(至少我覺得這是終生難忘的),那時至所以不提物件,一是因為沒這個必要,輸入裝置只有鍵盤,輸出設定只有顯示器。二是因為那時的程式也差,比如上面這樣的程式,設計者先問你姓名後問你年齡,使用者就必須先輸入姓名後輸入年齡,現在呢?給你幾個輸入框,隨你先填哪個,填好後按個按鈕就行了。功能的複雜,導到了物件必然要出現。
現在的程式設計一直在喊著「物件導向」,但是許多最近才學習程式設計的人,他們一起步使用的就是物件導向的語言,卻反而不知道什麼是物件導向。
我給別人講visual basic第一課時,跟本不就提什麼程式設計,我只這樣舉生活中的例子:
◆請告訴我 冰箱.外殼顏色(訪問物件的屬性,用法:物件名.屬性名)
◆自行車.顏色=紅色(設定物件屬性)
◆電視機.開(完成乙個工作,用法:物件名.方法名)
◆汽車.行駛(北,100km/s,50km)(帶引數的方法)……
這樣做是不是一定比直接講visual basic好我還不知道,但是這樣至少可以讓別人先感覺一下將要進行的程式設計中的一些思路。
我不建議誰還去學面象過程的程式設計,我從八年前開始學習basic,到97年學習結構化的true basic,到98年開始轉向面象物件的visual basic。這兩次轉折的時候,我都遇上了很大的困難:舊的思維方式一直在頑固地抵制著新的東西的進入。其中98年那一次,我花了半年時間才把思維方式轉過來了。最近才學習程式設計的朋友,你們真的很幸運。
三、程式中要有詳細的注釋
我有的時候看到人家編的程式,我簡直受不了:他的程式裡面幾乎從來沒有乙個注釋。如果你這樣做了,你能保證過一年半載的還看得懂嗎?——什麼?你看得懂?有兩個可能:這麼長時間裡,你一共才編了這麼乙個程式,而且只有幾十行百來行。或者編了幾個程式,都只有七八行。如果你編了幾個大程式,每個幾千行,你再回來看看半年前的那個,你試試。
我記得98年我剛學visual basic時,我把小時候玩過的遊戲《華容道》和在其它電子玩具上的遊戲《黑白棋》移植到了計算機裡,過了沒多久,我再看我的《華容道》時,我已經看不懂了。——注意,我是有注釋的,但還是看不懂。所謂看不懂,並不是看不懂其中的語句,而是看不懂某乙個語句在整個程式段裡起的是什麼作用。
後來,我就繼續把注釋做得更詳細些。比如
◆說明每乙個變數所表示的內容,取值範圍
'------------申明變數-------------
dim shifouyouqizi(0:63) as byte '某個位置是否有棋子的標誌,取值0-2
'1表示有玩家的棋子
'2表示有電腦的棋子,
'0表示沒有棋子
◆說每乙個程式分支的情況
'-----------if-else-end if結構---------
if rs.eof then
'沒有查到相應的使用者資訊,沒有符合條件的使用者
msgbox("查無此人!")
else
'有符合條件的使用者記錄
'以下語句略
end if
四、要用結構化
也許有人要問:現在的語言都是結構化的,我想不用還難呢,你這不是白說了?
在這裡我要說的結構化,是兩個方面的內容:一是同一級語句盡量對齊,不同級語句要有縮排;二是盡量多用子程式(即過程)。
比如下面的程式段(這次以asp為例)
以上這個asp程式段是我寫這篇文章時隨手寫的,沒有什麼功能。從這段程式中,我們可以看出其中的縮排,給日後修改時減少了許多麻煩。
再來看下面乙個程式,下面的程式的功能是在印表機上列印兩行文字:
'----------列印程式----------
printer.currentx=2500
printer.currenty=1000
printer.fontname="黑體"
printer.fontsize=32
printer.print "給同學們的一封信"
printer.currentx=100
printer.currenty=3000
printer.fontname="宋體"
printer.fontsize=16
printer.print strnameofstudent & "同學:你好"
printer.enddoc
以上這段程式非但可讀性差,語句量大,而且日後修改起來麻煩,如果改用下面這種方法就好多了:
'----------列印程式例二----------
printtext(2500,1000,"黑體",32,"給同學們的一封信")
printtext(100,3000,"宋體",16,strnameofstudent & "同學:你好")
printer.enddoc
private sub printtext(byval ptx as singel,byval pty as singel,byval ptfn as string,byval ptfs as singel,byval ptstr as string)
'列印內容子過程
'ptx,pty是列印位置
'ptfn是字型,ptfs是字型大小
'ptstr是列印內容
'你還可以跟據需要加入粗體、斜體等引數
printer.currentx=ptx
printer.currenty=pty
printer.fontname=ptfn
printer.fontsize=ptfs
printer.print ptstr
end sub
五、不要用goto
這是多年前的問題了,如今卻實大多數人已經不用goto語句了,但是,不可否認還有些人在死守著那些老古董不肯放。用了goto語句的程式就像麵條一樣,日後是很難把它理清楚的。
我97年開始從gw basic向true basic轉時碰到了很大的難度,因為我已經非常習慣於goto語句了,但是,我一直堅持乙個也不用。現在,我已經習慣了沒有goto的程式。前兩天,一位朋友把他編的程式給我看,程式本身很好,功能也很強,就是裡面用了幾個if...then goto語句,讓我很受不了。都這麼多年過去了,這些東西應該丟掉了。
最近才著手學習程式設計的朋友應該不會濫用goto,因為現在的任何一本材料中都不介紹goto的使用。也許你們都沒聽說過還有這樣的語句,這樣更好了。
不過,有乙個例外:on error goto語句不用丟棄它。但是我不喜歡用數字做行號,我的朋友在他的程式裡除了幾個「goto 100」,「goto 200」之類的語句,還有「on error goto 1000」。如果用「on error goto killerr」,採用字串做行標記,日後看程式時總比看到數字舒服。萬一你還沒看到「on error goto」而先看到行號呢?用數字不就麻煩了些?
六、在應用中學習
許多人學程式設計只是照著書本的例子做,一本書啃完了,再買一本繼續,這樣做永遠沒有主動。要想學得深一些,學一些有用的東西,可以先拿一本書學學其中的例子,大體有點會後就放開書本自己編。
自己編的時候,不要只想著程式語言能實現的功能,而要想其它應用軟體能實現的功能,甚至其它應用軟體還沒有實現的功能,然後想辦法用程式去完成它。
自己編的時候,要麼不編,要編就編乙個完整的程式。這樣的話,接觸到的問題會多一些。編什麼呢?不用想:小時候玩過七巧板嗎?玩過飛行棋嗎?現在你需要乙個好的通訊錄嗎?都可以編啊。把這些都編出來就行了。
也許你要說,這些程式網上都有,還要我編幹什麼?錯!網上是有,而且網上的比你即將編出來的更好。但是,我們並不是要乙個程式,而是要學習。
我現今用visual basic程式設計序時從來不翻書,碰到不會的怎麼辦?用f1就行了。msdn裡講得比任何一本書都完整,當然,msdn裡並不介紹演算法,並不介紹模組的組合。但那是你早該解決的問題。
給正準備學習VC 朋友的建議
的 很多時候,如同我們邁入社會一樣,並不會有太多的人會告訴你今後的路你該如何如何走 該如何如何學習。唯獨只有靠自己摸索,跌倒了便記住了再爬起來,堅持不放棄.我這人雖愚鈍,但也屬比較 理性 與 勢力 的那種,畢竟windows的天下,所謂 識時務者為俊傑 雖然微軟的東西十分難纏,但也只好硬著頭皮從c ...
編碼基本功 給剛剛學習程式設計的朋友的建議
在csdn,經常看到一些剛剛學習程式設計的朋友,把 發了出來。當然是有問題 要麼是編譯不過,要麼是寫法錯誤。指點?這太低階 不指點,又覺得過意不去。於是寫一博文,希望給此類朋友帶來幫助。對於剛剛開始學習程式設計的朋友,選定語言之後,買一本入門的程式設計教材 大哥你教材都不肯買一本,還學什麼程式設計?...
給成年朋友練字的建議
老話說 字是乙個人的門面 雖然工作之後手寫的場合少了,但想裝修這一門面的成年人可不少呢,不信,看看知乎上的熱門話題 成年人怎樣練字效果最好?成年人練字有哪些高效率的方法?如何練習好寫字感覺字貼沒有什麼用一樣?怎樣練好字因為每天要寫字,寫不好真的很著急?成年人寫字習慣已經形成,如何糾正寫得一手好字?看...