當前位置:成語大全網 - 新華字典 - 學編程的要求有哪些?

學編程的要求有哪些?

俗話說,沒有金剛鉆,就別攬瓷器活兒。套用到

IT

業,英語不行,就別做程序員。網上關

於程序員學英語的文章不少,

但我想談談我自己的看法。

首先詳細討論壹下為什麽程序員離

了英語不行,然後針對程序員應該怎麽學英語說說我的體會。

英語是計算機的母語,是程序的母語,所以必然是程序員的母語。

程序中的變量名、函數名

起得好不好是決定代碼質量和可維護性的最關鍵因素。

高質量的代碼應該是這樣的:

代碼基

本上是自解釋的(

self-explanatory

),不需要太多註釋,不管代碼的規模有多大,具有相

關知識背景的讀過文檔的人都可以立刻上手、

立刻參與維護和開發。

要想使代碼能夠自解釋,

給變量和函數起個好名字很關鍵,

很顯然,

只能用英文起名字,

壹是用漢語拼音起名字可讀

性很差,二是英文單詞通常比漢語更

expressive

(看吧,如果用漢語來說,就得說“表達

能力更強”、“更有表現力”這麽羅嗦)

,由於程序的復雜性,變量和函數往往表示壹些很

抽象的概念,

起個既準確又簡潔的名字並不容易,

可是很多時候,

用漢語需要很多字才能說

清楚的壹件事,用英文壹個單詞再加點詞形變化就能說清楚了。例如

APUE

上講

sleep

函數

的實現,

其中有個變量表示“本來應該睡到某個時刻,

但是提前被信號喚醒了,

喚醒時與本

來應該睡到的時刻相差的時間”,

如果為了簡潔而不求準確,

這個變量名至少也得叫“未睡

到”,而書中只用了壹個單詞

unslept

,非常準確、簡潔地表達了這個意思。為了寫程序而

學英語需要學到什麽水平?我認為能起出這種變量名就夠水平了。很多在

IT

外企工作的中

國人,說話寫文章經常夾雜著英文單詞(比我嚴重多了因為我不在外企),非常可以理解,

確實是為了表達得更準確簡潔的需要,而不是純為了

play

zhuangbility

。總之,要寫程序

必須學好英語,

否則連變量名都起不好,

這雖然是壹個非技術問題,但卻是個根本問題,比

任何技術問題都重要。當然,現在很多編程語言也支持用

Unicode

字符給變量和函數起名,

但是妳見過有人用漢字寫程序嗎?根本不實用。

有人會辯駁說壹頁英文翻譯成中文往往只占

半頁,中文不是更簡潔嗎?但是妳算算打壹頁英文和打半頁中文哪個敲鍵盤次數多。另外,

要讀別人的代碼也必須學好英語,如果妳不知道

unslept

是由

sleep

變形而來的,就體會

不到其中的精妙,

只有大量閱讀高質量的代碼,

才能寫出高質量的代碼,

創作都是從模仿開

始的。

說說英語對於看書學習的重要性。

中文技術書和英文技術書的水平根本不在壹個量級上,

是有很多原因的,

不能全歸結於中文書的作者水平差。

最重要的是,

出中文書的低回報率決

定了作者不可能花太多心血在上面,妳去

amazon

看看壹本書賣多少美刀,再去

chinapub

看看壹本書賣幾塊錢。

老外寫壹本書,

可以做到全書沒有壹個拼寫錯誤

(當然英文的拼寫檢

查工具更完善也是部分原因),中文能找出壹本沒有錯別字的書嗎?

Knuth

可以懸賞讓全世

界讀者來找磋,

中文書作者有哪個敢這麽做?不是因為老外態度有多認真治學有多嚴謹,

是因為他們賺到了,就應該拿出高質量的作品來,不然會被讀者罵的。

英文技術書的翻譯質量通常很差。

也不能歸結於譯者的水平差,

我也翻譯過書,

也努力想譯

好,但真的很難譯好。

IT

業的新名詞層出不窮,像“內核”、“網絡”這種常見術語還好,

稍微專壹點的術語都沒有統壹的譯名。

我們在教學中發現,

很多學員看書時搞不清這本書的

名詞

A

和那本書的名詞

B

是什麽區別,

來問老師,

才發現原來

A

B

就是壹回事兒。

這是壹

個單詞對應多個譯名的情況,

還有壹個譯名對應多個單詞的情況,

比如

field

domain

realm

都譯成“域”,

block

bulk

都譯成“塊”,

argument

parameter

都譯成“參數”,

attribute

property

都譯成“屬性”,雖然這些詞的意思本來就差不多,但是在壹篇文章

裏,作者可以換著用,不同的單詞表示不同的概念,翻譯完了壹看,都成壹個概念了。英文

書背後都有

index

,看到壹半忘了某個名詞是怎麽定義的就可以翻

index

,而譯文通常沒有

index

,名詞都已經亂七八糟了,沒法做

index

。還有更發指的是,老外喜歡造詞,現有的

單詞上加壹點變化和組合(例如有人喜歡說

automagically

),看著心領神會,想譯出來就

很費勁。

老外即使在技術書中也經常用壹些生動的表達方式和俏皮話,

而中文的書面語言非

常死板,

生動的表達方式只存在於口語中,

如果寫在書上就很不像話,

這也是很難翻譯的壹

個重要原因。看中文譯本,不僅質量差,而且跟不上時代,通常壹本英文書出來,至少要等

壹到兩年才能看到中文譯本。

兩年啊!

等妳看到這本書的中文譯本時,

這個版本都快淘汰了。

然後說說英語在開發工作中的重要性。

看書學習通常只起壹個引導入門的作用,

在工作中更

有用的是手冊、文檔。學完了

C

語言開始寫程序了,誰還會去查

K&R

附錄中的庫函數?查

man page

才是最有效率的。然而手冊比入門書更少有中文譯版,因為手冊是隨時變的,會

隨著軟件版本更新,

而且需要看這些開發手冊的人通常不會有英文障礙,

有英文障礙的人即

使看了翻譯的手冊也寫不出好程序來,

所以當然沒必要翻譯了。

不管什麽技術,

官方的手冊

和技術標準才是最原始的第壹手資料,

看別的書都是以訛傳訛,

由於自然語言不可避免是有

歧義的,

文檔中表達得不準確的地方就會被文檔的讀者也就是技術書的作者誤解,

技術書中

再有表達不準確的地方又被譯者誤解。

我們小時候都玩過傳話的遊戲,

幾個人站壹排,

通過

悄悄話傳壹句話,傳到最後變成什麽了?所以,學網絡協議,就得看

RFC

,學

ARM

,就得看

ARM

公司的

Architecture Reference Manual

,要學習

C

語言就得看

C99

,有歧義不要緊,

自己去揣測原作者的意思,總比道聽途說的可靠。

我們的學員出去面試經常被問到的壹個問題就是:

在開發工作中遇到問題,

書和文檔上都沒

有答案,網上搜壹下也沒有答案,怎麽辦?要我說,能看懂源代碼的就去源代碼中找答案,

這稱為

hacking

,不管是內核、

libc

還是各種

framework

,妳調用的東西有問題都能從它的

代碼中找到原因。如果沒有能力

hacking

,或者時間緊不想去

hacking

,最好的辦法就是去

官方郵件列表和

IRC

問。

如果英文不行就沒辦法了,

只能去壹些中文論壇:

“各位大蝦幫忙,

小弟有壹個問題求救!

跪求!

在線等!

”在線等了好幾天也無人問津,

或者答非所問。

豈不知逛這些論壇的沒有大蝦,都是菜鳥,大蝦們都在

IRC

上聊得正歡呢。我在做

Qt

開發

時曾經有壹個問題,

當時在教育網,

上國外網不方便,

去各大中文論壇問了好幾天也沒人給

出滿意的回答,後來花錢連了國外網,去

trolltech

官方新聞組提問,只等了幾分鐘就得

到了滿意的解決辦法。這次經歷給我留下了深刻印象,從此以後再也沒有去中文論壇。

那麽,

如果現在英文水平很差,

又想做程序員,

應該怎麽學英語呢?我下面說的方法有兩個

前提,

壹是妳的英文至少達到高中畢業水平,

也就是語法基本都學完了,

即使用得不熟練也

知道有那麽回事兒,二是妳希望盡快在工作中用上英語,寫程序夠用就行,而不是有考

T

G

這樣的更高要求。

學習英語有聽說讀寫四個方面的要求,

做程序員至少需要讀和寫非常流暢,

如果在外企工作

還需要聽和說的能力。技術英語和考

T

G

是不壹樣的,壹是聽和說不像讀和寫那麽重要,

不必擔心自己是“聾啞英語”,

沒關系,

絲毫不影響妳成為編程高手,

二是要求的詞匯量要

小得多。

T

G

都要拿壹本單詞書背,

很少有人會覺得背單詞很有意思,

至少我是覺得很

痛苦,

幸運的是看技術書不需要多少詞匯量。

技術書的描述對象都是局限於壹個很窄的領域

的,

就那麽幾個單詞翻來覆去地用,

而且技術書是為了讓人看懂的

(不像詩是為了讓人看不

懂的)

,比較復雜的詞在書中都有定義或解釋。有些作者喜歡賣弄詞匯量,

用壹些很生僻的

單詞,也有些作者賣弄壹些典故,由於文化背景不同很難理解,不過這些通常都可以無視,

不會影響閱讀,

還是因為技術書是為了讓人看懂的。

對於學習者來說,

閱讀能力是最重要的,

等妳完成了學習,成為壹個合格的開發者時,

需要寫代碼註釋,需要寫文檔,需要通過郵件

交流,寫作的能力才開始重要了。所以應該首先從閱讀開始練習英語。

現在就拿起壹本英文原版書開始看吧。

和學遊泳壹樣,

閱讀的能力只能通過閱讀本身來練習。

我的經驗是,

不必先系統學習了單詞和語法再看書,

可以在看書時用到什麽就補什麽。

我建

議初學者看電子版,

因為現在的詞典軟件都可以鼠標取詞,

邊看邊查很方便,

很多勤快人喜

歡把查過的單詞都抄下來,我覺得沒有必要,

反正查字典很方便,

下次再看到了就再查,多

查幾次總會記住的,

抄下來就打斷了看書的思路,

而且不見得抄下來就能記住。

也許是因為

我這人比較懶,

我用的都是懶辦法。

很多人不喜歡看電子書,

理由是盯著屏幕看書太累,那

麽盯著屏幕寫程序累不累?這種人顯然不適合做程序員。

語法不熟練怎麽辦?大多數情況下

單詞的意思都明白了就不影響閱讀。

技術書有時候喜歡用長句,

其中可能包含各種從句,

果實在讀不懂就去查語法書,

同樣也不需要把這種從句徹底弄明白,

只要這壹句能看過去就

行了,以後多查幾遍書,自然就掌握了。另外,技術書是說明文,通常不應該有過去時,看

到過去時就需要註意了,

很可能是虛擬語氣,

如果不註意這壹點,

看到的意思可能和真實的

意思正好相反。

應該從哪本書開始看起呢?從妳當前最需要學的技術書看起。

看書是相當花時間的,

如果能

壹邊學英語壹邊學技術,

這時間利用得就很有效率。

比如,

如果妳的

C

語言已經學得相當好

了,不要專門為了學英語去重看壹遍原版的

K&R

。市面上有壹些專門的計算機英語教材,我

的建議是不要看,浪費時間,

nonsense

初學時最好選壹本有中文譯本的書,有看不懂的地

方可以翻中文版來對照,

但是不要相信中文的翻譯,

原因在前面討論過了。

如果妳是初學編

程,沒有任何基礎,我可以推薦壹本英文很淺顯技術也很淺顯的書:

How To Think Like a

Computer Scientist

,有

Python

Java

C++

版本,可自由下載。

要逐漸養成良好的閱讀習慣。

壹是不要每個生單詞都去查,

有些單詞很生僻,

查了也記不住,

記住了也不會再見到它了,

但是前面講過,

都是作者在賣弄詞匯量,

無視它絲毫不影響閱讀,

因此要學會猜測單詞的意思,能不查就不查,繼續貫徹“懶”的原則。二是看書不要動口,

不念出聲也不行,

就是不要動口,

要努力在大腦中建立從詞形到語義的直接映射,

如果只能

從詞形到讀音再到語義就太慢了,

嚴重影響閱讀速度。

三是努力做到每句話都從頭到尾只看

壹遍,

不許回頭反復看,

這壹點比較難,

必須註意力高度集中,經常在記憶中暫存前面半句

的內容和句式才能做到,

但是壹旦神功練成就會成倍地提高閱讀速度。

最後壹層境界,

學會

skim

就是略讀,

很多優秀的作者在組織材料時會給讀者壹些建議,

比如這壹段是擴展的高

級話題,和主線的相關度較低,

可以先

skim

到後面,註意不是讓妳

skip

到後面,這壹段還

是要讀的,

但是不必逐字句地讀,

而是抓主旨,

大概講了個什麽概念

(有壹些下定義的句式)

有哪些要點

(有數字編號或

bullet

列表項)

適用於哪些場合有哪些註意事項

(有

caveat

gotcha

noteworthy

這種字眼),後面可能還會碰到這個概念,雖然妳沒有仔細看這是個

什麽東西,

但大體上也知道了,

這樣就能不影響後面的閱讀,

這不僅需要高度集中的註意力、

熟練的語言能力,

而且要有足夠的背景知識去猜測性地理解。

但是語言能力還是最重要的因

素,我和幾個同學交流過,他們也能熟練地看英文書,但是需要

skim

查壹個東西時就覺得

還是不如中文書查得快。

skim

的技能在查閱手冊時尤其重要,沒有人會像看入門書壹樣把

上千頁的手冊從頭到尾看壹遍,

都是用到哪兒就查哪兒。

總之,

鍛煉各種閱讀習慣就為了壹

個目的:如何在最短的時間內,

在保證正確性的前提下,

獲取盡可能多的知識。程序員的學

習時間都是非常寶貴的。

以上本著“夠用就好”的原則,

多次提到用懶辦法,

但是學技術學英語這兩件事不能懶,

在堅持。

要養成良好的閱讀習慣也有很多東西需要堅持,

其中最根本的是持續高度集中註意

力,充分調動記憶能力、推理能力、猜測能力,就像考試做閱讀題壹樣看每壹段話。最根本

也是最重要的,

“有英文原版就不看中文版”這個原則壹定要堅持。

壹開始看英文書可能會

很慢,

但只要壹直堅持就會慢慢達到原來看中文書的速度,

再堅持下去就會比中文書看得更

有效率,因為避免了很多歧義和術語翻譯的問題。

有人會說,

項目緊任務急,看英文資料太

慢,

這次就先用中文盡快解決工作中的問題吧,

等以後有時間了再看英文書學習。

可是什麽

時候才會有時間呢?工作總是壹個接壹個的,

老板怎麽會付了工資讓妳閑著呢?如果妳有這

樣的困難,

我的建議是幹脆辭職,學好了英文再去工作。

妳只要想想,

妳的同行們在外企全

英文的環境下工作,

英文和技術每天都在突飛猛進,

而妳還在用效率極其低下的方式學習和

工作,

妳和別人的差距不是越來越大了嗎?另壹方面,

現在的在校學生從小學就開始抓英語,

基礎都很好,

很多高校也逐漸重視引進原版教材,

開設很多英文授課的專業課。

妳再不奮起

直追,就不覺得以後的職業道路充滿危機嗎?

最後說說寫作。

剛開始練習時不要怕寫錯,

能表達清楚自己的意思即可。

我看過很多源代碼

和文檔中的英文,壹看就是中國人寫的,謂語動詞不分單復數,名詞復數不加

s

,處處可見

中國式英語,

但是絲毫不影響我對這些編程大牛的景仰,

因為其中的思想我看懂了,

並且我

認為很強大。我有壹個朋友,中學畢業就出來混的,由於工作的性質總要跟老外打交道,他

從來不懼和老外交流,

雖然連壹個囫圇的句子都說不出來,

但總是能用中學學的那點單詞讓

老外明白他的意思,

這壹點我就非常佩服。

總之就是說,

不要因為不知道怎麽寫是對的就不

敢動筆寫,

只要敢交流,

並且別人能懂妳的意思,

就是很有效的交流。

而且隨著閱讀量的增

加,自然能寫出壹手好英文,前面講過了,創作總是從模仿開始的。不怕出錯才能有壹個好

的開始,

才能逐步練習提高,

而練習的最終目的當然還是希望寫好,

不僅字句通順無語法錯

誤,還能適當修辭。