編程的確很難,。不管你有多么擅長編程,,你的學(xué)習(xí)能力和解決問題的經(jīng)驗(yàn)始終是拖慢你前進(jìn)腳步的唯一因素,。等你更加擅長編程這門技藝的時(shí)候,,你就會對此更加確信。編程還有一個(gè)有趣的特點(diǎn) - 你永遠(yuǎn)都不會對其產(chǎn)生厭倦感,。如果你曾經(jīng)有過,你一定在什么地方做錯了,你也許需要將已經(jīng)重新寫過的代碼再進(jìn)一步優(yōu)化或者抽象一下,。
編程可能是你做過的所有事情當(dāng)中,最為令人困擾的事情之一,。一般情況下,,編程都會經(jīng)歷嘗試解決問題、陷入困難,、再次嘗試,、后退一步、靈光乍現(xiàn)并且最終讓程序跑了起來這些步驟,。感受困擾是很正常的事情,,這種現(xiàn)象不可能完全消失。(當(dāng)你的編程技藝更加?jì)故熘?,你只需解決更難的問題,,問題甚至可以不重樣)。你應(yīng)該學(xué)會適應(yīng)這種令人困擾的感覺,,因?yàn)檫@種困擾會讓解決問題變得越來越有滿足感,。
無論你的問題有多么令人困擾,一定有一個(gè)現(xiàn)成的解決方案,。在你的編程能力提高之后,,你將會有更多的自信和更好的解決辦法。這不僅能讓這種困擾的感覺得以改善,,而且還會促使你進(jìn)一步去解決難度更大的問題,。(如果這些事情太簡單了,也就失去了趣味性!)
當(dāng)我們還是小孩子時(shí),,我們幾乎在每一件事情上的表現(xiàn)都不盡人意,,但是我們對此毫不在乎。作為成年人,,我們把一件事情徹底搞糟的機(jī)會并不多,。請擁抱這種感覺吧 - 這是一件很正常的事情,,你正在從事著很多人壓根沒有能力從事的工作。
你應(yīng)該知道學(xué)習(xí)編程的第一個(gè)小時(shí)與第十個(gè)小時(shí)的情景和狀況完全不同,,而且也與第一百個(gè)小時(shí)有很大差異,。這個(gè)家伙在他的博客上聲稱,在完成一萬小時(shí)訓(xùn)練之后,,他的高爾夫球球技已經(jīng)發(fā)生了質(zhì)的飛躍,。編程實(shí)際上也是如此。
你所具有的魔力遠(yuǎn)比你自己想象的強(qiáng)大得多,。編程就像一種魔法,。好好想一想 - 我們?yōu)榱司帉懗绦颍W(xué)習(xí)和鉆研那些傳說中的圣書(計(jì)算機(jī) + 互聯(lián)網(wǎng)),。魔法師可以教授其他魔法師如何創(chuàng)造他們各自的魔法技巧,。我們不僅可以同時(shí)進(jìn)行上述這些活動,還能夠創(chuàng)造人們喜聞樂見的奇妙設(shè)備或裝置,。(如互聯(lián)網(wǎng)和移動電話),。如果缺少了我們這種技能,這些創(chuàng)新根本無法實(shí)現(xiàn),。
善于使用互聯(lián)網(wǎng),。你在學(xué)習(xí)編程的第一年里碰到的每一個(gè)問題,在你之前有很多很多人已經(jīng)體驗(yàn)過了,。所有問題的答案都記錄在互聯(lián)網(wǎng)上,。你搜索查詢的水平越高,快樂時(shí)光就會越快來臨,。忠告:如果你不理解這些代碼的功能和原理,,請不要隨意使用它們。
作為程序員,,當(dāng)我們編程時(shí),,我們會隨身攜帶一個(gè)工具箱。這套工具就是我們的所有技能的一種體現(xiàn),。首先你需要學(xué)習(xí)的東西(變量,、循環(huán)等等)就像是螺絲刀和榔頭,你會在每天的工作中用到它們,。當(dāng)你的閱歷變得更加豐富時(shí),,你開始學(xué)習(xí)如何使用更加高級的工具,盡管這些工具的用處可能并不廣泛,,但是在解決某些特定問題上非常順手,。(例如,樹狀數(shù)據(jù)結(jié)構(gòu)、通配符,、Valgrind,、各類代碼調(diào)試器等等)。編程所涉及的絕大多數(shù)領(lǐng)域(游戲設(shè)計(jì),、Web 開發(fā),、數(shù)據(jù)庫應(yīng)用)也都有它們各自的領(lǐng)域問題和解決方案。結(jié)果是,,你解決過的任何問題,,當(dāng)再次碰到時(shí),將會非常容易解決,。
每個(gè)程序都是由代碼組成的,。你可以閱讀、修改和鼓搗這些代碼,,甚至絕大多數(shù)由其他人編寫的程序,。只要涉及計(jì)算機(jī)方面的內(nèi)容,學(xué)習(xí)資源到處都是,。
掌握和精通編程的最好方法就是編寫很多很多的代碼。你需要做的事情就是持續(xù)不斷地構(gòu)建程序,。作為一名老師,,我的最大職責(zé)就是盡我所能扶你上馬。你的知識和技能一旦超過一個(gè)臨界值,,我坦白地告訴你,,只要給你足夠的時(shí)間,任何問題你都能自行解決,。盡管放心大膽地堅(jiān)持下去,。就像一位智者所說,『只要功夫深,,鐵杵磨成針』,。
閱讀很多很多代碼??傆幸恍┏绦騿T比我們都要『聰明』,。他們已經(jīng)編寫了很多代碼和程序,如果你愿意的話,,你可以隨時(shí)閱讀它們,。或許它們現(xiàn)在就存放在 Github 上,。
據(jù)說,,在你學(xué)習(xí)編程的過程中,掌握第二門語言最為艱難。第一門編程語言幫助你形成了最基本的編程思維模式(我可是認(rèn)真的哦!),,但是,,當(dāng)你開始學(xué)習(xí)第二門編程語言的時(shí)候,你就必須重新審視這些基本原則和概念,。(如果哪門編程語言不能讓你頗費(fèi)些周章的話,,那它或許不值得專門學(xué)習(xí))。在第二門語言之后,,你在學(xué)習(xí)新語言方面,,將會變得非常嫻熟。我自己就能在一周之內(nèi)快速掌握任何一門命令式語言,。
沒有最好的編程語言,。有些編程語言及工具可能在一些特定問題上優(yōu)于其它編程語言。當(dāng)你學(xué)習(xí)不同的編程語言時(shí),,不要總是試圖遷移你已有的編程思維模式,。相反,你應(yīng)該在新的環(huán)境下,,學(xué)習(xí)如何按照新習(xí)慣或者新模式進(jìn)行思考與設(shè)計(jì),。
保持童心,多做傻事,。編程本身就像一套巨大的樂高玩具,,充滿了各種各樣亟待解決的有趣問題。請?jiān)谧屵@個(gè)玩具變得更加有趣這件事情上多花些心思,。這項(xiàng)任務(wù)比其他任何一門學(xué)科的作業(yè)都要有趣許多,。
最好的程序員喜歡在工作之余開展一些額外的編程活動。如果你真的擅長編程,,你可能會發(fā)現(xiàn)你自己從來就沒有離開過『工作』,。
當(dāng)你在編程過程中陷入某種困境時(shí),請?jiān)诩垙埳暇帉懩愕某绦?。我沒有開玩笑,。這個(gè)辦法非常神奇。在編程競賽中,,這個(gè)方法幾乎就是標(biāo)配,。(我之所以認(rèn)為這個(gè)辦法有效,是因?yàn)楫?dāng)你無需考慮語法時(shí),,你會有更多腦力用于解決實(shí)際的問題,。)
我相信我時(shí)常還會冒出一些其它方面的建議 - 但是正如上述絕大多數(shù)建議那樣,如果它們真的非常重要,,你一定會積極開動腦筋,,自己把它們想出來。
我從學(xué)習(xí)編程開始已經(jīng)累計(jì)超過二十年了。截至現(xiàn)在,,我開辦過的編程入門課程的數(shù)量也有半打之多,。我在教授編程上花費(fèi)的所有時(shí)間,總數(shù)大約是一千多個(gè)小時(shí),。以下是我的一些肺腑之言,,至少給我的學(xué)生反復(fù)嘮叨過不下一次。注意,,這些內(nèi)容沒有前后順序之分,。