今天恰好是我編程一年的紀(jì)念日浑玛,回想起去年這個(gè)時(shí)候?qū)幊蹄露奈野惭bVS2012時(shí)的興奮绍申,到今日還算是入了編程的門(mén)(僅僅是自我感覺(jué):P),心中還是有不小的成就感的顾彰。此刻閑來(lái)無(wú)事极阅,就紀(jì)錄下我這一年來(lái)編程的一點(diǎn)經(jīng)過(guò)和感悟吧。
確切地說(shuō)我第一次接觸programming并不是在去年涨享,相反我很小的時(shí)候就接觸了Logo語(yǔ)言筋搏。單單是說(shuō)名字的話(huà)可能很多人并沒(méi)聽(tīng)過(guò),但提到一只帶著畫(huà)筆的小海龜可以在你輸入特定指令的情況下做出相應(yīng)的回應(yīng)厕隧,例如畫(huà)個(gè)圖形奔脐,可能很多我的同齡人都會(huì)恍然一悟的感覺(jué)吧。但是由于當(dāng)時(shí)年齡太小吁讨,所以并沒(méi)有從中學(xué)到什么髓迎,也沒(méi)有感受到編程帶來(lái)的快樂(lè)。
真正讓我開(kāi)始學(xué)習(xí)編程的應(yīng)歸功于我在學(xué)校選修的一門(mén)html的課程(但html實(shí)際上并不算是編程語(yǔ)言建丧,因?yàn)闆](méi)有圖靈完備竖般,可以歸類(lèi)于標(biāo)記語(yǔ)言)。就像人類(lèi)的極致樂(lè)趣在于毀滅和創(chuàng)造一樣茶鹃,從html我感受到了僅僅用頭腦就可以創(chuàng)造一個(gè)我獨(dú)有的世界的快感涣雕。但是當(dāng)時(shí)學(xué)校教的內(nèi)容太淺,無(wú)法滿(mǎn)足我剛被撩起的強(qiáng)烈興趣闭翩,因此我決定認(rèn)真的選擇一門(mén)語(yǔ)言開(kāi)始編程的學(xué)習(xí)挣郭。
由于剛開(kāi)始什么也不懂,粗略的在網(wǎng)上瀏覽了一下相關(guān)資料疗韵,我決定選擇c++兑障,這個(gè)在國(guó)內(nèi)大學(xué)被普遍用于入門(mén)的語(yǔ)言。其實(shí)后來(lái)我才知道蕉汪,在國(guó)外的話(huà)用java和python入門(mén)更加普遍流译。但是如果讓我重新選擇的話(huà),我相信我是不會(huì)更改的者疤。因?yàn)閏++的難度系數(shù)比較高福澡,雖然學(xué)習(xí)曲線(xiàn)更加陡峭,但后來(lái)學(xué)習(xí)其他語(yǔ)言的話(huà)是較為輕松的驹马。例如java語(yǔ)法層面的掌握我僅僅用了3天左右革砸。
對(duì)我來(lái)說(shuō)邁出編程的第一步通常是最難的除秀,找到開(kāi)發(fā)工具,安裝并設(shè)置工作環(huán)境算利,選擇合適自己的教程册踩,以及強(qiáng)迫自己適應(yīng)c++的編程思想,都是需要努力克服的障礙效拭。但是一旦第一步邁出之后暂吉,后面的學(xué)習(xí)就相對(duì)于比較輕松了。興許是我對(duì)編程有一點(diǎn)talent :P,像對(duì)剛?cè)腴T(mén)的初學(xué)者來(lái)說(shuō)比較難理解的概率缎患,例如指針借笙,函數(shù)等,我都較快的上手了较锡。在這里我冒昧的介紹一下我的學(xué)習(xí)方法:學(xué)完某一個(gè)概念后,一定要積極的實(shí)踐盗痒,最好是能夠創(chuàng)造條件給自己設(shè)計(jì)一個(gè)小項(xiàng)目蚂蕴。例如學(xué)完賦值和運(yùn)算符后,可以做一個(gè)簡(jiǎn)易的四則計(jì)算器俯邓,學(xué)完函數(shù)后骡楼,可以做一個(gè)解二元一次方程組的program.
我做的第一個(gè)比較大的練手是控制臺(tái)下的貪吃蛇。雖然當(dāng)時(shí)并沒(méi)有學(xué)到鏈表稽鞭,但很神奇的鸟整,我解決蛇身一起移動(dòng)的思路和鏈表非常相似,可以說(shuō)就是鏈表朦蕴。后來(lái)當(dāng)我學(xué)到鏈表時(shí)篮条,我才驚訝的發(fā)現(xiàn)這不就是當(dāng)初我寫(xiě)的那個(gè)嗎(笑)。解決了蛇身移動(dòng)(包括控制等)后吩抓,我就沒(méi)什么興趣了涉茧。因?yàn)榕袛嗯鲎矇Ρ谑裁吹膶?duì)我來(lái)說(shuō)很繁瑣也并不能提高我什么,因此這個(gè)小項(xiàng)目就擱下了疹娶。但是很久以后我又用Qt做了一個(gè)帶畫(huà)面的完整版:P
大概2個(gè)月左右的話(huà)我就基本把c++的語(yǔ)法層面學(xué)完了(僅僅是語(yǔ)法和概念伴栓,畢竟life is too short to learn c++)。期間用控制臺(tái)用完成了例如學(xué)生管理檔案和俄羅斯方塊等項(xiàng)目雨饺,包括我自己設(shè)計(jì)的控制臺(tái)小游戲的半成品钳垮。這時(shí)也許自己已經(jīng)厭煩了console的單調(diào)和枯燥,于是想尋找一個(gè)能繪制漂亮畫(huà)面的開(kāi)發(fā)框架额港。在眾多c++GUI框架中我先選的是mfc饺窿,然而不知為何系統(tǒng)老是提醒我缺少這個(gè)那個(gè)dll.一怒之下我憤而選擇了Qt,這個(gè)好安裝多了移斩,一路確定點(diǎn)到底短荐,一個(gè)漂漂亮亮的IDE就出現(xiàn)在我眼前了倚舀。
也許人都有惰性,對(duì)新東西都有些抗拒忍宋。一開(kāi)始我用Qt是很不習(xí)慣的痕貌,一是因?yàn)檫@是第一次接觸正規(guī)的文檔(沒(méi)錯(cuò),學(xué)好Qt的精髓就是閱讀文檔)而無(wú)從下手糠排,二是我還不理解Qt的signals-slots機(jī)制舵稠,因此開(kāi)始是非常吃力的。好在在我自我逼迫下入宦,總算是漸漸上手了哺徊。Qt的文檔寫(xiě)的是非常贊的,近乎完全的OOP機(jī)制也讓我有時(shí)候都會(huì)有種寫(xiě)java的錯(cuò)覺(jué)乾闰。
學(xué)Qt的時(shí)候我寫(xiě)了一些項(xiàng)目落追。包括帶有界面的學(xué)生檔案管理系統(tǒng)和貪吃蛇。另外還有表達(dá)式計(jì)算器涯肩,這個(gè)的算法也是我自己琢磨出來(lái)的轿钠,比如就是先尋找"(" 和 ")" 然后尋找/和*最后尋找"+"和"-"等。后來(lái)我才知道還有好幾種比這個(gè)優(yōu)秀很多的算法病苗,現(xiàn)在在看當(dāng)時(shí)寫(xiě)的真是慘不忍睹 XD.?
后來(lái)就想找一些大型的Qt開(kāi)源項(xiàng)目練手疗垛,于是就琢磨起了太陽(yáng)神三國(guó)殺。當(dāng)然太陽(yáng)神三國(guó)殺是c++實(shí)現(xiàn)底層硫朦,上層邏輯是用的lua.沒(méi)辦法我只能先學(xué)起了lua贷腕。好在lua非常簡(jiǎn)單,幾天就基本掌握了咬展,在參照神殺的文檔寫(xiě)了幾個(gè)武將的lua后(想玩的可以找我要源碼泽裳,感覺(jué)技能設(shè)計(jì)的還是很棒的),我就沒(méi)什么興趣了破婆。剛巧這時(shí)候county的tennis season開(kāi)始了诡壁,我又是學(xué)校網(wǎng)球隊(duì)的成員,因此每天放學(xué)后都要訓(xùn)練幾個(gè)小時(shí)荠割,回到家里基本就躺床上了妹卿。因此有幾乎3個(gè)月都沒(méi)碰編程了。
比賽完之后我又花了幾個(gè)星期撿起落下的c++蔑鹦,然后想到自己數(shù)據(jù)結(jié)構(gòu)和算法的基本功都很差夺克,于是開(kāi)始學(xué)習(xí)算法導(dǎo)論這本書(shū)。然而斷斷續(xù)續(xù)的看了一段時(shí)間后由于自己毅力太差又放下了嚎朽。這時(shí)候暑假已經(jīng)開(kāi)始了铺纽,我又參加了當(dāng)?shù)氐腸ommunity service,每天都要在圖書(shū)館幫忙做shelving哟忍。再然后就是回國(guó)一個(gè)月狡门,這段時(shí)間也是沒(méi)怎么碰c++的陷寝。哦,值得一提的是暑假我報(bào)了flvs的APCS其馏,學(xué)的是java凤跑。然而感覺(jué)老師并不很好,學(xué)的進(jìn)度也很慢叛复,對(duì)我吸引力并不大仔引。但是經(jīng)過(guò)c++的打磨自我感覺(jué)對(duì)java的掌握是非常快的褐奥。
從國(guó)內(nèi)回來(lái)我就開(kāi)始接觸CoCo2d-x引擎了咖耘,因?yàn)槲覐暮茉玳_(kāi)始就有想要做出一款好游戲的夢(mèng)想。最好是像limbo那樣棒的獨(dú)立游戲∏寺耄現(xiàn)在雖然開(kāi)學(xué)了儿倒,我的senior year也有很多AP課程導(dǎo)致比較忙,但是希望我能盡快學(xué)完c2x呜笑,從而能離自己的游戲夢(mèng)更近一步夫否。