如何看待王垠的博文《數學和編程》?

傳送門在此:數學和編程

數學的符號系統是否真的像王垠說的那樣設計拙劣?


請看原版: Programming for the Expression of Ideas


文中說x^{-1} f^{-1} 憑什麼用一樣的形式。
就憑他們都表示群中元素的逆元,只不過前者指數的逆,而後者函數的逆。
ba的逆元,是指b*a=a*b=e,其中e為所討論群的單位元,記b=a^{-1}
數集中,e就是1;函數集中,e就是單位函數II滿足forall alphaIleft( alpha  
ight) =alpha
因而從代數結構的角度來講,倒數和反函數並非如王垠所說的那樣風馬牛不相及。


其實王垠説的沒有錯,f^{-1}確實是一個有歧意的符號,但並非他所説的反函數和倒數,其實反函數和倒數是沒有什麼歧意的,倒數在數學裡一般寫作1/f(x),真要用-1也應寫作f(x)^{-1}而不是f^{-1}(x),不信的話,可以翻開看看微積分教材反函數的導數那一節。

至於有人説羣論,其實這種説法從歷史的角度不正確,羣是由Galois1830年提出來,但他所提出現在一般稱之為置換羣,並且沒人重視,而現代一般羣這個概念提出來已經到了1870年,而此時早已有反函數和倒數這兩概念,符號也和現在一樣,所以用羣論解釋,道理是對的,但時間順序有誤。

f^{-1}產生歧意的原因是反函數和逆像Image (mathematics)

例:

A={1,2},B={a,{a}}

f是A到B上的函數

f={&<1,a&>,&<2,{a}&>}

由上述定義知f是雙射,所以有反函數,記為f^{-1},同時逆像我們也用符號f^{-1}

問題是f^{-1}({a})等於什麼?

若將f^{-1}理解成成反函數則f^{-1}({a})=2,若將f^{-1}理解成逆像則f^{-1}({a})={1}

同一個符號產生了兩個不同的含意。

為了解決這個問題引入一個新符號f^leftarrow,用它表示逆像,用f^{-1}表示反函數,

但實際上除了少數集合論書籍,大部分書籍都不會這麼作。

歧意不僅如此,數學裡還有一個概念fiber Fiber (mathematics)

此時我們使用簡記法用f^{-1}(y)表示f^{-1}({y}),如果承認這種簡記法,那麼f^{-1}({a})

又多了一種含意,此時f^{-1}({a})={2}

大部分書中並不使用f^leftarrow這個符號,大部分書承認fiber中的簡記法,所以f^{-1}

的歧意比想像中的還要多,當然可能有人會説可以通過上下文去區分,這我自然知道,但數學不是完型填空,我們希望含意是確定的,而不是靠猜。如果你看一些舊的數學書,其中的數學符號可能和現在是不同的,即便是相同時代,不同學派符號可能也是不同的,以致在看這些書時,腦中要不斷用正則表逹作替換。

從邏輯學的角度來看,數學中的符號是很buggy,但由於數學是給人看的,且有歷史遺留問題,改也是很困難的,但這對數學的嚴格性沒有影響。

其實程序員也是先寫偽代碼,再寫程序,偽代碼是給人看的,程序是給機器看的,我們沒有要給機器看的數學證明,自然不必要重新造一套嚴格新符號體系,或用形式化證明取代自然語言證明。王垠舉的例子是對的,但沒有解釋對。


形式化的好處是有利於嚴謹但是不利於理解,像是基礎離散概率的知識很多都是很自然的想法,形式化只是換了一種表達方式而已,但是更重要的是這知識本身。當然發paper還是要嚴謹,這樣有利於學術交流。
舉個例子,任何二次等式至多有兩個根,這是一種很自然的表達。如果形式化換成一階邏輯表達式就變成了
forall a, b exists u exists v forall x ((x^2 + ax + b = 0) 
ightarrow ( x = u lor x = v))
但是形式化並沒有為我們帶來任何新的知識,只不過表達起來更加嚴謹而已,更重要的還是這些形式表達式後面所蘊含的數學idea,抽象的知識要有具象的例子和直覺來支撐。

@張秉宇 提到了數學工作者與程序員的思維區別,其實關於計算機科學家使用到的離散(具體)數學,和數學家更為偏好的抽象數學之爭,數學家自己也在吵。Timothy Gowers作為匈牙利學派的繼承人,曾經提出過數學有兩種文化,一種是發現unified數學理論的文化,例如布爾巴基這種;還有一種就是專註於具體問題的文化,他稱作匈牙利文化。作為被Erd?s深深影響的人,我覺得兩種都很重要。但是Gowers認為計算機有一天會取代數學家....


說數學符號系統或者說數學語言設計得爛可能有道理
但其他推論就完全是胡扯了
比如這段:計算機是比數學更加基礎的工具,就像紙和筆一樣。計算機可以用來解決數學的問題,也可以用來解決不是數學的問題,比如工程的問題,藝術的問題,經濟的問題,社會的問題等等。
你也可以說數學可以用來計算機解決的問題,也可以用來解決不是計算機的問題,比如工程的問題,藝術的問題,經濟的問題,社會的問題等等。
再有這段:所謂「高等數學」,在計算機科學裡面基本用不上。
難道圖形學,機器學習,數據壓縮這些都不算計算機科學的分支嗎?
這算是王垠今年來寫得最爛的一篇文章了,還是別隨便跨界的好


你說那些數學符號是不是設計得很爛,那的確是。那這對於搞數學的人來說是個問題嗎?我覺得不是。

連Java和Perl都有人喜歡用呢。


數學語言是手寫了數百年的。沒有打字機的時候,難道有人喜歡寫

int2(surf1,func1,var1,var2,var3,"coordinates","Cartesian")
=
limit(maxd,0,sum(ind,1,length(vartemp1),func1(vartemp1(ind),vartemp2(ind),
vartemp3(ind))*surfs(ind),"constraintOptions","DiamNormAbs",
surfs,maxd,"Partition",surf1,surfs,1),"constraintOptions","OneSide",1);

而不寫成
iint_{Sigma}f(x,y,z)mathrm{d}S = lim_{lambda	o0^+}sum_{i=1}^N f(xi_i,gamma_i,	heta_i)Delta S_i
然後用自然語言說一句右邊的極限是指對所有直徑小於lambdaDelta S_i成立?

數學家說打死我也不寫第一種。


一個程序員的吐糟而已。

數學符號的問題不光程序員會苦惱,數學家也喜歡自嘲"abuse of notion"。難道是因為數學家不夠聰明,想不出更好的招了嗎?實際上是符號真的是太多了,在一個上下文中不衝突的情況下,也就那樣了。同一個符號在意思相近的情況下用到不同的場合是常事,意義完全不同有時候也照用不誤,只要不互相衝突。實際上,在一些教書育人的學者的努力下,他們寫的教科書已經很大程度上統一了符號和用法,沒有這些工作,只怕連數學家也要哭死。

數學與計算機科學的關係歷來有爭論。但完全拋開數學,滿足於高中數學,決非計算機科學家的作為。沒有數學基礎,你能看懂計算TAOCP?最近很火的函數式編程,不知王珢怎麼看?範疇論高中數學會講?

王珢應該是站在一個軟體工程師的角度來談的。一個項目當然是需求越清楚越好,最好把偽代碼給出來,直接翻譯成程序語言。然並卵。在世上可以形式化的數學只佔極小一部分,以幾何為例,除了平面幾何可機器證明之外,其它的進展如何呢?

王珢噴的是為啥數學那麼難學難懂,在他看來,有些工具很好用,所以他質疑數學家為什麼也不這麼搞。但數學家又不都是教書匠,你們的感受才不會在乎呢。就連數學界內部,能看懂自己論文的也是極少的,搞計算機的看不懂有什麼關係。

當然,王珢說數學家的代碼寫的差,也許是事實。我聽說過一個數學專業人士的事迹。寫出一段世界無敵的代碼,但全是用宏寫的,沒人看得懂。也許,數學的嚴謹性和軟體工程的藝術性並不一定完全兼容。

軟體工程藝術重在可維護性,可重用性等實際問題。而數學家重視的是邏輯的嚴密性和體系的完備性。

用論證過程中的記號問題來質疑其嚴謹性,無疑是可笑的。儘管數學家比較高冷,不屑於理睬別人。但反駁他們之前,最好能說到點子上。很多計算機開創性工作都是數學家完成的,人家看計算機書籍分分鐘搞定,反之則沒戲。有理由相信,計算機科學的再次突破還是得靠嚴謹的數學,畢竟祖師爺全是數學家嘛。但王童鞋這麼吐糟,怕是會誤導不少人。

我的觀點是:科學還得靠數學,不過實驗可提供靈感。計算機領域大部分是工藝,理論部分還得靠數學家。


"計算機科學其實根本不是數學" 怎麼沒人吐槽這句話?
CS歸根結底就兩大問題:可計算性和複雜性。全是數學。


謝邀。
我覺得他在這篇文章中表現出的對數學的理解只有中學生水平。

注意:我不是說王垠的數學水平只有中學生水平。就算說這篇文章是陶寫的,我也覺得陶在這篇文章里表現出的對數學的理解只有中學生水平。


看了那麼多回答,有的回答我也是醉了。。。
正好有個反例送上來:
@Xin Jin

數學是寫給有智慧的生物看的。即使有不統一的符號,有很多約定俗成,但是作為有有智慧的生物,人類完全能夠理解。

要是有人回答說「XX數學太複雜了,我難以理解。」
@Xin Jin八成會說「那是你智慧不夠。」

學過數學的人都能輕易區分f^{-1}, f^2, f^{(2)}的區別,即使有混淆,只要在腳註或定義中說清楚就不會造成任何理解上的困難。

不知道這裡「學過數學的人」指的是誰,一旦有人說自己混淆了你是不是馬上就要說「你根本就沒學好數學」。
你自己都說「只要在腳註或者定義中說清楚就不會造成任何理解上的困難」,我是不是可以理解為你自己都承認證明中需要相當數量的腳註,而這正是王垠所批評的,由於數學語言的複雜性,導致很多證明如果沒有腳註根本無法理解,有的就算有腳註還是比較難理解。

而計算機語言是寫給計算機看的。計算機不過是個機器,沒有嚴格按照規則寫成的東西它無法理解。所以人類才要花大力氣去設計統一和形式化的語言。

錯,計算機語言(準確地說應該是程序設計語言)是給人看和理解的,計算機看的是二進位語言,編譯器在這兩者之中起著翻譯的作用。

某些人讀代碼讀久了,都忘記自己是個人了,還以為其他人也跟它一樣腦子都退化成編譯器了。

不知道這個結論是如何得出的,一點邏輯都沒有。

我已經看到@Xin Jin深深的跪在數學面前,一旦有人對數學進行批評,他就會奮起反抗。

-------------------------------------------------------------------------------------------------------------------------------------------
談談我的看法:

王垠這篇文章的內容其實不算新穎,他之前的文章里也有提到。
對我而言,他這篇文章最大的價值不僅僅在於指出了數學語言的不足之處,更在於啟發了我去思考數學是一個不完美的東西,數學並不是一切的解釋。

其次,為什麼說計算機比數學更基礎,王垠的原話是:

計算機是比數學更加基礎的工具,就像紙和筆一樣。

@何史提你斷章取義也就算了,你好歹把證據話抄完行不行?

他把計算機科學看成比數學更基礎的工具??那沒有編程的年代,我們就活不了?

王垠說的「更基礎」指的是計算機可以作為一種新的運算工具,計算機語言可以替代不完善的數學語言,從而消除不必要的混淆,因而有利於數學的發展。
而這一想法也已經不是空談了,2002年菲爾茲獎得主Vladimir Voevodsky已經在做這方面的研究。
連接:Voevodsky』s Mathematical Revolution

然後,計算機比數學更基礎的原因是計算機將數學和現實連接起來了。
笛卡爾在他的《談談方法》中提到

因為在我看來,普通人的推理所包含的真理要比讀書人的推理所包含的多得多;普通人是對切身的事情進行推理,如果判斷錯了,它的結果馬上就會來懲罰他;讀書人是關在書房裡對思辨的道理進行推理,思辨是不產生任何實效的,僅僅在他身上造成一種後果,就是思辨離常識越遠,他由此產生的虛榮心大概就越大,因為一定要花費比較多的心思,想出比較多的門道,才能設法把那些道理弄得好像真理。

我認為數學的發展也是一樣,數學缺少一個可靠的「懲罰」或者「檢查」機制,它的對錯都是靠數學家的人腦來檢查,如果只有幾頁倒還好,如果達到幾十頁,幾百頁,一旦出現錯誤,光憑人腦是很難檢查出來的,大家想想自己寫個上萬行代碼結果發現有bug的概率。這就是為什麼王垠會認為計算機應該作為數學的基礎。這一點在前面給出的連接中Vladimir Voevodsky也提到了。

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

第一次寫這麼長的回答,有說錯的地方還請大家不吝賜教。


部分同意,數學系統的符號設計的確一塌糊塗,至少1/3的時間花在看懂定義和變數是什麼上面了。


從這篇文章看作者應該沒有翻過 布爾巴基, 甚至都沒聽說過數學界這段將整個數學模塊化並最終失敗的思潮。

  • 第1卷:集合論(Théorie des Ensembles)4章
  • 第2卷:代數(Algèbre)10章
  • 第3卷:拓撲學(Topologie générale)10章
  • 第4卷:單實變函數(Fonctions d"une variable réelle)7章
  • 第5卷:拓撲向量空間(Espaces vectoriels topologiques)5章
  • 第6卷:積分(Intégration)9章
  • 第7卷:交換代數(Algèbre commutative)10章
  • 第8卷:李群及李代數(Groupes et algèbres de Lie)9章
  • 第9卷:譜理論(Théories spectrales)2章

如果數學只有這些東西,作者要求的一致性,可組合性,符號無歧義等所有要求這本七千頁的書已經可以滿足了,其實現在大家寫東西也會參考其中的符號和定義。但是,數學涵蓋的內容太滴滴的多了,以至於這麼多的大數學家的集體努力只完成了大廈的一塊磚。。。

退一萬步講,即使最後將所有的定義與符號都整理好了,這種煌煌巨著,我們該怎麼讀它怎麼使用它?相信讀過布爾巴基的同學想到這件事情都會和我一樣有種望洋興嘆的衝動。


扯了一半天,cs的黑數學,數學的黑cs,有卵用?有意思?

根本問題是,數學的本質是符號或者記號么?並不是,符號規範不規範根本和數學無關。甚至計算機語言優美不優美,也跟計算機無關,大不了編譯器麻煩一點,最後不還是變成0101么。要都想優美,大家都用haskell了?

就算你寫積分先畫個符求平安,該積不出來的還是積不出來。好多數學證明的手稿都丑的一逼,一點都不優美,因為人家不靠臉,靠腦子啊。


為啥拿x^{-1}f^{-1}舉例啊,更好的彈藥明明是sin^2……
想要形式化的數學表達?下面是「sqrt2是無理數」在 Coq 中的形式化證明(取自 coq-irrat2/irrat.v at master · ezrakilty/coq-irrat2 · GitHub,已用 coqide 驗證),你感受下:

(** The theorem is about reals. *)
Require Import Coq.Reals.Reals.

(** An irrational number x is one for which there do not exist
integers a, b for which a/b = x. (IZR converts integers to reals.) *)
Definition irrat x :=
~exists (a:Z), exists (b:Z), (b &> 0)%Z / (IZR a / IZR b)%R = x.

(** The heart of the proof will reason about how many "rightmost
zeros" are in the binary representation of various numbers.
Luckily the representation of [positive] integers is already
based on binary. *)
Fixpoint RightmostZeros (x:positive) : nat :=
match x with
| 1%positive =&> 0 (** The number 1 has zero rightmost zeros. *)
(** Bits ending in 0 (an even number) have one more than the butlast bits. *)
| (bits~0)%positive =&> S (RightmostZeros bits)
| (x"~1)%positive =&> 0 (** Bits ending in 1 have no rightmost zeros. *)
end.

(** Doubling a [positive] number gives you one additional rightmost zero. *)
Lemma rmz_mult_2 : forall x, RightmostZeros (2*x) = S (RightmostZeros x).
auto.
Qed.

(** [NPeano] defines the [even] function. *)
Require Coq.Numbers.Natural.Peano.NPeano.

(** A square [positive] number has an [even] number of rightmost zeros. *)
Lemma rmz_sqr : forall x, NPeano.even (RightmostZeros (x*x)) = true.
induction x.
(* x~1 * x~1 *)
auto.
(* x~0 * x~0 *)
simpl.
rewrite Pos.mul_comm.
auto.
(* 1 * 1 *)
auto.
Qed.

(** Now we must lift the rightmost-zero theory to integers [Z]. *)
Fixpoint RightmostZerosZ (x:Z) : nat :=
match x with
| Z0 =&> 0
| Zpos x =&> RightmostZeros x
| Zneg x =&> RightmostZeros x
end.

(** Lifted rmz_mult_2 (for nonzero integers). *)
Lemma rmzZ_mult_2 : forall (x:Z),
(x &<&> 0)%Z -&> RightmostZerosZ (2*x) = S (RightmostZerosZ x).
destruct x; (intuition || apply rmz_mult_2).
Qed.

(** Lifted rmz_sqr. *)
Lemma rmzZ_sqr : forall x, NPeano.even (RightmostZerosZ (x*x)) = true.
destruct x; (auto || apply rmz_sqr).
Qed.

(** Incrementing a number negates its [even] status. *)
Lemma even_odd: forall x, NPeano.even x = negb (NPeano.even (S x)).
Proof.
induction x.
auto.
unfold NPeano.even at 2.
fold NPeano.even.
rewrite IHx.
Require Coq.Bool.Bool.
rewrite Bool.negb_involutive.
auto.
Qed.

Lemma sqrt_mul_sqrt_eq_n :
forall x, (0 &<= x)%R -&> (sqrt x * sqrt x)%R = x%R.
Proof.
intros.
apply sqrt_def; auto.
Qed.

(** The square root of two is irrational. *)
Theorem rad2_irrat : irrat (sqrt 2%R)%R.
Proof.
simpl.
unfold irrat.
(* The goal is now:
~exists a b : X, b &> 0 / IZR a / IZR b = sqrt 2) *)

(* Prove the negation by contraction; call that contrary hypothesis H *)
intro H.

(* H asserts the existence of numbers a and b governed by some assertions;
name the numbers and assertions. *)
destruct H as [a [b [H_b_gt_0 H_a_over_b_eq_rad2]]].

assert (H_main : (a*a = 2 * b * b)%Z).
(* Proof of H_main. *)

(* In H_a_over_b_eq_rad2, we"d like to move the IZR b to the rhs. *)
assert (H_a_eq_rad2_mult_b : (IZR a = sqrt 2 * IZR b)%R).
(* Proof of H_a_eq_rad2_mult_b. *)

(* Lift our fact that b &> 0 to reals *)
assert (IZR b &> 0)%R.
replace 0%R with (IZR 0) by solve [auto].
Hint Resolve Rlt_gt : real.
Hint Resolve IZR_lt : zarith.
auto with real zarith.

(* Now we do some equational substitutions. *)
rewrite &<- H_a_over_b_eq_rad2. field. Hint Resolve Rgt_not_eq : real. auto with real. (* Back to proving H_main: a * a = 2 * b * b. *) assert (H0 : (IZR a * IZR a = (sqrt 2 * IZR b) * (sqrt 2 * IZR b))%R). congruence. replace (sqrt 2 * IZR b * (sqrt 2 * IZR b))%R with ((sqrt 2 * sqrt 2) * IZR b * IZR b)%R in H0 (* This substitution is shown by assoc/comm normalizing, tactic "ring" *) by ring. rewrite sqrt_mul_sqrt_eq_n in H0 by (auto with real). replace 2%R with (IZR 2) in H0 by auto. repeat (rewrite &<- mult_IZR in H0). apply eq_IZR; trivial. clear H_a_over_b_eq_rad2. (** (Now we"ve reduced it to a problem in Z. And now comes the interesting part of the proof.) The next three assertions will given us some equations on the number of zeros in a*a and b*b that can"t all be satisfied. *) assert (H_a_rmzZ_even : NPeano.even (RightmostZerosZ (a*a)) = true). apply rmzZ_sqr. assert (H_b_rmzZ_even : NPeano.even (RightmostZerosZ (b*b)) = true). apply rmzZ_sqr. assert (H_a_rmzZ_eq_S_b_rmzZ : (RightmostZerosZ (a*a)) = S (RightmostZerosZ (b*b))). rewrite &<- rmzZ_mult_2. rewrite H_main. rewrite Z.mul_assoc. trivial. (* Using rmzZ_mult_2 gave us an obligation that b*b &<&> 0 *)
assert (b*b &> 0)%Z by (auto with zarith).
auto with zarith.

(* Now we have those three equations and we can derive a contradiction. *)
rewrite H_a_rmzZ_eq_S_b_rmzZ in H_a_rmzZ_even.
rewrite even_odd in H_b_rmzZ_even.
rewrite H_a_rmzZ_even in H_b_rmzZ_even.
simpl in H_b_rmzZ_even.
(* We have derived a bogus equation, false = true. Coq knows what to do from
here. *)
discriminate.
Qed.


個人意見,他畢竟是站在一個計算機專業畢業的人角度來講這個問題,可能事實就像他說的,數學符號系統很糟糕,我在考研複習的時候看書基本要理解一個小時的知識,可能聽老師用人類語言和形象邏輯講出來講需要十五分鐘或者半個小時就可以明白,數學表達方式確實沒有很人性化。但是說實話數學表達這套系統不像計算機,數學符號可能是經過幾千上百年的積累,這期間有很多不同風格的數學天才在繼承與發明,這些人都有自己的理解,而計算機呢?是近幾十年來興起的,整套表達系統可以說是在一些固定的基礎來來的。而且我認為數學與計算機的表達系統相差太多,不是專門研究的人最好不要比較,除非你真的有興趣,不然還不如安靜地做些自己的事情。


數學的命名規範的確非常失敗。他說的話不無道理的。
數學符號其實就是計算機語言中的變數與運算規則。
在編程界有很成熟的變數命名法,其目的只有一個:讓程序更易讀。
而數學變數名字通常只有一個字元,而且這個字元沒有任何字面意義。人的記憶是基於聯繫的,對於一堆希臘字母+英文字母+圖形符號,你什麼都聯想不到。

如下是一個簡單的曲面積分公式,你們感受下。

其實王垠的文章受眾是剛剛踏入CS大門的懵懂新生,你們這群人卻以Master甚至Ph.D的高度去批判,不批出翔才怪。其實他要表達的意思是:

而很多剛剛經過高考洗禮nao的人,是這麼理解的:


數學確實歷史太長,分支太多,內容太多。在幾百年時間裡,在幾十個不同國家,用幾十種不同語言,野蠻生長了太長時間。
過去的幾百年間,只有羊皮紙,沒有印刷術,沒有互聯網,沒有國際期刊,確實遺留下很多糟糕的數學表達形式。
歷史上數學的表達形式確實也在不停 步的規範和改進。
有理由相信,200年後的數學家們將會改進出一套更更規範統一的記錄符號系統和表達形式。
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
正如Jobs所說,你得知道,現在你看到的數學表達形式,是來自世界上幾十個國家,幾十種語言,在沒有印刷術,郵政系統的條件下,經歷幾百年時間陸陸續續攢成的。在有了internet的時代,說這套數學記錄形式符號系統仍然是完美無缺的是不符合邏輯的。
我知道當時那些數學天才發明的某些書寫形式,非常適合羊皮紙和紙莎草上書寫。但有了internet,有了IDE環境,難道不需要想想如何改進嗎?更適合internet,觸摸屏,IDE環境的書寫格式。

曾經的數學書寫格式是這樣的。完美的配合了泥板和草棍的優點。為什麼是這個樣子?因為這是草棍在泥板上書寫最容易的方式。

http://civ.ce.cn/science/200612/22/W020061222614488573470.jpg

為什麼你不繼續用這種形式寫數學?

××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
微積分的記錄形式,是在當初兩種不同的形式中,選擇了相對好用的一種。毫無道理認為,當初偶然兩選一那種,就是終極好用的記錄形式,而經過幾百年的時代變遷,記錄硬體載體(從羊皮變成硬碟陣列)的發展,不需要去繼續探索更新更好的記錄形式。

如果以後數學表達形式都不是寫在紙上,而是都必須打開電腦,用「數學IDE環境「書寫,那麼表達形式可能會有很大不同。
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
過去的數百年間,數學表達形式符號系統,為了提高可讀性和規範化,形式一致性,一直在緩慢而持續的改進中,未來還將繼續改進。
高斯,歐拉,拉普拉斯,笛卡爾,他們寫的數學表達形式書寫形式,和現在我們看到的有很大不同。因為數學的表達形式,書寫形式,一直在持續改進中。我們現在並不是用高斯歐拉拉普拉斯笛卡爾所使用的數學書寫形式。高斯歐拉也沒有說,因為我聰明,就不需要更好更簡潔的數學書寫形式了。高斯

××××××××××××××××××××××××××××××××××××××××××××
然而這並沒有什麼卵用。表達形式,書寫規範,只是能幫助不太天才的那些人,更容易入門而已,並不能為天才的數學家帶來更多靈感。正如電腦編程的IDE,能讓菜鳥程序員更快入門,讓普通程序員提高效率,但並不能保證編出更牛逼的程序。
然而這已經足夠了。能讓非天才的人更容易入門數學,更節省時間的了解一般的微積分知識,為此已經值得把數學重寫一遍了。
**********************************************************************************
google 花了很多力氣,把google主頁的打開速度提高了1秒。google說,每天有20億人看這個網頁,提速1秒,就相當於幾百萬人的生命延長了10年。而不是說,不過是讓幾億百無聊賴的人搜索porn的時候快了1秒而已。

如果有更容易理解,更容易記憶,更規範化,更直觀的數學書寫形式,讓普通三流工科大學的本科生們,學習微積分的時間節省1小時,讓普通三流工科大學的本科生,微積分的平均成績從33分提高到35分,都值得把數學用新形式重寫一遍。
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
我們現在看到的數學書寫形式,不是從開天闢地就一直有的。而是歷代無數數學家和普通人,經過幾百年來持續改進的結果。那些數學家本人當然看得懂更老舊的形式。但他們為了讓普通人理解更方便,還是孜孜不倦的在持續引入更簡潔直觀的書寫形式。
連偉大的歐拉本人,都直接改進了很多書寫形式。難道不做這種改進,歐拉就不夠聰明看不懂了???那些說數學是給聰明的專家看的,不需要改進的人,難道歐拉不夠格,是因為看不懂才改進的???
是偉大的歐拉本人,規範了三角形abc表示三個邊。這種對更規範更統一的書寫形式追求,應該伴隨數學的歷史持續。
如果不是偉大的歐拉本人的努力,現在寫三角形三個邊可能會千變萬化。那些學過一點數學皮毛的人,仍然會說,「數學是給聰明的人看的,我們這些學過數學的人,就知道通過各種角標和特徵,判斷出那是三角形的邊。不需要進行規範。」

××××××××××××××××××以下引用××××××××××××××××××××××××××××××××

數學的說理性很強,因此用文字語言來敘述說理過程時,寫的人嫌麻煩,讀的人又覺得累贅,寫和讀的人都跟不上思考,常常迫使思路中斷。為了簡化敘述,自古至今數學家們努力創造了大量縮寫符號,簡化敘述,使解決問題的思路順暢。代數的符號率先出現,最早使用數學符號的是公元3世紀的數學家丟番圖。隨著科學的迅速發展,作為科學公僕的數學迫切需要改進表述方式方法,於是現代數學的符號體系開始在歐洲形成了。

  許多數學符號很形象,一看就明了它的含意。如第一個使用現代符號「=」的數學家雷科德就這樣說道:「再也沒有別的東西比它們更相等了。」他的巧妙構思得到了公認,從而相等符號「=」沿用了下來。

  最燦爛而美麗的圖形科學──幾何,為了進一步發展,許多幾何符號應運而生。如平行符號「∥」多麼簡單又形象,給人們抽象而豐富的想像,在同一個平面內的兩條線段各自向兩方無限延長,它們永不相交,揭示了兩條直線平行的本質。

  數學符號有兩個基本功能,一是準確、明了地使別人知道指的是什麼概念,二是書寫簡便。自覺地引入符號體系的是法國數學家韋達(1854—1603年),而現代數學符號體系卻採取笛卡兒(1596—1650年)使用的符號,歐拉(1707一1783)為符號正規化工作作出不少貢獻。如用a、b、c表示三角形ABC的三邊等等,都應歸功於歐拉。


××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

難道歐拉不規範三角形abc就不懂幾何了。難道笛卡爾是因為不如你們聰明,看不懂數學才引入的代數符號?不需要做這些書寫形式的規範和改進,歐拉笛卡爾拉普拉斯丟番圖也能看懂。但他們還是做了規範和改進。

那些認為數學書寫格式更古不變,不需要改進的人,是什麼樣保守的心態。

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

前蘋果設計師要 「滅了數學」 - 莫非是你 - 知乎專欄


說的有道理 —— 這個問題在使用符號運算系統時尤其嚴重。

究其原因,是因為機器比人愚蠢一億八千萬倍(凡是寫過程序的人都清楚), 所有符號必須嚴格定義,邏輯自洽;而人比機器聰明,能夠看到符號、公式背後的內在數學道理。 而且寫出來的文章是面向讀者(數學家)的,不是面向機器的。所求無非是同行能夠讀懂。千萬不能把從萊布尼茨、歐拉以降的輪子再發明一遍。也正因為如此,數學覆蓋的範圍遠遠比符號運算系統所能編程包含的知識要廣。

設計程序語言的人不也在學習現實世界數學語言的組織、使用方式嘛?比如我們以前是沒有函數重載和多態的,面向對象編程的設計方法將這個變成了主流。


" x^-1表示x的-1次方,而f^-1,明明是一模一樣的形式,表示的卻是函數f的反函數。一個是求冪,一個是反函數"

王垠編程水平如何我不知道,不過從這句話他的數學水平我基本清楚了......
我想知道他沒學過抽代嗎? 沒學過群論嗎? 任何大二的數學系學生也說不出這話來.

就算他一心撲在計算機上,確實沒有接觸過群論,那麼,以他引以為傲的抽象思維能力,
他就應該有能力想到,x^-1中,既然變數x可以為一個數,那麼有理由相信x同樣可以是一個函數,
如果一個數乘以它的倒數等於1,那麼如果以f(x)=x作為"1"的話,一個函數作用於自己的反函數,
恰等於f(x)=x,這個道理和倒數的概念是完全一致的.王大師,這可是群環域的基本功啊.
就算沒學過,以王大師的功力想想也應該能想出來的啊.

數學是丑是美,我承認有時候是不太美的,看書的時候經常看著看著就忘了某個字母表示
什麼意思,得往回翻好幾頁才看明白. 但是,王大師似乎從來都不明白一個道理:
能夠解決實際問題的東西一般都是丑的.美的東西一般不用來解決實際問題.
物理定律是簡捷而美的,但使用物理定律造火箭,就要往裡摻各種詭異的理論外加
一堆經驗公式,數學符號丑或者美,它解決了實際問題,人們不在乎它的美或丑.

同樣,王大師不斷追求一個又美又解決實際問題的編程語言,但
做出的東西只能要麼美卻不好用要麼好用而不美.介於他硬要強調兩頭兼顧,最後總會有
人在批評他的語言.而他又是站在象牙塔頂端的人,當他看到有人批評,他所想的就是:"我要升級/重構/重寫我的語言,最後做出讓你們無法批評的語言來".於是,永遠陷入死循環.

之前有一位知友說過:"獎盃是獎給有奉獻的人,而不是獎給有水平的人的".我覺得簡直
太對了. 以王垠的水平,我相信他寫一個對程序界,乃至對人類有奉獻的東西並不難.
然而他卻沒有這麼做,而是抱著自己的才華,眼睜睜地看著榮譽給了其他甚至比他水平差的人.


推薦閱讀:

約翰·麥卡錫(John McCarthy)為計算機科學領域做過的重要貢獻有哪些?
為什麼說「量化窮三代,計算毀一生」?
你學過的最難的一門計算機課程是什麼?這門課對你的工作有什麼幫助?
蘇聯發明過俄語編程語言嗎?
如何在保持高GPA的同時讓大學生活真正有意義?

TAG:計算機科學 | 王垠人物 |