1. 程式人生 > >大學計算機的那些事兒 ---寫給曾經和我一樣迷茫的新生

大學計算機的那些事兒 ---寫給曾經和我一樣迷茫的新生

        還記得大三搬到實驗室,有一天上網,看到一個童鞋發帖問,計算機應該怎麼學?說實話,當時自己也很茫然,想提筆寫點什麼,但終究覺得自己能力不夠,也就作罷。時間就這麼過了好久,漸漸地也能感覺到學計算機的怎麼才能很好地提高自己的程式設計水平,趁著侄女學計算機需要我指點一二,將自己對計算機的領悟做個總結。

        回顧下大學四年的計算機生涯,對自己影響最深的課程當屬資料結構了。其他課程諸如計算機作業系統、計算機網路和計算機組成原理也很重要,深入理解,會讓你對整個計算機有更深刻的認識。

        我不打算就如何學好這些課程做深入探討,雖然我以前學習也是囫圇吞棗,不過我還是建議:第一,認真學習資料結構,它是你進入計算機世界的通行證。無論是作業系統還是網路,在實際設計的過程中,都會用到資料結構,比如作業系統的檔案系統會用到紅黑樹等樹的知識;第二,無論學習任何一門課程,原理很重要,但是動手實踐的能力也很重要。課程設計只是點到為止的知識鞏固,要想真正掌握一門技術,必須自己多鑽研,學會自己動手編寫一些小例子去驗證某些原理。你無法想象自己會在動手程式設計驗證的過程中的收穫。

        我寫這篇部落格的原因在於,希望那些真正想提高自己的人不會走彎路。其實學會一門程式語言並不難,語言之間都是相通的,學會了C++,再去學Java,並不會有多大阻礙。程式設計本身並不難,相反,只要你掌握了門道,它其實是一件很快樂的事情,能帶給你很大的成就感,尤其是你編的小程式被別人認可的時候。阻礙我們成為程式設計高手的,其實是我們自身的惰性。以前室友總是會做一些有用的小程式,比如開關機程式、手機和電腦傳檔案的程式,我都不以為然,我覺得這些網上都有很成熟的程式了,自己再去做真是浪費時間,我要想個絕佳的創意,然後再去動手實現它。現在我真是後悔有那種想法,在你不是一個絕世高手之前,利用一些小程式練練自己的技術,絕對有益無害。技多不壓身,只要你有技術,如何將技術變現就只是時間的問題了。

        假設你已經學好資料結構了,我的建議是,去ACM多練習練習,這時候演算法對你很重要,推薦你看看演算法導論,經典中的經典。練習ACM的好處在於,你對演算法的理解會上一個檔次,這對於你今後無論是找工作或者參加計算機類的競賽,都是脾益良多的。多說幾句,大公司在招聘的時候,考的很多都是基本的演算法知識,很多基本上屬於ACM難度適中的題目。如果你對ACM和演算法有很濃厚的興趣,不妨去學院看看有沒有ACM校隊,如果有,可以參加他們的集訓,爭取加入他們;如果沒有也不必擔心,現在有很多計算機程式設計大賽,只要你夠勤奮,總會有讓你閃光的舞臺。

        假設你對計算機演算法已經有了比較深刻的認識,對演算法時間/空間複雜度、演算法優化有了進一步的理解,恭喜你,現在開始學習一些軟體開發工具也不會太晚。現在的移動網際網路很熱,每個人手上都會有一臺Android/Apple手機,網上關於Android開發/IOS開發的教程很多,相信學會其中任何一種都不會很難,只要你自己堅持寫下去。這時候,如果你有任何的創意點子,都可以手到擒來,編個程式裝到自己手機裡,說不定你就是下一個facebook呢。

        假設我們都不是天才,天才也不會需要看這種文章了,我們的程式設計只是在新手和中手之間徘徊。那我們怎麼才能成為高手呢?充其量我也只能算箇中手吧,但是我對於如何成為高手還是有一些理解的。在成為高手的路上,學會分享是很重要的。不要吝嗇自己的筆墨,隔一段時間看一些專業相關的書籍,學著寫部落格,分享你對新技術的理解、對知識的總結。如果你想更近一步,加入開源專案組會是一個不錯的建議。好的開源專案會有一堆高手在維護,就像linux當年是如何發展壯大的,在這些高手的耳濡目染下,你離高手也就指日可待了。