文科生為什么要學編程?一個現實考慮是找工作。文科生的優勢在于寫作能力與人際溝通能力,如果再懂一些編程,在今天的職場上是普遍受歡迎的。從美國到中國,越來越多的互聯網企業開始招募懂編程的文科博士、碩士,這些可都是高薪噢!我們實驗室的畢業生在BAT(百度、阿里巴巴、騰訊)、微軟、新浪等都留下了足跡。
再拔高一點,從全球大趨勢來看,英國把2014年設立為“Year of Code”。從今年9月開始,英國5~16歲的學生都必須學編程。美國總統奧巴馬也專門發表演講,呼吁所有美國人學編程。
當下有本暢銷書叫做《你編程還是你被程序控制:數碼時代的10條指令》。作者寫道:“你是想要指揮技術,還是讓我們被技術及那些懂技術的人指揮?如果你選擇了前者,你就獲得了文明自主殿堂的一席之地;但如果你選擇了后者……那可能是你最后一次能自己有權作出的選擇了。”
當然,還有其他一些更實際的收益。如果做學術或商業研究,懂編程才能自己從網上抓第一手數據;而且可以促進學科間合作。這里有效的共同語言不是中文或英文、而是數學或統計模型和編程語言。
不過,在我自己看來,文科生學編程,主要為了訓練編程思維方式。什么是編程思維?第一,你能把你面對的問題“計算化”,也就是用計算機可以理解的語言把問題表述出來。你每天都會面對問題,回家房子太亂,上班面對數據也太亂。為什么你會感覺無從下手?因為你并不知道你要解決的問題是什么。所以首先要明確問題——是垃圾太多需要扔掉,還是物品擺放不合理?垃圾太多應該怎么辦,物品擺放不合理又該怎么辦。你手頭有哪些工具可以用?你期待最后整理成什么樣子?明確問題之后,用計算機可以理解的語言把問題表述出來——編程思維就是培養你的這種能力。
其次,這可以培養做事邏輯。初學者最容易犯的重大錯誤就是事先考慮不周、計劃不全,只想到明顯的結果而沒有窮盡所有的可能性,結果留下隱患,即所謂bug。還有,這樣可以培養規范化的習慣。比方說定義方法、變量,哪些字母大寫、哪些小寫,前后拼寫一致,標點準確,格式對齊、縮進,還有句句留注釋,等等。
有人問,你糾結這些細枝末節干什么?這樣訓練下來,我們都成了機器人,還有什么創新能力?事實恰恰相反。魔鬼存在于細節之中。恰恰是這些細枝末節,最容易被忽視,最容易出錯。計算機對錯誤是零容忍度的。而且,規范化是培養這樣一種思維:尊重規則,在規則基礎上創新。
那么,文科生學編程具體要學什么呢?我們系的博士生5年前也躲著編程走,現在都在學——有些在學習比SPSS更強大的R語言、有的學習適用于文本挖掘的Python語言,也有的學習更專業的Java、C++等語言。這在亞太地區算是領先的,但在歐美大學文科生學編程就不是新鮮事了。專攻哪種語言好呢?我認為只要能熟練地掌握上述任何一種都好。當你系統地掌握了一種語言,你就會發現,各種語言之間的差別不大,肯定比學完英語再學法語德語容易。
最后談談怎么學編程。第一,投入時間。“一萬小時定律”說,每天花4小時專做一件事,每周5天,堅持10年,有了這一萬小時,基本上你就可以成為某個領域的熟手。諸如此類的還有“10年法則”等等。如果10年太長,等不及,那你就要增加投入,每天8小時,5年練成。
這些法則定律傳達的信息是:要掌握某種知識,必要的甚至大量的時間投入是必不可少的。我在美國從博士生到升大學終身教授的9年間,幾乎天天寫代碼,通常深夜才有時間,一轉眼就是窗外鳥鳴,東方已白。時至今日,實驗室一批高手,我不需要自己操刀,但同樣學習新語言,不然怎么與他們以及遍布全球的合作者溝通?
除此之外,動手寫,犯錯、改正,再犯錯、再改正,這是學編程最重要的過程。
第二,文科生別著急啃那些厚厚的教程,先看教學視頻。第一次沒看懂很正常,別著急。 “重復”、“過遍數”是開始學編程的不二法門。
第三,學規范,糾細節,養成好習慣,終身受用。學外語,盡量不要看詞典,而是從上下文猜詞義,學到的才是活語言。學編程,恰恰相反,要隨時查手冊,才能“被訓練”出規范。
(祝建華系香港城市大學媒體與傳播系教授、互聯網挖掘實驗室創始人)