第一篇:計算機學習心得
計算機科學與技術學習心得
原先不管是國內還是國外都喜歡把這個系分為計算機軟件理論、計算機系統、計算機技術與應用。后來又合到一起,變成了現在的計算機科學與技術。我一直認為計算機科學與技術這門專業,在本科階段是不可能切分成計算機科學和計算機技術的,因為計算機科學需要相當多的實踐,而實踐需要技術;每一個人(包括非計算機專業),掌握簡單的計算機技術都很容易(包括原先Major們自以為得意的程序設計),但計算機專業的優勢是:我們掌握許多其他專業并不“深究”的東西,例如,算法,體系結構,等等。非計算機專業的人可以很容易地做一個芯片,寫一段程序,但他們做不出計算機專業能夠做出來的大型系統。今天我想專門談一談計算機科學,并將重點放在計算理論上。
在我大一時無意中找到了南京大學網友sir的帖子“胡侃(理論)計算機學習”,這個帖子對我大學學習起到了至關重要的指導作用,我在這篇文章成文的時候正是基于sir的文章做得必要的補充和修改,并得到了sir的支持。再有就是每次和本系司徒彥南兄的交談,都能從中學到很多東西,在這份材料中也有很多體現。這份材料是我原來給學弟學妹們入學教育的講稿之一,原有基礎上改進了其中我認為不太合適的理論,修正了一些觀點,在推薦教材方面結合我的學習情況有了較大改變。值得一提的是增加了一些計算機理論的內容,計算機技術的內容結合我國的教學情況和我們學習的實際情況進行了重寫。這里所作的工作也只是將各位學長和同學們的學習體會以及我在學習計算機科學時的所思所想匯總在一起寫了下來,很不成熟。目的就是希望能夠給一些剛入學或者是學習計算機科學還沒有入門的同學以一些建議。不期能夠起到多大的作用,但求能為同學們的學習計算機科學與技術帶來微薄的幫助。還是那句話,計算機科學博大精深,我只是個初學者,不當之處希望大家批評指正。
1、計算機理論的一個核心問題--從數學談起:
[1]高等數學Vs數學分析
記得當年大一入學,每周四課時高等數學,天天作業不斷(那時是七天工作制)。頗有些同學驚呼走錯了門:咱們這到底念的是什么系?不錯,你沒走錯門,這就是計算機科學與技術系。我國計算機科學系里的傳統是培養做學術研究,尤其是理論研究的人(方向不見得有多大的問題,但是做得不是那么盡如人意)。而計算機的理論研究,說到底了,如網絡安全學,圖形圖像學,視頻音頻處理,哪個方向都與數學有著很大的關系,雖然也許是正統數學家眼
里非主流的數學。這里我還想闡明我的一個觀點:我們都知道,數學是從實際生活當中抽象出來的理論,人們之所以要將實際抽象成理論,目的就在于想用抽象出來的理論去更好的指導實踐,有些數學研究工作者喜歡用一些現存的理論知識去推導若干條推論,殊不知其一:問題考慮不全很可能是個錯誤的推論,其二:他的推論在現實生活中找不到原型,不能指導實踐。嚴格的說,我并不是一個理想主義者,政治課上學的理論聯系實際一直是指導我學習科學文化知識的航標(至少我認為搞計算機科學與技術的應當本著這個方向)。
其實我們計算機系學數學僅學習高等數學是不夠的(典型的工科院校一般都開的是高等數學),我們應該像數學系一樣學一下數學分析(清華計算機系開的好像就是數學分析,我們學校計算機學院開的也是,不過老師講起來好像還是按照高等數學講),數學分析這門科學,咱們學計算機的人對它有很復雜的感情。在于它是偏向于證明型的數學課程,這對我們培養良好的分析能力和推理能力極有幫助。我的軟件工程學導師北工大數理學院的王儀華先生就曾經教導過我們,數學系的學生到軟件企業中大多作軟件設計與分析工作,而計算機系的學生做程序員的居多,原因就在于數學系的學生分析推理能力,從所受訓練的角度上要遠遠在我們平均水平之上。當年出現的怪現象是:計算機系學生的高中數學基礎在全校數一數二(希望沒有冒犯其它系的同學),教學課時數也僅次于數學系,但學完之后的效果卻不盡如人意。難道都是學生不努力嗎,我看未見得,方向錯了也說不一定,其中原因何在,發人深思。
我個人的淺見是:計算機系的學生,對數學的要求固然跟數學系不同,跟物理類差別則更大。通常非數學專業的所?quot;高等數學“,無非是把數學分析中較困難的理論部分刪去,強調套用公式計算而已。而對計算機系來說,數學分析里用處最大的恰恰是被刪去的理論部分。說得難聽一點,對計算機系學生而言,追求算來算去的所謂”工程數學“已經徹底地走進了誤區。記上一堆曲面積分的公式,難道就能算懂了數學?那倒不如現用現查,何必費事記呢?再不然直接用Mathematica或是Matlab好了。退一萬步講,即使是學高等數學我想大家看看華羅庚先生的《高等數學導論》也是比一般的教材好得多。華羅庚在數學上的造詣不用我去多說,但是他這光輝的一生做得我認為對我們來說,最重要的幾件事情:首先是它籌建了中國科學院計算技術研究所,這是我們國家計算機科學的搖籃。在有就是他把很多的高等數學理論都交給了
做工業生產的技術人員,推動了中國工業的進步。第三件就是他一生寫過很多書,但是對高校師生價值更大的就是他在病期間在病床上和他的愛徒王元寫了《高等數學引論》(王元與其說是他的愛徒不如說是他的同事,是中科院數學所的老一輩研究員,對歌德巴赫猜想的貢獻全世界僅次于陳景潤)這書在我們的圖書館里居然找得到,說實話,當時那個書上已經長了蟲子,別人走到那里都會閃開,但我卻格外感興趣,上下兩冊看了個遍,我的最大收獲并不在于理論的闡述,而是在于他的理論完全的實例化,在生活中去找模型。這也是我為什么比較喜歡具體數學的原因,正如我在上文中提到的,理論脫離了實踐就失去了它存在的意義。正因為理論是從實踐當中抽象出來的,所以理論的研究才能夠更好的指導實踐,不用于指導實踐的理論可以說是毫無價值的。
我在系里最愛做的事情就是給學弟學妹們推薦參考書。沒有別的想法,只是希望他們少走彎路。中文的數學分析書,一般都認為以北大張筑生老師的”數學分析新講“為最好。張筑生先生一生寫的書并不太多,但是只要是寫出來的每一本都是本領域內的杰作,這本當然更顯突出些。這種老書看起來不僅是在傳授你知識,而是在讓你體會科學的方法與對事物的認識方法。萬一你的數學實在太好,那就去看菲赫金哥爾茨?quot;微積分學教程”好了--但我認為沒什么必要,畢竟你不想轉到數學系去。吉米多維奇的“數學分析習題集”也基本上是計算型的書籍。書的名氣很大,倒不見得適合我們,還是那句話,重要的是數學思想的建立,生活在信息社會里我們求的是高效,計算這玩意還是留給計算機吧。不過現在多用的似乎是復旦大學的《數學分析》,高等教育出版社的,也是很好的教材。
中國的所謂高等代數,就等于線性代數加上一點多項式理論。我以為這有好的一面,因為可以讓學生較早感覺到代數是一種結構,而非一堆矩陣翻來覆去。這里不得不提南京大學林成森,盛松柏兩位老師編的“高等代數”,感覺相當舒服。此書相當全面地包含了關于多項式和線性代數的基本初等結果,同時還提供了一些有用的又比較深刻的內容,如Sturm序列,Shermon-Morrison公式,廣義逆矩陣等等。可以說,作為本科生如能吃透此書,就可以算是高手。國內較好的高等代數教材還有清華計算機系用的那本,清華出版社出版,書店里多多,一看就知道。從抽象代數的觀點來看,高等代數里的結果不過是代數系統性質的一些例子而已。莫宗堅先生的《代數學》里,對此進行了深刻的討論。然而莫先生的書實在深得很,作為本科生恐怕難以接受,不妨等到自己以后成熟了一些再讀。
正如上面所論述的,計算機系的學生學習高等數學:知其然更要知其所以然。你學習的目的應該是:將抽象的理論再應用于實踐,不但要掌握題目的解題方法,更要掌握解題思想,對于定理的學習:不是簡單的應用,而是掌握證明過程即掌握定理的由來,訓練自己的推理能力。只有這樣才達到了學習這門科學的目的,同時也縮小了我們與數學系的同學之間思維上的差距。
[2]計算數學基礎
概率論與數理統計這門課很重要,可惜大多數院校講授這門課都會少些東西。少了的東西現在看至少有隨機過程。到畢業還沒有聽說過Markov過程,此乃計算機系學生的恥辱。沒有隨機過程,你怎么分析網絡和分布式系統?怎么設計隨機化算法和協議?據說清華計算機系開有“隨機數學”,早就是必修課。另外,離散概率論對計算機系學生來說有特殊的重要性。而我們國家工程數學講的都是連續概率。現在,美國已經有些學校開設了單純的“離散概率論”課程,干脆把連續概率刪去,把離散概率講深些。我們不一定要這么做,但應該更加強調離散概率是沒有疑問的。這個工作我看還是盡早的做為好。
計算方法學(有些學校也稱為數學分析學)是最后一門由數理學院給我們開的課。一般學生對這門課的重視程度有限,以為沒什么用。不就是照套公式嘛!其實,做圖形圖像可離不開它,密碼學搞深了也離不開它。而且,在很多科學工程中的應用計算,都以數值的為主。這門課有兩個極端的講法:一個是古典的“數值分析”,完全講數學原理和算法;另一個是現在日趨流行的“科學與工程計算”,干脆教學生用軟件包編程。我個人認為,計算機系的學生一定要認識清楚我們計算機系的學生為什么要學這門課,我是很偏向于學好理論后用計算機實現的,最好使用C語言或C++編程實現。向這個方向努力的書籍還是挺多的,這里推薦大家高等教育出版社(CHEP)和施普林格出版社(Springer)聯合出版的《計算方法(Computational Methods)》,華中理工大學數學系寫的(現華中科技大學),這方面華科大做的工作在國內應算是比較多的,而個人認為以這本最好,至少程序設計方面涉及了:任意數學函數的求值,方程求根,線性方程組求解,插值方法,數值積分,場微分方程數值求解。李慶揚先生的那本則理論性過強,與實際應用結合得不太緊,可能比較適合純搞理論的。
[3]也談離散數學
每個學校本系里都會開一門離散數學,涉及集合論,圖論,和抽象代數,數理邏輯。不過,這么多內容擠在離散數學
一門課里,是否時間太緊了點?另外,計算機系學生不懂組合和數論,也是巨大的缺陷。要做理論,不懂組合或者數論吃虧可就太大了。從理想的狀態來看,最好分開六門課:集合,邏輯,圖論,組合,代數,數論。這個當然不現實,因為沒那么多課時。也許將來可以開三門課:集合與邏輯,圖論與組合,代數與數論。(這方面我們學校已經著手開始做了)不管課怎么開,學生總一樣要學。下面分別談談上面的三組內容。
古典集合論,北師大出過一本《基礎集合論》不錯。
數理邏輯,中科院軟件所陸鐘萬教授的《面向計算機科學的數理邏輯》就不錯。現在可以找到陸鐘萬教授的講課錄像,http://里可以按編號下載RFC文檔。從IP的讀起。等到能掌握10種左右常用協議,就沒有幾個人敢小看你了。再做的工作我看放在網絡設計上就比較好了。
數據結構的重要性就不言而喻了,學完數據結構你會對你的編程思想進行一番革命性的洗禮,會對如何建立一個合理高效的算法有一個清楚的認識。對于算法的建立我想大家應當注意以下幾點:
當遇到一個算法問題時,首先要知道自己以前有沒有處理過這種問題.如果見過,那么你一般會順利地做出來;如果沒見過,那么考慮以下問題:
1.問題是否是建立在某種已知的熟悉的數據結構(例如,二叉樹)上?如果不是,則要自己設計數據結構。
2.問題所要求編寫的算法屬于以下哪種類型?(建立數據結構,修改數據結構,遍
歷,查找,排序...)3.分析問題所要求編寫的算法的數學性質.是否具備遞歸特征?(對于遞歸程序設計,只要設計出合理的參數表以及遞歸結束的條件,則基本上大功告成.)
4.繼續分析問題的數學本質.根據你以前的編程經驗,設想一種可能是可行的解決辦法,并證明這種解決辦法的正確性.如果題目對算法有時空方面的要求,證明你的設想滿足其要求.一般的,時間效率和空間效率難以兼得.有時必須通過建立輔助存儲的方法來節省時間.5.通過一段時間的分析,你對解決這個問題已經有了自己的一些思路.或者說,你已經可以用自然語言把你的算法簡單描述出來.繼續驗證其正確性,努力發現其中的錯誤并找出解決辦法.在必要的時候(發現了無法解決的矛盾),推翻自己的思路,從頭開始構思.6.確認你的思路可行以后,開始編寫程序.在編寫代碼的過程中,盡可能把各種問題考慮得詳細,周密.程序應該具有良好的結構,并且在關鍵的地方配有注釋.7.舉一個例子,然后在紙上用筆執行你的程序,進一步驗證其正確性.當遇到與你的設想不符的情況時,分析問題產生的原因是編程方面的問題還是算法思想本身有問題.8.如果程序通過了上述正確性驗證,那么在將其進一步優化或簡化。
9.撰寫思路分析,注釋.對于具體的算法思路,只能靠你自己通過自己的知識和經驗來加以獲得,沒有什么特定的規律(否則程序員全部可以下崗了,用機器自動生成代碼就可以了).要有豐富的想象力,就是說當一條路走不通時,不要鉆牛角尖,要敢于推翻自己的想法.我也只不過是初學者,說出上面的一些經驗,僅供大家參考和討論。
關于人工智能,我覺得的也是非常值得大家仔細研究的,雖然不能算是剛剛興起的學科了,但是絕對是非常有發展前途的一門學科。我國人工智能創始人之一,北京科技大學涂序彥教授(這老先生是我的導師李小堅博士的導師)對人工智能這樣定義:人工智能是模仿、延伸和擴展人與自然的智能的技術科學。在美國人工智能官方教育網站上對人工智能作了如下定義:Artificial Intelligence, or AI for short, is a combination of computer science, physiology, and philosophy.AI is a broad topic, consisting of different fields, from machine vision to expert systems.The element that the fields of AI have in common is the creation of machines that can “think”.這門學科研究的問題大概說有:
(1)符號主義: 符號計算與程序設計基礎,知識表達方法 :知識與思維,產生式規則,語義網絡,一階謂詞邏輯問題求解方法:搜索策略,啟發式搜尋,搜尋算法,問題規約方法,謂詞演算:歸結原理,歸結過程專家系統:建立專家系統的方 法及工具
(2)聯接主義(神經網絡學派):1988年美國權威機構指出:數據庫,網絡發展呈直線上升,神經網絡可能是解決人工智能的唯一途徑。關于神經網絡學派,現在很多還是在發展階段。
我想對于人工智能的學習,大家一定不要像學數學似的及一些現成的結論,要學會分析問題,最好能利用程序設計實現,這里推薦給大家ACM最佳博士論文獎獲得者涂曉媛博士的著作《人工魚-計算機動畫的人工生命方法》(清華大學出版社)。搞人工生命的同學不會不知道國際知名的涂氏父女吧。關于人工智能的書當然首選《Artificial Intelligence A New Synthesis》Nils J.Nilsson.鼻祖嘛!
關于網絡安全我也想在這里說兩句,隨著計算機技術的發展,整個社會的信息化水平突飛猛進,計算機網絡技術日新月異,網絡成了當即社會各個工作領域不可缺少的組成部分,只要有網絡存在,網絡安全問題就是一個必須解決好的問題,學習網絡安全不是簡簡單單的收集一些黑客工具黑一黑別人的網站,而是要學習他的數學原理,實現原理,搞清底層工作機制,這樣才能解決大部分的現有問題和新出現的安全問題。總的來說信息安全學的研究還是非常深奧的,這方面體會比較深的要算是在最近的微軟杯程序設計大賽中利用.NET平臺開發的那個項目My E-business Fairy.NET過程中了。
[3]閑聊軟件工程 關于計算機科學的一些邊緣科學我想談一談軟件工程技術,對于一個企業,推出軟件是不是就是幾個程序員坐在一起,你寫一段程序,我寫一段程序呢?顯然不是。軟件工程是典型的計算機科學和數學,管理科學,心理學,社會學等學科的綜合。它使我們這些搞理論和技術的人進入了一個社會。你所要考慮的不僅僅是程序的優劣,更應該考慮程序與軟件的區別,軟件與軟件產品的區別,軟件軟件產品的市場前景,如何去更好的與人交流。這方面我還在學習階段,以后這方面再寫文章吧,先推薦給大家幾本書:暢銷20年不衰的《人月神話》(清華大學中文版,中國電力出版社影印版),《軟件工程-實踐者研究的方法》(機械工業出版社譯本),《人件》(據說每一位微軟公司的部門經理都讀過這本書,推薦老總們和想當老總的同學都看看,了解一下什么是軟件企業中的人)以及微軟公司的《軟件開發的科學與藝術》和《軟件企業的管理與文化》(研究軟件企業的制勝之道當然要研究微軟的成功經驗了!)看完上面的書,結合自己做的一些團隊項目,我的一些比較深的體會有這么幾點
1.How important a plan is for a project development.2.How to communicate with your team members in a more effective way.3.How to
solve unexpected situations.4.The importance of unification.5.The importance of doing what you should do.6.The importance of designing before programming.7.The importance of management.8.The importance of thinking what your teammates think.在軟件開發過程中我們應當具有以下能力:
1.Like it if you would like to do it.We believe that your attitude toward your work will definitely makes great effect on the project.2.The spirit of group working.Take myself as an example.I am just a part of the team, just a little part.You must make it clear that you are just a member of the team, but your effort will change your project a lot.3.Passion
With passion, you can do your job in a more effective way.4.The ability of solving unexpected problems.5.Learning New things in a very short time
It is the basic requirement for we computer major to learn new technology.6.Creativity
The tools are changing.As for us, what's more important is to use these new tools and technology to enable people and businesses throughout the world to realize their full potential.7.The ability to do your work independently.Every member has his own business.In a team, your work cannot be replaced by others' so you must do your business well in order to assure the project development process.團隊開發當中的一些具體精神應當有:
<1> Success and Failure is not one person's effect.Your team's success is not the contribution of a single person.Success contributes to the whole team.If your project failed, it also is not just because of one person's poor work.It is also your failure.<2> Learn from each other.Every person has his own specialty.Even Bill Gates cannot know all the things about software development.We often learn from each other and gains a lot.The old saying goes like this:
There must be one out of three who can be your teacher.In our team we say: Every person is your teacher.<3> Help those who have problems.Use the group working spirit to overcome all the difficulties.There is no need to explain it.As the old saying: Two heads are better than one.We always find it difficult to solve all the problems just by oneself.<4> Praise them who have got some improvement.In our team, I always praise the members when they have finished something or just solved one problem, and they think that it is interesting and gains a lot.Because they can see their efforts.<5> Say something if needed.這個是一次軟件大賽當中的體會,和大家也做個交流,不過不能再說了,軟件工程學說起來寫本2000頁的書一點也不多,恕我才疏學淺,不再做過多論述了。[4]談談學習態度的問題
關于計算機技術的學習我想是這樣的:學校開設的任何一門科學都有其滯后性,不要總認為自己掌握的某門技術就已經是天下
無敵手了,雖然現在Java,VB,C,C++用的都很多,怎能保證沒有被淘汰的一天,我想.NET平臺的誕生和X#語言的初見端倪完全可以說明問題。換言之,在我們掌握一門新技術的同時就又有更新的技術產生,身為當代的大學生應當有緊跟科學發展的素質。舉個例子,就像有些同學總說,我做網頁設計就喜歡直接寫html,不愿意用什么Frontpage,Dreamweaver。能用語言寫網頁固然很好,但有高效的手段你為什么不使呢?僅僅是為了顯示自己的水平高,unique? 我看真正水平高的是能夠以最快的速度接受新事物的人。高級程序設計語言的發展日新月異,今后的程序設計就像人們在說話一樣,我想大家從xml中應是有所體會了。難道我們真就寫個什么都要用匯編,以顯示自己的水平高,真是這樣倒不如直接用機器語言寫算了。反過來說,想要以最快的速度接受并利用新技術關鍵還是在于你對計算機科學地把握程度。當然有一點我們必須指出,就是對于新技術要辯證得看,不能盲從。
計算機技術牽扯的內容更為廣泛些,一項一項說恐怕沒個一年半載也說不清。我只想提醒大家的還是那句話,技術與科學是不能分家的,學好了科學同時搞技術,這才是上上策。猶如英語,原先人們與老外交流必須要個翻譯,現在滿馬路的人都會說英語。就連21世紀英語演講比賽的冠軍都輪不到英語系的學生了。計算機也是一樣的,我們必須面對的一個現實就是:計算機真就只是一個工具,如果不具備其它方面的素養,計算機系的學生雖然不能說找不到工作,不過總有一天當其他專業性人才掌握了計算機技術后將比我們出色許多。原因就在于計算機解決的大都是實際問題,實際問題的知識卻是我們少有的。單一的計算機技術沒有立足之地。
我想是時候指出:學習每一個課程之前,都要先搞清這一課程的學習目的。這一學科的應用領域。據我自身所了解到的同齡同學和低年級的同學的學習狀況:他們之中很少有人知道學一個學科的學習目的,期末考試結束了也不知道學這科做什么用。這就失去了讀計算機科學的意義。當然這與現存的教育思想不能說一點關系都沒有。
總的來說,從教育角度來講,國內高校的課程安排不是很合理,強調理論,又不愿意在理論上深入教育,無力接受新技術,想避開新技術又無法避得一干二凈。我覺得關鍵問題就是國內的高校難于突破現狀,條條框框限制著怎么求發展。我們雖然認識得到國外教育的優越性,但為什么遲遲不能采取行動?哪怕是去粗取精的取那么一點點。我們需要改變。從我們自身角度來講,多數人4年下來既沒有學習計算機科學 的學術水平,也沒有學習計算機技術的那種韌勁。在我剛上大一時,我的計算機科學入門導師,淮北煤炭師范學院王愛平教授曾經對我說過這樣一番話:“當你選擇了計算機這一門科學,就意味著你踏上了一條不歸路,就意味著你一生都要為之奮斗……你的身后是懸崖,只有向前走,不能往后退。”
有些同學說按照這樣學習學的東西太多,有的未見得有用,我想打個形象的比方:學校學出來的人都是一個球體,方方面面的知識都應具備。可是社會上需要球體的地方很少,反而需要的是磚和瓦,即精通某一行的人才。但是對于同等體積的物體,用球體來改造是最方便最省事的。學校的學生很多,為了能夠使更多的學生來適應這個社會,學校也就不得以把所有的學生都打造成一個球體,然后讓社會對這些學生進行再加工,成為真正能夠有用的人才。即使你非常清楚自己的將來要干什么,并且非常下定決心要走自己的路,這一步你也必須走,世界是在不斷變化的,你不能預料未來。想清楚,努力去干吧!
計算機科學博大精深,我只是個初學者。前面的路還長,計算機科學需要我們為之奮斗......學習計算機科學需要韌性,更需要創新,需要激情。深刻學習理論知識,勇于接受新技術的挑戰,這才是我們這一代人應具有的素質。最后送大家一句話“Wake up every day with a feeling of passion for the difference technology will make in people's life!”。
第二篇:計算機學習心得
計算機學習心得
“大學生計算機基礎”是以培養學生計算機技能和信息化素養為目標,是后期課程學習的基礎。由于小學初中時候的計算機課基本上是被略過甚至有的地區由于條件的限制根本就沒有開設這門課程,而高中時沒怎么要求計算機,而且高中我們的時間基本被課本的學習所占用。所以對于計算機的基礎知識是了解很少。而以后我們作為教師雖然對計算機沒有很高要求,但我們也應懂得計算機基礎知識和應用。深知這個道理,所以在計算機的學習上,尤為注重。下面就簡單地談一下我自己學計算機的感感受:
一: 循序漸進
整個學習過程應采用循序漸進的方式,先了解計算機的基本知識,如計算機的起源、發展、windows操作系統、XP的桌面操作、電子表格等,使自己能由淺入深,由簡到繁地掌握他們的使用技術。這是最好的學習模式,但是由于平時沒那么多時間,但是最起碼如計算機基本知識、windows系統、電子表格等必須掌握。
在這方面,老師的教學安排比較合理。可能也是考慮到我們的基礎薄弱的問題,所以老師把計算機最基礎的如計算機概述放在第一節課,讓我們對計算機有個大概的了解。接著再講windows XP 的一些基本概念,然后才把一些常用軟件介紹給我們。雖說那些軟件我們平時也在用,但是里面好多東西都不懂,經過老師講解后方才知道那些軟件還有很大的空間需要我們去專研。
計算機的理論課讓我們認識到自身對電腦了解的匱乏,而實驗課則讓我們親身體驗摸索。如果老師講授和實驗操作同時進行的話會更好吧。因為很多時候我們會忘記老師講的一部分內容,但這主要是我們學生自己的問題,畢竟下來復習不是很好。
二:學以致用
在學習時始終要與實際應用相結合。在課堂上學習后,老師給我們安排的自主學習周其實挺好的,那樣能讓我們自己去回想鞏固老師所講的內容,同時自己結合著老師說講的去摸索,既能很好的記住又有了實質性的提高。只是需要花費的時間將會成倍增加。不過有得必有失就是這個道理吧。
對于網上學習計算機,因為里面有很多資源可以利用,還可以提問,這對于我們學生的學習是相當便捷的,不懂的可以隨時提問,如我的電腦會莫名其妙地下載一些東西,但我自己又不知道什么原因,因此我發了一個帖子,后來得到老師的完美解答。或者自己在計算機平臺上找相應資源,還能看到別的同學的提的問題,因為那些問題都是普遍存在的,也就能參考一下了。
就自己而言,如果我有不會的計算機知識,我會先在平臺上收尋看有沒有和自己類似的已解答的問題,有的話自然是好,如果都沒有,我會發一個帖子,期待別人或者老師能給我解答。這樣的學習方法,至少挺適合我自己的。這個平臺不僅能提供我們解決問題的途徑,還可以從別的同學那獲得經驗,避免犯一些不必要的錯誤。學習狀態良好。
第三篇:計算機學習心得
計算機學習心得體會
在未學習計算機之前,我從不知道它到底是干什么用的,為什么很多很多的人都要迫不及待的地要去學它,同時也有人陷入計算機的泥潭,不能自拔。自從我觸摸到它的時候,即老師教給我們怎樣使用計算機時,我才明白它的重要性。它涉及了生活的各個方面以及各個層次的人都離不開它,同時也明白了它的利與弊。
我在讀小學的時候第一次接觸計算機覺得很新鮮。我清晰的記得,當時有一個清晰的想法,那就是一定要學好計算機。但隨著自己對電腦接觸的不斷深入,對計算機的認識越來越深,特別是剛進到高中,使用了各種辦公軟件,可是在設計和辦公過程中,當遇到一些電腦系統出錯導致文件成果丟失的突發問題時。我才深深地感受到自己計算機知識是多么的欠缺,自己終歸不是學計算機專業的,對計算機知識的掌握都是零散的,對這些突發問題只能束手無策。于是我暗自發誓,無論如何,要學好計算機,但上高中是我忙于課業學習,沒有足夠的時間學習計算機知識。這一只是一個很大的遺憾,所以我在高中時就決定大學后一定要好好學習計算機知識,把落下的都補回來。
令我開心的是,大學計算機課時很多,我可以好好利用它來獲取我想要的知識。在課堂上我用心聽講,認真做筆記。實踐課上也好好練習,學到了很多新的知識。真的很值啊。
我對自己也提了很多要求,只為了學好知識,向全方位人才買件一步。
第四篇:計算機學習心得
大學學習學習心得
現在我已經大四將要畢業了,這個心得早就應該寫,起碼要半年前寫,因為大四下學期的生活幾乎沒有給我帶來任何的改觀。在學習上,我幾乎經歷了該經歷的(我這個年齡),這些學習中,只有大學的學習讓我感到一種自主,一種無法形容的豁然開朗的感覺,是計算機改變了我,我也盡力去改變計算機的一切,盡管我知道這很難,但這是我的職責。
可以說,學習無論學什么都不會浪費,很明顯的原因就是,計算機兼容了太多的學科,讓你無法去想象,你可以提到任何一個,我都能說出計算機的作用。所以,如果有機會我們什么都要學,但不要盲目的學,因為你是學計算機專業的,要學的主要是計算機。
學計算機并兼有多方面知識的人才確實很少,這也難怪,上帝造人就是這樣,要達到這一點,要付出很大的代價,需要一些機遇,我們只需要抓住自己所能創造的機遇就可以了。
說實話,具我了解,中國的計算機確實和國外差的太多,這是多方面原因的,一個就是人家發展60幾年的計算機,被中國十幾年搞定這顯然是不可能的,中國人能比國外人聰明多少??中國計算機教育存在著嚴重弊端,初等教育和高等教育計算機完全脫軌,很多剛上大學的學生連計算機都沒有摸過,更別說學了,四年期間的努力很難填補。還有就是,中國學生學習方向不明確,甚至沒有目標。可以說很多大學生對自己的專業,在四年之間幾乎什么都沒有學到,而學到的是關系,更確切的說是人與人交往的關系,但這個學的還是有好有壞,確切一點就是混。當然,光靠專業實力來闖天下固然不行,那么那些生產力的發展就交給了有專業實力的人,所以中國高級人才少的很。
我處在中國軟件萌芽的階段,這階段需要大量的人才,所以很多大學里沒有學到東西的人(學習計算機的),也不用怕,幾乎都能找到工作,也不會淪為底層人民,因為大家都這樣,只是到公司的培訓,有了突飛猛進的發展。這樣短暫的學習永遠成不了高手,雖然現在我不是個高手,但我可以這樣說。
確實,如果你不是對計算機熱愛的話,那它對你是枯燥的,什么都是,但為什么人們都對異性感興趣呢??這確實值得研究,如果成功的話,這樣可以改變一個人,會不會帶來世界末日是另一碼事。
我接觸計算機(相對和我一屆學生)可以所算是早的,但那時只是游戲,但我認為對我已經足夠了,如果那時有計算機高手在我面前(這是個幻想,幾乎不可能),那我可能就上不了大學了,整天沉迷于編程了,相對來講,在中國大學學歷大重要了,尤其是好的大學。我第一次接觸計算機是在初中一年,大約九七年,那時還是DOS系統,是486,586流行時代,當時不知道486,586是什么,但大家都這么叫,而且都知道586比486快,而且要好,我上初三和高一階段,1999年,開始有了windows95,那時都叫95網,這是從文字界面到圖形界面的轉換,我能感上這個,我是慶幸的,這使我對計算機的發展有很深的印象,當時也是處在游戲階段,我從來沒有想過做游戲,也沒有想過怎么做。可以說我的童年是在電子游戲上度過的,在2000年,開始有了windows98,2002年我見到了windows me,可是直到我高中畢業我還是對計算機的基本操作還不會,原因很簡單我只知道打游戲。我高三那年,是我對計算機編程的萌芽,它的出現,讓我產生了極大的興趣,也是游戲把我帶動的,我要感謝文曲星,這樣也許就是個上天的安排。當時文曲星cc800上有了QBASIC編譯系統,而且有一些簡單的系統函數,可以讓編程者編寫自己的程序,我從網上下載了幾個游戲程序,那些代碼都是公開的,而且可以修改,我對那些程序真的震驚了,雖然我不是很了解,但那些眼花繚亂的游戲開始畫面,和動畫效果,能在這么小的手掌機上做的這么好,我真的很佩服編程者,我查查一些基本畫圖函數,自己做了幾個簡單的動畫,還不錯,達到我想要的效果,盡管不是很難,但對我是個極大的鼓舞,我很興奮。由于是高三階段,面臨高考,我也沒有時間去學這個東西,我只能在他們編寫的游戲中改改,我可以說他們已經做的很好了,我很佩服,有些知識現在我還沒有接觸到。
一年以后,我來到了大學,來學習計算機,其實大學里學習的主要是理論,實踐要靠你自己,因為大學時間主要靠你自己支配,學不學是你自己的事情。理論很重要,它是你起飛的飛機場,實踐就是你的雙翼,他們要結合起來才可以,因為你飛的累了,還要在飛機場停下來歇歇,這就是你理論知識不足的時候。大學的8大專業課都重要的很,我們不能忽視任何一門,它們是計算機的基礎。
下面我就把我從所學的每個專業課中獲得的心得說一下。
數學:
剛到大學時,學習的心態還停留在高中,不知道為什么而學,學有什么用,這也是中國的特色吧!但到后期越深的課程,尤其是計算機圖形學等很多課程都和數學是息息相關的,如果哲學排在所有學科的首位,那么數學就要排第二,它是那些我們看來比較變態的人,把世界的高度抽象,我經過考研后,和參加數學建摸輔導后確實對數學有些了解,但這只是很淺顯的,真正的數學內涵離我遙遙無期,我試圖把自己的思想和這條軌道靠攏,但始終很難達到。說實話,中國的教育是失敗的,他過分強調知識的結果,不注重過程和起始,思維過程很重要,其實結果并沒有它重要,思維的方式決定著一個人,從小就聽人家說1+1=2,但為什么?從什么地方來去思考,怎么思考,卻很少有人知道。我可能說的有點偏題,但這是重要的,也許是我說數學來把說思維模式引出來。在講授思維時,這狠難,最根本的是,人們對思維還存在著爭議,而且不同人的經歷也多少要決定人的思維。我在這里只說學習上的思維。我認為人從一出生,就具有某種特長(這是相對的),也就是說在同等環境下的人學習(我們排除在這種學習以前的經歷的影響,比如說學習音樂),一定會分出優劣,在大家都很努力的情況下。如果有音樂天賦的人,他不去努力,可能落后于努力而不具有天賦的人,所以勤奮出天才不假,但要用到自己具有天賦的一面,那必然事倍功半。天賦和興趣不是一會事,但大多數人,能在有天賦中找到興趣,在興趣中而找不到天賦。所以在大學階段,(在中國這種教育,高中階段幾乎不可能),在大多有自己支配的時間里,你要盡快找出自己的天賦,并發現這方面的興趣。記住,你在這方面有天賦,不代表你在這方面比任何人都前,但你已經比很多人強,如果你很努力,你會走的更高。說了這么多,回來說數學,老師講課很少講數學的思維模式,雖然我不清楚真正的數學思維模式,但我很清楚老師一定沒有講,他也很難講出來,因為很少有人知道牛頓看蘋果落地,為什么會想出萬有引力定律,而為什么我們不能。很多人說是牛頓愛思考的結果,這一點不假,但并不是每個愛思考的人能想到,很好問題就在這里,這就是我們跟人家的差別,因為思維的東西很難傳授給別人,所以這樣的高人很少,光靠他們留下的書是很難解決問題的。
離散數學:
離散數學包括很多章節,各個部分聯系不是很大,而且各個學校的教材和所講授的知識重點也不一樣,但大體要講的都是一樣。我個人認為離散數學是最難的,最難的在圖,群等,它們之所以難,是我們很難容入到那種神秘的思考方式,容入思考方式太難了,只有靠我們的感悟,因為這些真正很強的人真的寥寥無幾,能指導我們的更是很少,我本人始終無法理解群的真正含義,我也沒有去查什么相關資料,但我知道,再抽象的數學理論,都不是憑空想象的,它一定有它的現實基礎,它的出現是有來歷的。
數據結構:
數據結構是十分重要的學科,它完全是建立在實踐的基礎上,也就是說,你要多打代碼。它在一定程度是依賴語言的。我很清楚的知道,第一遍學習數據結構,也就是幾乎很少有實踐的,大腦幾乎一片空白,也是只有在考試前,反復的復習才知道在講什么,只能手工的模擬執行過程,把算法轉化成程序始終是個迷。但我認為這已經足夠了,因為任何理論只有在理解它,你才能凌駕于它,所以接下來一個質的飛躍就靠自己,靠自己把那些算法變成代碼,在自己有想法時,能夠把這個想法用適當的數據結構實現,這需要在電腦旁的硬功夫,絕對是。一個高級的程序員,絕對是個硬功夫。這種把自己的想法變成代碼,也是你獨立思考的開始,記住思考很重要,他是你在捕捉你的靈感,善于思考的人,靈感來的很快,而且你的靈感會告訴你,對于它,你能把它做出來,這一切都是思考的結果,我不是個思想家,但我知道,我每天對世界萬物的沉思,在指引著我發現那些太多的為什么的答案,這個世界為什么這個樣子,它后面究竟隱藏著什么,讓我們大膽的假設吧!多做程序的人,程序會改變你的思維,這絕對錯不了。
語言:
我們一共學了四種語言,VB,C,C++,Java。VB的語法很簡單,它確實是我練習算法的平臺,它使我實現很多小游戲,對數據結構有了很深的了解,但我本人對VB不是很感興趣,它只能做些小項目,因為它為大家提供的友好界面,阻擋了大家通往高級程序員的道路,它封閉了語言太多的細節和計算機的基理,使你對它的界面有太大的依賴。C是個純面向過程的語言,它的語法不是很難,你用它大約一年半多左右,就完全可以掌握它,記住這需要你的實踐,大家幾乎學的都是潭浩強的書,這本書我開始認為很好,但我看了很多國外的書,和很多國外人所打的代碼后,和國內高級程序員所說的話,我只能說這本書,只能是你的開端,但不能讓你更深層次了解語言。但你要問我初學者用什么書,我還會介紹這本書。C的精髓在于指針,你能靈活運用指針就幾乎等于你掌握了C語言,這是一種高效的語法支持,快的讓你無法想象,我很有感觸,在VB下要慢的多。C++是個很復雜的語言,你要完全了解它,要在C語言的基礎上,我很少用C++,我相信我會攻克它的,也許很多人用C++,但了解它真正的機理估計不是很多,我看了C++ primer之后的感觸,它確實很復雜,也是這本書太深入了,了解一門語言,少了編譯知識確實不行。
編譯原理:
其實編譯原理和匯編,操作系統,語言都是緊密相關的,編譯器是在操作系統之上,語言之下。在講編譯器時,除了講編譯源程序成目標程序外,還介紹了很多地方都用到的自動機理論,這個也很重要。在人工智能,很多分析語法,文字類的東西都很重要。編譯原理和語言是相輔相成的,只學語言不學編譯,無法真正的了解語言,而編譯器是在語言基礎上的,沒有語言的了解更學不了編譯,現在大多數高校的編譯原理講的語言都是基于面向過程的,但我認為足夠了,你真正的理解了編譯所講的東西,自己在深入學習面向對象的語言,你一定會很好的把握面向對象的編譯過程,很好的掌握面向對象語言,在語義分析過后的中間代碼生成和動態存儲空間分配,和匯編有很大的聯系,我在學習匯編時,總是先把要求的題目寫成C語言,在轉化成匯編語言,這就是不知不覺的一種中間代碼生成,雖然不完全一樣,但讓你掌握中間代碼生成已經足夠了。動態存儲空間分配,主要基于指針所指向的動態空間。因為非指針的變量在編譯時就已經有內存分配了,這也是編譯要做的事。
匯編:
大多數學的都是8086,編譯器我推薦用TD,很好的開發環境。作程序調試是最主要的,沒有作過程序的人是想不到調試是多么難,好的開發環境有助于有效的開發程序。個人認為,學習匯編要和計算機組成聯系起來,主要是指令系統,講CPU時的知識。匯編是最低級的,最快的語言了,有時為了運行速度不得不用匯編來實現想要的功能,我認為對匯編的掌握程度,只要你能做出個遞歸函數就可以了,你了解了很多指令用法,寄存器的使用,計算機存儲數據和代碼的方式,函數調用的方式,棧是怎么實現函數的,你會有很深刻的發展,相信我沒錯的,一定要上機實現一個遞歸函數,再加上你對C語言的了解,和一些編程知識,你就可以擺平幾乎所有的匯編程序了。
數據庫
我在大學里沒有接觸過太大的項目,而且平常編程對數據庫深入不多,只是達到了做網上書店所要求的基本知識,首先是ER圖,各種范式,還有數據流圖,怎么用語言插入數據,刪除,查找等等,實際上,你要不是搞理論的,深到數據的具體存儲效率的級別,我想這些對于編程就足夠了,但對于高級的數據庫程序員這些是不夠的。
計算機組成
對于學習匯編和C語言這個其實很重要,因為這些語言還沒有屏蔽這些硬件細節,VB就幾乎完全屏蔽了硬件細節,你不需要了解太多的硬件知識。但學習匯編和C語言并不是要你了解到能作出CPU和連接存儲器,我們只要知道他們的運行機理,但有一點你不要懷疑,那就是電信號他就是那樣有趣,有趣到你無法想象它的速度和高低電平的傳遞,但是事實就是這樣,你不需要懷疑,承認它就好了,因為我們還不能解釋規律,只能運用它一樣。原理對軟件程序員就應該足夠了,它會使你更加容易了解操作系統和硬件的工作。
操作系統
大家每個人對操作系統都不陌生,所有的計算機的課程幾乎都是息息相關的,他們都有太多的聯系,有些你可能迷茫,當所有的學完以后,你應該有個豁然開朗的感覺,那就是計算機的一切不應該是個迷。操作系統和硬件的接口,就是那些硬件提供的指令,通過這些指令來操作硬件,就象操作系統定義一樣,他是管理系統資源的,管理硬件的使用,你在學習操作系統時,把它看成一個管理者就可以了,它是一個有著自己管理方法的管理者,管理這些硬件給每個進程使用,進程說白了就是一個應用程序在內存中或在外存中,有著運行權利的程序。現在的操作系統是多任務的,可以運行多個程序,并發是指單個CPU而言,每個進程在CPU中輪流執行,因為它太快了,你根本感覺不到他們的交替性,就象在同時運行,大多數教材講并發比較多,我們大多數計算機都是單CPU的,具體怎么交替運行,那就是操作系統管理進程使用硬件的方法,不同的操作系統方法不同,但你的方法不要讓其中的一個進程總是得不到想要的硬件使用(活鎖或饑餓),但想出個好辦法還不發生死鎖(這里不說什么是死鎖了,我畢竟不是再講操作系統)也很難,總之,你要學的就是這些方法,這里說的是管理CPU,還有管理內存,外設等等。我在給出進程定義時,還說了外存,其實通常就指硬盤,因為你的內存太小,運行的程序又多,我要為了讓其他的程序運行,只能先把它放在外存,也叫掛起。總之,你學的就是管理硬件的方法,怎么管理才能有效率,方便用戶使用。如果可以,你也可以設計一套管理方法,那你就作出了一個新的操作系統。
計算機網絡
所有和硬件有關的最后一個,說實話計算機網絡很雜,你學第一遍后,把網絡7層所有管理方法說出個查不多,很難,大多數學生都是暈頭轉向,網絡是個很龐大的系統,它從硬件到軟件,被規定了很正規的完整體系,這樣大家都遵照這個規則才能,使每個人開發出的軟件和硬件都可以用。記住計算機的交互就象人與人的交互,它通過0和1來代替人的語言,表情或所有可以可以傳達信息的東西,也可以說是計算機通信的暗號,只有雙方都知道了這個暗號的含義,雙方才能通信,你和另一個人怎么通信,那么計算機和另一個計算機就怎么通信。例如:我想給你一個禮物(計算機看成我要給你發送數據,A發給B),我要先通知你,看你能不能收(這符合人的交往)(A發給B一個0和1組成的編碼,事先兩臺計算機已經規定好了,比如說10010011代表看對方是否能接受),如果這個請求不丟失的話(丟失有很多處理方法,你自己也可以想一個處理方法,比如隔一端時間你沒有收到對方是否同意接受,你就重發信息,總之,只要你肯想象,任何都是可能的),(1)對方發送一個可以接受的消息(比如說10010012),你收到了,你就可以發送,發送途中又有很多情況,比如說,你怎么發送,作車,還是徒步,如果交通堵了怎么辦,是把禮物一起送過去,還是分開送過去,等等,具體到網絡里是快速發送,分開發送,我們學的就是這些方法。(2)對方發送個不能接受的信息,你是還要立即發送,還是不發,還是等一會在發,這些方法很活,你要學的就是這些方法,如果你可以處理網絡中出現的任何問題,你不學它也可以。我要告訴你的是,你要學的就是就是通信協議(就是實現規定好的暗號),通信方法,出現問題怎么處理等,你有好的方法,你可以不學了,很簡單,方法就是人發現的,你比它的好,學它的干什么,就用你的。
軟件工程 軟件工程是從實踐中總結的經驗,對于很少做過項目的大學生來說,確實很難理解,只要你作過一些項目,比如網上書店之類的系統,你就會有些了解,它說的很對,我很清楚的記得軟件工程分這幾個過程:(1)可行性研究,也就是你要做的這個系統可行不,是否值得去做,做了能得多大效益。(2)總體分析,這個就是從整體來規劃你要作的系統,只是個概況,并沒有詳細的階段,把系統大體分成幾個模塊。(3)詳細分析,這個階段就是來詳細每個模塊,把所有的細節都要寫好。(4)程序編碼(5)測試(6)售后服務。
每個過程有分很多規范,因為一個項目很多人做,很多公司做,沒有個很好的規范會亂套的,所以最后很容易合在一起。
我上面所介紹的都是最基礎的,只要你掌握這些,學任何計算機的東西都不成問題,關鍵一個字那就是思想,也許有些具體你忘記了,但思想你會永遠記住,你會看的時候也會很簡單,和別人討論時你也知道他們在說什么。
記住的是一定要在思想上有飛躍,學會思考,你的靈感會讓你抓住問題的突破口,凡事多問為什么,原因在何處,怎么才能解決,至于怎么才能到達這個境界,我沒有什么太多的高招,因為我也不是什么高手,最直接的就是,多看書,多思考,多練習寫程序,要在理解的基礎上,拋開所有的別人寫過的模板寫出自己的想法,自己的程序,如果你參考別人的,那么你知識在量上有飛躍,質上根本沒有飛躍,即使你方法很苯,你把它實現了,那你也是成功的,因為你挑戰了自己,你在思想上有了飛躍,表面上你沒人家做的好,那是他有現成的代碼可以使用,當沒有現成的代碼時,你的想象力就發揮了作用,思考和想象高于一切,你的內心得到了升華,你有好的新方法現在就比那些舊的方法好,所以創新很重要,是勤于思考的人的專利,不要死記公式,要問問公式的來源,什么都要弄懂,為什么書上這么講,死記不如不記,死記只能得到眼前的利益,人成功不就在于要長遠的考慮嗎??
我認為多學學哲學邏輯學,對人的大腦思維很有幫助的,我說的哲學并不是專指馬克思哲學,很多種,他們都有可以借鑒的一面,如果你站在任何一個立場去思考問題,你就會覺得他們似乎說的都有道理,就因為有些人立場不同,才發生的沖突。思想教育是最重要的,也是最難的,尤其學習上的思想境界,很難用語言來溝通,要靠自己勤奮的練習,多加的思考,還記得我說金庸的武狹小說嗎??那里的功夫學習和這里說的學習就是一樣的。
第五篇:計算機學習心得
我個人的這種自以為c語言很牛逼的美夢在,大一下學期的一次偶然比賽后完全破滅。(?_?#)(記得那會兒大一除了c語言其他都是基礎課(比如:工程制圖,高數,英語等),和計算機基本沒一點關系。)
還記得,正在我沉醉自己的小天地時,那個大一下學期開學,一個同學喊我去參加一個校內編程比賽。當時滿懷著勝利信心去參加了比賽。結果。。大家都猜到了,初賽做了一到巨簡單題目,然后。。復賽。。一道題沒做出來。更慘的說應該是:一道題都不會做,最后自己無聊的看著對面的一個mm敲碼。。再后來才知道是我們學校acm基地,準備納新舉行的一個比賽。并且由于急需納新,那次題目出的是巨簡單。
悲催的我比完賽后,失敗了!卻還不知道為什么??!。。
后來我郁悶一個星期后,在同學中介紹中,進入了當時認為”高手如云”的acm基地。
附:當時自己的水平:計算機只懂c語言,c語言只會些一些打印,簡單幾乎無循環的,無指針的,100行左右代碼。編譯基本自己搞定。邏輯錯誤?基本沒什么邏輯的程
隨后acm學習,就簡單說說。記得當大家還都在迷茫中,或忙于考軟件資格證,計算機二級證,或忙于網絡游戲,或忙于學習其他專業的知識的時候。自己不顧外面的一切,每天和其他認真上自習室的同學一樣,早起晚歸得沉醉在acm中。
在acm基地,開始學習并鞏固了,計算機數據結構,計算機算法,組合數學等知識,并不停的寫碼!在基地我一直這樣堅持了兩年多吧(知道二流學校的acm的艱苦的同學可能體會到,這其中的不易),到最后整個基地的同學仍堅持學習在前線的就只有我一人。于是也很自然的,我在學校acm系統中,排在了第一。雖然如此,但是越學我也越清楚這個算法的水有多深,也逐漸意識到外面高手真的如云,而且他們的高度,并不是自己所能趕上的。也意識到了,在算法前進的路上我的最大的阻礙是:數學!!而更悲劇的是,就我自己的自學能力,再加上學校數學老師不怎么給力。很難在段時間內彌補自己的這方面的缺陷。
所以大三下學期,我退出了acm,進入了實驗室,做java的小項目。
在這兩三年里,除了acm還有一些是計算機基礎知識讓我對計算機認識更深。
匯編語言讓我明白了,計算機的計算機制,學完匯編,于是當我不確定c中某種結果時:我知道將c語言編成匯編語言,然后對比差別。通過反匯編理解指針,數組等類似問題差異和區別。
計算機組成原理,操作系統,不僅認識到為什么乘法會比加法費時的原因,內存存取方式,調度,分頁等等。同時也就明白如何在c語言上進行這些細微底層的調優。軟件工程,則告訴我如何去大規模的程序開發的基本設計思想。自己并運用到一些課程設計中去。
于此同時平時也更多的關注了,網上出現的各種c語言本身討論的一些問題。這其中有,c混亂代碼,類似這種他編譯器中的float的一個問題,c繪圖,了解關注類似于結構體最后定義一個char[1]的這種奇技淫巧。于是針對c語言本身的書籍和資料,比如:?c專家編程?、?c缺陷與陷阱?。
附:個人此時水平:語言基本只會c語言和匯編語言;c語言100、200行的代碼寫完后基本沒有編譯錯誤,最長c代碼4000多行。c語言指針操縱多級的內存動態申請維護;內存泄漏,程序崩潰自己可以獨立較快解決。
匯編語言,分文件設計,3000行,自己完成所有編寫,和調試。(目前基本沒用,很多忘了,呵呵~)
小界面,windows編程基本不懂。所以被當時同學鄙視了:你有什么牛的?也就時一些,黑屏的數字。
到了這個時候,可以說目前(也就是工作兩年后)我找到的這份工作很大一部分還要歸功與acm!因為在第一份工作,我基本沒有用到任何可以算上算法的算法,和算上數據結構的數據結構。(小道消息:這個工作的社招比例:1:20),好了。后面可能還會提到acm。
話說后來我離開了acm,進入實驗室,于是我花了整整一個暑假,加上一個月左右的時間,學習了:java,jsp,javascript,包括ssh架構一些。
這其中比較艱難的是思想轉變:
1、由面向過程轉變為面向對象(剛開始用java寫的代碼也是面向過程的。。),2、由傳統的這種小計算應用轉變為這種bs模型。這兩個思想的提升使我對今后編寫應用軟件打下了很好的基礎。
不管怎么樣,自己很快就能熟練寫java應用,后來由于就像其他習慣c的人都非常不喜歡java的這種”拿來主義”的做法一樣,我后來一直在盡量不做java方面的開發,當然也就不會再進一步深入學習java方面的知識。(當然,目前來看,java還是一門開發應用軟件的很給力的一門語言,細的我就不再多說,只是自己當初不喜歡)^o^()
隨后大學里面還有一門重要的課程:計算機網絡。(不過大學網絡很基礎,后來又簡單自學了一些tcpip的那三本書。)
計算機網絡告訴了我計算機互相通信的原理,了解計算機底層通信的方式。后來在工作中碰到的一些簡單問題也就能解決。比如: 如何竊聽網絡數據的原理,arp欺騙,java這種bs模型能否獲取客戶端的mac地址(哈哈,自己后來工作中寫腳本自動簽到中考慮這個問題),類似這種接口調試中技巧,webservice的原理以及協議,大小端問題也算)^o^(。
還有一個是編譯原理,讓我明白作為c語言這種語言的編譯過程,理解了編譯的幾個階段。同時明白,sizeof的值再也不用記了,因為自己就可以分析出來,而且很簡單,而且理解了各種錯誤處于哪個時期等都有利于自己對問題的分析。
哈哈,c語言中的scanf,printf高級應用,longjmp等在這后來時間也自己再進一步學習。
于此同時,自己自學了vb,學會了用vc++寫動態庫,所以后來一些桌面小應用,都用vb+dll來做的。所以課程設計什么的,都是小意思了。再后來畢業設設計:用matlab+vb+dll寫的,實際寫碼調試時間不超過兩個星期(約12天),代碼量近6000行。畢業設計拿了年級第一。另外爆料一下:宿舍一哥們,一個算法畢設題目,我幫他搞定,總共花了一天;另外一哥們,用我的以前的課程設計搞過。。
附:自己此時的水平:語言就不說了,此時算的上說的出口的還是c語言,其他則是我的工具而已,而且很多我現在依然忘了,(檢起來也簡單,呵呵~)
代碼編譯,調試幾乎不是問題。但是此時對系統設計,軟件工程認識還是基本沒有,對設計模式更不了解,對社會上使用的技術也是,什么不懂。
@@@第一份工作
第一份工作,我沒怎么去找,(~_~;)后來去了當時實習的公司。公司主要用的架構是:oracle+tuxedo+jsp。
當然用的也是unix主機。也就是說,我畢業后沒有做類似嵌入式,windows編成的工作。后期的應用也都是,unix下的環境編成。
ok,這會兒開始了工作期間了。
在剛開始實習的時候,自己被安排做一些瑣碎整理的事情,比如:將一個代碼改為另外一個格式?
后來,實習了兩個月,我打算離職。后來主管找我談話,我告訴了自己的想法。后來答應我調到北京總部的一個研發部(一般至少工作一年,并表現很出色才允許調)。另外這兒不得不簡單提一下為什么。。
當時公司業務邏輯層主要用的是c語言,于我同批進去的實習生,后來很多人都問我c方面的問題。這個被技術主管看到,所以。。他那次同意了我的要求。
話說調去了北京總部,就是常年的出差開始了,大約三個月后,參加了一個很大的項目,(200多號人一年多。)剛開始我只是負責一個簡單的數據接口后臺進程的需求調研和開發,當時自己剛入社會,做起事來相對有些不好意思。在加上,我這個正好是一個接口需求,需要和不同的人溝通。所以問題出現了,其它同事看我是個新人,也不怎么理我,常常找理由推托。最后這個小需求做的讓我很惱火,自己也沒太好辦法。
再后來,這個需求完后,自己負責另外較為重要的數據接口。在后來近半年后,自己學習很快,很快掌握了,一些unix下的編成,以及調試技術。期間,有一個數據接口同事,和領導吵架跑回去了,領導后來讓我接手,并開出了一些優惠條件^_^。自己當然接下也費了一些工作,而以前的工作則交給了另外一有工作經驗的同事負責。后來我每個月都回家一趟休假,都被允許了。有時很多人老員工也沒被同意哦。
這之后,自己的能力慢慢得到認識,以前不理我的同事小組長,也都開始主動打招呼^_^。在之后,慢慢的有些同事問我一些技術上的問題。后來被部分同事稱為”知識庫”。再后來,就不多說了,也就是畢業兩年后,各種原因,離開原來公司。換了一份現在的工作。
附:技術能力,這期間c語言從自己小程序變成一個實實在在的應用的代碼的轉變,期間包括,多進程,網絡編程,oracle一些知識包括:索引優化,sql等分析;設計模式,等但是期間更多的是提升自我團隊協作,溝通,時間管理,設計分析等軟素質吧。
目前還在學習中。。互聯網的知識。。自己還有很多要學的。呵呵。不過,學習是一件快樂的事情不是嗎?
最后對還糾結在c語言的同學一點小建議吧:
1、c語言知識一門語言,就像java,peil等語言一樣,僅僅是工具,因此不要把c語言看成很難,勤動手,多思考。語言終究是為了方便人,而設計的,所以他不難。
2、不要僅僅只看c語言,要從c語言看到計算機學科所有的知識點,并用c語言去鞏固它們。為什么是c語言?他的確很合適,進入計算機有全面理解的一個入口。并以計算機的的角度去思考一些問題。
3、算法,數據結構,在現實中即使沒用上,也會有助于你理解一些系統設計。
4、軟件工程,系統設計也是很重要的哦。^_^,5、知識永遠是學不完的,計算機亦如此,而且越學越菜。^_^
6、以上建議僅供參考。
和樓主蠻像的,大一時在寫個二三百行的五子棋就以為自己牛得不行了。然后大二學了C++與STL之后,一直為自己C++學得很好,而且比別人多學了STL而沾沾自喜。然后,直到后來到大二下學期接觸了ACM之后才發現自己就是一弱菜~~ 與樓主不同的是,我們學校之前沒有人搞ACM(省賽時都是臨時組隊過...我是一名大三的學生,軟件工程專業,從大學開始就開始了ACM的旅程,從大一到現在,基本上都是學的數論,幾何等等方面的,幾何也就一般般,三維幾何都不是很會,對于數論,是我最擅長的吧,像連分數,二次剩余,原根,離散對數,牛頓二項式定理,費馬平方和定理求表為平方和的解,對于數學方面的雖然我感覺還有很多我不會的,但是我感覺在ACM上面已經差不多了,至于其他方面的我多少也會點,至少很基礎的都會吧,現在我想重點學習搜索,圖論,DP,字符串,還有很多內容。在今年剛剛結束的亞洲區域賽杭州站獲得銅牌,以前的省賽,東北賽等等也獲得較好的名次。我畢業后想直接找工作,所以現在我想一邊學習算法,繼續做題,明年繼續參加競賽,一邊想搞搞工程,我個人比較喜歡Linux嵌入式的方面的,又喜歡Java 和Lucene搜索引擎方面的。我是想問,這兩方面哪一個比較好,比較有前景,然后對于算法方面的,哪些是以后工作后對應職業用的比較多的,比如我覺得數論在密碼學方面用的比較多。對于ACM,我暫時是不想放棄。求各位學長們,或者已經工作的大神們給我建建議啊。
ACM程序題對鍛煉邏輯思維是有很大幫助的,既然你明年還想參加比賽就不能放棄OJ,相信你們學校大三的學生也會帶大一大二的學弟學妹吧,你可以不學習新的算法而去整理自己以前所學的,像DP、DFS什么的整理好,給他們講,可能還會有新的收獲。ACM很有魔力,相信你心里也是放不下。
ACM不是一份工作,你也不可能拿這個當自己一輩子吃飯的武器,當然除非你以后當老師什么的,專門講一門課程。
Java從事的方面非常多,現在各行各業都需要Java程序員,真正工作了,你會發現ACM里面的算法用的微乎其微,大部分算法已經被封裝好了,根本不需要你費勁腦汁去敲代碼,你需要的是知道有這個東西,以及怎么去用,這個就需要你話費很長一段時間。很多東西你需要去學和復習鞏固,從基礎的css,sql, js, JQuery,ssh??差不多得花費1年多的時間,如果不報培訓班自己去學的話,需要你自己制定好一個規劃,下載教學視頻,一步步來,多實踐。
Linux嵌入式工資比Java的高,但是好工作也相對難找,我僅僅知道這些,上我去年找工作的時候聽同學說的,對于這方面我不懂,也就不瞎說了自己不知道的了。ACM應該是一個跳板,幫助你進一些名企,至于到底干什么,從事什么方面,很可能不會像你現在想的這么簡單。大公司、名企對畢業生不會要求技術多好,隨著時間累計技術都會提上去的,他們更看好你的潛力和以后對公司的價值。最后說一句,IT程序員很辛苦,你要做好準備!加油吧!
算法,數據結構是關鍵,另外還有組合數學,特別是集合與圖論,概率論也重要。推薦買一本《算法導論》,那本書行,看起來超爽!!基本掌握語法還不行啊,語法的超熟練掌握,不然出了錯誤很難調試的!!最重要的是超牛皮的頭腦啦,分析能力,邏輯推理能力很重要。ACM很好玩啦,祝你成功!!
acm是3人一組的,以學校為單位報名的,也就是說要得到學校同意,還要有2個一起搞的。其實可能是你不知道你們學校搞acm的地方,建議你好好詢問下你們學校管科技創新方面的人。建議你找幾個興趣相同的一起做,互相探討效果好多了,團隊合作也是acm要求的3大能力之一。
數據結構遠遠不夠的,建議你看算法導論,黑書,oj的話個人覺得還是poj好,有水題有好題,而且做的人多,要解題報告什么的也好找。我們就是一些做acm的學生一起搞,也沒老師,這樣肯定能行的。
基礎的話是語言,然后數據結構,然后算法。
ACM有三個方向:算法,數學,實現 要求三種能力:英文,自學,團隊協作
簡單的說,你要能讀懂英文的題意描述,要有一門acm能使用的編程語言,要會數據結構,有一點數學基礎,一點編程方面天賦,要有興趣和毅力(最重要),就具有做ACM的基本條件了。
做acm我推薦c,c++也可以,java在某些情況下好用,但是大多數情況的效率和代碼量都不大好,所以建議主用c++,有些題目用java
還有什么問題,可以問我啊。
不好意思,沒見過用java描述的acm書籍,大多數是用偽命令,其他有的用的c,c++,老一些的用pascal。java只是用來做高精度的一些題的,個人覺得不用專門看這方面的書,java的基本部分學好就夠用了。所以我還是推薦主用c++,在高精度和個別題再用java。你可以找找java描述的算法設計與分析,這個好像有
數據結構:C語言版 清華大學出版社 嚴蔚敏 《數據結構》
算法:清華大學出版社 王曉東 《算法設計與分析》
麻省理工大學 中譯本:機械工業出版社 《算法導論》
基本上這三本書就已經足夠了,建議一般水平的人先不要看算法導論,待另外兩本書看的差不多的時候,再看算法導論加深理解。
另外還有很多針對性更強的書籍,不過針對性太強,這里就不多介紹了。以上一些都是些算法方面的書,最好的方式就是做題與看書相結合,很多在線做題的網站,PKU,ZOJ很多,推薦PKU,題目比較多,參與的人比較多。做一段時間的題,然后看書,研究算法,再做題,這樣進步比較快。
還有關于ACM競賽,我有自己的一點話說。
首先說下ACM/ICPC是個團隊項目,最后的參賽名額是按照學校為單位的,所以找到志同道合的隊友和學校的支持是很重要的。
剛剛接觸信息學領域的同學往往存在很多困惑,不知道從何入手學習,在這篇文章里,我希望能將自己不多的經驗與大家分享,希望對各位有所幫助。
一、語言是最重要的基本功
無論側重于什么方面,只要是通過計算機程序去最終實現的競賽,語言都是大家要過的第一道關。亞洲賽區的比賽支持的語言包括C/C++與JAVA。筆者首先說說JAVA,眾所周知,作為面向對象的王牌語言,JAVA在大型工程的組織與安全性方面有著自己獨特的優勢,但是對于信息學比賽的具體場合,JAVA則顯得不那么合適,它對于輸入輸出流的操作相比于C++要繁雜很多,更為重要的是JAVA程序的運行速度要比C++慢10倍以上,而競賽中對于JAVA程序的運行時限卻往往得不到同等比例的放寬,這無疑對算法設計提出了更高的要求,是相當不利的。其實,筆者并不主張大家在這種場合過多地運用面向對象的程序設計思維,因為對于小程序來說這不旦需要花費更多的時間去編寫代碼,也會降低程序的執行效率。
接著說C和C++。許多現在參加講座的同學還在上大一,C的基礎知識剛剛學完,還沒有接觸過C++,其實在賽場上使用純C的選手還是大有人在的,它們主要是看重了純C在效率上的優勢,所以這部分同學如果時間有限,并不需要急著去學習新的語言,只要提高了自己在算法設計上的造詣,純C一樣能發揮巨大的威力。
而C++相對于C,在輸入輸出流上的封裝大大方便了我們的操作,同時降低了出錯的可能性,并且能夠很好地實現標準流與文件流的切換,方便了調試的工作。如果有些同學比較在意這點,可以嘗試C和C++的混編,畢竟僅僅學習C++的流操作還是不花什么時間的。
C++的另一個支持來源于標準模版庫(STL),庫中提供的對于基本數據結構的統一接口操作和基本算法的實現可以縮減我們編寫代碼的長度,這可以節省一些時間。但是,與此相對的,使用STL要在效率上做出一些犧牲,對于輸入規模很大的題目,有時候必須放棄STL,這意味著我們不能存在“有了STL就可以不去管基本算法的實現”的想法;另外,熟練和恰當地使用STL必須經過一定時間的積累,準確地了解各種操作的時間復雜度,切忌對STL中不熟悉的部分濫用,因為這其中蘊涵著許多初學者不易發現的陷阱。
通過以上的分析,我們可以看出僅就信息學競賽而言,對語言的掌握并不要求十分全面,但是對于經常用到的部分,必須十分熟練,不允許有半點不清楚的地方,下面我舉個真實的例子來說明這個道理——即使是一點很細微的語言障礙,都有可能釀成錯誤:
在去年清華的賽區上,有一個隊在做F題的時候使用了cout和printf的混合輸出,由于一個帶緩沖一個不帶,所以輸出一長就混亂了。只是因為當時judge team中負責F題的人眼睛尖,看出答案沒錯只是順序不對(答案有一頁多,是所有題目中最長的一個輸出),又看了看程序發現只是輸出問題就給了個Presentation error(格式錯)。如果審題的人不是這樣而是直接給一個 Wrong Answer,相信這個隊是很難查到自己錯在什么地方的。
現在我們轉入第二個方面的討論,基礎學科知識的積累。
二、以數學為主的基礎知識十分重要
雖然被定性為程序設計競賽,但是參賽選手所遇到的問題更多的是沒有解決問題的思路,而不是有了思路卻死活不能實現,這就是平時積累的基礎知識不夠。今年World Final的總冠軍是波蘭華沙大學,其成員出自于數學系而非計算機系,這就是一個鮮活的例子。競賽中對于基礎學科的涉及主要集中于數學,此外對于物理、電路等等也可能有一定應用,但是不多。因此,大一的同學也不必為自己還沒學數據結構而感到不知從何入手提高,把數學撿起來吧!下面我來談談在競賽中應用的數學的主要分支。
1、離散數學——作為計算機學科的基礎,離散數學是競賽中涉及最多的數學分支,其重中之重又在于圖論和組合數學,尤其是圖論。
圖論之所以運用最多是因為它的變化最多,而且可以輕易地結合基本數據結構和許多算法的基本思想,較多用到的知識包括連通性判斷、DFS和BFS,關節點和關鍵路徑、歐拉回路、最小生成樹、最短路徑、二部圖匹配和網絡流等等。雖然這部分的比重很大,但是往往也是競賽中的難題所在,如果有初學者對于這部分的某些具體內容暫時感到力不從心,也不必著急,可以慢慢積累。
競賽中設計的組合計數問題大都需要用組合數學來解決,組合數學中的知識相比于圖論要簡單一些,很多知識對于小學上過奧校的同學來說已經十分熟悉,但是也有一些部分需要先對代數結構中的群論有初步了解才能進行學習。組合數學在競賽中很少以難題的形式出現,但是如果積累不夠,任何一道這方面的題目卻都有可能成為難題。
2、數論——以素數判斷和同余為模型構造出來的題目往往需要較多的數論知識來解決,這部分在競賽中的比重并不大,但只要來上一道,也足以使知識不足的人冥思苦想上一陣時間。素數判斷和同余最常見的是在以密碼學為背景的題目中出現,在運用密碼學常識確定大概的過程之后,核心算法往往要涉及數論的內容。
3、計算幾何——計算幾何相比于其它部分來說是比較獨立的,就是說它和其它的知識點很少有過多的結合,較常用到的部分包括——線段相交的判斷、多邊形面積的計算、內點外點的判斷、凸包等等。計算幾何的題目難度不會很大,但也永遠不會成為最弱的題。
4、線性代數——對線性代數的應用都是圍繞矩陣展開的,一些表面上是模擬的題目往往可以借助于矩陣來找到更好的算法。
5、概率論——競賽是以黑箱來判卷的,這就是說你幾乎不能動使用概率算法的念頭,但這也并不是說概率就沒有用。關于這一點,只有通過一定的練習才能體會。
6、初等數學與解析幾何——這主要就是中學的知識了,用的不多,但是至少比高等數學多,我覺得熟悉一下數學手冊上的相關內容,至少要知道在哪兒能查到,還是必要的。
7、高等數學——純粹運用高等數學來解決的題目我接觸的只有一道,但是一些題目的敘述背景往往需要和這部分有一定聯系,掌握得牢固一些總歸沒有壞處。
以上就是競賽所涉及的數學領域,可以說范圍是相當廣的。我認識的許多人去搞信息學的競賽就是為了逼著自己多學一點數學,因為數學是一切一切的基礎。
三、數據結構與算法是真正的核心
雖然數學十分十分重要,但是如果讓三個只會數學的人參加比賽,我相信多數情況下會比三個只會數據結構與算法的人得到更為悲慘的結局。
先說說數據結構。掌握隊列、堆棧和圖的基本表達與操作是必需的,至于樹,我個人覺得需要建樹的問題有但是并不多。(但是樹往往是很重要的分析工具)除此之外,排序和查找并不需要對所有方式都能很熟練的掌握,但你必須保證自己對于各種情況都有一個在時間復雜度上滿足最低要求的解決方案。說到時間復雜度,就又該說說哈希表了,競賽時對時間的限制遠遠多于對空間的限制,這要求大家盡快掌握“以空間換時間”的原則策略,能用哈希表來存儲的數據一定不要到時候再去查找,如果實在不能建哈希表,再看看能否建二叉查找樹等等——這都是爭取時間的策略,掌握這些技巧需要大家對數據結構尤其是算法復雜度有比較全面的理性和感性認識。
接著說說算法。算法中最基本和常用的是搜索,主要是回溯和分支限界法的使用。這里要說的是,有些初學者在學習這些搜索基本算法是不太注意剪枝,這是十分不可取的,因為所有搜索的題目給你的測試用例都不會有很大的規模,你往往察覺不出程序運行的時間問題,但是真正的測試數據一定能過濾出那些沒有剪枝的算法。實際上參賽選手基本上都會使用常用的搜索算法,題目的區分度往往就是建立在諸如剪枝之類的優化上了。
常用算法中的另一類是以“相似或相同子問題”為核心的,包括遞推、遞歸、貪心法和動態規劃。這其中比較難于掌握的就是動態規劃,如何抽象出重復的子問題是很多題目的難點所在,筆者建議初學者仔細理解圖論中一些以動態規劃為基本思想所建立起來的基本算法(比如Floyd-Warshall算法),并且多閱讀一些定理的證明,這雖然不能有什么直接的幫助,但是長期堅持就會對思維很有幫助。
四、團隊配合
通過以上的介紹大家也可以看出,信息學競賽對于知識面覆蓋的非常廣,想憑一己之力全部消化這些東西實在是相當困難的,這就要求我們盡可能地發揮團隊協作的精神。同組成員之間的熟練配合和默契的形成需要時間,具體的情況因成員的組成不同而不同,這里我就不再多說了。
五、練習、練習、再練習
知識的積累固然重要,但是信息學終究不是看出來的,而是練出來的,這是多少前人最深的一點體會,只有通過具體題目的分析和實踐,才能真正掌握數學的使用和算法的應用,并在不斷的練習中增加編程經驗和技巧,提高對時間復雜度的感性認識,優化時間的分配,加強團隊的配合。總之,在這里光有紙上談兵是絕對不行的,必須要通過實戰來鍛煉自己。
大家一定要問,我們去哪里找題做,又如何檢驗程序是否正確呢?這大可不必擔心,現在已經有了很多網上做題的站點,這些站點提供了大量的題庫并支持在線判卷,你只需要把程序源碼提交上去,馬上就可以知道自己的程序是否正確,運行所使用的時間以及消耗的內存等等狀況。下面我給大家推薦幾個站點,筆者不建議大家在所有這些站點上做題,選擇一個就可以了,因為每個站點的題都有一定的難易比例,系統地做一套題庫可以使你對各種難度、各種類型的題都有所認識。
1、Ural:
Ural是中國學生對俄羅斯的Ural州立大學的簡稱,那里設立了一個Ural Online Problem Set,并且支持Online Judge。Ural的不少題目算法性和趣聞性都很強,得到了國內廣大學生的厚愛。根據“信息學初學者之家”網站的統計,Ural的題目類型大概呈如下的分布:
題型 搜索 動態規劃 貪心 構造 圖論 計算幾何 純數學問題 數據結構 其它
所占比例 約10% 約15% 約5% 約5% 約10% 約5% 約20% 約5% 約25%
這和實際比賽中的題型分布也是大體相當的。有興趣的朋友可以去看看。
2、UVA:
UVA代表西班牙Valladolid大學(University de Valladolid)。該大學有一個那里設立了一個PROBLEM SET ARCHIVE with ONLINE JUDGE,并且支持ONLINE JUDGE,形式和Ural大學的題庫類似。不過和Ural不同的是,UVA題目多的多,而且比較雜,而且有些題目的測試數據比較刁鉆。這使得剛到那里做題的朋友往往感覺到無所適從,要么難以找到合適的題目,要么Wrong Answer了很多次以后仍然不知道錯在那里。如果說做Ural題目主要是為了訓練算法,那么UVA題目可以訓練全方位的基本功和一些必要的編程素質。UVA和許多世界知名大學聯合辦有同步網上比賽,因此那里強人無數,不過你先要使自己具有聽懂他們在說什么的素質:)
3、ZOJ:
ZOJ是浙江大學建立的ONLINE JUDGE,是中國大學建立的第一個同類站點,也是最好和人氣最高的一個,筆者和許多班里的同學就是在這里練習。ZOJ雖然也定位為一個英文網站,但是這里的中國學生比較多,因此讓人覺得很親切。這里目前有500多道題目,難易分配適中,且涵蓋了各大洲的題目類型并配有索引,除此之外,ZOJ的JUDGE系統是幾個網站中表現得比較好的一個,很少出現Wrong Answer和Presentation error混淆的情況。這里每月也辦有一次網上比賽,只要是注冊的用戶都可以參加。
說起中國的ONLINE JUDGE,去年才開始參加ACM競賽的北京大學現在也建立了自己的提交系統;而我們學校也是去年開始參加比賽,現在也有可能推出自己的提交系統,如果能夠做成,到時候大家就可以去上面做題了。同類網站的飛速發展標志著有越來越多的同學有興趣進入信息學的領域探索,這是一件好事,同時也意味著更激烈的競爭。