??? 我建議編程入門的人學
C
或者
Pascal
,如果更進一步的話可以用匯編語言,因為這樣能更清楚的了解底層。
? 前幾天重讀
Eric?S.?Raymond
的
How?to?become?a?hacker,
看到他推薦編程入門選用
Python
,突然覺得很壓抑,有了些想法。我建議編程入門的人學
C
或者
Pascal
,如果更進一步的話可以用匯編語言,因為這樣能更清楚的了解底層。
?
下面針對一些支持選用
Java,?Python,?C++(
指用了非
C
特性的
C++)
等高級的
OO
語言入門的人可能的原因作些說明。
1.?Pascal,?C
太老了,過時了,平時用得很少,現在流行
Java
等等。
標準
Pascal
的確是比較老了,不過有
Delphi
后繼呢,說
C
老恐怕就是無知了,
C
現在用得很廣泛,似乎
sourceforge.net
上的項目還是
C
的最多。推薦
Pascal
不是因為
Delphi
。選擇
Pascal,?C
是覺得兩個現在很常見,語法很有代表性,簡潔明了。
不要動不動覺得什么東西過時了,
COBOL
還有
OO
版本面世,還有
FORTRAN,LISP,
好古老的語言吧,現在還用得很廣呢。
2.
入門要從
OO
開始,培養用
OO
方式思考的習慣。
首先要說明,
OO
是方法,不是語言,初學者一入門便擺弄
Java,?Python,?Delphi
等很容易形成誤解,似乎
OO=Java,?Python,?C++...
其次,過程式語言(或者說結構化方法)的精髓不會消亡,
OO
里面也不可能擺脫掉一條條的語句、函數調用,結構化方法還是需要提倡的。
OO
方法不是那么容易學會的(
OO
語言的語法弄得很熟練不代表你懂
OO
),而結構化那套方法,自個寫個千把行的程序就很能體會了,我是說寫個實用點的東西,比如試著自個實現一些數據結構和算法,寫幾個小游戲等。寫個一千行
Hello?world
等于沒寫。
我覺得方法是實踐中體會出來的,不是看看書就能學會的,你看
Design?Patterns
等把模式背的滾瓜爛熟很可能會陷入過度設計的泥潭,你寫了幾千行代碼,然后再去讀一讀,改改調試調試,慢慢增加功能,你就會發現自己代碼寫的有多么臭了,然后看看書聽聽別人意見你就知道什么叫
Best?practice
了,最好的經驗就是在焦頭爛額之際得到的。
過程式語言的代碼一般比較簡練,我們編程序最終的目的是要解決問題,是要計算,是要獲取信息,不要被
OO,?pattern,?EJB,?Web?Services
等迷糊了(我不是反對這些技術)
.
強烈建議各位多讀代碼,你去看看萊昂氏的那本
UNIX?v6
源碼分析,仔細看,慢慢看,你就能體會到什么叫精致的代碼了,然后嘗試按照那個風格寫代碼。
3.
過程式語言弄久了,很難轉入
OO
的思維模式
我以前也沒有深想過這個理由,不過時間久了,發覺自己不過是把數據和方法集中在一起而已,看著方便,其實有很多不合理的東西,這里頭就需要
OO
的理論指導了,還是需要時間來體會。我相信有很多用
OO
語言的人也不過是在框架里頭添添代碼,調用來調用去而已,把人類當作數據和操作的打包器。
個人覺得只有在用過程式方法做了十來年,編碼上十萬行后才有思維定勢,難以習慣用
OO
的眼光看待系統,然而這個轉變,我仍覺得比改變一個人的惡習容易許多。
OO
方法不是學了個
Java,?Python,?C++
等就能掌握的,需要實踐,需要時間。過程式語言也容易培養一個人嚴謹的做事態度,比如用
Pascal,?C
等寫代碼,沒有
namespace,
沒有
function?overload,?
沒有
reference(Pascal
有,呵呵,我喜歡
)
,沒有
template,
沒有
exception,?
你要花很多心思處理一些細節,比如警惕數組索引越界,懸掛指針,野指針等等,請不要覺得麻煩,這個就是計算機啊,底層就是這樣的啊。
????4.
別用
C,?Pascal
了,看我用
Java,?Python,?Delphi,?VB,?VC
等輕輕松松就寫了個
PP
的
GUI,NB
的分布式應用
...
這篇文章是給初學者看的,也可以給一些浮躁的人看看(我也反省,呵呵),初學編程的人精力應該放在數據結構、算法上面,盡量多看一些底層的東西,數字邏輯,操作系統,編譯原理,計算機組成、體系結構,計算機網絡等等基礎知識。編寫
GUI
拖幾個控件有什么好吹的,你懂界面設計的原則么,你知道窗口消息怎么回事么,你編的界面是把易用放在第一位呢還是把漂亮放在第一位呢,你的
GUI
程序容易修改嗎?比如我一會要加個
button,
一會去個
listbox,
你會不會改的瘋掉呢?你是不是在
OnClick
里頭寫了大段大段的代碼,做類似“從
edit1.text
中去掉不是數字的字符,搜索
xxx
再轉成
16
進制
,
再復制到
edit2.text
”的事?
嗯,你
socket
弄得熟練,
recv
來,
send
去,可是如果你不懂
tcp/ip
協議那就有點可笑了,除了用別人做好的函數庫你還能搞出什么新花樣?弄分布式應用的知道“分布式”怎么回事嗎,
你是否只是在用
API
堆砌代碼呢?倘若有一天這個函數庫沒人支持了,你是不是就傻眼了?
比如編游戲,沒看過
3D
圖形學便搞
DirectX
,也是比較可笑的。
我并不是說你編比較高層的東西就必須先得透徹了解底層怎么實現的,我只是建議你好歹把底層的東西混個臉熟,遇到問題時心里有個譜,查查資料,別動不動撲某個論壇求救。以前在
BBS
上看到某人的話,說
BBS
不是學習的地方,是開拓眼界的地方。深以為然。
學習還是找紙版的書老實的看比較好,想想你積攢了多少電子書而又看了多少。
底層不了解,僅多也就飄在別人上頭,別人一閃身,你就得摔下來。
初學編程的人一來就
IDE,?GUI,?Network
啥的猛搞,能不浮躁么?還是沉下心來研究一下基礎知識吧,我以腦袋擔保你有生之年會覺得他們有用的(呵呵,你轉行我就沒轍了),別看著別人弄
JFC,?Socket
了你還在頭大這個
quick?sort
怎么就不對呢就心里惶惶的,你要知道在一批
API
不被支持后不少人心里空空的沒個著落:天啊,我除了那個就啥都不會了,郁悶啊,花了我那么久時間鉆研那套
API
,嗚嗚。。。。
5.?C
好難啊,我入門還是從
Java
,
Python
開始吧
首先,是自個要做程序員的嗎?是想編程還是想賺錢啊?
其次,我們來比較一下難易:
C:
k&r
那本書真的不算厚,經典的
C
的書很少,說
C
難,大概是傳說中
C
的指針很難吧,
C
的語法很簡明的,就是指針,只要你認真看看書,寫幾個程序試一試,那幾個指針的用法不難掌握,另外大家千萬不要去死鉆
*++?++*
之類的語法,關于這點在《開發高手》最后一期上
Java:?
書太多了啊,就說
Gosling(
沒拼錯吧
)
那本,相當厚,學
Java
的人一開始都被
classpath
和
package
的問題煩過吧,還有
Java
的關鍵字,語法,
Sun
鼓搗出來的一堆堆
Java
技術名詞,是不是有點暈了?
C++
的確有難度,你可以看看
C++
語言的設計和演化,就可以知道
C++
怎么這個德行了,呵呵。有意思的是
Java
現在加入模版,而且因為偽模版的實現被人詬病,還有那個
EJB
的轉變,有意思,大家可以思考一下“復雜”、“實用”這些詞。
Python
的確比較清爽,不過深入一點后其內部對象模型也不簡單,想想操作一個列表有多少方法,各種功能強大的操作符,而且現在的
OO
語言逼著你
OO,?
結果往往是語法
OO
而已,沒多大新意,我還是欣賞
Perl,?C++
這類語言,你想怎么就怎么,重要的是要用合適方法,趁手工具,最少的時間做有價值的東西,把你鉆研語言的語法的時間拿來鍛煉一下身體,泡杯茶看看小說我覺得更好一些。
語言只是表達思想的工具,不要只局限于一種語言,不要狂熱于某一門語言。
學編程時選書最好先看一看書中的代碼,是取自實際應用中的嗎?寫的漂亮嗎?(指代碼自身的精致,以及排版是否工整)代碼中有語法錯誤嗎?(鄙視某些沒編譯試試就把代碼
copy
到書里的作者)
有本
Essential?C#
,取的是
.Net
類庫的代碼,很棒,講
delegate(
希望沒拼錯,好久沒弄這個了
)
時舉的例子很清楚地讓人看到這個東西該怎么用。
另外推薦
Learning?Perl
,我個人覺得是我看過的最好的關于編程的書,該講么,不該講什么,按什么順序講,很好,也許是
Perl
的精神的感染吧,當初看這本書很有震驚的感覺,原來程序設計語言還可以這么使!爽!
斷斷續續寫了這么長,
xxx
的
xx
布,又
x
又長,呵呵,希望大家踏實一些,不要浮躁。