我想對所有新程式設計師說的一些話

Jodoo發表於2016-04-19

我從學習程式設計開始已經累計超過二十年了。截至現在,我開辦過的程式設計入門課程的數量也有半打之多。我在教授程式設計上花費的所有時間,總數大約是一千多個小時。以下是我的一些肺腑之言,至少給我的學生反覆嘮叨過不下一次。注意,這些內容沒有前後順序之分。

歡迎來到程式設計世界。

  • 程式設計的確很難。不管你有多麼擅長程式設計,你的學習能力和解決問題的經驗始終是拖慢你前進腳步的唯一因素。等你更加擅長程式設計這門技藝的時候,你就會對此更加確信。程式設計還有一個有趣的特點 - 你永遠都不會對其產生厭倦感。如果你曾經有過,你一定在什麼地方做錯了,你也許需要將已經重新寫過的程式碼再進一步優化或者抽象一下。
  • 程式設計可能是你做過的所有事情當中,最為令人困擾的事情之一。一般情況下,程式設計都會經歷嘗試解決問題、陷入困難、再次嘗試、後退一步、靈光乍現並且最終讓程式跑了起來這些步驟。感受困擾是很正常的事情,這種現象不可能完全消失。(當你的程式設計技藝更加嫻熟之後,你只需解決更難的問題,問題甚至可以不重樣)。你應該學會適應這種令人困擾的感覺,因為這種困擾會讓解決問題變得越來越有滿足感。
  • 無論你的問題有多麼令人困擾,一定有一個現成的解決方案。在你的程式設計能力提高之後,你將會有更多的自信和更好的解決辦法。這不僅能讓這種困擾的感覺得以改善,而且還會促使你進一步去解決難度更大的問題。(如果這些事情太簡單了,也就失去了趣味性!)
  • 當我們還是小孩子時,我們幾乎在每一件事情上的表現都不盡人意,但是我們對此毫不在乎。作為成年人,我們把一件事情徹底搞糟的機會並不多。請擁抱這種感覺吧 - 這是一件很正常的事情,你正在從事著很多人壓根沒有能力從事的工作。
  • 你應該知道學習程式設計的第一個小時與第十個小時的情景和狀況完全不同,而且也與第一百個小時有很大差異。這個傢伙在他的部落格上聲稱,在完成一萬小時訓練之後,他的高爾夫球技已經發生了質的飛躍。程式設計實際上也是如此。
  • 你所具有的魔力遠比你自己想象的強大得多。程式設計就像一種魔法。好好想一想 - 我們學習聖書是為了使用魔法,我們鑽研計算機 + 網際網路不正是為了編寫程式嗎?況且,魔法師還能夠教授其他魔法師創造他們自己的魔法技巧。我們不僅同時進行上述這些活動,還創造人們喜聞樂見的奇妙裝置或裝置。(如網際網路和行動電話)。如果沒有這種技能,這些創新根本無法實現。
  • 善於使用網際網路。你在學習程式設計的第一年裡碰到的每一個問題,在你之前有很多很多人已經體驗過了。所有問題的答案都記錄在網際網路上。你搜尋查詢的水平越高,快樂時光就會越快來臨。忠告:如果你不理解這些程式碼的功能和原理,請不要隨意使用它們。
  • 作為程式設計師,當我們程式設計時,我們會隨身攜帶一個工具箱。這套工具就是我們的所有技能的一種體現。首先你需要學習的東西(變數、迴圈等等)就像是螺絲刀和榔頭,你會在每天的工作中用到它們。當你的閱歷變得更加豐富時,你開始學習如何使用更加高階的工具,儘管這些工具的用處可能並不廣泛,但是在解決某些特定問題上非常順手。(例如,樹狀資料結構、萬用字元、Valgrind、各類程式碼偵錯程式等等)。程式設計所涉及的絕大多數領域(遊戲設計、Web 開發、資料庫應用)也都有它們各自的領域問題和解決方案。結果是,你解決過的任何問題,當再次碰到時,將會非常容易解決。
  • 每個程式都是由程式碼組成的。你可以閱讀、修改和鼓搗這些程式碼,甚至絕大多數由其他人編寫的程式。只要涉及計算機方面的內容,學習資源到處都是。
  • 掌握和精通程式設計的最好方法就是編寫很多很多程式碼。你需要做的事情就是持續不斷地構建程式。作為一名老師,我的最大職責就是盡我所能扶你上馬。你的知識和技能一旦超過一個臨界值,我坦白地告訴你,只要給你足夠的時間,任何問題你都能自行解決。儘管放心大膽地堅持下去。就像一位智者所說,『只要功夫深,鐵杵磨成針』。
  • 閱讀很多很多程式碼。總有一些程式設計師比我們都要『聰明』。他們已經編寫了很多程式碼和程式,如果你願意的話,你可以隨時閱讀它們。或許它們現在就存放在 Github 上。
  • 據說,在你學習程式設計的過程中,掌握第二門語言最為艱難。第一門程式語言幫助你形成了最基本的程式設計思維模式(我可是認真的哦!),但是,當你開始學習第二門程式語言的時候,你就必須重新審視這些基本原則和概念。(如果哪門程式語言不能讓你頗費些周章的話,那它或許不值得專門學習)。在第二門語言之後,你在學習新語言方面,將會變得非常嫻熟。我自己就能在一週之內快速掌握任何一門命令式語言。
  • 沒有最好的程式語言。有些程式語言及工具可能在一些特定問題上優於其它程式語言。當你學習不同的程式語言時,不要總是試圖遷移你已有的程式設計思維模式。相反,你應該在新的環境下,學習如何按照新習慣或者新模式進行思考與設計。
  • 保持童心,多做傻事。程式設計本身就像一套巨大的樂高玩具,充滿了各種各樣亟待解決的有趣問題。請在讓這個玩具變得更加有趣這件事情上多花些心思。這項任務比其他任何一門學科的作業都要有趣許多。
  • 最好的程式設計師喜歡在工作之餘開展一些額外的程式設計活動。如果你真的擅長程式設計,你可能會發現你自己從來就沒有離開過『工作』。
  • 當你在程式設計過程中陷入某種困境時,請在紙張上編寫你的程式。我沒有開玩笑。這個辦法非常神奇。在程式設計競賽中,這個方法幾乎就是標配。(我之所以認為這個辦法有效,是因為當你無需考慮語法時,你會有更多腦力用於解決實際的問題。)

我相信我時常還會冒出一些其它方面的建議 - 但是正如上述絕大多數建議那樣,如果它們真的非常重要,你一定會積極開動腦筋,自己把它們想出來。

祝你程式設計愉快 :D


作者:Joseph Gentle,前 Google Wave 工程師,開源實時協作編輯庫 ShareJS 開發者。

原文:What I tell all new programmers

感謝:Qingniu 幫助審閱並完成校對。

原載:明珠夜話

相關文章