9.5 用算法和数学奠定专业基础——《逆袭大学》连载
返回到【全文目錄】
目錄
9.5?用算法和數(shù)學(xué)奠定專業(yè)基礎(chǔ)
算法有大用
抓住算法,打造核心競爭力?
數(shù)學(xué)的思維之用與直接之用
盡量學(xué)好數(shù)學(xué)
9.5?用算法和數(shù)學(xué)奠定專業(yè)基礎(chǔ)
一個(gè)程序設(shè)計(jì)的初學(xué)者,在剛剛開始學(xué)習(xí)時(shí),會(huì)認(rèn)為編程中語言是最重要的。沒有語言,沒有掌握好編程語言,寫不出程序來。而后又知道熟練運(yùn)用語言僅僅是學(xué)會(huì)了一種表達(dá)的方式而已,如同一個(gè)三歲的小孩,空有伶牙俐齒,說著幼稚的話。小孩要說出成熟的話來,還需要有思想,會(huì)思考。學(xué)編程也是一樣,學(xué)會(huì)了語言,還應(yīng)該學(xué)會(huì)思考,學(xué)會(huì)給出問題的解決方案。
經(jīng)典著作《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》的作者,著名計(jì)算機(jī)科學(xué)家高德納(Donald Ervin Knuth)曾經(jīng)說過:“軟件設(shè)計(jì)者需要的最基本的構(gòu)件是算法、語言和數(shù)學(xué)。”在專業(yè)基本功能方面,圍繞算法和數(shù)學(xué),積累足夠的專業(yè)基本功,這是計(jì)算機(jī)類大學(xué)生該有的準(zhǔn)備。
算法有大用
很多人在開始一個(gè)新的學(xué)習(xí)歷程時(shí),總是關(guān)心需要有什么基礎(chǔ)。上二年級要先上過一年級,要學(xué)會(huì)走先得要學(xué)會(huì)爬。這樣一種思維容易理解,體現(xiàn)的是一種對系統(tǒng)學(xué)習(xí)的期望。實(shí)際上,無論要進(jìn)到哪一個(gè)領(lǐng)域?qū)W習(xí),總是可以找到一個(gè)入口,隨時(shí)開展體驗(yàn)即可。隨著體驗(yàn)的加深,逐漸地將需要學(xué)習(xí)的其他內(nèi)容拉進(jìn)來,一種體系就這樣逐漸建立。在編程中,有一定的算法基礎(chǔ)是占有優(yōu)勢的。但現(xiàn)實(shí)的方法是,先從一種編程語言開始學(xué)習(xí),通過學(xué)會(huì)編寫一些不需要復(fù)雜算法的程序,對編程有了感性認(rèn)識(shí),然后再進(jìn)入算法與編程緊密結(jié)合的學(xué)習(xí)階段。
從這個(gè)意義上講,編程是不需要基礎(chǔ)的。剛開始編寫的簡單程序,要處理的數(shù)據(jù)不復(fù)雜,構(gòu)造一些表達(dá)式即可以完成。進(jìn)一步的學(xué)習(xí),利用一些很樸素的算法思想就能解決的問題,在很多時(shí)候都可以不用意識(shí)到算法兩字。初學(xué)者甚至都先不必關(guān)注效率等工程中必須關(guān)注的重要指標(biāo),能解決問題,能將學(xué)習(xí)進(jìn)行下去就行。算法這樣一個(gè)重要的領(lǐng)域,不應(yīng)該成為初學(xué)者起步的包袱。編程學(xué)習(xí)中要先放開步子來,利用很自然的思維,解決需要體驗(yàn)的問題,享受由此而來的一切成就感。
編程不需要有基礎(chǔ),這句話是對的。其語境是面向白紙一張似的初學(xué)者,從零開始學(xué)起,避其高深之處,找到入口得門而入,任何的學(xué)習(xí)都可以這樣開始。編程要以算法為基礎(chǔ),這也是對的。其語境是面向已經(jīng)具備了一定的程序設(shè)計(jì)基礎(chǔ)的學(xué)習(xí)者,要得到提高,要將編程從關(guān)注語言的級別,提升到真正解決問題能力的級別,這就需要知道算法的重要性。
算法無論是作為思考的中介,還是思考的結(jié)果,都是在編程學(xué)習(xí)起步之后必須正視的問題。由關(guān)注語言的學(xué)習(xí),轉(zhuǎn)而到對算法的重視,到達(dá)的就是一個(gè)新的層次。高層次總是在低層次積累到一定程度才能到達(dá)。一方面,從低層次起步時(shí),需要安于當(dāng)前階段,通過學(xué)習(xí)和實(shí)踐,完成該有的積累;另一方面,積累到一定程度時(shí),再行突破,到達(dá)另外新的層次。
可以對算法的學(xué)習(xí)給予超出編一手好程序的期望。遞推方法使用“步步為營”的策略,不斷利用已有的信息推進(jìn)求解,最終得到收斂的解;枚舉(窮舉)方法有個(gè)霸氣十足的別名——暴力求解,從所有候選答案中去搜索問題的解;遞歸方法是一種直接或者間接調(diào)用自身的辦法;分治方法將要解決的問題劃分成若干規(guī)模較小的同類子問題,將子問題的解逐層合并產(chǎn)生最終的解;貪婪方法從初始解開始就在追求接近給定的目標(biāo),以求盡可能快地得到最好的解;試探算法選擇一種可能進(jìn)行試探,發(fā)現(xiàn)選擇錯(cuò)誤就即時(shí)回退,然后繼續(xù)試探;分枝限界法意圖找到最優(yōu),將不可產(chǎn)生最優(yōu)解的分支盡可能早地剔除候選隊(duì)伍。算法思想的光芒普照天下,這樣的策略其實(shí)并不限于編寫程序。學(xué)計(jì)算機(jī)的人是能干大事的,學(xué)計(jì)算機(jī)的人是多面手,他們的底氣是掌握這些歸為類的方法和策略。
算法學(xué)習(xí)中會(huì)遇到很多問題,結(jié)合著數(shù)據(jù)結(jié)構(gòu),圍繞著抽象數(shù)據(jù)類型漸次展開。算法研究人員和算法的學(xué)習(xí)者并不是成天鉆在抽象的符號(hào)當(dāng)中工作,經(jīng)典算法通過是借著經(jīng)典的具體問題,甚至是一些好玩的故事來體現(xiàn)。查找和排序既是在計(jì)算機(jī)系統(tǒng)中使用頻率最高的問題,又是特別能體現(xiàn)算法思想的問題。背包問題、貨郎擔(dān)問題、流水線調(diào)度問題,對應(yīng)著無數(shù)的各式應(yīng)用。在智能計(jì)算中大顯身手的模擬退火算法、遺傳算法、神經(jīng)網(wǎng)絡(luò)等等,來自大自然的智慧,促成了計(jì)算的成長。
效率問題是程序設(shè)計(jì)中的核心問題之一。程序運(yùn)行要盡可能快,占用內(nèi)存空間要盡可能小。算法的學(xué)習(xí)中,到處都體現(xiàn)出了這種“精打細(xì)算”的味道。我們能順暢地欣賞視頻,游戲中享受著逼真的感覺,點(diǎn)擊“搜索”,瞬間就有搜索結(jié)果呈現(xiàn)在眼前,可以體會(huì)一下這些應(yīng)用背后高效率的算法立下的奇功。到了移動(dòng)計(jì)算、物聯(lián)網(wǎng)的時(shí)代,手機(jī)、平板電腦這些低速計(jì)算設(shè)備,以及計(jì)算能力更加有限的專用設(shè)備顯得更加重要,對效率的追求不降反升。在環(huán)境保護(hù)日益受到重視的今天,計(jì)算機(jī)設(shè)備的耗電量已經(jīng)成為用電大戶,中國所有臺(tái)式機(jī)的用電量,相當(dāng)于三峽電站發(fā)電量的總和,用上更快的算法,意味著計(jì)算機(jī)運(yùn)行時(shí)間的減少,“綠色計(jì)算”成了業(yè)界的共識(shí)。
隨著技術(shù)的發(fā)展,不斷有運(yùn)行更快、存儲(chǔ)量更大的計(jì)算機(jī)被制造出來,也有了將更多的計(jì)算機(jī)連接起來組成機(jī)群,提供了超級的計(jì)算能力。在這樣的背景下,有人質(zhì)疑:“現(xiàn)在的機(jī)器設(shè)備已經(jīng)足夠快,還用如此費(fèi)力地用人腦在算法方面有那么多的考慮嗎?”他們主張,遇到問題,用暴力求解方法寫成程序,交給足夠快的超級計(jì)算機(jī),一切搞定。甚至我親自聆聽過一位著名教授的言論:“我們不需要在算法方面花那么大的精力,利用機(jī)群,增加并行度,是一種更直接和簡單的方法。”教授的言論有些道理,但事情并非如此。
舉一個(gè)實(shí)例。在物理學(xué)、力學(xué)以及信息處理的很多領(lǐng)域,常常需要用到離散傅里葉變換,見公式(9–1):
? (9–1)
從算法復(fù)雜性度量的角度看,如果直接用公式計(jì)算,需要n2次乘法。如果能夠利用指數(shù)函數(shù)的周期性和其他一些計(jì)算技巧,則可以把計(jì)算量降低到nlog2n次,這種方法叫做快速離散傅里葉變換。算法關(guān)注計(jì)算規(guī)模,當(dāng)n值很大以后將會(huì)體現(xiàn)出高效算法的必要性。如果現(xiàn)在要用計(jì)算機(jī)對衛(wèi)星拍攝的照片進(jìn)行分析處理,對10×10 cm2的照片每隔1微米進(jìn)行劃分然后進(jìn)行計(jì)算。用傳統(tǒng)的傅里葉變換算法,需要計(jì)算n2=1016次,即一億億次,如果用百萬次級的計(jì)算機(jī),需要300年,這樣的算法是在實(shí)際應(yīng)用中不能接受的,而使用快速算法,則可以在1小時(shí)內(nèi)獲得結(jié)果。
在摩爾定律的作用下,計(jì)算機(jī)的能力在飛快地增長,價(jià)格也在不斷下降。但是,永遠(yuǎn)不會(huì)有太快的計(jì)算機(jī),因?yàn)榭倳?huì)產(chǎn)生出新的應(yīng)用。進(jìn)入了大數(shù)據(jù)的時(shí)代,需要處理的信息量更是呈指數(shù)級的增長,已經(jīng)給計(jì)算、存儲(chǔ)的設(shè)備提出更多的挑戰(zhàn)。基于互聯(lián)網(wǎng),現(xiàn)在每人每天都會(huì)創(chuàng)造出大量照片、視頻、語音、文本等數(shù)據(jù),日益先進(jìn)的存儲(chǔ)手段使我們每個(gè)人的信息量都在爆炸式的增長,互聯(lián)網(wǎng)的信息流量和日志容量也在飛快增長。在科學(xué)研究方面,隨著研究手段的進(jìn)步,數(shù)據(jù)量更是達(dá)到了前所未有的程度,三維圖形、海量數(shù)據(jù)處理、機(jī)器學(xué)習(xí)、語音識(shí)別,都需要極大的計(jì)算量。在未來,更需要依靠卓越的算法解決問題,更需要大量的掌握了算法規(guī)律和方法的高水平人才承擔(dān)責(zé)任。
面對一塊巨石,等待一位大力士將之強(qiáng)力搬開是一種辦法。找來一根杠桿,用很小的力量也可以將之撬動(dòng)。常指望著高性能的計(jì)算機(jī)求解,依靠的是大力士,而在算法上做文章,用的卻是巧勁。我們需要的是智慧的力量,體現(xiàn)出的是智慧的美。當(dāng)遇到任何大力士都無法撼動(dòng)的巨石時(shí),我們只有依靠智慧了。
抓住算法,打造核心競爭力?
學(xué)計(jì)算機(jī),要關(guān)注算法的學(xué)習(xí)。除了在課名中就帶有“算法”的課程,專業(yè)核心課程幾乎都是圍繞算法展開的,只不過針對的是專門的問題:操作系統(tǒng)關(guān)注的是系統(tǒng)資源分配、管理的問題和解決算法;編譯原理關(guān)注人工語言處理的算法;計(jì)算機(jī)網(wǎng)絡(luò)中的重點(diǎn)——協(xié)議實(shí)際就是算法;計(jì)算機(jī)圖形學(xué)關(guān)注圖形表示的數(shù)據(jù)結(jié)構(gòu),以及圖形顯示、變換等的算法;多媒體技術(shù)基礎(chǔ)是圖像、音頻、視頻編碼、壓縮的算法;密碼學(xué)中是保證信息安全的算法;人工智能中涉及各種決策、模式匹配、優(yōu)化算法;并行計(jì)算是多處理機(jī)同時(shí)完成一個(gè)任務(wù)的算法。各種基礎(chǔ)的課程,盡管其描述的方式中數(shù)學(xué)味濃一些,涉及的也是算法。離散數(shù)學(xué)、可計(jì)算理論是算法,線性代數(shù)、數(shù)值分析、概率論和數(shù)理統(tǒng)計(jì)中也是算法。認(rèn)識(shí)不到這一點(diǎn),有些同學(xué)就會(huì)聲稱的“操作系統(tǒng)中全是些概念,背一背就過了”、“概率論沒有用”之類的斷言,真的會(huì)將自己學(xué)習(xí)的方向引入歧途,甚至找不到方向和動(dòng)力。經(jīng)歷了求職的大學(xué)生會(huì)發(fā)現(xiàn),技術(shù)類崗位的筆試、面試,考到、問到的內(nèi)容,需要的是算法基礎(chǔ)。在企業(yè)招人的考試中都是這樣,可以知道算法的基礎(chǔ)性作用。
學(xué)得常用的算法,學(xué)會(huì)算法分析和設(shè)計(jì),這是計(jì)算機(jī)類專業(yè)大學(xué)生應(yīng)該達(dá)到的程度。遇到要解決的問題時(shí),為問題建立計(jì)算模型,用已有的算法解決問題;進(jìn)一步,能根據(jù)具體問題的實(shí)際情境,從多種算法中選擇一個(gè)最合適算法;更高的要求,解決問題沒有現(xiàn)成的算法可以利用,憑借著算法方面的良好素養(yǎng),能夠在已經(jīng)有的算法基礎(chǔ)上進(jìn)行改進(jìn),甚至運(yùn)用學(xué)到的算法策略,設(shè)計(jì)出新的適用算法,這是充滿創(chuàng)造性的工作。在高等教育中專科、本科、碩士、博士的不同層次,都設(shè)有計(jì)算機(jī)專業(yè)。不同的學(xué)歷側(cè)重不同,學(xué)歷越高,對算法要求有更深入的學(xué)習(xí),并且要學(xué)習(xí)和研究的算法,由一般性算法問題逐漸過渡到專門的算法。
有人說:“本科生用不著學(xué)太多的算法。”他馬上可以舉出的例子就是,現(xiàn)如今有多少碼農(nóng)的工作需要算法?很多人的工作,拖拖控件,寫些調(diào)用數(shù)據(jù)庫的語句,如此而已。這是業(yè)內(nèi)一部分技術(shù)人員的工作場景,但這不是全部,不能成為我們放松學(xué)習(xí)算法的理由。要在行業(yè)的生態(tài)系統(tǒng)中生存發(fā)展,對大學(xué)生的要求不能只看著技術(shù)生態(tài)鏈中的一部分。縱觀行業(yè)中高薪的、核心的技術(shù)崗位,豈是只會(huì)拖控件就能勝任?萬萬不可以將剛進(jìn)入行業(yè)時(shí)立足的工作形態(tài),當(dāng)作長期發(fā)展的形態(tài)。這句話背后的事實(shí)是,有些本科生連拖控件的要求都達(dá)不到。這句話也還提醒我們,專業(yè)基礎(chǔ)很重要,但基礎(chǔ)不是全部。花一段時(shí)間,實(shí)踐應(yīng)用開發(fā),學(xué)習(xí)和體會(huì)拖控件之類的其他技能和要求,這也是大學(xué)中必要的安排。
很少用到算法的人,有些人是知其有且知其不必用,而有些人是不知其有,進(jìn)而需要用時(shí)當(dāng)然也不知用,這兩方面的差距很分明。實(shí)際上,人們之所以說算法很重要,是因?yàn)槿魏蔚某绦?#xff0c;任何的軟件,都是由很多的算法和數(shù)據(jù)結(jié)構(gòu)組成的,大學(xué)階段學(xué)習(xí)的算法都是基本的算法,是作為每一名專業(yè)人員都需要有的公共知識(shí),實(shí)在不必因?yàn)椤昂苌儆玫健本蜕觥胺乓环拧钡男乃肌?/p>
這樣看來,有的程序員很少用到算法的背后,體現(xiàn)的是軟件行業(yè)中的分工不同。可以將軟件開發(fā)工作分為算法密集型、業(yè)務(wù)邏輯密集型和使用體驗(yàn)密集型三種類型,這三種類型的工作對算法的要求各不想同。算法密集型的如搜索引擎、游戲引擎開發(fā)、模式識(shí)別等,這些主要的任務(wù)都與算法密切相關(guān);業(yè)務(wù)邏輯密集型,典型的如信息管理系統(tǒng),其中工作量最大的是實(shí)現(xiàn)用戶的業(yè)務(wù)需求,熟悉用戶的業(yè)務(wù)并按要求完成應(yīng)用更重要;使用體驗(yàn)密集型,如教育、游戲軟件開發(fā),更注意友好的界面、方便的操控和愉悅的使用體驗(yàn)。在后兩種類型的工作中,會(huì)有90%以上的代碼只是涉及到業(yè)務(wù)流程,以及用戶界面,的確不需要直接使用什么算法。但是,往往就是余下的10%代碼,有相當(dāng)高的性能要求,所采用的算法決定了系統(tǒng)整體的性能,決定了產(chǎn)品的競爭力。想在軟件行業(yè)成為有競爭力的從業(yè)者,有盡可能好的算法功底,也就成了自然的選擇。
數(shù)學(xué)的思維之用與直接之用
傳說中,數(shù)學(xué)對計(jì)算機(jī)很重要,但有些程序員也宣稱感覺不到數(shù)學(xué)對他們的意義。其實(shí)考察下來,與對算法的態(tài)度對比下來,有關(guān)用不用數(shù)學(xué)的觀點(diǎn),也是大致相似的。
有位學(xué)生給我來信,他很想知道高數(shù)和線性代數(shù)對計(jì)算機(jī)專業(yè)有什么作用,要學(xué)到什么地步。這個(gè)問題在和大學(xué)生交往過程中沒有少被問到。一些人只是問問而已,還有的是想找個(gè)理由不想學(xué)那么多數(shù)學(xué),當(dāng)然應(yīng)該都是遇到了困難。有些計(jì)算機(jī)類專業(yè)的學(xué)生,對學(xué)數(shù)學(xué)有情緒。
數(shù)學(xué)對于計(jì)算機(jī)學(xué)科的重要性常被人談起。數(shù)學(xué)與計(jì)算之間存在著不可分割的聯(lián)系:數(shù)學(xué)起源于對計(jì)算的研究,計(jì)算作為數(shù)學(xué)的研究對象已有幾千年,數(shù)學(xué)仍在為計(jì)算提供著理論、方法和技術(shù),而計(jì)算科學(xué)為數(shù)學(xué)提供了能自動(dòng)計(jì)算的設(shè)備,并為更有效地完成任務(wù)提供了工程方法和技術(shù)手段。計(jì)算曾經(jīng)是數(shù)學(xué)的一個(gè)分支,而當(dāng)其承擔(dān)起構(gòu)造能自動(dòng)計(jì)算和會(huì)思維的機(jī)器的任務(wù)時(shí),逐漸發(fā)展出了其特有的成分,并具有了更多工程性質(zhì)的內(nèi)容,形成了自己的體系。盡管現(xiàn)在計(jì)算與數(shù)學(xué)已經(jīng)不再等同看待,但縱觀學(xué)科間的聯(lián)系,計(jì)算與數(shù)學(xué)之間的親緣關(guān)系還是最近的。
數(shù)學(xué),對于計(jì)算機(jī)專業(yè)人員的作用主要表現(xiàn)在兩個(gè)方面:
第一方面,是數(shù)學(xué)的思維之用。數(shù)學(xué)是科學(xué)之母,承載的是一種科學(xué)家思考和解決科學(xué)問題的具體方式和途徑。學(xué)數(shù)學(xué)的過程,就是要獲得這種思考和解決問題能力的過程,還可以獲得從事IT行業(yè)的技術(shù)工作中需要的邏輯思維能力和嚴(yán)謹(jǐn)?shù)墓ぷ髯黠L(fēng)。
另一方面,是數(shù)學(xué)的直接之用。數(shù)學(xué)可以直接應(yīng)用于解決一些問題。數(shù)學(xué)是從各種實(shí)際應(yīng)用需求中抽象出來的理論,之所以要將實(shí)際抽象成理論,目的就在于將直擊本質(zhì)的、具有普適性的理論更好地指導(dǎo)實(shí)踐,將已有的理論,伸入到無限的應(yīng)用場景中。在計(jì)算機(jī)工程實(shí)踐中,要大量用到數(shù)學(xué)各個(gè)分支的知識(shí)。例如
- 無論二維平面繪圖還是三維動(dòng)畫軟件,都需要有幾何學(xué)的支持;各種圖形軟件開發(fā)中,需要用線性代數(shù)中的坐標(biāo)變換、矩陣運(yùn)算;
- 游戲開發(fā)中圖形處理是一個(gè)重頭戲,此外,還涉及物理方程和公式,想想憤怒的小鳥在被彈射出去的那一剎那,彈力、重力、滾下斜坡,統(tǒng)統(tǒng)要用到;
- 談及數(shù)據(jù)壓縮與還原、數(shù)據(jù)加密與解密,以及倍受關(guān)注的信息安全,離不開數(shù)論、代數(shù)編碼理論,小波函數(shù)等數(shù)學(xué)分支;
- 在人工智能及其衍生的各個(gè)領(lǐng)域,涉及決策、智能的話題,概率、統(tǒng)計(jì)不能不提。
這樣的例子數(shù)不勝數(shù)。有很多人感嘆,搞計(jì)算機(jī),學(xué)多少數(shù)學(xué)都不算多。
盡量學(xué)好數(shù)學(xué)
IT業(yè)是一個(gè)包容性很強(qiáng)的行業(yè),不少從業(yè)人員并非計(jì)算機(jī)專業(yè)畢業(yè),甚至有不少?zèng)]有接受過大學(xué)教育。很多在校大學(xué)畢業(yè)生很在意這種“搶飯碗”的事情,也為此表示擔(dān)憂。應(yīng)該要意識(shí)到,一些簡單的專業(yè)技能、一般的程序設(shè)計(jì)技術(shù),門檻并不高,掌握起來相對容易,讓更多的人有機(jī)會(huì)從事合適的工作,要能接受這樣的事實(shí)。而作為計(jì)算機(jī)類專業(yè)的大學(xué)生,需要知道自己的競爭優(yōu)勢和不可替代性,就在于在接受專業(yè)培養(yǎng)的過程中,具備了專業(yè)的思維,積累了扎實(shí)的關(guān)于計(jì)算的基本理論,掌握了許多其他人員并不深究也深究不了的東西,例如,算法、計(jì)算機(jī)體系結(jié)構(gòu),等等。用專業(yè)的思維分析和解決問題,有能力研制大型系統(tǒng),從事底層開發(fā),這需要有專業(yè)的知識(shí)結(jié)構(gòu)和技能作為支撐,其中數(shù)學(xué)方面的知識(shí),在為專業(yè)理論充當(dāng)支撐。數(shù)學(xué)專業(yè)的畢業(yè)生到軟件企業(yè)中從事軟件設(shè)計(jì)與分析工作的工作要有優(yōu)勢,而計(jì)算機(jī)類專業(yè)的畢業(yè)生從程序員起步的居多,原因就在于數(shù)學(xué)專業(yè)的學(xué)生在分析推理能力方面,從所受的訓(xùn)練要比計(jì)算機(jī)類專業(yè)的學(xué)生多。計(jì)算機(jī)類專業(yè)畢業(yè)的學(xué)生有自己的特點(diǎn),倒不用對數(shù)學(xué)專業(yè)的學(xué)生有多少羨慕,但從中應(yīng)該看到數(shù)學(xué)對計(jì)算學(xué)科的重要意義。至于和別人搶低端飯碗的專業(yè)畢業(yè)生,一方面,這只是在剛進(jìn)入行業(yè)的一種方式,另一方面,有些畢業(yè)生沒有具備專業(yè)的核心能力,不得不這樣去做。
不過,也有IT行業(yè)的專業(yè)技術(shù)人士說,他們在工作中根本沒有感覺到數(shù)學(xué)的存在。甚至有人認(rèn)為程序員不需要了解數(shù)學(xué),更重要的是要去了解設(shè)計(jì)模式、面向?qū)ο笤怼④浖ぞ摺⒔缑嬖O(shè)計(jì),以及一些其他類似的東西,數(shù)學(xué)不好也可以做一個(gè)很專業(yè)的程序員。這樣的感覺是對的,這也是在行業(yè)內(nèi)的一種生存方式。
為什么會(huì)有這樣的感覺?從數(shù)學(xué)的思維之用看,當(dāng)訓(xùn)練出來了專業(yè)思維,在解決問題時(shí),自然而然就用上了,這是一種最佳的效果。我曾經(jīng)與我的學(xué)生談離散數(shù)學(xué)非常重要,其重要程度甚至到了幾乎感覺不到其存在的程度。這句話聽起來矛盾,我要說的是,要讓離散數(shù)學(xué)的精髓成為你的思維習(xí)慣。遇到問題,不用想用離散數(shù)學(xué)中的哪個(gè)定義、定理,但確實(shí)就是那樣想了,那樣做了,這和武術(shù)中的“出手不見招”的境界是一樣的。
從數(shù)學(xué)的直接之用看,大學(xué)教學(xué)需要關(guān)注到未來各種可能的用途,要考慮到大多數(shù)人的需要。這樣一來,對某些人,自然會(huì)有一部分用不上。工作中是否要用到大量的數(shù)學(xué),和從事的工作領(lǐng)域有很大的關(guān)系。例如:
- 投身到科學(xué)計(jì)算,以及近幾年非常熱門的數(shù)據(jù)分析領(lǐng)域,數(shù)學(xué)知識(shí)時(shí)時(shí)要用;
- 從事游戲開發(fā),涉及圖形處理、實(shí)體建模、逼真效果展示,數(shù)學(xué)很重要;
- 從事系統(tǒng)開發(fā)中最核心的工作,在算法層面考慮問題,數(shù)學(xué)基礎(chǔ)不好不行;
- 涉及信息安全領(lǐng)域,沒有數(shù)學(xué)功底沒法玩。
然而,如果從事的是系統(tǒng)實(shí)現(xiàn)環(huán)節(jié)的工作,如大多數(shù)信息系統(tǒng)開發(fā)中的實(shí)現(xiàn)、測試工作、人機(jī)交互界面設(shè)計(jì)、系統(tǒng)管理等崗位,真的就不需要太多的數(shù)學(xué),感覺不到數(shù)學(xué)的存在也就不足為奇。
另外一個(gè)因素是,軟件業(yè)內(nèi)的分工進(jìn)一步細(xì)化,很多在開發(fā)中需要用到的底層處理由成熟的軟件組件提供,用到的數(shù)學(xué)就“藏”在這些組件中,不需要開發(fā)人員考慮了。例如:
- 搜索引擎構(gòu)造中要用到復(fù)雜的算法,而大多數(shù)的開發(fā)直接引入類庫,如開源的Lucence,調(diào)用函數(shù)就行;
- 游戲開發(fā)中要到各種計(jì)算模型,足以將目前游戲開發(fā)隊(duì)伍中一大半人淘汰,但使用功能強(qiáng)大的游戲開發(fā)引擎,如2D的Cocos和3D的Unity,難度、成本降低,開發(fā)周期縮短,開發(fā)質(zhì)量提高,何樂而不為?
由此可見,數(shù)學(xué)對于計(jì)算機(jī)類專業(yè)很重要,但也不是重要到每個(gè)人都必須要精學(xué)多學(xué)的那種程度。行業(yè)中有分工,每個(gè)層次、每個(gè)領(lǐng)域需要的能力結(jié)構(gòu)和要求也各不相同,實(shí)在也沒有必要千人一面地做出硬性的要求,要求大家都向數(shù)學(xué)專業(yè)的學(xué)生靠攏。另外,在有限的大學(xué)時(shí)間內(nèi),僅培養(yǎng)出突出的數(shù)學(xué)能力是不夠的,誠如上述所提到的純粹工程的能力,也是不可或缺的部分。在這一方面,計(jì)算機(jī)類專業(yè)的培養(yǎng)方案還是考慮了這樣的需求。其中,對計(jì)算機(jī)科學(xué)技術(shù)專業(yè),在數(shù)學(xué)及其他的理論方面的要求相對要高,而對于軟件工程、網(wǎng)絡(luò)工程等專業(yè),工程能力要求相對更重要。
這不能成為一些同學(xué)放棄培養(yǎng)方案內(nèi)正常的數(shù)學(xué)課要求的理由。數(shù)學(xué)的思維之用和直接之用并不是能夠嚴(yán)格劃分開來的,數(shù)學(xué)之用的無限可能也不是哪位老師能隨意講清。在大學(xué)這樣一個(gè)重基礎(chǔ)的學(xué)習(xí)階段,還是要有些耐心,完成該有的積累。我們應(yīng)該看出,達(dá)到培養(yǎng)目標(biāo)的畢業(yè)生,在各種崗位上的游刃有余,數(shù)學(xué)和算法能力強(qiáng)的,將擁有更多的選擇機(jī)會(huì)。即使是在利用Lucence和Unity開發(fā)探索引擎和游戲,如果能對其內(nèi)部的機(jī)制多一引起了解,你的層次將不只是“使用”,而可以是“駕馭”,意味著工作質(zhì)量的提高,意味著你的個(gè)人價(jià)值和潛力。而如果過早地放棄了對專業(yè)核心能力的追求,在崗位選擇以及發(fā)展空間上面臨的限制,也就顯而易見了。除非是因?yàn)楦鞣N原因真的失去了機(jī)會(huì),我們再作退而求其次的打算。
返回到【全文目錄】【下一節(jié)】
?
總結(jié)
以上是生活随笔為你收集整理的9.5 用算法和数学奠定专业基础——《逆袭大学》连载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用计算机唱黑人台湾音乐,运用计算机音乐技
- 下一篇: 亿阳信通面试题2006.12.15