1. 程式人生 > >【轉載】數學專業的數學與計算機專業的數學的比較

【轉載】數學專業的數學與計算機專業的數學的比較

裡可以按編號下載RFC文件。從IP的讀起。等到能掌握10種左右常用協議,就沒有幾個人敢小看你了。再做的工作我看放在網路設計上就比較好了。
  資料結構的重要性就不言而喻了,學完資料結構你會對你的程式設計思想進行一番革命性的洗禮,會對如何建立一個合理高效的演算法有一個清楚的認識。對於演算法的建立我想大家應當注意以下幾點:
  當遇到一個演算法問題時,首先要知道自己以前有沒有處理過這種問題.如果見過,那麼你一般會順利地做出來;如果沒見過,那麼考慮以下問題:
1.
問題是否是建立在某種已知的熟悉的資料結構(例如,二叉樹)上?如果不是,則要自己設計資料結構。
2.
問題所要求編寫的演算法屬於以下哪種型別?(建立資料結構,修改資料結構,遍歷,查詢,排序...)
3.
分析問題所要求編寫的演算法的數學性質.是否具備遞迴特徵?(對於遞迴程式設計,只要設計出合理的引數表以及遞迴結束的條件,則基本上大功告成.)
4.
繼續分析問題的數學本質.根據你以前的程式設計經驗,設想一種可能是可行的解決辦法,並證明這種解決辦法的正確性.如果題目對演算法有時空方面的要求,證明你的設想滿足其要求.一般的,時間效率和空間效率難以兼得.有時必須通過建立輔助儲存的方法來節省時間.
5.
通過一段時間的分析,你對解決這個問題已經有了自己的一些思路.或者說,你已經可以用自然語言把你的演算法簡單描述出來.繼續驗證其正確性,努力發現其中的錯誤並找出解決辦法.在必要的時候(發現了無法解決的矛盾),推翻自己的思路,從頭開始構思.
6.
確認你的思路可行以後,開始編寫程式.在編寫程式碼的過程中,儘可能把各種問題考慮得詳細,周密.程式應該具有良好的結構,並且在關鍵的地方配有註釋.
7.
舉一個例子,然後在紙上用筆執行你的程式,進一步驗證其正確性.當遇到與你的設想不符的情況時,分析問題產生的原因是程式設計方面的問題還是演算法思想本身有問題.
8. 如果程式通過了上述正確性驗證,那麼在將其進一步優化或簡化。
9. 撰寫思路分析,註釋.
對於具體的演算法思路,只能靠你自己通過自己的知識和經驗來加以獲得,沒有什麼特定的規律(否則程式設計師全部可以下崗了,用機器自動生成程式碼就可以了).要有豐富的想象力,就是說當一條路走不通時,不要鑽牛角尖,要敢於推翻自己的想法.我也只不過是初學者,說出上面的一些經驗,僅供大家參考和討論。
  關於人工智慧,我覺得的也是非常值得大家仔細研究的,雖然不能算是剛剛興起的學科了,但是絕對是非常有發展前途的一門學科。我國人工智慧創始人之一,北京科技大學塗序彥教授(這老先生是我的導師李小堅博士的導師)對人工智慧這樣定義:人工智慧是模仿、延伸和擴充套件人與自然的智慧的技術科學。在美國人工智慧官方教育網站上對人工智慧作了如下定義:Artificial
Intelligence, or AI for short, is a combination of computerscience,
physiology, and philosophy. AI is a broad topic, consisting ofdifferent
fields, from machine vision to expert systems. The element thatthe
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 effectiveway.
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 definitelymakes
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 alittle
part. You must make it clear that you are just a member of theteam,
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 learnnew
technology.
6.Creativity
The tools are changing. As for us, what's more important is touse
these new tools and technology to enable people and businessesthroughout
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 cannotbe
replaced by others' so you must do your business well in order toassure the
project development process.
團隊開發當中的一些具體精神應當有:
<1> Success and Failure is not oneperson'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 isnot
just because of one person's poor work. It is also yourfailure.
<2> Learn from each other.
Every person has his own specialty. Even Bill Gates cannot know allthe
things about software development. We often learn from each otherand
gains a lot. The old saying goes like this:
There must be one out of three who can be your teacher. In our teamwe
say: Every person is your teacher.
<3> Help those who have problems. Usethe group working spirit to
overcome all the difficulties.
There is no need to explain it. As the old saying: Two heads arebetter
than one. We always find it difficult to solve all the problemsjust by
oneself.
<4> Praise them who have got someimprovement.
In our team, I always praise the members when they havefinished
something or just solved one problem, and they think that it isinteresting
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 differencetechnology
will make in people's life!"。

在我大一時無意中找到了南京大學網友sir的帖子"胡侃(理論)計算機學習",這個帖子對我的大學學習起了至關重要的作用,後來也同他進行了一些交流,寫這份材料時也引用了其中的不少觀點,並得到了sir的支援。再有就是每次和本系司徒彥南兄的交談,都能從中學到很多東西,在這份材料中也有很多體現。這份材料是我原來在實驗學院進行新生入學教育的講稿之一,原有基礎上改進了其中我認為不太合適的理論,修正了一些觀點,在推薦教材方面結合我的學習情況有了較大改變。值得一提的是增加了一些計算機理論的內容,計算機技術的內容結合我國的教學情況和我們學習的實際情況進行了重寫。這裡所作的工作也只是將各位學長和同學們的學習體會以及我在學習電腦科學時的所思所想彙總在一起寫了下來,很不成熟。目的就是希望能夠給一些剛入學或者是學習電腦科學還沒有入門的同學以一些建議。不期能夠起到多大的作用,但求能為同學們的學習電腦科學與技術帶來微薄的幫助。還是那句話,電腦科學博大精深,我只是個初學者,不當之處希望大家批評指正。