大家好,我是北京大學計算機系的大四學生,大一下學期通過二次選拔進入了北大圖靈班進行學習,目前已經(jīng)直博到清華大學計算機系;本科在校期間,我擔任了北京大學計算概論、數(shù)據(jù)結(jié)構(gòu)與算法 (實驗班)、計算機系統(tǒng)導論課程的助教。近期很多我們的簽約會員表示在編程入門的學習中遇到了困難,今天我來談一談對計算機學習(尤指編程入門)的建議:如今,隨著計算機的快速發(fā)展,計算機學科的應用知識已經(jīng)滲透到各個學科內(nèi),不只限于理科、工科,乃至于社會學、法律、中國語言文學等,各類學科與計算機的結(jié)合無數(shù)不在。如在北京大學,理工科、醫(yī)學部要學計算概論B,文史類要學文科計算機基礎。因此即使學生的專業(yè)不是理工科,掌握基本的計算機技巧也是非常重要的。那么對于不同專業(yè)的學生,對計算機的了解程度、掌握水平與需求肯定也是不同的,在計算機學習上應使用的方法也是不同的。下面我將分別對3類學生給予計算機學習的建議:計算機專業(yè)、非計算機理工科專業(yè)、社科文史哲類專業(yè)。 1. 計算機專業(yè):既需要有熟練的編程能力,也需要對計算機的系統(tǒng)與組成結(jié)構(gòu)有很好的了解。對于C和C++的學習,建議使用c++ primer plus等經(jīng)典教材,并多做編程題,做題會帶來很好的提升。需要特別注意的是,每一門編程語言都不是可以在上課上覆蓋全部功能的,編程注重實踐而不是學習,抱著上述教材看并不是一種正確的學習方式。學習編程一定要多寫多練,同時遇到不明白的問題時查詢上述教材來輔助學習。對于python這類語言可以嘗試自學,并在線上的編程網(wǎng)站上做題進行練習。而計算機的系統(tǒng)與組成結(jié)構(gòu)可以直接看《深入理解計算機系統(tǒng)》這本書,是計算機系統(tǒng)領域的經(jīng)典教材,配合網(wǎng)上的視頻和各種博客可以有很好的理解。 一般學校的計算機專業(yè)課程安排中,大一會學習基本的編程技能,大二會接觸更多的數(shù)據(jù)結(jié)構(gòu)、算法與計算機系統(tǒng)類的課程。在編程課程中,我最大的建議就是多做題、多寫代碼,推薦兩個編程網(wǎng)站:洛谷:首頁 - 洛谷 | 計算機科學教育新生態(tài)和POJ:OpenJudge。練習的內(nèi)容可以跟上課的進度保持一致,多做題既可以幫助我們掌握課程內(nèi)容,也可以為我們后續(xù)的學習打好基礎。對于大一的算法題來說,是否會寫是一回事,是否會debug得到分數(shù)又是一回事,大部分情況下bug并不是細心就可以避免的, 所以掌握合理的debug方式和工具非常重要,這里推薦大家學習麻省理工學院的課程,missing semester,專門講解編程工具。 對于不好理解的算法,在看了答案或者問了同學之后,一定一定要自己寫一遍,畢竟從考試的角度來說,如果不能bug free的寫出一道題,就無法得到分數(shù)。在數(shù)據(jù)結(jié)構(gòu)、算法課程中,代碼訓練依舊很重要,編程練習仍是必不可少的,因為大部分學校都仍會在考試中設置機試環(huán)節(jié),依舊可以去前面所說的編程網(wǎng)站上做題。對于算法的分析(復雜性、正確性等)則需要較好的數(shù)學基礎,推薦閱讀《算法分析》這本經(jīng)典書籍。 2. 非計算機理工科專業(yè):并不需要很熟練的編程能力,更多的是要學會如何使用編程作為學習、科研的工具,對python語言的要求,以及matlab這類工具的使用可能會更多,而學校也一般會開設C或C++的課程。因此對C或C++可以在學校的課程中學習,而python、matlab等可以通過網(wǎng)上的資料進行學習(如廖雪峰),并且一定要多使用。可以試著用這些工具寫一些專業(yè)課中學到的內(nèi)容(如物理學、數(shù)學專業(yè)可以試著用matlab繪制函數(shù)圖像),加深理解。 3. 社科文史哲類專業(yè):需要基本的編程能力(如python)與一些軟件的使用技巧(如excel),雖然要求不高,但文科生可能會缺乏計算機的思維體系。編程的本質(zhì)原則是邏輯,在此之上,每種語言有自己特定的格式與語法,因此對文科生而言,理解邏輯+掌握語法是兩個基本要求,也可以說是全部要求。因此,文科生在學習計算機時,一定要多思考代碼的邏輯,并關注語法上的細節(jié),在細節(jié)上的問題可以多詢問身邊理工科、計算機專業(yè)的同學。與此同時建議閱讀簡單、基礎的學習資料,沒有必要學得太難太深。 |
|