莫瑜 程式設計,從簡單的開始動手

2022-02-25 08:12:35 字數 1788 閱讀 7093

csdn教師節感恩專題活動**:

感謝中山大學計算機系  郭嵩山老師

我現在是一名軟體開發工程師,畢業快兩年了。回想剛到中山大學電腦科學系報到的時候,跟大多數初學者一樣的迷茫。軍訓休息的時候,坐在我後面的同學討論著對於當時的我來說天書般的「八皇后」問題;而我那個時候只知道程式有順序,條件和迴圈三種結構。有很長的一段時間裡,我深刻地體會到「萬事開頭難」。甚至,我有時暗地裡想當初要是選擇去數學系或者物理系就好了(高中自學過高等數學和四大力學。現在想來當時會的其實也並不多)。

要學好計算機,當然要學習程式設計。聽說到「程式=演算法+資料結構」,我也到圖書館找演算法和資料結構的書來看。當時,這些書也的確都看下去了,裡面也有很多圖,看起來倒也不難,讀書筆記也記了一些。但顯然是囫圇吞棗一知半解,基本屬於知道有這些資料結構,至於為什麼弄這麼多資料結構,這個跟程式有什麼相關,為什麼說「程式=演算法+資料結構」,而又有人說演算法和資料結構是跟你使用什麼語言不相干的。我當時也不明白,上關於程式設計的課,寫出來的程式好像做不了什麼複雜的事情,作業大體還是計算個人所得稅或者學生成績統計之類的。

真正在程式設計方面開始入門,得益於我的導師,郭嵩山教授。郭老師多年來一直致力於在廣東省普及和開展青少年資訊學奧林匹克競賽,從小開始培養中小學生計算機程式設計能力。在大學校園內,也積極組織和推廣程式設計競賽,鼓勵大家動手程式設計,而不只侷限於「紙上談兵」。這些活動在計算機系,乃至整個學校形成乙個動手學習程式設計的良好氛圍,推動了程式設計學習的教學。當時,我抱著試一試的想法去參加學校的程式設計比賽。比賽中的問題一般都有一定的應用背景,涉及生活的方方面面,讓你覺得自己可以寫程式解決實際的問題。實際的問題抽象出來的題目,比書本中單純的理論對於初學者來說更切近生活,也更有趣。通過動手解決這些問題,我可以體會到書本中知識的「所以然」。學習的理論知識能幫助我解決這些問題,而解決這些問題又引導我去學習新的知識。另外,解決問題的過程在思考方式上更加自然,我可以「從簡單的開始動手」。

比如,為了尋找乙個問題的答案,我用「窮舉」的方法,所有變數的各種可能都組合考慮一遍。變數很少的時候,我可以用for語句寫幾重迴圈。但,如果變數數目很多,假如有30個變數,那麼我沒有辦法去寫30重迴圈。這個時候,我就開始改用本質上沒有變化的「遞迴」程式來實現,30重迴圈就變成了遞迴搜尋30層。遞迴程式如果很慢,就去考慮在「搜尋」的過程中「剪枝」,去掉不必要考慮的分支,節省解決問題的時間。如果某乙個分支已經被解決了,那就沒有必要多次去搜尋這個分支。在第一次搜尋這個分支的時候,記錄下我們感興趣的資訊,以後當再次需要搜尋這個分支的時候,已經可以從記錄中得到關於這個分支的我們感興趣的資訊,這就是「記憶化搜尋」。在問題的搜尋樹中,分支如果經常多次存在,而搜尋乙個分支可以轉化為搜尋它的若干個子分支,那麼把分支的情況看成乙個「狀態」,而分支跟子分支之間的關係就是「狀態轉換」,剛才通過使用「記憶化搜尋」的方法記錄每個分支(狀態)的情況,從而避免搜尋重複的解空間的思路,其實就是「動態規劃」的思路。

經過動手實踐,這些「深奧」的概念變得「理所當然」。我開始進步,並通過計算機這位「聽話的朋友」來幫我做很多我想做而做不了的事情。在郭老師的努力下,越來越多像我一樣的同學開始動手程式設計,而不是以傳統的深究語法的方式學習程式設計。郭老師也由於在組織和開展程式設計競賽方面做出傑出的貢獻,於今年獲得首屆acm/icpc優秀教練獎。

回想起這些年來學習程式設計的經歷,我覺得,要學好程式設計,重點得動手去實踐。哪怕從乙個簡單的問題開始,從乙個簡單的方法開始。

「獻給老師,我的程式設計之路

」系列文章

鄒欣:回憶程式設計路上的啟蒙老師

劉鐵鋒:物理老師的程式入門課

莫瑜:程式設計,從簡單的開始動手

胡睿:感謝清華大學計算機系的朱仲濤老師

樑舉:恩師的鼓勵,從數學到計算機

李東:我的程式設計起步

陳遠:興趣是永遠的老師

張曉:我與程式

WeQuant教程 1 2 從簡單的量化系統開始

你大概知道量化的思想最早在古巴比倫人計算行星軌跡的時候就已經誕生 算術運算 後來借助古希臘的形式化邏輯的發展,人們日益能從量化的思想中提煉和描述自然規律並運用到生產之中。不過,基於量化的思想打造乙個交易系統,到底是什麼體驗呢?於是你踏上了量化的不歸路 硬生生的概念彷彿是刻在石碑上的咒文。硬著頭皮往下...

先從簡單的開始

今天繼續看了一下資料,我的理解是,對於單機的記憶體修改和僅僅是模擬滑鼠和鍵盤動作需要用幾個api就行了,記憶體修改的小掛,去年做了乙個,模擬鍵盤和滑鼠的今天看能不能做乙個,11的外掛程式我還沒什麼頭緒啊,乙個聯上網的外掛程式還不能做,就直接解決那樣的問題,先做會簡單得吧.在資料上看到,在做單機和網路...

從簡單的通道預計說起

前面寫了關於cp在ofdm中的應用,主要是記錄一點零星的想法而已,今天突然想寫點關於通道特性方面的東西。原因有下面幾點 1 通道在 中的地位不容置疑,不同通道的條件下的 是很多課題的重點,自己差點兒還沒入門。2 正由於沒入門,所以僅僅能從最簡單的通道預計說起,當然也會談到cp的問題,畢竟是由於 cp...