關於程式設計語言學習的一些體會

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Learn at least one new language every year.
                                              — Andy Hunt and Dave Thomas

自己一直是“每年學習一門新語言”的忠實擁躉,曾先後認真地學習了Haskell、Common Lisp、Python、Go等語言,對Prolog、Scala、Erlang、Lua、PHP也有一定瞭解。但幾年下來,只有Python一門語言算 是真正被留在我的大腦裡,用在了工作中。其他那幾門語言留下來的只是一些思想了。這似乎符合了Andy Hunt和Dave Thomas在《程式員修鍊之道》中對於這一實踐目的的闡述:“學會用多種方式解決問題,擴充我們的視野,避免思路僵化和停滯不前”^_^。

即便是殘存的思想,其實也並不深刻。要真正會運用新思維並非那麼簡單。一門程式設計語言從入門到精通,至少要經曆學文法、做實踐、用idioms(寫出地道的代碼)三個階段。這讓我深刻的感悟到:不以使用為目的的語言學習,都是在浪費生命

有精力多學習些語言自然很好,我迫切期待能擁有一個像“七龍珠”中孫悟空那樣的“精神時光屋”呢。但現實中,人的精力是有限的,而我們要面對的電腦科學領域中的知識、技能以及問題卻似乎是無限的。因此在“每年至少學習一門新語言”這一實踐上,建議不要過於教條。 從程式設計語言自身來看,範型(Paradigm)是影響語言思維差異的主要因素,而程式設計語言的範型有限,主流的也就那麼幾種:命令式(過程式)、函數式、邏 輯式、物件導向等。每種範型的背後都有幾種、十幾種甚至幾十種語言,我們其實沒有必要都去學。從拓展視野的角度去說,從每種主流範式中找到一兩門典型的語 言去學習就可以了。比如命令式的,我們可以選擇C;函數式我們選擇Haskell;邏輯式的選擇Prolog;物件導向的選擇Java等。

即便是從每個範型中挑出一門,你要付出的精力依舊不少,我們還要考慮其實用性:要以使用為目的。如果能將其用在工作中,天天與你相伴,被他人接受,自然最 好;退而求其次,你能找到一兩個開源項目,並參與其中也是可以的,至少可以讓你保持手熱;如果這兩點都無法做到,僅僅是憑藉個人的熱情與堅持,那是不會持 久的,若干時間後,你就會對其生疏,可能連基本的"Hello World"文法都記不得了。不過這個年頭,思想也不能不要。在有剩餘精力的前提下,挑選些牛人們極力“鼓吹”的語言,吸收一下其思想精華,說不定哪天就 能用得上,讓自己和大家都感覺你很NB,抬高一下自己的身價^_^。記住:程式設計語言也是要拼爹的,系出名門的語言(諸如Go、Dart等)自然得到更多的青睞、使用和推廣,出位的幾率也就高出許多,尤其是在目前新程式設計語言百花齊放的階段。因此在選擇有思想的新語言時,最好在這些名門之後中做優選。

這個時代喜歡“專家”,因此我們在一兩門語言上務必要做到“精專”,這是會給你帶來黃油和麵包的語言。要專到什麼程度呢?我有一個同事,什麼問題都用C解決。他甚至為此寫了個不小的基礎架構,所有業務問題的Code放在架構中被回調即可,即便是這個問題用Python實現只需幾行代碼。

電腦科學的研究核心是什嗎?我想肯定不是程式設計語言,就好比社會科學研究的核心不是人類語言一樣。我比較欣賞這樣的觀點:作為程式員而言,最重要的是去創造,而不是研究。我們應更多的利用已經掌握的語言解決現實中的問題。做 程式設計語言研究的人可能要瞭解各種語言的特點與實現方式,但對於大多數的程式員來說,其實我們只需要關注問題域:做底層平台開發的,關注機器模型、通訊原理 以及OS原理和實現細節;做演算法的,很榮幸,那才是正統的程式設計的核心;前端攻城師則更多關注使用者的體驗。而在這些解決實際問題的過程中,我們更多採用 的是“制式”的程式設計語言。即做平台開發的,一般用C,C++等系統程式設計語言,更多的考慮的是效能;做前端開發的,PHP/JavaScript不可或缺。 我們要考慮的是如何利用這些制式的程式設計語言去解決問題,而在這些制式語言上,我們要做到精通。

從新興語言中借鑒新思想,然後在舊語言中實現新語言的特性,其實更多是在舊語言中實現了某 種文法糖,你愛吃,不代表其他人也理解也愛吃,還容易被人誤認為是“炫技”。如果你是技術負責人,且經過評估,新語言十分適合這個問題域,那莫不入直接引 入這門語言,讓大家都能使用到這門語言的新思想、新特性。

辯證的說,任何一種程式設計語言都有其利與弊,比如Haskell,純函數式語言,變數不能改變,無狀態,對平行處理具有天然的適應性,但在處理基本IO時卻要編寫難於理解的monad;而在命令式語言中,這種IO處理簡直簡單的不得了。

關於函數式語言,個人感覺未來若干年內仍難以大行其道,建議還是跟上命令式語言的演化主線吧。

跨越問題域學習語言,通常收穫不大。一個做平台服務端,用慣了C的資深程式員,讓他去學PHP寫前端代碼,估計是無法迸發出任何火花的。

以上是自己這些年關於程式設計語言學習的一些體會,比較零散,但希望能有協助。

2013, bigwhite. 著作權.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.