超級程式員神話

來源:互聯網
上載者:User
  英文原文:The Myth of the Super Programmer    上周我收到了一份郵件,一份讓我心緒不寧的郵件。    郵件的作者基本上認為我在部落格裡和 Pluralsight 視頻節目裡談論的都是非常淺顯的話題,但發現我卻虛偽的倡議面試內容應該設計的複雜些,應該為“真正的程式員”或超級程式員而設計。    這份郵件基本上表達了這樣一種觀點:開發應用程式的都不是“真正的程式員”,“真正的程式員”編寫的是有難度的東西,跟複雜的數學演算法相關的東西。     真有超級程式員嗎?    我並不認為這種對編程和軟體開發的認識和理解是他專屬的,或是個別現象。甚至 IT 精英 Scott Hanselman 也稱呼自己並且認為自己是欺世盜名的騙子。    Scott Hanselman 的這篇文章讓我產生了共鳴,因為有時候我也有和他相同的感覺。    有時候,我很懷疑,我是否真的有能力解決真正有難度的問題。    讓我鬥膽猜測一下,我猜測大部分的程式員在思想裡都會某種程度的承認,承認自己只是一個普通的程式員,但這世界上確實有一些超級程式員,他們在做一些諸如控制硬碟緩衝或為Google建立搜尋索引等非常複雜的演算法問題。    好吧,不否認,當然會有一些程式員正在寫一些代碼處理各種你我都不能理解的複雜問題,但他們跟我們這些餘下的程式員究竟有多大區別呢?    在一個為企業開發應用的程式員和一個為Google寫搜尋演算法的程式員之間,或和一個開發用來控制讀寫頭從磁碟扇區讀取資料的物理操作的晶片程式員之間,有真正的不同嗎?     在我回答這個問題之前…    讓我們花幾分鐘時間談談他們所解決的問題。     你曾經遇到過的需要去解決的最有難度的問題是什嗎?    你是如何著手去解決這些問題的?    到最後,當你真正的解決了這個問題時,你是否覺得好像不是那麼難?    當你回顧這段經曆,回頭來看這個問題時,你是否會發現,現在看來,它其實是個非常簡單的問題?    你有很多疑問,我知道——可是我希望你在繼續往下閱讀前真正花時間思考一下這些疑問。     理解“認知”和“現實”之間的差距。這是非常重要的。很多的程式員,包括我在內,都經常分不清兩者之間的區別。    大家都知道,我們對一個問題的認知經常跟這個問題的真實情況有很大差距。當我們還不理解一個問題時,我們會把這個問題想象的比它本身要複雜。但是,一旦我們理解了這個問題,我們會發現這實際上是一個很容易處理的問題。    讓我來給你一個現實的例子。看一看下面這個數學公式。    我們可以把在看這個公式的人分成兩類人。    1.對高等數學有相當瞭解的人,他們能立即認出這個公式,能馬上知道它是幹嘛的。    2.從來都沒見過這樣一堆符號的人,他們的即時反應會認為這是某種複雜的演算法,可能需要幾年的時間才能弄懂。    也許我說的並不很準確,但我想說的就是,在“會的人”和“不會的人”之間有一個清晰的分界線。    我可以用你已經熟悉的知識對這些符號做一個簡單的解釋。    準備好了嗎?    這個公式跟下面這段代碼是等效的:    var total = 0;    for (int i = n; i <= m; i++)    {    total += f (i)    }     這說明了什嗎?    我想說的是,在數學演算法中,在編程中,在我們的日常開發工作中,只有少數一些問題能稱得上是有難度的問題,而且通常這些比較難的問題都能夠分解成更小的問題(有時候需要多次分解),直到最後你需要處理的只是一個很簡單的問題。    我的這個部落格的目的,我的 Pluralsight 視頻節目的目的,基本上都是告訴大家要把複雜的事情簡單化。我自己的生活也是這樣。    如果你想成為一個成功的程式員,你必須自己要學會如何做到這些,它會是你能學到的最重要的一門技能。    那麼,現在來回答最初的問題——不,我不相信這世上存在超級程式員。我不認為在公司專屬應用程式程式員和那些被視作在研究真正複雜問題或“真正的編程”的程式員之間有什麼不同之處。    但不要誤解我的意思,不要以為我是在說我不相信某些程式員會被其他程式員在技能高出好幾個數量級。我敢大膽的說,真正優秀的程式員在效率是會比普通程式員高出 10 倍甚至 20 陪。    我想說的是,我們有一個習慣,總是忘記:當問題被分解成更小的問題後,所有的問題都變得如此簡單,而且所有的問題都能這樣去分解。    我想說的是,這個問題是一種能夠阻擋你進步成為一個真正優秀程式員的問題,這是由於你自己的認知上錯誤導致的,你會把目前看上去複雜東西當作是不可理解的。    我想說的是,當你在開發一個對自己來說似乎是很容易的公司專屬應用程式時,你可能忘記了,對於那些對編程一無所知的所有你的朋友和家人來說,這是一個多麼困難或幾乎不可能完成的事情。     仍然不贊同我的觀點?      很好,你有這樣思考的權利。    但我給你準備了一個難題。你想必一定是知道某位“超級程式員”了。也許你就是其中之一。如果是這樣,我們要聽你說說。請告訴我們一個非常有難度以至於其他的人有不可能理解的複雜問題。    我並不是在挖苦你。我是很嚴肅的,如果你能夠證明我錯了,那就證明給大家看。我至今還未遇到過一個不能分解成簡單可理解的小問題的難題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.