為什麼軟體工程專業要學習大學物理?
說一個很現實的幾乎每一位前端或者App程序員都會遇到的問題:實現逼真的動效。經常有程序員問我為什麼自己實現的動效看上去那麼假,或者不理解動效API的參數而無法達到想要的效果。其實所謂的「真」就是符合現實世界中物體的運動規律,就拿著名的橡皮筋回彈效果來說(蘋果為此滿世界告安卓),它是由彈力和阻尼共同作用下的運動,可以表示成一個二階常微分方程:
var d = {x: 0, y: 0};
var v = {x: 0, y: 0};
var k = 25;
var damp = 3;
function update(dt) {
if (dragging) {
d.x = mouse.x;
d.y = mouse.y;
v.x = 0;
v.y = 0;
} else {
var acc = {x: 0, y: 0};
acc.x = -k * d.x - damp * v.x;
acc.y = -k * d.y - damp * v.y;
v.x += acc.x * dt;
v.y += acc.y * dt;
d.x += v.x * dt;
d.y += v.y * dt;
}
}
可以想像不到20行代碼就模擬了生動的橡皮筋回彈效果么?代碼中的 d 對應方程的 x, v 對應 x 的一階導數,acc 對應 x 的二階導數,damp 對應方程的 c,表示阻尼係數,k 表示彈力係數(還記得高中學的胡克定律么?),mouse表示的是滑鼠當前的位置,dragging 表示滑鼠是否正在拖拽。如果你懂物理這段代碼應該很簡單,如果你不懂那麼這就是為什麼軟體工程要學大學物理的原因。
可能有人會覺得為了動效而學物理未免小題大做,其實軟體的本質就是對現實世界建模,而物理學在這個方向上已經摸爬滾打了幾百年,有大量知識可以直接遷移過來,上面的例子只是滄海一粟。題主你好。雖然這個問題關注的人並不多,回復基本上是灌水,但是剛好最近作業不是很多,我想好好聊一聊我的理解。我和你有過類似的困惑,而且這些困惑往往在寫不出作業或者期末複習的時候冒出來:我是計算機學院的,以後就是要當一個程序員而不是物理學家,為什麼要學大學物理?我以後估計怎麼都不會碰密碼學,為什麼要學代數結構和數理邏輯?圖形學這東西我這輩子可能都不會碰,為什麼還要花時間弄懂這天書一樣的公式?
當時學得很痛苦,也不是特別感興趣,特別是考試要考薛定諤方程,什麼勢井的時候那種頭大的感覺我還記憶猶新。帶著這些情緒去學,這些課程我都學得懵懵懂懂,我的相關課程的成績都不是特別好看。
這主要是自己對大學培養目標的期待與大學培養人才目標的差異導致的。大學培養人才的目標,跟技校相比不是熟練的某個技術方向的技術工人,而是素質更全面的「通才」,甚至可以說是「科學家」。而我,最開始我認為計算機系培養的應該是一群程序員,能解面試題,做漂亮的前端,寫高效的後台,混口飯吃就差不多了。後來我發現,那些技能,其實技校的人也都在學,還做得比我好,因為他們不需要花太多時間在跟程序開發本身「沒有關係」的事情上面,做的都是實用性的事情。那時候我就開始思考,到底大學出來的學生,跟技校出來的學生,甚至是主要以就業為導向的學校出來的學生,能有什麼差別?直到之後我的一些經歷讓我明白,原來大學物理中的一些方法和思維方式,恰恰是在各個領域都通用的方法,不僅僅是工作,也有生活。當然,不僅僅是物理,任何學科的技能和方法都可能對我們有所幫助,但物理是用作高等教育應該是最合適的,跟化學生物相比,整個體系更具體和嚴謹。同時,大學物理能夠讓你在一個你接觸了若干年的領域系統地訓練你使用現代數學工具:線性代數、微積分和統計學,這些東西軟體領域有廣泛應用,卻很難再找到如大學物理這樣的訓練體系的替代品,也不是很有必要。從幾個簡單的例子入手吧。我女朋友租的房子里有一台新安裝的燃氣熱水器,將水燒熱之後通過管道輸送到洗手間,再跟冷水混合到一起之後,得到溫水輸出,水溫的調控是通過出水段如下圖所示的閥門控制冷熱水混合比例達到的。教育的本質是什麼?當我們將在學校所學的一切全部忘記,剩下的就是教育的本質。


前面兩個都是生活中的例子,提出來是因為可能沒有計算機基礎的人也能夠更容易理解。題主既然是軟體學院的,想必一定知道軟體工程師絕不僅僅是「搞安卓的」和「做網站的」,太空梭、機器人、視頻監控等等領域都有大量的軟體工程師,而這些位置的工程師,只會「寫代碼」是遠遠不夠的,還需要了解現代常用的數學工具:線性代數、微積分、統計學,這三個數學分支構成了現在非常火的機器學習的基礎。而這些知識,從數學課上學到的往往非常理論,不直觀,可能很多公式你學過了就忘記了。而實踐它們的最佳領域是哪裡?當然是物理!因為作為一個理工科的學生,你在中學已經有了足夠的解題經驗和認知基礎,你更容易在熟悉的問題上使用一個全新的數學工具。就好比,微元法和微積分本質上都是一個東西,但是卻是兩種截然不同的角度。
接下來我要講的是我最近碰到的機器視覺方面的一個問題。這個學期我上了我們學校的計算機視覺課程,都做的是一些有趣的問題。由於老師是機器人系的,所以涉及到很多機器視覺的東西。一個有趣的作業就是:如何通過兩個已知位置的相機拍攝的圖片,對目標物體進行3D重構,這是3D電影的基礎,這就是讓你能夠看到栩栩如生的《阿凡達》、《少年派》的看似無用的大學物理理論所涉及的一個點。上圖吧:


下面是這次作業的一個理論題,應用的原理非常簡單,只需初中的平面鏡成像,以及高中的立體幾何足矣。

示意圖是我自己畫的,這是我畢生所學的繪畫技巧,太丑還請見諒!




根據Jaynes(1957)的觀點,熱力學熵可以被視為香農信息理論的一個應用:熱力學熵被定義為與要進一步確定系統的微觀狀態所需要的更多香農信息的量成比例。比如,系統溫度的上升提高了系統的熱力學熵,這增加了系統可能存在的微觀狀態的數量,也意味著需要更多的信息來描述對系統的完整狀態。
https://zh.wikipedia.org/wiki/%E7%86%B5_(%E4%BF%A1%E6%81%AF%E8%AE%BA)
資訊理論中的熵又反過來推動了熱力學對熵的理解。可見,現代科學體系並不是獨立的,割裂的,而是相通的。
再說個有趣的例子吧,雖然這並不是大學物理里教的。相信很多人都聽說過分形學,Matrix67的博客里有大量關於分形的文章,比如7 個分形圖形的動畫演示。下面就是一個常見的分形圖形,雪花,非常美吧:

你要知道你的職業壽命可能是50年,而不是5年。你要拿的是工學學士學位,而不是軟體工程技術學院畢業證。
為了稱得上合格的工學學士,工科生理所應當要學習大學物理。
數學、物理一直都是能聯繫多個領域的核心學科(計算機行業還能火幾年? - Summer Clover 的回答),計算機科學也正在成為這樣的核心學科。所有的理工類專業都應當設置這三個核心學科的基礎課。我們很難知道未來10年的競爭需要哪些基礎知識。
我們完全猜不到30年後會會有哪些技術湧現。比如量子計算?嗯?連大學物理都沒學過的工程師會怎麼樣?現在理工科本科培養計劃里,無論中外,數學、物理和計算機都是標配。從美帝東海岸的MIT、Harvard到美帝西海岸的Stanford都是如此。
對於數學系、物理系同樣如此,如果不設置物理/數學和計算機基礎課,就等於還沒畢業就廢了學生3成潛力。
設置核心學科,這不是陳舊落後的課程設置,而是前沿視角的課程設置。如果某些大學按部分用戶宣稱的不用大學物理淘汰計算機/軟工專業學生,那麼應當被沒落淘汰的就該是這些大學。題主知道曼哈頓計劃么?
計算機最早就是為物理中的核反應服務的。軟體 ≠ 碼農軟體是利用一台計算機來解決現實問題,而現實問題對應的最直接的學科就是物理。
如果你要開發遊戲,你還要學心理學如果你要開發有限元軟體,你還要學微分方程和矢量積分如果你要開發多相流軟體,你還要學流體力學如果你要開發汽車設計軟體,你還要學剛體力學如果你要模擬分子行為,你還要學大學化學如果你要模擬生物基因,你還要學基因工程學學不學是你的事,教不教是大學的事
你不感興趣你可以考個60分飄過就好,但是你的同學們有想學的。這個世界就是這樣,你不想學的東西,往往有很多人搶著學。你學不會,有的是能學得會的。如果答主只想當一個小碼農,你可以不學大學物理。
但如果答主想當一名軟體工程師或計算機類的科學家,你要學的還多著呢想不想上天,自己決定吧~
防止你們因為課不夠太閑了就去廣場散步、上知乎黑自己的母校、信仰邪教、參與時間眾籌。
首先這源自一種傲慢,教學內容制定者的傲慢: 我認為你應該學,這是為了你好,為國家好,為了社會好——但是我不屑於告訴你為什麼。
我上大學的時候拿這個問題問過我們主管教學的副院長,他老人家的回答是「呵呵」。我不知道是不屑我愚蠢的提問還是不願告訴我學校所面臨的無奈。
直到我現在工作10+年了,我才知道,除了政治課以外,大學裡面的課程設置,要麼有助於我們對世界的認知,要麼有助於我們解決現實問題。純無用途的課程幾乎沒有。只是毫無例外,沒有一個老師在開講一門新課的時候,告訴我們這個課程到底有什麼用。這或許是第二個原因吧,教學實踐者的懶惰。
如果先給同學們提出一個問題: 怎樣從一張圖片里用程序找出一個人的輪廓?然後以解決這個問題為主線,把所涉及到的演算法和數學都講一遍,相信仍然覺得無趣的同學會非常少。
以我所在的學校而言,老師們想做到這一點,真的是不費吹灰之力。
為什麼不這麼做呢?老師們真的對於這些應用一點都不了解嗎?還是根本懶得費這個腦子,對著教材念一遍多省事,剩下時間開公司賺錢比啥不強?
最後我不得不說一句,大學期間我是差生,或許因為沒有認真聽課,而錯過了老師們精彩的、對專業知識應用場景的說明。如果是這樣,我願意為我的說法道歉。南大軟院也不學 連統計都是結合軟體測試學的
反對最高票的答主。
雖然我很喜歡物理,也對最高票答主列舉的幾個解決問題的事情很佩服,但還是點了反對。
因為:
第一,很多人即便是物理專業也可能達不這樣,更何況其它專業的。個例並不能說明問題,還有很大一部分是學瞭然而並沒有什麼卵用的。
第二,最高票答主用物理知識順利解決很多問題,還有人用化學知識解決很多問題,還有人用心理學知識解決很多問題。知識當然是好的,不過也要考慮到時間問題,大學只有四年,不能什麼都學。有興趣可以多學些其它的,不一定要放到必修課程中。
第三,最高票答主提到物理的系統性,邏輯性。然而這些並不是物理才有的。軟體工程專業課程中也有很多是可以培養系統性與邏輯性思維,以及鍛煉數學的。
個人覺得,這個就是課程設置不合理,沒什麼複雜的。如果有覺得是學校用心良苦的話?那麼請解釋一下為什麼所有專業都要學毛概馬克思之類的。
隨便吐槽一下,對於官方(特別是政府部門)一些不合理的東西,有些人硬是要找一堆理由來說明它們的合理與必要。比如剛剛看到一個給GFW各種洗地的題目。因為你不能自由選課呀

中大軟院不學. 至少當年不學.
我以前有個項目,裡面要寫列車模擬模擬
也就是下面這個這四個公式不停迭代
老闆覺得這個事情很容易,於是叫找了組裡工作時間最久的那個傢伙來寫,當然啦,這個傢伙說,他高中畢業後就沒學過物理和數學。
然後他寫了兩年沒寫出來能正確跑的!然後他就被開了。
PS: 為什麼我說這個很容易,因為我的畢業實習裡面30%的內容寫的就是這個。因為是工科
有些人總想著洗地洗地。
物理沒用就是沒用,這地洗不了。你將來工作要用,可以自己選修。大部分人根本用不到。那要是學校要求電子工程專業必修語文,音樂美術,你也來洗嗎?畢竟自然語言處理,音頻處理,圖像處理,都算在EE里喲研究物理學是人類的頂級智力享受之一,請不要浪費這麼好的入門機會
不邀自來,上圖:

現在工作了,才發現想要進一步提升自己,高數、線代、離散等當時覺得沒有用的東西到底有多重要。
圖片來源:邪惡八進位:[討論]如何系統化學習計算機侵刪軟體不就是對物理世界的模擬嗎,不學物理怎麼模擬?
其實要討論這個問題,我們不能僅僅著眼於「中國大學的軟體工程專業要不要開物理課」這個非黑即白的選擇。單純地不開物理課,或者跟所有的專業上一樣的物理課,都不能說是特別理性的回答。
我特別贊同之前這個問題下一位答主的一句話,即我們生活在這樣的社會中,已經習慣了為一些自己不能改變的事情進行辯護,從而獲得一些生活的安慰。牆是如此,霧霾之類的事情也是如此。認真地說,這個世界上確實沒有什麼事情是一點優點都沒有的,不是嗎?所以說,討論「大學物理對軟體學生有什麼好處」似乎跟題主的意思有點偏離。畢竟,這個問題的姿態屬於「挑戰者」,即質疑物理課存在的合理性。所以站在那些支持開物理課的朋友的角度,有意義的回答應該是「為什麼物理是一定要學的?」而非「物理學了有什麼好」。畢竟,作為一個前文科生,我覺得理工科專業同學人文素養恐怕比物理水平欠缺了更多,特別是數學系應該增加西方哲學史的課程,不知各位答主有何高見?
我們再回頭來品味一下「大學物理」「軟體工程」「大學」幾個關鍵詞,可以發現下面若干層意思:
- 軟體工程專業要不要開物理課?
- 如果開,應不應該作為必修?
- 如果是必修,那學什麼難度的物理?
- 學生應該在什麼時候上這個課?
如果我們能夠把非黑即白的問題都拆成這樣,那世界上恐怕會少很多無謂的爭吵。
單純對於第一個問題,我想幾乎所有人的回答都會是「開」,反正多門課多條路,豐富一下有什麼不好呢?
但是,凡事不能太散漫。物理是一門有「難度」的課,不比學校里一些面向所有專業要求寬鬆的選修課。物理課當然可以那樣,不過就似乎違背了開物理課的本意了。至少,趣味性、知識性,總得佔一頭,對吧?當然,選這個課刷GPA的不在此範疇。
所以這樣的課,最終要麼是變成強制性的必修,要麼因為沒人學習最終淹沒在學院歷史的長河裡。
可能你會說,每個專業專業選修也不少啊,比如軟院開一門iOS開發,那願意來上的人肯定多啊,為什麼物理就不行呢?
問題就在這裡。如果我們假定物理課成為專業課而不是公共課的一部分,那麼現在的物理課體系,顯然是不足以滿足「專業」這個要求的。在這種情況下,必須為軟體學院,或者計算機類的同學,單獨設計一門針對這個領域學生的物理課。但是這樣又走偏了。工作和物理相關的程序員,真的有比從事金融行業的多?那為什麼不開金融方面的專業課呢,對吧?
所以物理還是得搞成公共課。
既然是公共課,那就有一個難度的問題。物理課不是一個布爾值,我校部分文科專業也要學物理的,但是他們的物理課顯然跟機械專業的物理課不在一個檔次上。至於某個答主說的,生活常識的問題,我想遠遠不需要大學物理A吧?而且生活常識多了去了,不如放成選修。
簡單總結一下我的觀點:物理課有開的意義,但是要和真正的「工科」專業的物理課有所區別。而如果要把物理課作為專業課體系的一部分,大部分軟體學院恐怕都沒有這個條件。
我想我們應該看的比這個問題更遠一點。開不開物理課重不重要?重要。但是有沒有比這個問題更重要,更根本的問題呢?
不少軟體工程專業的同學對開設物理課這件事情的質疑,從更廣泛的方面來說,其實是對整個軟體工程專業培養體系的質疑。不是說物理課開了或者不開,這個學院就一定怎麼樣。但是培養計劃的設計,很多時候可以反映一個學院或者學校的基本態度,即它希望培養出什麼樣的人才,以教學還是研究作為重點,要不要體現出自己的特色。
教育部在本世紀初提出了示範性軟體學院的概念。十五年過去了,現在的示範性軟體學院同當年比起來何如?同國外名校的看齊,同實際業界的聯繫,同先進技術的引入,是進步了呢,還是退步了呢?
我沒有任何要貶低計算機系同學的意思。我想說,是不是再過十年,軟體學院就可以和計算機學院合併了呢?因為越發趨同,已經沒有存在的必要了。
而物理課的存廢,恐怕只是這個令許多學生不安的大背景下的縮影。
(附)
想集中說一下我對一些常見觀點的看法。
學物理是讓你成為一個合格的大學生,而不是一個培訓班出來的碼農。
我不是想抬杠,不過,難道學了物理就不是碼農了……?或者說,是有多想黑大學計算機教學的水平,才會認為大學計算機專業和社會培訓班的差別只在會不會物理啊?在前面說過了,如果說條件很好,那開物理當然是好的。但是如果本來培養計劃和課時就很緊張,我覺得開計算理論或者近世代數,包括講講CSAPP什麼的可能都好一些,更別提什麼把編譯原理給砍了這種事情了……
再說,這種「大學生≠培訓班」的論調在知乎上,包括各個程序員論壇都很常見。我部分同意。但是這個「合格的大學生」絕不僅僅是多學了一點數理知識那麼簡單,說得還真像計算機領域只剩數學了一樣。怪不得外行經常不尊重程序員的勞動成果。並且,「大學學的是內功」這句話,永遠不能成為專業課老師講課水平不行的借口……
你以後工作了遇到這類問題,就會發現物理還是有用的。
可以去問一個已經大三了的大一學物理的學生,看看他還能想起多少,更勿談工作了。而且,如果是真的要「用到專業知識」的程度,那點物理恐怕也不夠吧。
如果你是想說「到時候根據這點知識能大概知道現學什麼」的話,我倒是有點同意。不過這種「啟發性」的知識,在自己的專業領域恐怕欠缺得更多。
你就是不想學,在這吵什麼吵。
呃……大家這麼不滿霧霾,我是不是可以說「你們就是不想得肺病,吵什麼吵」?這位同學既然是把問題放到了知乎上,那就是給大家討論的。這也不是什麼道德情感倫理題,大家點進來就是為了嘲諷題主。如果說您覺得這種問題沒意義,那我可能會認為您的評論更沒有意義。
我還是對知乎的理性討論精神抱有一點點的期待的。該不該學物理,為什麼學物理,大家都可以拿出自己的觀點,而不是站在道德高地上指責(這種回答在教師類問題下很多)。很高興現在看到的高票答案,不管是贊成還是反對,都還是比較理性的。不過要真正地達到各抒己見的目標,我想我們還有很長的路要走。
我當然理解一些物理是核心專業課的同學看到這種質疑時候的心情。不過,這個時代人人都要學會用計算機已經是基本共識了,甚至知乎上有人認為人人都該學編程。但當有其他專業的同學在質疑他們的編程課開設的合理性時,我並不會選擇嘲諷甚至謾罵,認真地討論或許有用得多。畢竟,理性思考是理工科乃至所有科學最寶貴的精神,不是嗎?
你說了也沒用,物理還是得學。
的確有很多事情是我們無法改變的。不過也有一部分,也許經過我們的努力,真的可以得到改變。就算我們的觀點沒有實際作用,我們還是需要思考,而不是選擇盲從,思考是人類的權利。你可以不同意我,甚至可以不讓我表達,但是你不能阻止我思考。如果說,因為我們的觀點改變不了培養計劃這個現實,所以我們不應該質疑的話。那麼,你對開設物理課的支持,是不是也一下變得沒有意義了?
大學物理的目的除了物理知識本身
還有數據嚴謹性(比如實驗數據處理)最重要的是使學生掌握使用數學方法解決實際問題(物理)的能力。對於日後軟體開發過程中的演算法設計等有一定意義。之前的答案不夠嚴謹有所修改歷史傳承問題。過去搞計算機學學物理和電子還是很有必要的。現在整個軟體業分工很細了,有一部份碼農不學物理對自己的工作確實沒多大影響了。而整個教育架構是從舊的教育方法繼承過來的,沒有針對這個新特點做調整。
不過,作為一個以知識型技能為生的人,不學大學物理,其實是有遺憾的。就算不安排這個課程,也值得業餘看看相關的書。反對最高票答案
沒有解釋物理對於軟工專業的必要性比如,物理對於計算機圖形學必要,因為其理論和技術經常基於真實的物理知識。和軟體工程沒有這種關係。
如果軟體專業的學生能掌握大學物理課程的知識,有一點好處:拓寬學生的適應寬度,流出互聯網行業。
很多較為傳統的工業,例如機械飛機機器人等,越來越需要編寫複雜的軟體。軟體專業學生往往缺乏相應的知識積累,又數學物理基礎薄弱,短時間內難以補足。所以很多時候是由原專業的人學習軟工知識來做。這個好處應該不是開課的原因,也不值得為這個原因開課。
PS:數學不同,數學對計算機影響深遠,無論哪個分支,微積分線代概率論這些數學工具幾乎總是能用上的。推薦閱讀:
※Windows 下桌面應用開發有哪些主流技術?
※CAE軟體有哪些?
※類似於「善用佳軟」,「小眾軟體」這樣的網站有哪些?
※服裝實體店+網店有什麼好用的進銷存軟體啊?
※除了 Tagxedo外,還有什麼好的軟體製作可以詞雲?
