當前位置:編程學習大全網 - 編程語言 - 大學學的編程,工作中有用嗎

大學學的編程,工作中有用嗎

現在隨著計算機水平的進步,各行業的自動化都在蓬勃進展,計算機和代碼廣泛深入到了很多領域。現在誰罵“程序員是屌絲”,其實已經是開了壹個很大的地圖炮了,因為各行各業現在都有程序員。除了BAT(騰訊阿裏百度)這類傳統互聯網公司之外,銀行、實業公司、研究機構、政府機關等等組織和公司,都有做網站\分析數據\寫自動化輔助工具程序\寫組織管理程序等等多種需求。 那麽種種程序員的工作,有多少工作需要數學呢?需要怎麽樣的數學呢?

首先毫無疑問地,程序員,就是所有“對著電腦,用手敲下特定編程語言構成的代碼的人”的總稱。我們要分析程序員的工作,也就是寫代碼。

我個人把寫代碼的工作分為五類,不壹定正確和全面啊,就是個概念性的分類:

1. 第壹類是結構性的工作。這類工作把特定的代碼、代碼段(函數)、代碼庫構成具有特定功能的程序,這些程序可以接受特定的數據、輸出特定的數據。例子如網站的界面、 軟件的界面、 軟件的壹些可視化功能,再復雜壹些有網站前端如何與後端通信、如何分配用戶請求給後端,如何處理兩個並行的程序、通信過程、計算機系統等等。結構性工作需要的是經驗以及對已有數據結構的了解,並不需要特別高的數學水平。我說的經驗指的是對於壹個特定的想要實現的功能,如何選擇程序邏輯和數據結構去實現,這種選擇的過程需要程序員有大量讀寫代碼的基礎,能夠把要實現的功能和自己以前實現過的或者看到過的功能聯系起來,設計出解決方案並實現。舉個例子,比如說網頁設計,通過HTML的元素構建頁面,通過javascript給頁面元素以動態,這個過程基本是“所見即所得”的過程。

目前大部分的互聯網公司以及銀行系統需求的主要都是這類工作。為了實現特定功能,程序有非常復雜的結構,必須要很多人壹同參與編寫和測試,因此才有了軟件工程這門學科的誕生。

結構性工作的巔峰產物是計算機操作系統。計算機操作系統雖然復雜,但是其中涉及到的數學並不多,最復雜的數學就是如何處理多個任務的調度以及進行內存分配管理,都可以抽象成簡單的離散數學和排列組合問題。不過,1萬行的操作系統和100萬行的操作系統的數學理論復雜度是差不多的,他們主要的區別是結構性的,而非數學上的。比如支持更多種CPU、硬件外設、網絡協議等等。

2. 第二類是效率性的工作。這類工作把特定的工程問題抽象成數學問題,然後發明新的數據結構或者操作邏輯去優化解決問題的效率。最簡單的例子是排序,用冒泡排序或者快速排序給大批量數據做整理有顯著的時間差別,這個大家都知道的……計算機科學家們主要從事的就是這類工作,需要極高的組合數學和圖論等知識。早期的效率性問題通常依靠較為復雜的離散數學,而近年來大部分問題都是應用圖論來解決。解決這類問題需要程序員對大部分的數據結構都有深刻的理解,並且能夠進行嚴格的理論分析,能夠清楚地指出某種數據結構或操作邏輯的時間效率和內存效率。上面談到的cqf 16歲發明的數據結構,就屬於這類工作……反正我對這類工作毫無天賦,繼離散數學敗了以後,後來的高級算法課成績也很差。

效率性工作的巔峰產物是壹套書叫做《The Art of Computer Programming》,作者是斯坦福大學的教授Donald.E.Knuth。這部神書包含了人類已知的大部分計算機算法的理論分析和最優形式, 50年來被公認為算法領域的聖經。吃透這套書,就可以拿到世界上最好的程序員的工作了(比爾蓋茨說如果誰看懂了這套書,就請把簡歷發給他……),當然這很不容易。我至今只認真看了第壹本的前言。

兼有前兩類工作的巔峰產物是淘寶網,尤其是雙十壹前後的淘寶網。不解釋太多,大家可以看文章《揭秘在淘寶買東西背後的復雜技術》。Google這兩年在這方面做的不如淘寶,因為中國人實在太多了……

3. 第三類是邏輯性的工作。指的是用計算機模擬人類的認知邏輯,這類工作包括語音識別、文字理解、信息檢索、數據分析等等。這類工作最早屬於高大上的人工智能、自然語言處理研究,後來隨著互聯網的興起開始逐步進入大眾視野。這類工作的主要基礎是概率統計、機器學習和數據挖掘的模型,包含的數學知識主要有概率、線性代數和圖論。由於互聯網公司和金融公司對於機器學習的需求,相關的基礎知識已經發展得非常成熟,如何學習這類知識也已經有很規範的教程。如今在矽谷,程序員不懂點機器學習,都不好意思出門和人打招呼。

這類工作的應用大約是這樣的:通過分析用戶在淘寶上買東西的數據,推測他還會買啥;通過分析股市的變化以及壹些市場信息,推測股市下壹步漲還是跌。還有就是分析搜索關鍵詞給出搜索結果,分析語音信號轉化成文字等等。這些不同的應用都是為了分析數據,都有類似的處理模型和數學方法。

近年來在機器學習的基礎上人們發明了深度學習。這個我不是很懂,不好加以評論。但是我知道這類工作的主要目的是模仿人類的認知能力。特別地,機器學習領域最基礎最出名的模型“神經網絡”,已經被生物學家證明是比較好的對於人類大腦邏輯的模擬。

這類工作說簡單也簡單,說難也可以很難。妳只需要學過大學壹年級的線性代數,就可以理解神經網絡、支持向量機等機器學習的模型,然後自己訓練模型去分析數據了——這也是大部分矽谷公司的需求。百度新任首席科學家Andrew Ng在Coursera上有個機器學習的公開課,講完神經網絡之後他就說:“Good,妳現在已經比大部分矽谷工程師更加了解機器學習了。”(真的不是黑麽)然而機器學習的模型背後的數學非常深奧,比如說神經網絡可以等效成壹些復雜的高維拓撲結構,網絡的訓練實際上是這些拓撲結構做拓撲變換的過程。比如如果待訓練的數據維數非常高,要選擇合適的函數降維。為了理解這些東西,需要深入學習線性代數、拓撲學、數學分析等數學知識。其實我說的我也不是很懂,我沒系統學過拓撲

  • 上一篇:湖南省長沙縣附近哪所高中比較好?有詳細信息嗎?
  • 下一篇:簡歷,求職信,範文,百科?
  • copyright 2024編程學習大全網