學會開放性的思維

作者:xpiloveyou  摘自:http://www.csdn.net

經常在論壇中看到一些問題:“我應該學習哪門語言?”“XX語言能做什麼嗎?”我對想對這類想法給一個我的見解。本文多少涉及到一些語言的評論,僅代表個人意見。

學會開放性的思維

我發現初學者最喜歡問的一個問題就是“我應該學什麼語言?”。想不浪費時間學好一門語言然後就用這個語言解決所有問題。在提出我的見解前我先引用一段Eric Raymond的話:

“如果你還不會任何計算機語言,我建議你從Python開始。它設計清晰,文檔齊全,對初學者很合適。儘管是一門很好的初級語言,它不僅僅只是個玩具。它非常強大,靈活,也適合做大型項目。
但是記住,如果你只會一門語言,你將不會達到黑客所要求的技術水平,甚至也不能達到一個普通程序員的水平---你需要學會如何以一個通用的方法思考編程問題,獨立於任何語言。要做一名真正的黑客,你需要學會如何在幾天內通過一些手冊,結合你現在所知,迅速掌握一門新語言。這意味着你應該學會幾種不同的語言。如果要做一些重要的編程,你將不得不學習C語言,Unix的核心語言。其他對黑客而言比較重要的語言包括Perl和LISP。 Perl很實用,值得一學;它被廣泛用於活動網頁和系統管理,因此即便你從不用Perl寫程序,至少也應該能讀懂它。 LISP 值得學習是因爲當你最終掌握了它你會得到豐富的經驗;這些經驗使你在以後的日子裏成爲一個更好的程序員,即使你實際上可能很少使用LISP本身。當然,實際上你最好四種都會。 (Python, C, Perl, and LISP). 除了是最重要的四種基本語言,它們還代表了四種非常不同的編程方法,每種都會讓你受益非淺。”

大家看了這段話是否立刻就想按Eric Raymond的話從Pyton開始學習?或者學習他提出的四種中的C語言?且慢,我們注意這樣幾句話:“你需要學會如何以一個通用的方法思考編程問題,獨立於任何語言。”“(Python, C, Perl, and LISP). 除了是最重要的四種基本語言,它們還代表了四種非常不同的編程方法,每種都會讓你受益非淺。” 可以看出Eric Raymond提出四種語言實際是提出四種不同的編程思想。他想告訴大家的就是:開放的思維,不要侷限在一個語言當中,即“通用的方法思考編程問題”。

    也許有人反對說精通一門比懂很多而不精要好。確實我們必須精通一門,這個是可以根據自己需要來選擇的。但不代表我們只需要學習一門語言,因爲只懂一門語言很容易被它的侷限性限制。C語言很靈活但是對數據的抽象處理不夠。C++夠強大也靈活了吧?它學習了C的靈活和高效以及Simula的抽象數據能力。可是C++的面向對象機制比不上Java。而當你學了Lisp以後你會發現原來程序還可以這樣編,雖然C++也號稱可擴展性,但Lisp的擴展性是C++所不能及的。而且Lisp是一種函數型語言,與面向機器的語言有着不同的思維方式,Java也從這裏借用了不少思想。我覺得每一個語言都有最擅長的領域和不夠的地方。沒有一種語言真正通用,即使是C++,有些問題用C++來做實在有點吃力。這裏一定有人有對C++痛苦的回憶。Java確實很優秀,適合分佈式計算,但Java太安全了,可能不少有黑客氣質的不喜歡它,因爲它爲了安全犧牲了很多靈活性。

我們應該學會開放性思維,看問題要看到最核心的問題,最根本的根本,而不會被其他的枝葉或表象所迷惑,做到這一步後纔算比較成功。這樣就會有一種分析問題的方法,學會怎麼樣把問題的表象剖開,看到它的本質。這時你碰到任何具體的問題,只要給點時間,都能輕而易舉地解決。選擇程序設計語言在這裏只是選擇不同工具。

並不是說工具不重要,但是如果沒有一個很好的思想,那麼這個工具你能用的好嗎?而且解決一個問題並不是只有一種可能,或者這個問題的解決可能分幾個部分而不同部分要不同的方法。這個時候沒有開放性的思維,能解決好這個問題嗎?就以Emacs爲例。Emacs的底層代碼是C寫的而上層代碼卻是Lisp。也因此Emacs足夠強大快速而且又有很強的可擴展性。如果僅採用單一的C編寫,那麼就是vi了。它很快也很靈活,但它擴展性怎麼樣?

看到一些關於該選擇什麼語言的問題我覺得真可笑,不知道他們想的是學語言還是學着解決問題。我們學習編程只是爲了學習寫程序本身還是爲了學會用編程解決問題呢?如果是前者,真好你是個歷史學家,尤其是隻用C和彙編的可以稱爲考古學家了。如果是後者,那麼不必再問選擇什麼語言了,學會編程的思想最重要,選擇一門語言然後學習它的思維方式。這時先選哪門就和應該上午吃蘋果還是下午吃橘子一樣了,你應該熟悉更多的工具。

補充一些就是獨立於程序語言以外的編程思想,那就是算法,數據結構,和編碼規範。不論你精通多少門語言,當遇到一個問題能否用最快最好的方法解決,那就是考驗你的算法設計能力和數據結構的操作能力了。而用程序清晰的表述一個問題就是看你編碼是否規範了。當你需要改進程序時你會發現一個編寫清晰易讀的程序維護起來要方便的多,這也有助於快速的解決問題。

發佈了45 篇原創文章 · 獲贊 9 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章