以英語為母語的人寫代碼時是什麼感覺?
// 贊我幹嘛贊 Brian 去呀。
@Brian 回答的翻譯:
我從 12 歲起自學編程,那時候對我來說,編程並不比解讀一門熟悉的語言難多少。我最早是嘗試修改我的 TI-83 計算器上一個遊戲的源代碼。那段代碼是 TI-BASIC,看起來就像這樣:PROGRAM:HELLOWORLD
:ClrHome
:Disp "HELLO, WORLD!"
即使那時我並沒有多少編程經驗,我也不用去查 TI-BASIC 中的這些關鍵字,因為這些關鍵字,顯而易見,幾乎就是英文:
- Disp 就是 "display",顯示
- ClrHome 就是 "clear the home screen",清屏
- Lbl 就是 "label",標籤
- Goto 就是 "go to",跳轉
(對於母語並非英語的人來說,我可難以想像自學這些關鍵字有多難。)
當我學習新語言的時候(如 C/C++,Java,C#,Python,JavaScript),我開始充分利用網上的文檔和庫。網上有非常豐富的資源,包括 API、庫、開源項目等,不過它們幾乎全部都是英文寫成的。對我來說,英文的資源簡直就是理所應當,以至於我甚至難以想像如果代碼或文檔用別的語言寫會是什麼模樣。
隨著編程經驗的積累,我開始改進代碼的寫法(正如《代碼簡潔之道》指導的那樣)。這之中的一項改進就是,使用更長、更具描述性的變數名與函數名。
為了可讀性,我開始把諸如這樣的邏輯判斷語句:
if (a !== null a !== undefined)
替換成這樣:
if (accelerationRate.isValid())
第二個 if 語句實際上就是一句符合英文語法的句子,這就使得從英語的角度閱讀代碼更流暢(儘管對於其他人來說也許就顯得更冗長)。
當我在中國留學時才意識到作為英語母語者編程的優勢。當我發現班裡使用的術語不是英文的直譯就是英文的原詞時,我非常驚訝。我也意識到我在班裡沒有遇到過從小就開始編程的人,就是因為他們受制於語言障礙。
掌握英文,就是掌握整個編程社區的共通語言。教程是英文的,SO 是英文的,文檔以及 GitHub 上的代碼注釋也是英文的。和編程有關的內容基本上都是英文寫成,然後再翻譯成其它語言的。
對我來說,英文就像是程序開發最前線的語言。如果不會英文的話,就會埋沒在那些更早起步、作出更大貢獻的程序員的陰影之中。
福利:代碼簡潔之道,http://www.e-reading-lib.org/bookreader.php/134601/Clean_Code_-_A_Handbook_of_Agile_Software_Craftsmanship.pdf(中文翻譯: http://zhi.hu/TkLA. Thank you @yukirock and @陳樹義 for your awesome translations!)
I taught myself how to code when I was 12, and at the time, it felt like nothing more than deciphering a familiar language. My first attempt at programming was editing the source code of a game on my TI-83 calculator. The code was TI-BASIC, which looks like,PROGRAM:HELLOWORLD
:ClrHome
:Disp "HELLO, WORLD!"
Even though I had no programming experience, I didn"t have to look up any of the keywords in TI-BASIC because most of the commands were obvious in English,
- Disp stands for "display"
- ClrHome stands for "clear the home screen"
- Lbl stands for "label"
- Goto stands for "go to"
(I can"t imagine how difficult it would be for a non-English speaker to teach her/himself the keywords)
As I learned new languages (C/C++, Java, C#, Python, Javascript), I began to take advantage of online documentation and libraries. There are a plethora of resources online, including API"s, libraries, open source projects, but almost all of it is in English. It seemed so natural that everything would be in English that I didn"t even stop to consider what code or documentation would look like in another language.
With more programming experience, I also developed better coding styles (similar to the guidelines in Clean Code - 代碼整潔之道 by Robert C. Martin). One of the most basic improvements was using longer, more descriptive variable names and functions.
For readability, I began to replace many logic statements, such asif (a !== null a !== undefined)
with
if (accelerationRate.isValid())
(If you read the second version of the if statement, it"s actually a grammatically correct phrase, which makes the code more natural to read in English, although probably more cumbersome for non-English speakers).
- - - - -
When I studied abroad in China, I finally realized the advantage I enjoyed as an English-speaking programmer. It was surprising to discover that most of the technical terms we used in class were either direct translations of or the actual English words. I realized that the language barrier was the reason that I met nobody in my class that started programming at a young age.
Knowing English is knowing the language of the global programming community. Tutorials are in English. Stack Overflow is in English. The sparse documentation and inline comments in Github repositories are in English. Everything programming related is usually written and documented in English and then translated to other languages.
To me, it feels like English is the language of the programming frontier, and to not know English is to be in the shadow of programmers who will make earlier and more fundamental contributions to the community.
- - - - -
p.s. here"s a PDF of Clean Code http://www.e-reading-lib.org/bookreader.php/134601/Clean_Code_-_A_Handbook_of_Agile_Software_Craftsmanship.pdf
- - - - -
相關答案- 出生在美國並且長大的華人真實的生活情況是怎樣的?
類似於:
取名的時候,如何用的貼切,有時候就煩這個
我的計算機是大學學的,所以用的是英文,入門就很順暢,沒太大障礙。很多計算機辭彙都非常理所當然,不需要刻意記住。用起stack overflow和網路上海量的英文開源軟體和讀文檔都很隨意。我有時候無法想像自己如果用中文學計算機是什麼樣的,偶爾我會翻一下中文書,但看到很多不認識的專業術語就放下了,覺得直接讀英文比較容易。
但要我回憶,我還是可以想起來小時候我確實曾用中文學過編程語言的。我小學是在中國讀書,當時我們學校有在教計算機,是那種很老式的電腦,我們三年級學習的是一種叫做logo 海龜語言的東東。具體就是一隻龜在屏幕上,然後你輸入很多字元串,這個龜就會在電腦上面畫圖。。。我記得我當時怎麼都記不住那幾個命令,經常要刻意去背誦,這樣編寫的時候才能保證不要寫錯。
如今想起小學三年級的海龜語言,再回頭一看,那幾個命令行,
FD -- forward 前進
LT -- left 轉左
REPEAT -- repeat 重複
HT -- hide turtle 藏龜
ST -- show turtle 顯龜
PU -- pen up 抬筆
PD -- pen down 落筆
這麼多年,再回頭一看,突然有種恍然大悟的感覺有沒有!原來當時我小學三年級覺得很難記住的命令行,如果換作一個英語環境裡面的小學三年級生,估計就沒覺得那麼難了啊。
所以回答樓主的問題,英語環境下學計算機,要容易很多。因為世界上很多計算機科學的資源(發明編程語言的人,寫操作系統的人,等等)都是英語世界的人在掌握啊。純就計算機語言或者代碼來說,英語和計算機語言沒有任何關係。不會英語但是會計算機語言完全可能並且正常!即便母語是英語,他看begin end 和 { } 表示的代碼塊也是一樣的,並不因為他理解begin end的意思而有什麼優勢。
但是文檔是英文的,當然對母語是英文的人理解上有很大幫助,但這其實也並非決定性的。總之,以英語為母語的人寫代碼跟非英語母語的人寫代碼沒有本質差別。
按照時代的進程大概是這樣
彙編
-據
信:
-字 "你吃了嗎|行"
長 為 - 減 信
-文
-全 始
始:
移 長、˙基
移 信、˙計
移 一、˙基
移 四、˙加
斷 十六基八零
移 零、˙基
移 一、˙加
斷 十六基八零
C語言
宏 引入 基入出
整 主【整 參計 | 字 指指 參值】
『
字 指 問好 為 「你吃了嗎?」丶
畫格【「 串 行」 | 問好】丶
返回 零丶
』
Perl (大致是這種感覺)
¥洞…的ㄢ…大×《出…ㄞ第】】¥%…
Java
外 靜 類 你吃了嗎『
外 靜 主 虛【串 參值 組】
『
串 問好 為 「你吃了嗎?」丶
系統-出-畫行【問好】丶
返回丶
』
』
Javascript
甲【函【】『
乙【函【】『
丙【函【】『
丁【函【】『
做事【】丶
』】丶
』】丶
』】丶
』】丶
18i=[esc]我是分割線18i=[esc]
我寫這個答案主要展現的不是「如果中國人設計編程語言是什麼樣子」而是借「以中文為母語的人寫代碼時是什麼感覺?」
來回答「以英語為母語的人寫代碼時是什麼感覺?」
我記得在一堂斯坦福給java初學者開的公開課視頻上,那位教師特意提醒「if A is not equal to zero or one(當A即不是0也不是1時) 」,判斷條件要寫成 (A!=0 A!=1),但英語為母語的初學者很容易把它寫成 (A!=0 || A!=1)。我想,中國人幾乎不會犯這種錯誤
拚命想同義詞以使不同參數名長度相同以滿足自己的排版強迫症
真的很奇怪上面這麼多回答都覺得英文對編程的作用很大。
我小學2年級的時候,我所在的地方很流行計算機「考級」,都是各單位組織的,就像是一種潮流。當時我父母都去考了,由於我對彈琴的興趣已經消耗殆盡了,於是他們給我也報了個計算機班。於是我就考過了初級(主要內容:DOS、UCDOS、CCED、FoxBase),然後,我又繼續學了中級(主要內容:Windows 3.2、Word 6.0、FoxBase編程、FoxPro),然後考下來了。考中級的時候是小學3年級,學校還沒學到小數運算(只學了分數),有道題我讓監考老師幫我答了(其實我會)。
我在學校的英語學習是從4年級開始的。之前只上過一個啥啥少兒英語,學的是apple,ant,aunt,Hello,How do you do之類的。
上面說的這些雖然不是編程但是DOS命令也是所謂的「英語」,雖然我現在拼寫directory這詞的時候依然會猶豫一下是不是少個字母,但是這絲毫不妨礙當時我記住DIR這個命令。雖然當時我幾乎不會什麼英語,但它也沒對我學計算機產生任何障礙。
我小學6年級畢業的時候,以「能修電腦」這種能力廣受老師喜愛,有一次被英語老師叫到家裡修她家藍屏的電腦。電腦啟動的時候,果然藍屏了,然後英語老師開始朗讀屏幕上的內容——我從來沒讀過。她讀了之後無動於衷,完全不知道該怎麼辦。其實上面寫了,使用最後一次正確配置啟動之類的,但是她沒理解,也沒打算自己操作一下。
我的英語水平在初中之後基本保持穩定,每次都是70多分這種不上不下的水平。單詞可能稍微認得多點,大學期間考過了四六級。我大學專業不是計算機,但是是工科,讀文獻之類的事情都干過,畢業前還要翻譯一篇論文。從語法上看,文獻裡面的英文還真比四六級閱讀簡單些。專業術語是有一些,但是這些專業術語你認一次記一次難道不夠么。論文是啥?是說明書,不是小說。小說裡面有修辭方法有高級辭彙,你論文是為了讓人看明白,為啥要用那些東西。
從初中以來我一直在編程,從Basic/VB到Pascal/Delphi,從C#到Python,PHP,期間還短暫用過Java,C等語言,目的從自己寫著玩到參加比賽都有。一直以來我也沒覺得英語和編程是一樣的東西,編程語言是人工語言,從辭彙(關鍵字、函數名)到語法都是人造的,造它的時候可能受到自然語言的影響,但是使用起來和自然語言完全不一樣。我覺得用英語編程除了在取變數名上會方便點以外,其它都無關緊要,最後,這變數名還會被編譯器(混淆器)幹掉,對程序毫無影響。
不可否認,要閱讀一些文檔,網站,一定的英文水平是必要的,但是其實這個水平並不要求很高,並不需要達到「以英語為母語」的程度。不需要會聽說寫,只要能讀就夠了。編程的時候,也不需要用所謂的「英語思維」來思考。你能明白你的需求,想好要寫什麼樣的代碼,足夠你以此為生了。
(給外企工作除外,那是另外一碼事)其實跟非母語的人沒什麼差別。
非母語的人起步可能會稍微難一點點。但是過了這一個階段英語就自然而然地成為「技術母語」(區別於「生活母語」)。技術人員往往習慣使用英文操作系統就是一個直觀的表現。假如叫一個程序員來寫易語言,恐怕反而彆扭了。
英語只能用來與人交流,看文檔,與計算機交流主要還是思想,樓上的例子太簡單,這樣什麼語言都不難理解,但複雜的例子,幾十萬的代碼,什麼語言編程還有優勢嗎?易語言好多年了,也沒掀起什麼大浪。
中國人為什麼不能答?
回答題目前我們先想編程跟語言有哪些關係。
首先,邏輯跟語言無關。
然後,跟語言有關的無非是命名,尤其是需要縮寫的命名。
最後,開發手冊幾乎都是英文。使用說明是最簡單的英文了,沒有複雜的轉折讓步。
那麼,普通中國人編程和美國人有什麼區別?
邏輯肯定一樣,但是邏輯和文字互相轉換的過程中國人要麻煩一點,說白了你定義一個關於學生老師資料的數據結構,性別都用sex定義,別人看完就有點懵逼。反過來,寫完的代碼別人看一行就大概知道這實現什麼功能了,你一眼看過去可能還有仨詞兒都沒見過,只能再往下看怎麼給這仨詞兒賦值的,怎麼調用的,才能推測那是啥意思。看一段代碼花費時間要差很多。
查資料時間就不提了。差的更多了
最後回到問題:英語母語的人寫代碼啥感覺?其實這問題相當於:你把一段代碼改寫成中文的啥感覺?
答:就跟寫個初中幾何什麼相似三角形的證明沒什麼區別
經過這次經歷我發現為什麼在美國很好找coding的工作,因為美國人大多不願意編程,可工作需求量大,所以open position特別多。就我的經驗看來,美國人不喜歡編程並不是因為編程太難不會,反而是編程太簡單,因為對母語即為英語的美國人而言,用高級語言編程彷彿就像寫歌詞。舉下例子:
當 山峰沒有稜角的時候 :{
當 河水不再流:{
當 天地萬物化為虛有:{
我還是不能和你分手。}
}
}
這就是三重條件判斷,很難么?
轉載自人人註明逗比主頁@學術狀態帝 ,原作者不可考證。
I write what I think, as I think while write
無論英語是否母語,寫起代碼多半是眉飛色舞的感覺。
return 0;
初學應該比我們輕鬆,但到一定程度也都一樣了,畢竟代碼的英文都很簡單
大家都在強調邏輯,其實國內很多還沒到必須拼邏輯的時候,調侃莫當真!
如果程序高手出現的概率為0.01%,如果編程語言是漢語,如果每個中國人都能從7歲開始無阻礙接觸編程,堅持十年,就像說話一樣堅持。
那麼現在矽谷肯定沒落了,微軟,谷歌,蘋果都在等待破產,因為我們的牛逼coder數量都可以建國了
要回答這個問題我覺得很簡單啊……你們把一段代碼翻譯成中文就能體會了。
#包含<標準入出.頭>
整型 主()
{
列印函(「嗨,世界換」);
返回 0;
}
C語言沒怎麼學,對語言的理解毫無深刻可言,渣翻譯有不合適歡迎指出……
不過英語和漢語構詞方式和思維方式上的區別,這個恐怕中國人就體會不來了……如果編程語言是中國人用漢語設計的,恐怕很多規則都要變化。
中國如果不能建立起自己全方位的科學體系,經過累積效應,未來肯定完敗,哪怕我們有龐大的人口基數,也不得不像印度一樣融入西方。~是好是壞每個人觀點不一樣
推薦閱讀: