野生程序員初長成——記北大程序設計與算法專項課程


博客中的文章均為meelo原創,請務必以鏈接形式注明本文地址

 

《程序設計與算法》是北京大學在Coursera上開設的一個專項課程。專項課程由6門課程構成,分別是計算導論、C程序設計、C++程序設計、算法基礎、數據結構基礎、高級數據結構與算法,外加一個編程畢業項目。專項課程沒有假定任何先修知識,如果你對編程感興趣或者羡慕程序員的高工資,你都可以學習這個專項課程來感悟編程的滋味。教授這些課程的老師都是北大的教授,所以課程的內容是毋庸置疑的。下面是教授專項課程的四位老師。

這6門課程,每門課程大致有6周的課程內容,真實對應於北大開設的三門課。所以不用說,這個專項課程還是有一定挑戰的。

計算導論/C程序設計

前兩門課主要介紹C語言,老師的設定是沒有任何的編程基礎,所以即便你是一個文科生也完全不必擔心。如果你有一定的編程基礎,就完全沒有必要觀看所有的視頻了。其實這兩門課程是我最后完成的,每門課程只是花了一個星期做作業。

通過公開課來學習編程語言最大的一個好處是,可以在學習到一個新的語法或者算法理論的時,編寫程序來實踐。這在英文里叫learning by doing,在看視頻學習理論的時候你覺得課程明白了,但只有在寫程序的時候你才會發現事實上並非如此。專項課程的每門課的每一周都有很有趣有富有挑戰性的習題,是非常好的實踐機會,所以我建議一定要仔細思考,然后獨立完成,這樣你的收獲才會最大。

C++程序設計/算法基礎

《C++程序設計》主要介紹了C++的一些語法,主要是C++面向對象的特性。由於是初次接觸,時不時被一些概念給弄糊塗了,什么static、const總是傻傻分不清楚。這門課令我印象最深刻的要數課后作業,編寫一個魔獸世界的對戰游戲,這個游戲充分應用了C++面向對象的特性,算是對學習內容的一個很好的實踐。寫這個程序花費了整整兩天的時間,800行代碼,算是我寫的單一項目里最長的程序了。但這還沒完,這只是實現程序的邏輯,測試的時候就出現了一大堆的錯誤。這個程序的輸出很長,以至於需要用一個兩個文檔對比的軟件,來尋找錯誤的位置。又花費了整整兩天時間,才把所有的bug搞定了。

《算法基礎》介紹了一些基本的數據結構比如堆棧、隊列、深度優先搜索以及算法的三種基本思想貪心、分治和動態規划。這門課主要是通過講授例題的方式來教學的,這些例題往往是經典的ACM競賽的題目,都有一些小小的難度。作業也一樣很多都是來自ACM競賽,有時一道題思索許久也沒有思緒,我也咬着牙沒有去搜索答案,第二天再想想課程由發現了其中的奧秘。這樣當完全憑自己的努力完成一道題的時候,成就感不知不覺油然而生。

也正是這門課,把我帶到了程序設計競賽的道路,這門課的一個老師郭煒就是北大ACM教練。主要是完成這門課的課后作業,poj(北大ACM在線評測)上的排名就刷到了20000以內。在學校,IEEE舉辦編程競賽也拿到了第10名的好成績,要知道第一名可是參加過ACM全球總決賽的大神啊。

數據結構基礎/高級數據結構與算法

《數據結構基礎》和《高級數據結構與算法》主要介紹了樹、圖、棧與隊列這些基本的數據結構,和基於這些數據結構的算法。其中的很多算法都是初次接觸,到目前為止還有一個很關鍵的信息我沒有說,在學習這一列課程的時候,我沒有讀過一本教材。但學習的過程中必然有,困惑不解的時候,這是我會去搜索其它學習者錄制的視頻。老師對這些問題爛熟於心可能忘記了困惑的時刻,這些初學者制作的視頻就能把這些問題講解地非常透徹。

與之同時課程的難度也在慢慢地攀升,光數據結構二叉樹就衍生出紅黑樹、伸展樹、B樹、B+樹、后綴樹、Trie,而且相當一部分都不太符合直覺,難以理解為什么需要這樣設計。好在課后編程習題並沒有太過難為這些概念。

程序開發項目實踐

專項課程的最后一門課在Coursera叫做Capstone,也就是畢業項目。畢業項目是完成一個搜索引擎,算是專項課程的高潮了。畢業項目有7個作業,每一個作業都給出了項目的框架,以及需要完成的功能。7次作業分別是對句子進行分詞,不定長文檔的存儲,倒排表的存儲,文檔根據檢索詞進行打分,倒排表的二分查找,多個檢索詞的與或非操作以及檢索表達式的轉換。前4次作業跟多的是關於stream的操作,由於不熟悉stream的特征,總是掉進坑里;后3次更多的考察算法,需要實現一個有特殊要求的二分檢索的函數和一個類似表達式求值的函數。在做畢業項目的時候,多數情況是很快就實現了要求的功能,提交到測試平台上得分卻是個零蛋,然后苦惱地把項目的要求看了一遍又一遍,然后發現自己的理解似乎有些問題。據說畢業項目是騰訊合作設計的,完成之后有獎金和實習的機會。很幸運的是,我是第一個完成畢業項目的人,很期待接下來會發生什么!

2016年從1月開始,到6月的結束,我完成了第一個Coursera的專項課程。不知不覺,我也能夠寫上千行的代碼,完成一個像模像樣的項目了。一點一滴的學習,一步一步的成長,回過頭來,才發現原來我收獲了這么多。感謝精心設計專項課程的四位老師,以及幫助過我的助教們。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM