明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

給大家潑點(diǎn)涼水:對(duì)于Java的一些看法

[摘要]發(fā)信人: Nullgate (民工空門·道·自由), 信區(qū): Java標(biāo) 題: 關(guān)于Java的一些牢騷 發(fā)信站: BBS 水木清華站 (Sat Feb 17 01:06:11 2001) Java現(xiàn)在熱的不得了,似乎是個(gè)人都在學(xué)。網(wǎng)站也動(dòng)不動(dòng)就說jsp,servlet, ej...
發(fā)信人: Nullgate (民工空門·道·自由), 信區(qū): Java
標(biāo) 題: 關(guān)于Java的一些牢騷
發(fā)信站: BBS 水木清華站 (Sat Feb 17 01:06:11 2001)

Java現(xiàn)在熱的不得了,似乎是個(gè)人都在學(xué)。網(wǎng)站也動(dòng)不動(dòng)就說jsp,servlet,
ejb。
我也見過不少需要java的公司的小頭目(項(xiàng)目經(jīng)理一級(jí)吧),他們卻抱怨缺
乏java的人才。以前我以為只是懂perl的少,畢竟摸過perl的不多,所以不太理解。
現(xiàn)在我算是明白了,很多人學(xué)java不是把他當(dāng)作一門語言來學(xué)的。寫applet的就只
知道如何畫圖,寫jsp的把jsp當(dāng)asp用,在程序中用過數(shù)據(jù)庫就算是懂?dāng)?shù)據(jù)庫。

Java是一種計(jì)算機(jī)語言。我覺得不懂計(jì)算機(jī)就去掌握一種計(jì)算機(jī)語言是不可思議的。
你首先得了解世界,才能用語言去描述這個(gè)世界。對(duì)于盲人來說,顏色永遠(yuǎn)只是個(gè)
抽象概念。我很理解那些搞不清tcp和http的jsp程序員,因?yàn)樗麄兛赡苡肋h(yuǎn)不會(huì)遇到
“裸露”的tcp連接。他們也不需要了解垃圾回收和互斥,因?yàn)閔ttp基本都是短連接。
或許他們活得很實(shí)在,但是我絕對(duì)不會(huì)認(rèn)為這些人“懂”Java。

當(dāng)初剛學(xué)Java的時(shí)候,我覺得它的語法和C++別無二致。那時(shí)候我精通C++的
語法規(guī)則,繼承規(guī)則,重載、超載、虛函數(shù)、內(nèi)存管理的語法,然而我完全不明白
OO,完全不懂TCP/IP,完全不明白操作系統(tǒng)。那時(shí)候我覺得自己是個(gè)天才,自以為
在半年內(nèi)學(xué)會(huì)了C++。很可惜,懂語法規(guī)則并不等于懂計(jì)算機(jī)語言。我現(xiàn)在對(duì)tcp/ip,
sql,操作系統(tǒng)和面相對(duì)象有一些膚淺的認(rèn)識(shí),回過頭去看過去,發(fā)現(xiàn)自己整一個(gè)傻冒。

算法雖然不是語言的一部分,但是不懂算法的人,怎么可能寫程序呢?算法在很
大程度上與語言無關(guān),然而卻是一個(gè)程序員的基本素養(yǎng)。很難想象,只知道窮舉的人
能寫出什么高效率的東西,雖然在很多情況下窮舉是最優(yōu)算法。我的說法并不嚴(yán)謹(jǐn),
并不是說一個(gè)程序員非得能憑空想出快速排序才叫程序員。我只是想強(qiáng)調(diào)對(duì)算法的
知識(shí)是很有必要的。

面向?qū)ο蟮木幊谭椒ㄔ诤艽蟪潭壬鲜且环N革命,與面向過程的編程相比,面相對(duì)象
的編程與語言的有很大關(guān)系。拿C++或者SmallTalk寫出來的東西區(qū)別很大。但是面向
對(duì)象的精髓卻是一致的。Java就是一種專門為面相對(duì)象編程而設(shè)計(jì)的語言,所以,我認(rèn)
為不懂OO的人根本不可能懂java(等他懂Java的時(shí)候,自然明白什么是OO :-D)。

雖然很多人說學(xué)習(xí)Java不需要任何C++/C的經(jīng)驗(yàn),甚至可以把它作為第一門
語言來學(xué)習(xí)。我也很同意,但是不要以為找?guī)妆綣ava書就可以從一個(gè)菜鳥變成
大蝦。Java只是一種語言,只是一種工具,你不可能指望從Java的教材中精通
數(shù)據(jù)庫,了解TCP/IP細(xì)節(jié)。當(dāng)然,你肯定可以通過Java學(xué)會(huì)OOP。Java是跨平臺(tái)的,
但是不等于你可以完全不了解平臺(tái),否則你可能連簡單的rpm -i都不懂(不懂
沒關(guān)系,因?yàn)椴灰欢ǚ堑糜肔inux),你至少得學(xué)會(huì)安裝它。

如果你希望我開一個(gè)與Java無關(guān)的單子,我會(huì)列出:計(jì)算機(jī)體系結(jié)構(gòu)、
匯編語言、SQL和數(shù)據(jù)庫知識(shí)(不是Oracle的手冊(cè)!我說的是基礎(chǔ))、計(jì)算機(jī)
網(wǎng)絡(luò)(比如同名教材)。如果有時(shí)間,可以看看操作系統(tǒng),只是簡單的了解,
至少你應(yīng)該看看五個(gè)哲學(xué)家的問題。如果窮極無聊,我推薦你看看應(yīng)用密碼學(xué)。
事實(shí)上,計(jì)算機(jī)科學(xué)在很大程度上是數(shù)學(xué),離散數(shù)學(xué)、形式邏輯、拓?fù)鋵W(xué),
相關(guān)的知識(shí)很有幫助。

不要被我的清單嚇跑,羅馬從來就不是一天以內(nèi)建好的。如果你是計(jì)算機(jī)
或者電子系的學(xué)生,上面的大部分東西都是必修課或選修課,你只需要理解教材,
成績根本不重要。如果你完全沒有計(jì)算機(jī)基礎(chǔ)(我是說系統(tǒng)的學(xué)習(xí)),你得學(xué)習(xí)
很多枯燥的理論知識(shí),但是那絕對(duì)值得。我個(gè)人比較羨慕計(jì)算機(jī)系的學(xué)生,呵呵。

事實(shí)上語言是觸類旁通的,只要你精通任何一門語言,你可以很快地
掌握另外一門語言。所以沒必要猶豫不絕,學(xué)習(xí)C++并不妨害你精通Java。
我只是覺得語言只是一種工具,不要被工具所羈絆——雖然這正是sun的險(xiǎn)
惡用心。我只想說明,只有大量的實(shí)際編程才能真正使你掌握一門語言。
所以,如果你的項(xiàng)目是C++,沒必要花時(shí)間學(xué)習(xí)Java,當(dāng)你精通了C++,你
會(huì)發(fā)現(xiàn)Java很easy。如果你有選擇的余地,我強(qiáng)烈建議Java,用執(zhí)行效率
換開發(fā)效率是非常劃算的。

我并不認(rèn)為寫程序是一門藝術(shù),至少寫代碼不是。如果你打算一輩子
做代碼生成器,也許只有等到程序機(jī)器人出現(xiàn),你才會(huì)后悔。很多勞動(dòng),
尤其是做網(wǎng)站,都是簡單重復(fù)腦力勞動(dòng),對(duì)你的學(xué)習(xí)沒有太大的幫助。如果
你只是為了掙點(diǎn)零花錢,也沒什么好說的。

最后我想說明一點(diǎn),我并不是什么大牛,也不精通Java,事實(shí)上我前幾天
才明白wait是做什么的。我學(xué)習(xí)Java的時(shí)間不到半年,我自認(rèn)為了解OOP的時(shí)間
和這一樣。我在上面開出的單子我自己也不怎么了解,我甚至沒有系統(tǒng)地學(xué)習(xí)
離散數(shù)學(xué)。但是我覺得這并不妨礙我闡述真理。
說了半天,基本上沒有說到Java,不好意思。
拜托,我只是個(gè)民工。

--
大部分人的簽名檔都是寫給別人看的,不過這次我卻寫給我自己看

●執(zhí)著有時(shí)是一種美德,但是它通常使人變得盲目
▲在注重結(jié)果的時(shí)候很容易忽略過程,在嘲笑日本
游客的旅游方式時(shí),卻沒有看到自己也常常這樣
◆沒有必要和時(shí)間賽跑,靜下心來思考反而省時(shí)間