本人2018年畢業生,高中階段數學雖然能懂,但是成績一直不理想。

請問數學一定要特別優秀才適合學習計算機專業嗎?


像我這樣的高中數學渣,也能在小學開始編程,初中開始做軟體開發,在大學做點計算機科學的研究。雖然沒讀過計算機專業,我覺得只要具有學習和動手能力,普通的本科課堂應該沒問題的,要搞計算機理論、計算幾何等研究是另一回事。

有很多答案說到計算機圖形學要線性代數,實際上本科的計算機圖形學入門課程通常都是很簡單的,所謂線性代數也只是用點積叉積,用矩陣來做幾何變換,而不是用於線性方程求解(圖形中的物理模擬除外),連特徵值都用不到。

數學其實真是很博大精深的學科,每個人在不同專業不同階段都可能會遇到學習和應用瓶頸,只要按部就班跨過去就好。或許有一天會喜歡學多一些呢。


計算機基本只需要用到數學專業大二以前的數學。當然離散數學這種課數學專業不會學,不過離散數學也只是集合論、邏輯入門、圖論一堆東西的大雜燴,學的東西在數學專業看來並不深。

不同人對「數學好」的定義不一樣。大部分人覺得高數考滿分應該就代表數學學得很好了。但是高數考滿分也不一定在數學專業能學得多好嘛。

當然有人會說理論計算機這種對數學要求很高。沒錯,但是計算機專業有多少人會去做理論計算機方向的學術研究?大家誠實一點嘛,大部分學計算機還不是寫代碼,去業界賺錢的,難道會有很多人去專門研究演算法複雜度,P=NP一類的問題?大部分人學計算機是做工程做技術的,不是做研究的。從這個角度說,多寫寫代碼,多刷刷演算法題,比糾結什麼數學水平好不好重要得多。


高中數學和大學數學不是一種東西。

計算機科學中所需要的數學也和一般意義上的高等數學不是一種東西。


我們常說的計算機專業要數學好和普羅大眾的理解的是完全不一樣的,因為普羅大眾既不懂計算機也不懂數學。

普羅大眾理解的計算機專業,就是在電腦上敲幾個單詞和幾個符號,就是編程。

普羅大眾理解的數學就是加減乘除或者稍微高級一點的加減乘除。(手動斜眼笑,普羅大眾眼裡「數學」=「算數」

所以就出現了三種比較典型的言論:

  1. 大神:基礎數學能力會對學習計算機專業有極大的幫助,並且數學在計算機很多領域都占很高的比重。
  2. 跟風半吊子程序員:反正大神說的肯定是對的,計算機就是編程寫代碼,數學就是加減乘除,所以編程一定要(初中高中大學)數學成績好!(大神:喵喵喵?我不是!我沒有!別瞎說!)
  3. 有2-10年工作經驗的半吊子程序員:我每天切圖寫curd根本沒算過什麼加減乘除,計算機就是編程寫代碼,數學就是加減乘除,計算機根本不需要數學,數學辣雞!(數學:我刨你家祖墳了?)

推薦上交一科普性質的公開課數學之旅,可以看看你理解的數學和真正的數學之間有多大差別。裡面有一個經典例子就是歐拉大佬將一個現實中的七橋問題,抽象成了點和線這種可計算的問題(當時還沒有拓撲這玩意),而可計算問題恰恰是計算機能解決的並且擅長解決的問題。

上海交通大學公開課:數學之旅_全6集_網易公開課?

open.163.com圖標

以七橋問題為例,普羅大眾覺得其中最「數學」的部分可能是計算些入度出度這些「算數」。但其實稍微對數學有些了解的朋友應該都能理解,七橋問題中最關鍵的一步也是最能體現「數學」本質的一步其實是把七橋問題抽象成「點和線」的問題。

我們這些學計算機的所乾的事情,無非也就是把現實問題轉化成計算機能解決的問題,跟歐拉大佬在七橋問題中所乾的事情如出一轍(想想還有點小激動!),所以你覺得計算機專業需不需要數學特別好呢?(手動斜眼笑

答案是:

當然不需要數學成績特別好,但是最好有一定的數學思維能力。

每年那麼多計算機專業的學生,哪裡來的那麼多真正數學好的,高中學到的那點所謂「數學」根本不夠看的。大家的差距真的沒有想像中那麼大,進了專業在再有意識地去學去練就足夠了。

但是如果你大學畢業了,還只有高中的數學思維能力,那還是比較堪憂的,雖然也不至於找不到工作,但是跟「好工作」基本無緣了。


顯然談不上需要特別好,尤其更偏重coding的話,大可直接說對數學沒太幾毛錢要求。當然數學功底屌能錦上添花(哪怕你演算法學得比同儕們紮實到位些那至少各個面試總有點好處吧),更能大幅提升你作為專業人士的天花板(往大里說理工科都一樣,也沒啥特殊),這點沒啥疑問。

實際點說,你如果能在本科階段,把微積分、線性代數、概率統計、數值優化、離散數學、數論基礎(數據結構、演算法等就往專業基礎課列咯)等數學課能學個明白早就足夠吊打國內絕大多數CS和相鄰專業的畢業生。集約點你也能直接看下面這樣的書(或者像什麼具體數學也能看看):

總而言之,CS對於數學基礎的要求橫向比較上我以為沒啥值得多吹的,無論是前些年信安熱,這些年AI熱時期都一樣,和各方向工科專業對比並沒值得特意強調的地方。

我非常非常看不慣知乎和其他網路媒介上一些人有意無意對新人渲染什麼CS對數學有極高要求,CS極度燒腦的觀點,你們真是搞笑。CS確實能夠拿出燒腦的專業課,問題在於理工科誰拿不出來,光CS相鄰專業們就能拿一堆,人家大學4年哪個比你們學得輕鬆了?你們恰恰不談CS的一大優勢就是就算沒學好啥數學,靠點過得去的coding水平也能找到像樣的工作,甚至別說CS,我大學畢業十幾年前的時候,通信、信息、電子、自動化等專業本科還有的人去當大流碼農呢,你們想想為啥?

至於打基礎的幾門工程數學,作為電院信院計院之類的背景都不敢多吹逼,俺們低年級學著那點微積分、線代、概率就來吹難,有沒有想過人家學著數分、高代、高概的專業們是什麼體驗,你好意思么,明明你低年級日子好過多了好么。

所以不要因為高中數學成績不出挑就盲目提前不自信,事實上現在很多對數理要求更高的專業往往生源都不如計算機,真要以此類推,這些人是不是該一律提前退學了?當然,有句話是必須要說的,無論讀哪個理工科,資質平平的人想在專業方向有所建樹,自身努力都是不可少的,態度上你最好要比高中更努力,方法上則要擺脫各種海量刷題和套路,真正突破解決每個知識點,結成知識樹(這裡不是說做題不重要,做題是檢驗知識掌握程度的好方法之一,但不用做太多題,更不要追求奇技淫巧的東西,要學會多回味各個知識點,看看自己究竟懂沒懂,這比你試卷混多少分重要得多),這個思想準備必須有。


如果是做研究。

還真的要好好學一下數學。

如果是當碼農。

為了你的頭髮好,我建議你不要學太多。

掙再多錢,也買不回。

那烏黑亮麗的秀髮,

我現在日掉頭髮100根。

還沒女朋友……。

我對自己的人生感覺有點絕望。

逝去的髮際線,是我對IT深沉的愛。


發一張上課的PPT


計算機專業的一個好處就是不同方向門檻有高有低,不同對數學的要求也有高有低。對數學不感興趣的可以選擇對數學要求低的,喜歡數學可以選擇全是數學的方向研究。許多方向的門檻非常低,低到了高中畢業後去培訓個一年就可以勝任了(至少是技術上勝任了),這種方向一般不需要中學數學以上的數學。可是有些方向卻對數學要求比較高,比如說計算機圖形學,計算機視覺等等,這些方向就會對數學有較高的要求。

對於我所從事的機器人行業,可以說對數學的要求還是比較高的,所以我每天都在惆悵,為什麼大學不多學點數學啊,現在只能慢慢補啦。。


我們經常說XX對數學很重要,但是這裡的數學我個人覺得比較偏向於邏輯思維能力,而不是數學考試能力。比如你會接觸到數據結構,什麼鏈表、樹之類的演算法,理解這種演算法更多的是一種數學能力、邏輯能力,而不是你會不會解個考研數學題。

當然,如果是指演算法崗那另當別論,對數學能力要求會高一些。對於一些很基礎的程序員,很多時候更多的是用輪子(甚至都不用會造),寫業務邏輯(比如一個登陸操作,這個邏輯應該怎麼樣)


你看lamport這麼說,就知道搞計算機的數學有多菜了吧。只是遇到了,才會去學習,好多做圖譜的數學也很菜,更別說搞dl那些搭積木的了。是的,需要的數學取決於你做的方向,總體而言,不做到lamport這種位置,就是需要啥學啥。


並不需要數學特別好。

普通碼農,很多人就做做增刪改查,有個中學數學基礎就夠了。

做點演算法的,大多數也只要查現成公式會用就行,大概有個大學本科水平足夠。

做機器學習的,需要自己開發一個模型的程序員,也只要明白概率統計,線性代數的知識,可能需要比本科數學多一點的知識而已。

這些人已經佔據了這個行業的90%以上的人數。

你說你要去top 10%,哪個工程行業的top 10%的人才數學不好?


傳統的計算機的課程體系的數學部分還算比較多。

現在?由於各種原因,已經不開設了。

所以,機器學習一來,都懵圈了。


來回答另一個問題

金融專業一定要數學好嗎?

不,因為你工作了會發現最多用到nearest neighbor、linear regression和K-means

大多數時候都在excel或者寫一些屁用沒有的研報。

//滑稽


數學是必需的,特別是當你要著手搞一些比較艱深的技術的時候,基本的微積分線代概率論是必需的,信號與系統的內容也少不了。就這麼說,當你在寫程序但卻覺得用不上數學知識的時候,只能說明這個活難度還不夠大...比如搞遊戲引擎的,想了解下球諧光是怎麼實現的,數學基礎忘光的話,估計要懵B,論文要讀懂,要求你了解微積分,線性代數,理論物理以及信號系統的部分知識。同理人工智慧機器學習也一樣。

在大學裡學的知識很多年不用就會忘記,不過也沒關係,買本書現學現賣也可以。


今天的計算機本身,目前就像用筆寫字一樣,用筆寫小說可能不需要太多複雜的數學知識,但是用筆寫數學論文就需要。

就拿編程來說,縱向看寫演算法類的就比較需要數學知識,但是一些上層應用主要是用各種庫組合起來實現功能就不用。

橫向看比如做遊戲類的需要的數學知識就比做普通網站架構設計的要多一些。

所以會一些編程技能,就像拿起了筆,如果你覺得這輩子都學不好數學了,就不要去數學相關太密切的業務領域,就算做做ERP熟悉業務以後也有比較好的出路。如果對數學感興趣也可以去做一些需要自己做底層演算法比較多的新興領域,這個看個人選擇,數學不是決定出路的唯一條件。

還有安利下垠神的說法,我覺得很有道理,他說數學難學有一部分原因是它的表達方式太隨意了,沒有一個系統的規範。不同的數學領域經常都有很不同的表達方式要去學習理解。


不用。 大家對數學好是有什麼誤解吧。現在大火的機器學習人工智慧方向用到的數學知識, 只要認真學好了計算機系本科數學理解起來都沒有壁壘(i.e.認真去學習是能看得懂的)。 要是這些基礎數學課題主都能95分以上,就已經能吊打大多數碼農了。這種程度的數學基本上在計算機行業里都算不錯的了, 至少是非常夠用了(除了非常小的幾個研究領域)。但是!這種數學水平別說在純數的人眼裡, 就是在理論物理的人眼裡也不過是渣渣吧。數學也不完全和直接的決定計算機各個方向的門檻, 因為計算機是一個應用性工程性的方向, 而數學是非常基礎理論的。重要的是要能夠使用基本的數學工具解決問題, 而不是會了多高深的數學知識。

當然我不是說數學不重要, 基礎還是要紮實的, 水平也是要達標的。 但是這並不是數學好, 搞AI的就不要尬吹自己的數學了, 基本都是不超過數學系本科水平的知識。而且咱搞計算機的幹嘛跟搞數學的比數學對不?術業有專攻嘛。


這個你不用擔心,「計算機的數學」,比如演算法和計算理論這些,都會單獨開一門課來講。工科通用的數學,比如線代和概率論,你不選計算機也會有。


本人大二,專業計科。大二下這一學期選修了ACM,數學建模,同時還有人工智慧方向實踐。

一學期下來什麼都沒學踏實,原因就在於:

數學差。

ACM,我覺得就是對於數學理論的編程實現。因為我同時選了數學建模,兩者重疊太多,動態規劃、圖論啥的,今天剛在數學建模上學過理論,轉眼ACM老師就重新講一遍用c/c++怎麼具體實現。

至於機器學習/深度學習這塊也一樣,最近在推SVM原理,拉格朗日、KKT、對偶函數,看的我腦殼疼。這些知識在凸函數的書里我都看到了,可惜基礎差看不太懂。當然還有其他機器學習演算法,大都涉及到矩陣、概率統計、博弈論等等,我就不列舉了。

所以,這學期我就是在和數學作鬥爭。

我沒有工作過,不知道不學數學對於前端開發之類的崗位有沒有影響。可能還是有些崗位確實只要熟練運用各種框架各種庫就好了吧,但我個人不想只會調用API。

如果想發展的方向對於演算法有點要求的話,數學我覺得還是非常重要的。

我的表達或許不太專業,理解意思就行~


唔...我的觀點是...數學好並不是必要的,但卻是很重要的。

很多人對計算機的印象就是電腦上敲敲代碼,但是代碼只是工具,其內核仍然是數學,許多演算法都需要數學的支撐。

當然啦,數學不太好,去學計算機也是可以的,但是對很多東西的理解就沒那麼深入了。

我個人正在學習AI,就以AI為例吧。學之前我覺得人工智慧和數學的關係並不大...學了之後才明白,大多數AI演算法其實都是數學模型...來看一看學習AI要求的基礎有哪些:

概率論,線代,微積分...不僅需要數學,而且需要的還是比較複雜而綜合的數學知識...一開始學的時候我還因為不會線代吃盡了苦頭。只有掌握了這些數學知識,對AI基本原理才能有深刻理解。

當然,如剛剛所說,數學不好學AI可不可以呢?當然也可以,現在有很多現成的機器學習框架供你調用,數學不好照樣可以寫出AI程序。但是——也僅僅是寫出AI程序。對演算法的原理沒有理解,那麼只能說會寫AI,但不能稱之為懂AI。

所以,這就看你想成為怎樣的人了。如果今後想做學術研究之類的話,數學要求就高一些,如果只是公司里的程序員(啊...演算法崗除外),那數學沒那麼好也無妨。

答主目前cs大一在讀,所學甚少,回答如有不當之處,還望大家多多指出。


看級別,看方向。一般從純技術的角度來看,級別越高,對數學要求越高。其次從方向上看,比如計算機圖形學對線性代數有一定要求,機器學習對基本的大學數學有一定要求。

當然,很多程序員是接觸不到這個層面的。這也是目前為啥演算法崗薪資那麼高的原因。數學一道坎就把80%的程序員排除在外了。


推薦閱讀:
查看原文 >>
相关文章