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

解讀Java中的“垃圾方言”(精辟。

[摘要]作者:張洪斌本文選自:開放系統(tǒng)世界——賽迪網(wǎng)2002年09月24日 中國人學(xué)電腦,多數(shù)情況下是通過看中文版的資料書來學(xué)習(xí)的。但是有過學(xué)電腦,特別是學(xué)習(xí)程序設(shè)計(jì)語言經(jīng)歷的讀者(包括本人)都會(huì)有這樣的體...
作者:張洪斌
本文選自:開放系統(tǒng)世界——賽迪網(wǎng)2002年09月24日

中國人學(xué)電腦,多數(shù)情況下是通過看中文版的資料書來學(xué)習(xí)的。但是有過學(xué)電腦,特別是學(xué)習(xí)程序設(shè)計(jì)語言經(jīng)歷的讀者(包括本人)都會(huì)有這樣的體會(huì):中文電腦書拿起來易如反掌,讀起來卻抓耳撓腮。原因之一就是書中有許多莫名其妙的中文專業(yè)術(shù)語。當(dāng)然,它們都是從英文翻譯過來的,只是翻譯得太晦澀。

在我的記憶里,第一個(gè)讓我念念不忘且深惡痛絕的中文專業(yè)術(shù)語是:“良基”,F(xiàn)在可能很少有人知道這個(gè)詞。那是在我上大學(xué)時(shí),在一門和人工智能有關(guān)的課程中,老師講解“良基關(guān)系”。所謂“良基關(guān)系”就是滿足幾個(gè)條件的關(guān)系。我明白這幾個(gè)條件的意思,當(dāng)然算學(xué)會(huì)了“良基關(guān)系”,只是不明白為什么叫“良基”不叫“燒雞”?“良基關(guān)系”好象很重要,因?yàn)槔蠋煛傲蓟绷艘粋(gè)學(xué)期。許多年過去了,我現(xiàn)在還記得它。學(xué)期末的時(shí)候,要交一篇論文。我去查了英文資料,才知道滿足那幾個(gè)條件的關(guān)系是Well-Founded(基礎(chǔ)良好),意思是設(shè)計(jì)良好、沒有矛盾的關(guān)系。

我想我的同學(xué)應(yīng)該和我一樣,初見“良基”,一定會(huì)感到莫名其妙,相信本文的讀者也有同感。因?yàn)樗皇且粋(gè)正常的中文名詞,中文字典里找不到(可能是有人捏造出來的)。

Java是純粹面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,類似的語言還有C++等。如果你已經(jīng)學(xué)過面向?qū)ο蠹夹g(shù),還記得第一次看到“對象”一詞的感覺嗎?如果你沒有學(xué)過,那么能看懂下面關(guān)于對象的解釋嗎?

“世界上是由對象組成的。例如人是對象、電腦是對象、豬是對象、泥巴也是對象......”。

上面是大意,是我第一次學(xué)習(xí)面向?qū)ο蠹夹g(shù)時(shí),一本中文書上的說法。我不明白,所以整個(gè)一本書都沒有看懂。直到我知道對象翻譯自英文的Object(物體),才慢慢學(xué)會(huì)面向?qū)ο蠹夹g(shù)。上面的說法實(shí)際上的意思是:

“世界上是由物體組成的。例如人是物體、電腦是物體、豬是物體、泥巴是物體......”。

中文“專業(yè)”垃圾術(shù)語有幾個(gè)特征。其一如“良基”,它是一個(gè)字典里和生活中聞所未聞的漢字組合:每個(gè)漢字都認(rèn)識(shí),但是拼在一起就不懂。其二如“對象”,它偏離了英文原意而導(dǎo)致誤解,完全是張冠李戴。但是這些中文莫名其妙的術(shù)語對應(yīng)的英文卻都是簡單的、生活化的英文單詞,并非很晦澀。實(shí)際上,以我閱讀英文資料的體會(huì)看,我并不認(rèn)為有多少“專業(yè)”的英文計(jì)算機(jī)術(shù)語。相反,不知道譯者出于何種原因,簡單的英文單詞翻譯成中文后,就常常變得撲朔迷離、高深莫測,所以就成了中文“專業(yè)”術(shù)語。

下面主要以Java語言為例,列出一些中文計(jì)算機(jī)“術(shù)語”和它們對應(yīng)的英文。


面向?qū)ο笈cObject-Oriented


Object-Oriented的意思是“對象為主的、對象主導(dǎo)的”,而“面向”的同義詞是“面對”,絲毫沒有主導(dǎo)的含義。此中文術(shù)語與“對象”的垃圾特征相同。

本人在業(yè)余時(shí)間去講課,我的一個(gè)學(xué)員在課上嘲笑“對象”,指出“面向?qū)ο蟆币卜巧祁。我從來沒有想到質(zhì)疑“面向?qū)ο蟆,所以突然意識(shí)到,很多垃圾已經(jīng)不知不覺成了我們學(xué)識(shí)的一部分了。

在此,我把“面向?qū)ο蟆绷袨楸疚牡念^條,以示對這位學(xué)員的感謝。


重載/重置與Overload/Override


在我上課講Overload/Override前,我總是先問這兩個(gè)單詞的中文術(shù)語是什么,應(yīng)該怎么念,結(jié)果答案還不止一個(gè)。有的說“重載= Overload”,有的說“重載=Override”。一般都把“重載”和“重置”的“重”念成“重新”的“重”。

Overload的原意是“超載”,指幾個(gè)方法的名字相同,但是方法的參數(shù)不同。本人理解其意思可能就是一個(gè)名字承擔(dān)了太多的功能,就像一個(gè)人要打幾份工伺候幾個(gè)老板一樣,活太多,有些超載了。所以,Overload應(yīng)該對應(yīng)“重載”,而“重載”的“重”是“沉重”而不是“重新”的意思。有些書把Overload翻譯為“過載”,值得贊揚(yáng)。

Override的含義和Overwrite相同,其原意是“越過”、“跳過”,即是某事情無效。它在Java中,表示子類的方法覆蓋了父類的同名方法。因此我猜測Override對應(yīng)“重置”,也許是“重新安置”的縮寫?所以,“重置”的“重”應(yīng)該是“重新”的“重”,不是“沉重”的“重”,不要與“重載”混淆了。“重置”和“良基”的垃圾特征相同,“重載”還勉強(qiáng)算個(gè)正常名詞。唉!每次我講課,都要嚼半天舌頭來解釋這兩個(gè)中文“專業(yè)”術(shù)語。


函數(shù)與Function


函數(shù)并非計(jì)算機(jī)專門術(shù)語。在中學(xué)時(shí),數(shù)學(xué)課本上就有了函數(shù)一詞。坦率地說,直到上大學(xué),才知道“函數(shù)=Function(功能)”,不過目前仍然不明白為什么叫“函數(shù)”,是音譯還是意譯?所以雖然我知道它是垃圾,卻不知道是哪一類,是“良基”的還是“對象”的,或者是某個(gè)垃圾新類型?如果說數(shù)學(xué)中的“函數(shù)”還和“數(shù)”多少有點(diǎn)關(guān)系的話,它可是和程序設(shè)計(jì)語言中的Function沒有什么字面的關(guān)聯(lián)。也許該把Function翻譯為“函碼”?

在Java中,可喜的是已經(jīng)用method(方法)取代Function一詞了,所以不必為解釋“函數(shù)”再費(fèi)口舌了。


顯式/隱式與Explict/Implicit


一看“顯式/隱式”,就知道它們和“良基”同類,也是翻遍大字典,都找不到的中文計(jì)算機(jī)術(shù)語。“顯式”譯自explict,意思是明顯地、明白的,例如語句int x= 4的結(jié)果是x被賦值4,可以很“明顯”地能夠看出x被賦初值。而x如果是類的成員,那么int x的結(jié)果是x被賦初值0。這種賦初值不太容易看出來,稱為“隱式”賦值。隱式譯自英文implicit,意思是隱含的、默認(rèn)的。


線程與Thread


“線程”譯自英文的Thread,如果查字典就知道它指“線”,比如縫衣服用的線。衣服上有縱橫交錯(cuò)的很多線,好象程序的流程圖一樣,所以,Thread在英文中比喻程序執(zhí)行的線路。例如,判斷語句如果真,就走流程圖的這條“線”,如果為假,那么就走另外一條“線”。因此Multi-Threads指得就是程序在運(yùn)行時(shí),有幾條“線”上的代碼同時(shí)在運(yùn)行。而非多線程的程序在流程圖上只能有一條線上的代碼在運(yùn)行:一段代碼沒有執(zhí)行完,絕對不許執(zhí)行另外的代碼。順便補(bǔ)充一句,以上的“說文解字”是作者自己的猜測(因此也是原創(chuàng))。猜測得對不對不知道,但是比喻卻與Thread在程序設(shè)計(jì)中的含義完全吻合?梢,“線程”的垃圾特征與“良基”相同。


數(shù)據(jù)報(bào)文與Datagram


UDP (User Datagram Protocol) 發(fā)送的數(shù)據(jù)稱為Datagram。gram是表示重量的“克”,克在實(shí)際生活中是很小的重量單位,所以Datagram表示UDP發(fā)送接收數(shù)據(jù)的基本單位。每個(gè)Datagram獨(dú)立發(fā)送,彼此沒有關(guān)聯(lián),因此速度快,但是不可靠,所謂“欲速而不達(dá)”。

Datagram好象被某些書翻譯成“數(shù)據(jù)報(bào)文”,猛一看還以為和拍電報(bào)有什么瓜葛呢,這就是作者第一次看到這個(gè)中文“術(shù)語”時(shí)的感覺。

套接字與Socket


網(wǎng)絡(luò)中的一個(gè)著名中文術(shù)語是“套接字”,這是個(gè)什么“字”?恐怕連第一個(gè)造這個(gè)“字”的人都不知道。

這個(gè)“字”譯自英文的Socket,其原意是插座、插孔的意思。當(dāng)兩臺(tái)電腦通過網(wǎng)絡(luò)、電纜或者電話線等建立連接,可以互相通訊后,可以想象連接線是插在每個(gè)電腦的Socket中,盡管實(shí)際上電腦上并沒有這樣的物理部件。Socket是一種形象的比喻,可看作是實(shí)現(xiàn)電腦之間通訊的程序或者方法,和任何“字”都沒有關(guān)系。


令牌與Token


Token的原意是“標(biāo)記、記號、標(biāo)志”。Token在Java的StreamTokenize中大體指流中有意義的內(nèi)容,例如一個(gè)字母、一個(gè)數(shù)字都是一個(gè)Token,但是空格、回車則不是Token。

Token常常被翻譯成“令牌”,例如所謂的“令牌網(wǎng)”。這聽起來像古代打仗時(shí)下達(dá)作戰(zhàn)命令的“令牌”,此中文與Token的原意有幾成相似?


文件/正文/文檔/歸檔與File/Text/Document/Archive


無論中文還是英文,這些術(shù)語都是很容易混淆的。

依我的理解,F(xiàn)ile是“文件”,泛指計(jì)算機(jī)中存儲(chǔ)的信息或者數(shù)據(jù)。

Text指文件的內(nèi)容,通常是可以理解的字符,常常翻譯為“正文”,但是我不知道“偏文”或者“非正文”是什么。例如本文的內(nèi)容就是Text。而Text文件屬于文件的一種,指其內(nèi)容大體是可見的字符,沒有格式化的信息。

Document大概被翻譯為“文檔”,它應(yīng)該算File的一種,常用來說明什么,例如說明書就是Document。這個(gè)詞在HTML有關(guān)的內(nèi)容中出現(xiàn)的比較多,例如“HTML文檔”、“XML文檔”等。

Archive的原意是“檔案”,含義是有關(guān)某個(gè)主題、項(xiàng)目的一系列文件,例如中國每個(gè)人都有一份人事檔案,這一份檔案中有不止一份File或者Document。Java中有jar程序,用于壓縮文件(一個(gè)或者多個(gè)),我想它應(yīng)該是Java Archieve的縮寫。我看到有的書把Archieve翻譯為“歸檔”,可是“歸檔”聽起來像動(dòng)詞,例如,“我有一份歸檔”是什么意思?

在寫到這里時(shí),正好聽到電視里的一個(gè)藥廠廣告,廣告詞堅(jiān)定而莊重:關(guān)注生命,健康人類。瞧,它把“健康”當(dāng)動(dòng)詞用了,跟“歸檔”可謂半斤八兩。


應(yīng)用/實(shí)現(xiàn)與Appliaction/Implementation


這兩個(gè)詞的翻譯比前面的“歸檔”稍好,但是仍然搞錯(cuò)了詞性!皯(yīng)用”和“實(shí)現(xiàn)”在正常的漢語中是動(dòng)詞,可是在電腦書中常常當(dāng)名詞。例如“本協(xié)議有了不少實(shí)現(xiàn)和應(yīng)用”,是很多電腦書(特別是翻譯書)的說法,聽起來不太像中國話。正常的語句應(yīng)該是“本協(xié)議有了不少實(shí)現(xiàn)方法和實(shí)際應(yīng)用的例子”。


總線與Bus


剛學(xué)計(jì)算機(jī)時(shí)就聽說電腦有“總線”技術(shù),但是老師和課本一直避而不談“支線”在哪,直到看到Bus一詞,才明白“支線”技術(shù)還沒被發(fā)明出來。


反省、內(nèi)省與Introspector


Introspector的原意是“向內(nèi)看、觀察和分析內(nèi)部”,在Java中,它指分析一個(gè)類例如JavaBean的內(nèi)部情況,了解其中有哪些屬性、方法和事件。我看到的譯文有“反省”和“內(nèi)省”,聽起來像干了壞事做檢討一樣。


定制與Customization


“定制”是個(gè)著名的中文計(jì)算機(jī)術(shù)語,幾乎出現(xiàn)在每本電腦書中!岸ㄖ啤弊g自Customization,而與該英文詞相關(guān)的單詞為Customer(顧客、用戶)。定制某個(gè)東西就是按照用戶的要求進(jìn)行設(shè)計(jì),而不是采用一般的或者標(biāo)準(zhǔn)的方法,其實(shí)就是“定做”的意思。例如您在裁縫店定做一套西裝就是Customization。因?yàn)檫@套衣服是按照您的身材和喜好設(shè)計(jì)制作的,而到商場買一套就不是Customization。

也許我文化水平有限,當(dāng)?shù)谝淮慰吹街形摹岸ㄖ啤睍r(shí),不知道它的意思就是“定做”。但是我現(xiàn)在還是認(rèn)為,“定做”比“定制”更通俗、更容易理解。也許這就是為什么大家非要“定制”不要“定做”的原因:不把名詞故意弄得莫名其妙,怎么體現(xiàn)出IT技術(shù)的高深呢?


子句與Clause


SQL語句中的Where、From部分被稱為“子句”,它的英文為Clause。英文語法書稱Clause為“從句”,例如以If開始的“條件從句”等,表示從句是組成完整語句的一部分。應(yīng)該說,“子句”這個(gè)中文術(shù)語翻譯得不錯(cuò),可是中學(xué)學(xué)英語時(shí)就知道了“從句”,為什么到了電腦領(lǐng)域,非要改個(gè)名字叫“子句”?


公開/私有密鑰與Public/Private Key


記得在大學(xué)學(xué)密碼學(xué)時(shí),就知道了“公開密鑰”一詞,當(dāng)時(shí)感覺字面上似乎很矛盾,既已“公開”、“密”又在哪里?而“私有密鑰”似乎有點(diǎn)羅嗦,既然是“密”,當(dāng)然就“私有”了。

幾乎所有密碼學(xué)的著作都把Key翻譯成“密鑰”,但是Key沒有“密”的含義,是“密鑰”的始作俑者強(qiáng)行加了“密”,可能是為了顯示密碼學(xué)的深?yuàn)W吧。


會(huì)話與Session


術(shù)語Session的英文原意是“聚會(huì)”或者“開會(huì)”。如果某個(gè)瀏覽器在一段時(shí)間中持續(xù)訪問服務(wù)器,那么這種情況被稱為Session,就好像瀏覽器和服務(wù)器在聚會(huì)一樣。大致可認(rèn)為,只要瀏覽器不關(guān)閉,那么就一直是同一個(gè)Session,就像不散會(huì),總是在開同一個(gè)會(huì)一樣。關(guān)閉瀏覽器相當(dāng)于散會(huì),再次啟動(dòng)瀏覽器相當(dāng)于開始一次新的會(huì)議。

一些中文書將Session翻譯成“會(huì)話”或者“對話”,例如所謂的“會(huì)話Bean”(Session Bean),是否以為開會(huì)就是講話?


表單與Form


中文“表單”譯自英文的Form。從字面上看,中文的“表單”好象既指Form,還指Table,其實(shí)Form的樣子和Table根本不同。后者是“表”,就像數(shù)據(jù)庫的Table一樣,是田字型的表格,而Form是調(diào)查表、申請表之類的東西,遠(yuǎn)遠(yuǎn)沒有Table那樣規(guī)則。


流與Stream


記得在大學(xué)時(shí)就知道了“流”是關(guān)于I/O的,只是不明白為什么是一個(gè)字的“流”,老感到“流”是不是比I/O更高級?

流譯自Stream,原意是水流。輸入和輸出實(shí)際上是數(shù)據(jù)的運(yùn)動(dòng)。數(shù)據(jù)從一個(gè)地方運(yùn)動(dòng)到另外一個(gè)地方就像水的流動(dòng)一樣,也許這就是流Stream這個(gè)術(shù)語名字的來源吧。

應(yīng)該說“流”是很好的譯文,只是我的大學(xué)老師沒有給我講“流=Stream”,或者是我上課走了神沒聽到,反正本人很久以后才明白,多少時(shí)光已經(jīng)無情地“流”逝了。

計(jì)算機(jī)中如“對象、套接字”之類的中文“垃圾方言”不少。由于本人對中文電腦書通常是“懼而遠(yuǎn)之”,所以了解的中文垃圾方言較少,受害較淺。我想垃圾術(shù)語一定不止本文列出的這十幾個(gè)。如果哪位讀者是“重傷員”,不得不常常與很多垃圾術(shù)語搏斗,不妨就為本文寫個(gè)續(xù)吧。

(責(zé)任編輯 Sunny)