依賴 Mathematica 會有怎樣的後果?

聽說用多了會變笨,但是真心覺得好用,那些看上去根本做不出的積分都被它做出來了,怎麼辦?


後果就是節省了大量的時間. 因為很多計算用腦子算真的浪費時間.

(雖然加上了一堆編程的時間, 但是還是比很多東西重頭學+手算快)

比如最近在做的研究裡面, 很神奇的出現了很多的計算.(一般幾乎不可能出現的呢, 我們的工作主要都是一堆證明.

因為有整個notebook, 可以重頭看到尾發現自己哪一步錯了, 改一下就能瞬間看到改的結果會有什麼用.

驗證了很多公式, solve recurrence, 甚至plot東西來看看"哦, 這個函數是這樣的." (現在還有人手畫函數么? 也是好多年前就消失的技能呢, 雖然上高中的時候還在教...) 一些基本的sum的公式都不用背了呢. 常常看起來超複雜的東西, 算一下結果出奇的nice, 然後用induction一下就好.

比如我近期遇到這個recurrence

T_k(n) = sum_{j=0}^k T_jleft(frac{n}{j+1}
ight)

其中T_0(n) = n.

用mathematica很容易就猜到T_k(n) = (k+1)n, 用induction證明還是蠻快的.

好處是在證明之前有了這個結論就可以直接用了! 常常會發現某些結論後面都用不到連證明都省了.

而且那個simplify[]函數真的省下了太多太多時間.

用mathematica就是為了當個工具. 如果真的遇到mathematica解不出來的東西, 就找一個沒有用mathematica真的刻苦好好用手解東西的人. 做研究時間有限, 自己不懂但是知道誰懂可以直接問. 省下了時間可以陪老婆看電影啊.


一個被Mathematica慣壞的狗的懺悔。

1. 無法學習Matlab,原因如下:

函數調用,運算優先順序,矩陣索引都用小括弧是什麼邏輯?

你的函數名能縮寫得再奇葩一點嗎?

由於以上兩點,失去發現更多黑點的機會。

2. 害怕底層:

由於Mathematica的表達式計算機制(模式匹配,規則替換),用戶寫自定義函數的時候會比較慢。慢的原因主要是匹配/替換的過程中過於側重通用性(好處是表達能力爆表 :)),Wolfram公司為此只能不斷的往內核里加函數,提高了常用操作的速度的同時也符合他們Boss大而全的夢想。

所以即使你像我一樣不懂數據結構和演算法一樣可以在內置函數的光環下把手中的數據翻來覆去的變形/重構,一次次的// @@ /@ @@@ 讓人忘乎所以,哈哈哈不懂演算法的弱菜也能編程了,神經系統立即給我來了一勺多巴胺!

長期享受多巴胺的直接惡果是學習其他語言時的「戒斷反應」。模式匹配都沒有?Map沒有?排序居然不能自定義比較函數?R ya kidding me? 多巴胺,萬惡之源!我沒過多久又復吸Mathematica了。

Leonid Shifrin(玩Mathematica玩成Wolfram員工的物理學家)曾感嘆道:What I did was to learn C. I did it because I knew that otherwise I would be forever scared of low-level stuff, memory management, etc. High-level languages bring you the comfort of not worrying about low-level issues, but it is still good to be exposed to them at some point. I still think this was a right move, and would recommend learning C.

(寫到這裡,樓主再一次下定決心用C學一下數據結構)

3. 寫不了大程序

這一點官方的人可能不同意了:我們的Wolfram Alpha就是Mathematica項目你來咬我啊。但是Mathematica不適合寫大程序這個觀點基本是共識。無面向對象。內置的調試工具是廢物,找bug基本靠經驗。由於特殊的計算機制,有些重大的類型錯誤都不會報錯,而且有時報錯了計算都不會停止,由此引發的災難可想而知。 起命名空間作用的上下文機制比較隱晦,Package的編寫文檔中介紹不足。

4. 片面認識函數式編程

Mathematica對函數式編程的支持並不完整。函數式編程可不只是Fold,Nest,Map等等高階函數。它沒有宏。遞歸效率低下。對計算順序的控制難以掌握。局部變數都是模擬出來的,由此帶來內存泄漏的隱患。


首先,Mathematica 是非常優秀的數學軟體,若是能夠熟練應用並且有意識地多應用應該對你的數學研究是及其有幫助的。

其次,就我個人而言,Mathematica有兩大用處:

1.驗證結果。較為複雜的積分儘管可以通過一些技巧得以求出,但是為了避免計算的錯誤,用Mathematica來驗算一下是十分必要的。一些研究組合數學的學者也會藉助Mathematica的符號計算功能來驗證一些等式的成立,儘管在提交論文的時候還是需要給出數學的證明。

2.指引方向。有時候積分的形式太陌生了,似乎一下子很難想到合適的應對之策。查表又難以窮盡所有可能性。這個時候,用Mathematica來試一下,看看能給出什麼樣的結果。從結果我們可以推測應該用什麼手段來做。除了計算積分,有時候,函數的性質比如單調性也可以通過畫圖來得到。這樣會比盲目地先求導數來的好。同樣的,利用Mathematica的數值計算功能,一些組合數學的研究者也會猜測哪些形式的關係能夠成立。

當然,有時候一些特別複雜但是平凡的東西,出於方便,我也會用Mathematica代勞。

總的來說,不要因為有了Mathematica就放棄應該掌握的數學技巧,讓它協助你,而不總是你求助它。


依賴數學用表會有怎樣的後果?

聽說用多了會變笨忘記怎樣筆算開平方,但是真心覺得好用,那些看上去根本無理的平方根用它分分鐘就查出來了,怎麼辦?


後果就是思維被「Mathemaitca 化」了。看到一些實際問題,基本上都是在 Mathematica 的語法框架內思考。

然後就是完全無法忍受 Matlab 那樣「醜陋」的語言。

甚至對於 Python 這樣的語言都會忍不住寫一個 Mathematica 語法庫:


已經完全不會手積分了。。。。後天就要考統計物理了做好把所有積分式子空在那裡的準備

讓我哭一會兒。。。

還是量子力學老師好,考試都允許mma


就個人經驗而言,用多了 Mathematica 並沒有變笨(也許變笨了但沒有發現 ?? 思維縝密如我應該沒有變笨吧

首先,回答「看上去根本做不出的積分都被它做出來了,怎麼辦」的問題:

正如 @羅旻傑 在他的回答中提到的,可以用 Mathematica 來驗證結果。比如課後作業,或者書中習題,可以先用學過的方法嘗試著推一下。一般來說,教給你的解題方法足以應對。即使是自學的內容,也會告訴你具體需要學習哪一章哪一節。照葫蘆畫瓢,不會很難。

即使在這一步遇到了困難,也不建議使用 Mathematica。多和同學討論(不是抄),善用搜索引擎(Google 是個好東西),多請教老師,總是會有所收穫。

得到了結果以後,可以用 Mathematica 驗證一下。不過,很多情況下,你可能對得到的結果十分自信,因而無需驗證。我就經常這樣。(這根本是懶癌晚期

其次,對於 @Zixuan Zhao 提到的被鄙視的問題,我只能深表同情。

鄙人並沒有被鄙視過(誰敢?)。一般的場景是,教授在課堂上提到了某個名稱奇特、形態詭異的函數。然後大家盯著這一堆 #$%^* 思慮良久(也可能在考慮晚飯吃什麼)。這種時候,你可以偷偷拿出 iPhone(並不是要刷知乎),打開 Mathematica(需要花錢購買),輸入那一堆 #$%^*,然後在周圍同學的走神中深藏功與名。

最後補充一點,很多情況下,Mathematica 可以節省很多不必要消耗的體力。比如課後作業要算 Padé(50,50),如果你不用 Mathematica,堅持用手算,那我只能祝你生活愉快。


人類褪去體毛,依賴衣物,禦寒能力會下降嗎?

一個道理。

-----------------------------------------------------------------

曾經我也是一個以掌握積分的奇技淫巧為榮的人。

高中的時候有一陣想著各種積分積著玩。有一次有個積分花了兩節課的時間怎麼做都做不出來。回家一查,無法用初等函數表示。

這就是「做什麼」和「怎麼做」的問題。人們發展了各種方法處理積分,我們能掌握的只是不多的一部分。題主可以看看mma的幫助文檔,看看為了處理不同的積分有多少種方法。mma只是一個很好的工具,能讓你使用已發展的方法處理你想要解決的問題。

但是,mma並沒有告訴你,為什麼要解決這個問題?問題能解決嗎?可以用這個方法嗎?為什麼要用這個方法?能提出新的方法嗎?

這才是真正智力的差別所在。我並不會認為掌握各種積分技巧的人更聰明,也不會覺得用mma得到答案的人有多高明。聰明的人知道該用什麼工具解決什麼問題,當工具不夠好時能夠發展新的工具。

人的自信來源於解決問題,而不是掌握工具。

想到一個類似的問答,供參考:

http://www.zhihu.com/question/19900260/answer/24923087


既然問的是後果,那就不講好處了。

就個人經歷來說,經常被鄙視。

1.某物理課堂上,老師出題,同學和我列完微分方程,有的時候還是有sin和cos那種,於是我就讓mma代勞(雖然也因為列錯之類的經常解不出來)。長此以往,老師就過來苦口婆心的說,你是不是已經不會算數了,這麼搞考試怎麼辦啊……同學讓我幫解微分方程也被描述為「一個搞理論,一個搞計算」,然後出完題還來問我「要不要寫一個模擬」。

然而最後我也沒出現不會算數了的情況。

2.微積分的作業全是手算積分,算完就經常用mma驗證結果,也不用和別人對答案了。然而考試的時候別人就跟我說,你平時都有mma,考試時候沒有,戰鬥力減半啊。

然而數學考試扣的分從來不是因為算錯了什麼數。

3.期末考完總體成績不理想,就會有人說,唉這也正常,看你天天玩mma也不好好學習。

所以說,題主的擔心是不必要的。只要該做的練習做到位就不會所謂變笨;同時在研究某些問題的時候會大大節省時間。那些所謂堅定的手算黨,恐怕是高中思維的遺留吧。


後果是會忽視其他的工具.

因為MMA實在可以算是萬金油, 幹什麼都能用它, 而且很方便. 別的人做計量用Stata, 做數值用Matlab, 寫爬蟲用Python, 做統計用r, 另外還有SAS, VBA for excel等等各種各樣的工具, 但是以上的一切我都可以用MMA搞定, 久而久之, 我就根本懶得去學習其他的這些工具.

這樣做最大的問題在於MMA用的人太少. 每個圈子裡其實都有比較偏愛的工具, 如果脫離了某個圈子喜歡的這個工具, 就很難跟這個圈子的人交流. 另外MMA作為一個收費的工具, 也有不小的局限性.


你不要用來做OOP的軟體開發就行。


再回到其他語言有種無法直視的感覺,別說C,就是Java都無法直視(除了GUI和OOP)。

再說我也就是一個學生物信息的,會科學計算就行了,讓老闆知道搞OOP又要扇我耳光了。「不好好搞計算學什麼OOP,不務正業!」

所以MMA,我用的開心,老闆看著放心,不用擔心我啃完獎學金就跑路。


聽說你們擔心不會算積分;不謝


說明你的智商已經超越全國80%的人了。身邊活生生的例子:有人都不知道excel是什麼(但她每天都在用呢)。而且能熟練mathematica,說明你已經掌握了一個很多人會覺得你手癌的專有名詞。


Mathematica is trying to be smarter than you.

不用懷疑了,我們愚蠢的Mathematica用戶本來在自寫程序的演算法和速度上就比不過Mathematica,用了它我們並不會變笨,只是被太強大的它比下去了而已。


只會列方程然而不會解

只會寫積分式然而不會算

。。。。。。。。。。。。。。

反正就是在學數學的時候不要用,,,否則考試會掛


推薦閱讀:

理論上是不是所有寶石都可以合成?
昆蟲振翅飛行的原理是什麼?人類有沒有利用這種技術的飛行器?
怎樣尿得遠?有哪些技巧?
在有限的音響單元數量下,音樂中的樂器會不會互相干擾?

TAG:數學 | 物理學 | WolframMathematica |