你們好,我是上外附中的馬騁遠,也是一個地道的電腦迷,在這裏我想和你們交流一下我學習編程的過程和方法。其實,在我看來,興趣是最好的老師!
個人編程之旅開始於五年級的寒假,一位朋友說他爸爸要教他編程,出於對信息的興趣和朋友之間的攀比,我也跟着學了起來,學着學着才知道原來學的是大名鼎鼎的VB,我磕磕碰碰地在書籍的幫助下作了一個簡陋的計算器。VB算是我學習編程接觸的第一門計算機語言吧。
一年半前我迷上的了一款叫MineCraft的遊戲,那款遊戲裏頭能夠本身編寫模組(即對遊戲自身的擴展),我發現那些模組是用Java編寫的,別人可讓本身的遊戲更加豐富多彩,我爲什麼不可?爲了證實本身能夠,我特意買了一本厚厚的Java書研讀起來。在這個時候我發現了語言的共通性,不少相似的結構,編寫邏輯其實在VB就已學過,這也更讓我意識到:重要的不是在語言,而是算法。由於Java嚴格區分大小寫等語法規則與C、C++、C#極爲類似,這也爲我學習其餘C語種的語言提供了便利。到目前爲止,Java是我研究時間最長,也是我很熟練的一門語言,而這其實純粹是在個人興趣驅動下學習的。
Pascal實際上是我接觸的第三門計算機語言了,在以前Java的學習和練習中對邏輯和算法的瞭解讓我很快上了手。其實一開始學Pascal時我是拒絕的,由於這麼老的語言,這麼低的實用性,如今還能作什麼?我編程的目的向來不是考試,而是創造出一些真正能讓我受益的小程序(例如信息課殺監控啊等等)。可是隨着學習的深刻,我發現它實際上是門很優美而又不失嚴謹的語言,能夠說,它極大地磨練了個人邏輯能力,而這些鍛鍊的成效不只體如今考試上,也對我用其餘語言編寫更高級的程序不無裨益。
在學習的過程當中,徐老師向咱們推薦了ZJ和OpenJudge,不像班內其餘的兩位大牛解題數300+,個人解題數差很少只有七十幾,歸根到底仍是我懶,我想若是我也作到300+的話此次的成績應該能夠在300之上了吧。其實我真是一個很懶的人,我比較懶得背誦快排,高精度等代碼,算法大概瞭解一下便可。由於,你們若是學了其它高級語言就會發現,數列排序都是用語言自帶的Array.sort()或相似庫函數或過程實現的,高精度有封裝好的Decimal,這些都是系統自帶的,寫一句代碼調用便可。這也是先學習其它高級語言的弊端,人會變懶o(╯□╰)o。再次重申,我學編程的目的是爲了興趣,而我最終是但願用所學語言和知識編寫出本身的程序。固然這並非說大家能夠和我同樣懶,我也想勤快一點!同窗們,目前考試是必過的一道坎,因此仍是背背爲好,這些知識在你須要修改算法時也是頗有用的。若是我能背出快排,也許今年NOIP比賽的第三題還能多得40分。~
這邊再來和你們說一說解題的技巧吧,首先目前的題目大可能是數學題,要有清晰的邏輯思惟,因此去學奧數吧騷年!數學功底必須有。碰到題目先讀懂,不要一開始就想着最優,我是一開始先想出最笨(就是效率最低下可是必定能作出來的那種)的算法,後來在思索着怎麼優化,這些優化大可能是數據範圍減小,循環嵌套次數減小等,你若真找不出最笨算法,那就簡化簡化再簡化,必定能作出來的,優化不了的話,能拿10分就拿10分嘛!那麼程序運行中會出現一些莫名其妙的bug,而你又腦子卡殼了怎麼辦呢?這個時候就須要調試,我以爲在運行過程當中writeln一些變量的值是一個簡單粗暴的好方法,只是要記得把最後他們註釋掉便可。不要單純輸出值,也能夠用標示或句子連起來,更直觀。
這些就是我想給你們分享的解題策略和學習編程的心路,學習的過程當中能夠有目標,但不要太有「目的」(好比比賽得獎之類)。若是「目的」至上,那麼失敗的話就會是一件超級倒興的事,「興」都倒完了,我以爲確定不會再有好的學習結果。
祝你們好好編程,每天向上,以此文與你們共勉!
馬騁遠:現就讀於上外附中,2015年NOIP普級組一等獎(上海市排名第二十)。馬騁遠是一位善於鑽研、勇於表達的同窗,他在編程之路上學以至用的目標和不斷探索鑽石的精神值得咱們學習。