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