在你學(xué)習(xí)編程之前楣颠,請(qǐng)先思考“我想開(kāi)發(fā)什么”
學(xué)會(huì)如何編程主要是為了實(shí)現(xiàn)某些功能滨砍,如果你對(duì)最終目標(biāo)有著清晰地認(rèn)識(shí)祈坠,那么前途會(huì)一片光明。假使你的目標(biāo)只是“會(huì)編程”而非制作某種給自己帶來(lái)便利的程序汪榔,你很有可能就會(huì)發(fā)現(xiàn)編碼是一件極其令人沮喪的運(yùn)動(dòng)。
我稍微有點(diǎn)羞于承認(rèn)我學(xué)習(xí)計(jì)算機(jī)科學(xué)的部分原因是證明自己是多么的聰明以及獲得一份聰明人的工作肃拜。當(dāng)然痴腌,我非常樂(lè)于思考數(shù)學(xué)和理論(這本書(shū)對(duì)我影響深遠(yuǎn))雌团,所以編程契合了我的這一興趣。然而僅僅這樣不足以讓我在編程道路上走得很遠(yuǎn)士聪,直到我發(fā)現(xiàn)了我真正喜愛(ài)的領(lǐng)域(比如音樂(lè)和文學(xué))和技術(shù)之間的紐帶锦援。
所以,你為什么想要編碼剥悟?建網(wǎng)站灵寺?做游戲?做App?一個(gè)讓你致富的機(jī)會(huì)区岗?交互式藝術(shù)替久?你是否想打動(dòng)你的老板或者自動(dòng)執(zhí)行一些繁瑣的任務(wù)來(lái)讓你有更多的時(shí)間去欣賞其他照片?也許你僅僅是希望能更好的就業(yè)躏尉、往簡(jiǎn)歷里添加一些時(shí)髦的詞句或者完成教育計(jì)劃的要求蚯根。這些都是有價(jià)值的目標(biāo)!請(qǐng)確定你自己的目標(biāo)胀糜,并以此作為前進(jìn)的動(dòng)力颅拦。
這沒(méi)什么神秘的
編碼同樣也是技巧。像學(xué)習(xí)語(yǔ)言教藻,有語(yǔ)法和詞匯要掌握距帅;像數(shù)學(xué),有完成特定類型的問(wèn)題的流程括堤;像各種工藝和藝術(shù)創(chuàng)作碌秸,有人們已經(jīng)開(kāi)發(fā)一段時(shí)間的技術(shù)和工具和最佳實(shí)踐,你可以自由地使用或修改或放棄以適應(yīng)特定的不同的任務(wù)悄窃。
這位仁兄 (非常聰明讥电!他的另一作品我非常喜歡,經(jīng)常有共鳴轧抗!) 提出恩敌,碼農(nóng)的真實(shí)想法和其他(在這一領(lǐng)域欠缺獲得成功所需要的能力的)人有條明顯的分界線。這條分界線是横媚,據(jù)他所說(shuō)纠炮,指針和遞歸(如果好奇,可以參閱相關(guān)入門(mén)書(shū))灯蝴。
我在學(xué)校里了解到指針和遞歸恢口,等我掌握它們的時(shí)候,它令人愉悅地顛覆了我的大腦穷躁,這種智慧的快感讓我想把學(xué)習(xí)計(jì)算機(jī)科學(xué)放在首位耕肩。但是,在課堂作業(yè)之外,我已經(jīng)了然于心的概念助我把事情做好的次數(shù)已經(jīng)越來(lái)越少看疗。與此同時(shí)沙峻,當(dāng)我?guī)椭说臅r(shí)候,一次又一次發(fā)現(xiàn)人們無(wú)需了解任何東西就可以完成有趣而又有益的項(xiàng)目两芳。
如果你足夠睿智的話摔寨,懷疑或恐嚇沒(méi)有一點(diǎn)意義。當(dāng)然怖辆,你的任務(wù)越復(fù)雜是复、越深?yuàn)W,你更需要精通于它竖螃。但是這并非意味著與世隔絕淑廊。除非你打算用代碼充滿整個(gè)生活,否則你不必成為一個(gè)遞歸領(lǐng)域的天才才能做你想做的事情特咆。
沒(méi)有第一次就不會(huì)有下一次
當(dāng)你第一次開(kāi)始學(xué)習(xí)編程時(shí)季惩,這種特殊的經(jīng)歷很快就會(huì)出現(xiàn):你會(huì)覺(jué)得已經(jīng)搭建了所以認(rèn)為需要的環(huán)境,已經(jīng)檢查了無(wú)數(shù)次腻格,但是仍然有問(wèn)題画拾。你不知該怎么樣開(kāi)始修補(bǔ)它,而且錯(cuò)誤信息(如果你很幸運(yùn)地看到了)還在嘲笑你菜职。此時(shí)此刻青抛,你極有可能會(huì)試圖放棄,極有可能認(rèn)為永遠(yuǎn)都無(wú)法弄清楚酬核。當(dāng)我在第一次嘗試用c++寫(xiě)程序的時(shí)候出現(xiàn)了這種情緒蜜另。運(yùn)行程序,但是只得到了“segmentation fault”的提示嫡意。
其實(shí)举瑰,這種經(jīng)歷對(duì)程序員(無(wú)論是菜鳥(niǎo)還是大神)來(lái)說(shuō)是非常正常的,它無(wú)關(guān)你的智力鹅很、技術(shù)知識(shí)或者是否適合以編程作為終身職業(yè)嘶居。這種經(jīng)歷會(huì)在你初學(xué)編程時(shí)出現(xiàn),同樣也會(huì)在你作為經(jīng)驗(yàn)豐富的專家時(shí)出現(xiàn)促煮。唯一的不同僅僅是你如何去應(yīng)對(duì)它。
我發(fā)現(xiàn)菜鳥(niǎo)和大神之間最大的不同是信仰:邏輯和可發(fā)現(xiàn)的原因會(huì)變?cè)阏粏?wèn)題是可修復(fù)的菠齿;達(dá)成目標(biāo)的方法依然存在∽迹“不工作”到“工作”的通道可能不是顯而易見(jiàn)的绳匀,但事在人為。
總有人告訴你“你做錯(cuò)了”
括號(hào)應(yīng)該放在下一行。 括號(hào)應(yīng)該放在同一行疾棵。 使用tabs來(lái)縮進(jìn)戈钢。但是tabs是魔鬼。你應(yīng)該使用存儲(chǔ)過(guò)程, 但是實(shí)際上你不應(yīng)該使用他們是尔。你應(yīng)該總是給你的代碼添加注釋殉了, 但是好的代碼不需要注釋。
幾乎每一個(gè)問(wèn)題都有許多不同的解釋拟枚,沒(méi)有惟一的“正確答案”薪铜。許多程序員善于提倡他們中意的方法,但是這并不意味著它是惟一正確的方法恩溅。去迎合其他人的經(jīng)歷告訴我“我錯(cuò)了”隔箍,在我職業(yè)生涯的早期,試圖找出他們是否正確是造成我緊張的一個(gè)原因脚乡。
如果你在團(tuán)隊(duì)里編程蜒滩,幾乎肯定會(huì)有人將你正在做的事情拿出來(lái)討論,有時(shí)他們是絕對(duì)正確的奶稠,而且事實(shí)上帮掉,調(diào)查你是否出錯(cuò)總是一件有價(jià)值的事情。但是有時(shí)他們卻是徹底地瞎搞窒典,或者重新提出一個(gè)古老而又無(wú)意義的爭(zhēng)論——遵循一個(gè)風(fēng)格指南是最好的蟆炊。
另一方面,如果你是那種享受古老而又無(wú)謂的爭(zhēng)執(zhí)的人(嘿瀑志,語(yǔ)法呆子涩搓,我正盯著你呢),那你來(lái)對(duì)了地方劈猪。
總有人告訴你“你不是真正的碼農(nóng)”
HTML并不是真的編程語(yǔ)言昧甘;如果你不使用vi,你不是職業(yè)的;真正的程序員懂C皱炉;真正的碼農(nóng)不使用Windows茧彤;有些人永遠(yuǎn)沒(méi)能力學(xué)習(xí)它;你不應(yīng)該學(xué)編程浇冰;你不是一個(gè)計(jì)算機(jī)程序員(但我是)。
“編碼”對(duì)很多不同的人意味著很多不同的事情聋亡,它也看上去和過(guò)去相比相差甚遠(yuǎn)肘习。而且很有趣的是,工具坡倔、包漂佩、框架讓新手或是受過(guò)訓(xùn)練的開(kāi)發(fā)者能夠更快更簡(jiǎn)單的開(kāi)發(fā)出會(huì)被歸類為“不是真正的碼農(nóng)”的“碼農(nóng)”脖含。(見(jiàn): “Return of the Real Programmer”)
在這背后最令人擔(dān)憂的是,如果任何人都可以稱自己是程序員投蝉,那么這個(gè)頭銜將一無(wú)是處养葵。但是我認(rèn)為這看守是毀壞主義者。
使用工具使得我們能夠更容易開(kāi)發(fā)出我們希望的程序瘩缆。如果這意味著你的游戲是基于Stencyl或GameMaker关拒,而不是從頭構(gòu)建,那很好咳榜。如果你第一次涉足編碼是HTML或Excel宏夏醉,那也很好。請(qǐng)做那些你覺(jué)得能堅(jiān)持的涌韩。
隨著你獲得更多的便利畔柔,你會(huì)很自然地開(kāi)始尋找這些工具的限制而非它的幫助,并開(kāi)始尋找更強(qiáng)大的代替品臣樱。但是絕大多數(shù)時(shí)間靶擦,很少有人會(huì)看你的代碼或問(wèn)你使用的是什么——你做的是什么才是最重要的。
擔(dān)心“名揚(yáng)在外的怪咖”是慢性自殺
在之前雇毫,尤其在學(xué)校里的時(shí)候玄捕,我習(xí)慣于擔(dān)心很多關(guān)于我是否因?yàn)槲业姆b、外表棚放、我閱讀的領(lǐng)域選擇枚粘、甚至我的軟件定制選擇而被認(rèn)為是“非真正的極客”(從而無(wú)法進(jìn)入技術(shù)社區(qū))。這浪費(fèi)了我很多的精力飘蚯,隨著我決定將其拋之腦后馍迄,我開(kāi)始變得更加實(shí)在。
你需要這個(gè)內(nèi)在感受:你善于編程的能力和你是否能融入技術(shù)族群無(wú)關(guān)局骤。如果你在內(nèi)心深處認(rèn)為你永遠(yuǎn)無(wú)法融入攀圈,那么你花費(fèi)在證明自己而非做事實(shí)上的精力會(huì)加倍。如果在你眼里你是一個(gè)不爭(zhēng)的有名的極客峦甩,當(dāng)你評(píng)估其他人的名氣時(shí)請(qǐng)埋于心底赘来。這可能并非你所想的那樣。
堅(jiān)持比方法更重要
關(guān)于“正確”的或“最好”的學(xué)習(xí)編程的方法的文章非常少凯傲,但是也有很多潛在的方法犬辰。你可以從書(shū)中、完成交互式練習(xí)或者調(diào)試別人的代碼來(lái)學(xué)習(xí)泣洞。當(dāng)然忧风,還有很多種語(yǔ)言可供你選擇首先去學(xué)習(xí)。
在“自學(xué)編程”項(xiàng)目研討會(huì)上球凰,最普遍的爭(zhēng)論是:你會(huì)在初學(xué)者材料中感受到愉悅狮腿,但是很快隨著難度的增加開(kāi)始出現(xiàn)陡峭的曲線。你知道怎么樣在一張紙上打印文字呕诉,卻無(wú)處下手缘厢。你或許覺(jué)得只是在沒(méi)有真正理解的情況下走錯(cuò)了方向,并怪罪于學(xué)習(xí)材料甩挫。
當(dāng)你進(jìn)入這個(gè)階段贴硫,大多數(shù)教程和在線資源默認(rèn)你是有經(jīng)驗(yàn)的程序員,所以對(duì)你產(chǎn)生的幫助會(huì)微乎其微伊者。由于“你不知道你不懂什么”英遭,困難會(huì)隨之進(jìn)一步加劇,甚至試圖規(guī)劃出下一步學(xué)習(xí)什么本身就是一個(gè)難題亦渗。
你在“學(xué)習(xí)編程”中無(wú)論遇到什么問(wèn)題都可能會(huì)遇到坎挖诸,而翻過(guò)這堵墻唯一的途徑是持之以恒。這意味著你要始終嘗試新事物法精、學(xué)習(xí)更多東西多律、找到完成你的項(xiàng)目的一點(diǎn)一滴。如果你對(duì)為什么學(xué)習(xí)編程有著清醒的認(rèn)識(shí)搂蜓,你最終將更有機(jī)會(huì)獲得成功狼荞。
如果有問(wèn)題不去解決,最終你會(huì)被堆成山的問(wèn)題壓垮(雖然需要很長(zhǎng)一段時(shí)間)帮碰。這時(shí)我前面提到的信仰就派上用處了相味。如果你堅(jiān)信只要肯用時(shí)間和耐心,到時(shí)候你肯定將能夠完成整個(gè)項(xiàng)目殉挽。
英文原文發(fā)表于:Things I Wish Someone Had Told Me When I Was Learning How to Code
很久沒(méi)寫(xiě)文章了丰涉,也很久沒(méi)翻譯外文了,組織語(yǔ)句能力直線下降啊此再,請(qǐng)湊合著看吧昔搂!其實(shí)應(yīng)該也不至于那么不堪的。