為什麼計算機領域的概念如此難以理解?
其實很多人忽略了一點:計算機已經發展成為一個非常龐大,非常複雜的體系了。已經形成了多個相互之間關聯性不大,獨立性很強的領域了。
所以,不要再指望某個計算機大牛能精通計算機領域的方方面面了,做前端的可以基本不了解編譯原理,做網路的也可以對資料庫一無所知。這些都不影響他們在各自領域的工作,甚至達到專家級別。
做一個簡單的類比的話,可能就像化工一樣,基本上做石化的,不會太了解高分子的。。。
所以,覺得計算機領域的概念很複雜,這就對了,因為作為一個龐大的體系,不複雜是不可能的。大多數答主似乎忽略了一個重要的原因。計算機作為一個研究領域,太年輕而發展又太快。導致的結果有兩個:一是各種知識體系混雜,二是很多問題的確還沒有定論。
第一個問題。@周子涵 引用的這段話:我一直不喜歡「計算機科學」(computer
science)這個詞。主要原因是根本不存在這種東西。計算機科學就像一個大雜燴,由於某些歷史意外,很多不相干的領域被強行拼裝在一起。這個學科的一
端是純粹的數學家,他們自稱「計算機科學家」,只是為了得到國防部研究局(DARPA)的項目資助。中間部分是計算機博物學家,研究各種專門性的題目,比如網路數據的路由演算法。另一端則是黑客,只想寫出有趣的軟體,對於他們來說,計算機只是一種表達的媒介,就像建築師手裡的混凝土,或者畫家手裡的顏料。所以,在「計算機科學」的名下,數學家、物理學家、建築師都不得不待在同一個系裡。這種現象並不稀奇。在一個學科發展起來以前,人們只能按直覺做一些隨意的劃分。只有在有了完善的方法論之後才好細分。「科學」的概念是十八世紀才流行開,那之前的所謂「自然哲學」(Natural philosophy)一直沒和哲學扯清關係。語言學、文學批評以及對歷史文本的研究很長一段時間都被放在「語文學」(https://en.wikipedia.org/wiki/Philology)的框里。生物和地質在分家前也一直放在「博物學」的框里(Natural history),林奈創立分類法時把自然界分為植物界、動物界和礦物界,達爾文在他的時代也被稱為博物學家。何況,計算機科學的細分一直在進行,有很多答主已經說得很清楚了。但是,計算機學科目前發展依然很迅猛,產生知識的速度超過了整理知識的速度,自然就混亂。
至於問題沒定論,我類比一下樓主提的幾個問題我們還是選幾個問題來說明一下吧:
- fortran和python比,哪個好,有什麼好處;
- 寫gui的話,最優雅最合理的工具是什麼,c++,c#,oc選一個,辨析。。。
我覺得關於這種(看似膚淺)的問題的形而上的大討論,物理中幾乎(起碼從實用角度來說,因為物理已經選擇了最簡單的,最實用的有效理論作為理論)沒有,要討論就是民科了。
問樓主幾個問題:
- 光的波動論和粒子論比,哪個好,有什麼好處;
- 寫導數的話,最優雅最合理的記號是什麼,、、,辨析。。。
- 量子力學的解釋(量子力學詮釋)哪種是對的。。。
按照樓主的說法,牛頓、萊布尼茨、泊松、拉格朗日、波爾、薛定諤、愛因斯坦全都是民科,因為他們參與過這種形而上的大討論。民科之民科在於,他們會對科學界已經熟知的問題犯錯,把已經「形而下」化的問題重新形而上化。對尚不知道結論、無法作「形而下」研究的問題作形而上的討論這是每個人都會做的事情。
你們今天選擇了最簡單的、最實用的有效理論,這是因為你們祖師爺早撕過逼了你造么。況且物理學也只有在比較基礎的領域也才有如此炫耀的資本。我想問問樓主廣義相對論和量子力學統一得怎麼樣了?暗物質找得怎麼樣了?標準模型那麼醜陋有解釋了么?
在前沿的領域,你們物理學還不是一樣不堪。既然一兩天搞不出來,各派的人聚在一起出了吹吹牛吵吵架還能幹什麼?但不吵架的時候各幹個的,互不妨礙,又不是天天光吵架了。。。
另外,我覺得爭論導數的記法比爭論 GUI 框架要 low 多了。。。1 . 題主寫了很多,但是要區分計算機科學(學術) 和 it行業內的開發(業界)的是不同的。
題主的「XXXX.....造成困擾,這是cs特有的現象么?」===》這裡的CS應該指的是」計算機科學」
CS 和 「fortran和python比,哪個好,有什麼好處;寫gui的話,最優雅最合理的工具是什麼」 沒有什麼必然關係或者說這些問題非要和CS綁定到一塊談有點莫名其妙。談什麼好之前應該先定義「好」的標準,「最優雅」 「最合理」 也是類似。
脫離標準和約束談我覺得沒有意義。
另外即使有標準和約束,目前的認知情況下大多數時候也只是人們依照經驗去評估,無法做到絕對精準。2. 題主說的很多問題其實是和 計算機軟硬體系統是人造物有很多人為因素是分不開的。
有時候的軟體開發確存在一些無奈,無論水平多高,只要在一線干具體事情,很多「滾爛泥」的體力活是必須的。
比如解決bug的話,讀代碼是逃不掉的,而讀代碼本身可能真沒多少意義。對於一個已經技術有所積累的人而言,熟悉幾個大的codebase除了能有助於解決手頭上的工作問題外,對整體技術能力的提升未必有多少意義,但這又必然花費巨大的精力才能做到。
其他的例子,我能想到的一個典型就是前端程序員克服各種瀏覽器下的差異做的工作,我是真心佩服(但我不認為有多少長遠的技術價值,只是在現在條件下不得不做的折騰罷了)。
不妨想像一下假如 Jeff Dean 去解決Hadoop的bug。題主說的問題在計算機屆是真實存在的,雖然題主的分析方式是錯誤的。
計算機屆的爭論很多,而且往往各說各話無法有效溝通,大概有三個原因。
一. 計算機科學 這個學科劃分的並不好
再次引用一下《黑客與畫家》的這段話吧。我一直不喜歡「計算機科學」(computer science)這個詞。主要原因是根本不存在這種東西。計算機科學就像一個大雜燴,由於某些歷史意外,很多不相干的領域被強行拼裝在一起。這個學科的一端是純粹的數學家,他們自稱「計算機科學家」,只是為了得到國防部研究局(DARPA)的項目資助。中間部分是計算機博物學家,研究各種專門性的題目,比如網路數據的路由演算法。另一端則是黑客,只想寫出有趣的軟體,對於他們來說,計算機只是一種表達的媒介,就像建築師手裡的混凝土,或者畫家手裡的顏料。所以,在「計算機科學」的名下,數學家、物理學家、建築師都不得不待在同一個系裡。
除了作者提到的數學家,物理學家,建築師,我覺得還可以加上「工程師」,甚至是「工人」這些部分。
作為前端的,以及ux,ui這種偏設計外觀的可能更像建築師,而後端的處理,以及操作系統級別的coding則更像是傳統工程師的工作。還有一些就是拿著一些非常簡單易用的輪子比如R,python隨便寫點代碼,做點科學計算什麼的,就是工人或者用戶(並沒有清晰的界限)吧。如果用如上的類比的話,題主所提到這些的爭論,大都發生在工程師和工人群體里,大概有這麼幾種:
1. 用扳手的和用鉗子的爭論扳手和鉗子哪個好用,這個當然各有所長,要和實踐結合,一句兩句是說不清楚的。(比如你所謂的用什麼寫gui最優雅
2. 電器工程師,甚至是搬磚的,去爭論量子力學,自己水平不夠,當然說不清楚。(比如一群碼農非要當所謂的fp愛好者(不是說不可以(但是討論fp的優劣是要有理論基礎的(不只是靠實踐
3. 科學家進入工業界,批評工程師的理論不對,工程師說理論科學家根本沒有實踐經驗,只會空談理論。 (一時想不到很好的例子二. 程序員是一個很愛輸出價值觀的群體
我也不知道為什麼,就是感覺程序員很愛在網上發表觀點,不管是懂的還是不懂的。也許是因為互聯網是程序員發明的,最初的活躍用戶主要以程序員為主,形成了這種社區文化吧。三. 計算機領域創造以及傳播一個新工具的門檻相比其他工程界較低
編程語言,互聯網協議,圖形庫,等雖然都挺難實現,但是相比工程界的各種大型機器和工具,比如粒子對撞機,流水線啥的,還是門檻低多了。
本質上來說,計算機屆的大部分產品,都是一種媒介無關的智力產物,是從物質抽象出來的純粹信息,這種信息的繁殖和發展的速度比傳統的速度是要高指數數量級的,和這也是為什麼互聯網今天這麼火爆的原因吧
1. 一個程序員,只需要靠自己的聰明才智,就可以造出python,但是一個汽車工程師如果想造一輛自己心目中的汽車,就需要很多錢。
2. 即使工具本身花費不大,比如一個技工發明了一個新型扳手,他如果想推廣這種扳手,就必須找工廠來進行批量生產,而程序員推廣自己的軟體只需要提供下載就可以了。
3. 前兩點的結合,也是我覺得最關鍵的一點,因為其實很多有意義的發明,都只是改良已有的產品。第二點保證了程序員可以低成本的接觸到已有的產品,第一點保證了程序員可以不受限制的發揮自己的智慧。
基礎演算法可以測驗但是沒什麼用
對於只會調庫的程序員是沒什麼用,嗯。
理科往往都是從底層向上構建的過程,但計算機不一樣
Theoretical computer science
即便優秀的學會了本科,碩士的課程內容,你還是無法理解別人在討論C++,C#,Java,OC,乃至FP,Js, 圖形技術等特色技術時所用的那些名詞和討論。。每個人就好像擁有獨門秘籍一樣。
獨門秘笈?年年翻新的API也叫獨門秘籍?另外一個搞cs的聽不懂另外一個搞cs的在說什麼這不是正常得很嗎,聽得懂名詞的意思就是學習過相應課程,掌握了對方這些名詞的語境。要求每個cs學生全領域制霸,坑爹呢?
但在科學領域,概念都以淺顯易懂,方便類比,可舉一反三,基本原理提綱挈領,以可以向外行說清楚為榮。
來解釋解釋「向外行說清楚」。請題主推薦點科幻電影/小說/科普講座和著作,向連洛倫茲變換都不會算的外行說清楚廣義相對論?
而計算機領域卻不是這樣?各個分支都故作高深,名次也很亂不統一,程序員討論很快會變成因為聽不懂對方在說什麼而吵架,這在理科是難以想像的
計算機科學裡各個分支都有自己感興趣的問題、一定的研究方法論和工具,題主看不懂跟故作高深是兩回事。這跟程序員吵架有個屁關係。
題主最大的問題就是計算機領域裡作為一門學科的部分和作為一門手藝的部分都分不清。以上。為什麼商店裡有那麼多種衣服呢?我該買哪款呢?
其實題主的問題和這個差不多。不是難理解,而是選擇太多,無從下手。
因為需求不同!
人有高矮胖瘦,有的要上班,有的要登山,有的要勾勒曲線,有的要舒服溫暖,不同的人,不同的場合,不同的時候,對衣服的需求不同,每一件衣服都是一個solution。
軟體也是這樣,有不同的需求,就有不同的工具,不同的solution。有的擅長硬體,有的適用於網路,有的分析數據,需求不同,僅此而已。
我們不是要發現一個可以解決所有問題語言,而只是想找把順手的剪刀,為你做套衣服罷了。
計算機科學作為一門新興學科,其應用工程幾乎總是和別的領域交叉的結果,自然牽涉到大量的領域知識,甚至是多個不同的領域之間較為複雜的交互和關聯。題主未能認識到自己所提的各個題目之間有機的關聯。
比如有計算機以前就有密碼學,然而當我們把計算從人類認知中定義並剝離出來以後,密碼學就必須適應計算速度的發展,而不再是以人腦計算速度為基準的範疇,以至於現在大家提到密碼學往往認為是計算機科學的一個分支。同樣的道理,公司管理和商業軟體,通訊和互聯網,設計與模擬,醫學,製藥,生物與大數據分析等等。很多領域知識幾乎已經被抽象到了大家都認為是計算機知識的程度,比如ERP和別的企業應用等,其實更多的是管理相關,比如如何統計歸類數據,如何設計流程,現在卻往往封裝在MVC之下,很多培訓班Java程序員寫的業務邏輯本質上是企業流程的邏輯,前計算機時代通過檔案,文件流程等方式完成的。
然而我們本質上獲得的是計算能力的提高,想把這個能力應用在方方面面,還有幾個地位比較特殊的體系,即PLT,編譯原理,靜態分析,軟體工程等。這些幫助我們搭建業務邏輯和計算能力之間的橋樑,準確的描述我們希望描述的,描述應用領域的模型,描述我們當前平台的實現能力等等。這裡面往往是有著嚴格的體系和發展的,和任何一門學科相比邏輯性都很清晰並且深奧。
最後要吐槽我覺得關於這種(看似膚淺)的問題的形而上的大討論,物理中幾乎(起碼從實用角度來說,因為物理已經選擇了最簡單的,最實用的有效理論作為理論)沒有,要討論就是民科了。
近代物理在標準粒子模型前幾大體系的關係是完全可以和fp/ip對比的。(話說題主覺得imperative是新名詞,只能說題主這方面確實是新人)。經典力學符合人類直覺,然而不考慮重力,討論高速(相比光速)運動下的現象狹義相對論更準確。狹義相對論加上重力常數以後成為廣義相對論。但是微觀層面他們都不合適,而量子力學符合微觀層面代入普朗克常數的觀測結果。量子力學考慮光速,忽略重力常數的情況下成為量子場論。
而計算機,馮諾依曼結構是我們當前的物理實現,和這個最接近的理論模型是圖靈機,編程使用imperative model最天然契合。然而高並發的過程我們希望消除狀態,所以函數式編程和非同步I/O描述能力好。但是程序更抽象了,不像牛頓力學與imperative programming一樣符合直覺,而且運行效率打折扣,於是大家會在有tradeoff的場合吵,但是最近開始出現monad來統一爭執。如果到了商業軟體編程,人們開始使用OO來描述複雜的對象關係,嘗試讓軟體工程規模變得可控,單是既有的imperative模型還不足夠,於是有了Java/C++來增強這方面的描述能力。
基本上兩者都有要解決的問題和相適應的理論,雖然計算機不像物理一樣尋求大統一,但是現在可是扎紮實實的在不同子領域發展著豐富並且相互緊密聯繫的體系。題主如果覺得計算機比物理難以理解,我會認為題主其實完全不懂物理。題主覺得物理理論能符合你的直覺和類比式的思考方式,是因為沒有學過量子力學,甚至簡單點,狹義相對論。
++++++++編輯++++++++++編輯+++++++++++編輯++++++++++++
最近quora上看見的和這個問題比較應景的漫畫,博諸君一笑CS 計算機科學和Software Engineering,EE,CE,都是不一樣的。我大學時代的CS,幾乎一大半都是理論課。這些理論科學的東西基本上都沒有什麼爭論的。題主說的爭論根本不是科學裡的事= =
A。 理論的領域
1. 純理論的計算機科學課程圍繞[computability可計算性]的問題。和數學非常相像,從最基本的邏輯開始,到圖靈機和其它計算模型,church"s thesis,再到複雜性理論、P vs NP這樣的computability 問題等等,都是非常純粹的理論,主要研究方法是[證明]
2. 再實用一點的有[科學計算問題],從對floating point的基本認識到如何優化演算法減小誤差等等;運用到高等數學,線性代數等等;基本研究方法也是[證明]
3. 再下來和科學計算差不多理論或者更加理論一點的就是圍繞[語言]本身的部分,這個也和數學差不多了。這裡面包括automata, formal languages等等。。Regular Expressions,PDA,DCFL/CFL都是裡面非常基礎的部分。會用Regular Expression去parse XML的同學就是這裡沒學好。這部分的研究方法也是[證明]。深入下去,還有一門學科叫computational linguistics 計算語言學。
4. 演算法理論。哎,其實演算法是一個非常大的計算機科學領域,其主要研究方法也是[證明],只不過大多數演算法理論課都講成了演算法展覽。。。
B。理論實踐領域:不需要或只需要少量證明的但是對數學基礎要求很高,也需要寫代碼。
5. 以machine learning機器學習為代表的一系列 其實是應用統計的學科(一大批交叉學科中箭),基本內容都是:數據是這樣的,來弄model吧。這個model如何比這個model在這裡好了(公式證明),其中這部分是這樣的(公式),那部分是那樣的(公式)。他的缺點是這樣的(公式)。然後大概有數不清的model/method。研究方法=實驗科學。
6. 以computer vision,graphics為代表的用線性代數(為主)解決問題的學科。研究方法=實驗科學。
7. artificial intelligence。大學科。入門除去ML應該偏Knowledge representation和Automated reasoning這兩方面一點。研究方法基本上也是證明為主吧。
8. natural language processing(NLP)自然語言處理。
9. human computer interaction (HCI)人機關係。
9.1 cryptography 密碼學。貌似大多數是數學+演算法
9.2 information theoryC。 軟體工程部分:
所以終結來說就是,其實平時我們看到的爭論,基本上是C部分的東西。這些都是工程部分的甜豆腐vs咸豆腐的問題。
10。 編程入門;
11. 軟體工程。講OO語言通用的一些概念+design parterns + 開發流程方法
12. functional programming
13. 計算機系統OS
14. 計算機網路
15. 硬體相關,邏輯電路什麼的還是要有了解
16. web前端
17。資料庫
18. 測試方法,商業軟體編程等題主自己也意識到了,其他答案也說了,根本原因是「軟體工程」和「計算機科學」並不是一回事。但更重要的是這種區別對於大多數遠離科研思維方式並日夜處在自己的工程環境里的程序員已經嚴重弱化了。
軟體工程是在給定的條件下解決給定的問題,在評估一個演算法或者編程語言的時候不但要考慮「計算機科學」所研究的理論層面,還要考慮需求因素,環境因素,工程因素,等等現實層面。需求因素比如客戶有某種特殊的要求違背了設計的內在一致性但又無法更改需求,環境因素比如使用語言和工具有某些限制,工程因素比如代碼除了要有效還要讓其他人可讀,等等。這些因素滲透在程序員的工作環境中,在他把自己的觀點寫到問題或者答案里的時候,這些因素很大程度都丟失了,有些是因為潛移默化他已經意識不到這是影響討論的要素,有些是他朝夕相處所以以為對其他討論者也不言自明。並不能說工程問題比科學問題難理解,但是工程問題的題設太長太複雜,加上前述的原因提問人可能意識不到,一個本來不會有太大爭議的「在項目需求是X1,X2,X3,環境因素是Y1,Y2,Y3,工程考慮是Z1,Z2,Z3的前提下,做W是用C++好還是C#好還是有其他選擇」的問題就被很不科學的簡化成了「做W是用C++好還是C#好」,然後在回答的過程中樓就歪成了「在統計意義上到底是C++還是C#能更好的解決(每個發言人腦子裡想的都不一樣但也沒說清楚的)問題W" 」。
這種情況絕不局限於計算機科學和軟體工程之間,但確實在此界泛濫,我覺得原因倒不是 @周子涵說的程序員喜歡輸出價值觀,而是和其他理論vs應用科學領域相比,搞理論的人數比例太小,搞應用的理論水平又不高造成的。舉個不太恰當的例子,就是一群幼教爭論算術好還是代數好。
同學,沒學過實變復變泛函三大分析吧計算機科學其實不是一門科學,別被這個名字誤導了,另外,它研究的問題甚至可以和計算機這種機械完全沒關係。。
還有,物理的概念難道又不混亂了?度規都還分為西海岸度規,東海岸度規,明明就是特么一個東西。
因為知乎上討論的計算機更偏向計算機工程,是工科。題主的視角是理科。
- 所謂工科指的是給定一個目標,不管你用什麼方法去日,能日出來就是好的。比如把真空光速變成10m/s。
- 理科指的是有一個既定的事實規律,你去把這個規律找出來。比如測量真空光速。
工科在造工具,就像鎚子和螺絲刀很難單純說哪個更好一樣,關鍵是什麼場合用什麼工具。這也解釋了為什麼計算機領域有這麼多工具。。對於題主問題描述中的疑問,lambda也不是萬靈藥。軟體工程裡面有句名言叫沒有銀彈(no silver bullet),說的就是沒有一種工具可以適應所有的場合。這一點不像物理對和錯那樣涇渭分明。
如果題主對計算機的理科感興趣,不妨看一下傳統的計算機科學(而不是編程這樣的工程),比如可計算理論(lambda演算/圖靈機的完備性,哥德爾不完備定理),機器學習中的學習理論(VC維)。對於工程方面則不必過分糾結找到一個哪個工具就一定更好的「客觀真理」。。
後來逐漸理解題主的意思。。題主是從流派很多這個觀察出發,有了一種CS(或者更明確的說Computer Engineering)界大家都很自傲,彼此看不起,不願意互相交流而是自立門戶的印象,然後覺得很不爽過來發了這個問題。我覺得這個觀察很對啊!我也有這樣的感覺!但想想會覺得這樣很。。好誒。比如前段時間node.js和io.js分家,或者debian和systemd的爭論。看不對眼就自立門戶干啰,是騾子是馬拉出來遛遛,看誰最後攢的用戶多。這樣很公平,是工科有效地解決爭端的方法,和物理學家做實驗看誰對誰錯也差不多。
============================原回答============================計算機不一樣,即便優秀的學會了本科,碩士的課程內容,你還是無法理解別人在討論C++,C#,Java,OC,乃至FP,Js, 圖形技術等特色技術時所用的那些名詞和討論
一切不問是不是就問為什麼的都是xxx。。一個基礎紮實的本科畢業生,親手做過操作系統,編譯器,用verilog寫過組成原理和cpu,不可能看編程(語言,範式,庫)方面的討論看不懂名詞。最多是看到沒用過的技術,但對裡面的直觀原理還是知曉的。至於圖形學,機器學習之類的確需要更多的領域知識。但我從個人經驗出發,認為碩士完全可以勝任了。不曉得題主的結論是從何得出的。
關於題主的問題本身,我的解釋是還不夠熟練。就像物理剛開始就看相對論也覺得難以理解一樣,熟能生巧,基礎(尤其是編譯原理)打紮實就容易理解了。而且計算機相比於物理容易學的地方在於它是人設計出來的,直來直去,模塊化明顯。不像自然界巧奪天工,進化過程中可能有很多不那麼美的部分(男人為什麼有乳頭,為何沒有大一統等等)你說的問題確實存在,但不是僅僅存在於計算機領域,而是存在於幾乎所有的工程領域。
很多問題其實是多樣性的問題,並不是混亂。這是為了解決大量複雜問題,應對各方面的需求而產生的。
拿一個比較容易理解的行業,食品行業類比吧。
1.食品外觀 VS 軟體UI
就算蛋糕都有成千上萬的造型,更加不要說中法意這些大吃國的菜式了。你覺得這叫多樣性還是混亂。難道只有所有的蛋糕都是四方的或者圓形的,都是黃色的或者白色的才叫合適么。這麼多造型無非是滿足用戶的各種需求,軟體UI同樣也是。
2.食材 VS 軟體語言
食材是個大問題,地球上幾乎所有天然有營養的東西幾乎都能入食材,好多沒營養的也入了
似乎沒必要統一必須吃大米吧,人家吃面的也挺高興的。要膚淺到什麼程度才會給大米和麵粉比個高低啊!
軟體語言也是。不管你用c++,c#,oc還是c,java,python,根本沒有高下之分。你需要根據不同的平台,項目特性和開發人員來定開發語言。對於軟體開發人員,幾乎都會多種語言,我常用的就有java,C++,C#,根據項目需要還用過delphi,C等等。python, linux shell之類的也常用。
當你在一個具體項目上有多種選擇的時候,建議兩個原則:1. 選開發效率高的(目前在很多平台上,開發效率比運行效率重要得多)。 2.選可用資源多的。(如可用的開源多,可用的代碼庫多的) 3.用熟悉的
只有最合適的語言,沒有最優雅的語言。
3.食品加工 VS 實現方法
用同樣的食材做同樣的食品,方法卻不同,結果也有差異。一個紅燒肉,一百個人有一百種做法。這樣合理么,應該統一么?
不同人有不同的廚藝,口味,廚具等等條件限制,做法不同很正常。而且五星大廚做的紅燒肉不一定比媽媽做的好吃喔!
兩個編程高手之間(注意不是菜鳥)常常對一個問題有不同處理方法,這個太正常了。有時候確實是有優劣之分的,這個要時間在證明, 差的方法會被時間淘汰掉。有時其實只是風格問題,無關好壞。如OO還是非OO, { 要不要換行
關鍵在於你自己怎麼選擇。如果你不是搞軟體理論的,不妨在不同的方法論中找個自己喜歡的多實踐一下,你會發現這個方法有很多的優點和缺點,當你熟悉了這個方法以後,不妨試試其他的方法,你會發現同樣也有許多的優缺點。 然後你就找個自己最喜歡的方法吧,不要糾結是否完美了。
沒有完美的編程方法,就像沒有完美的烹調技術一樣。
題主說的物理學爭議很多啊,只是非專業人員不知道而已。
聽說過的有:
上帝是否會擲骰子的問題( by 愛因斯坦),黑洞的模型等等。請物理系的補充。
計算機不一樣,即便優秀的學會了本科,碩士的課程內容……
我覺得題主對優秀的定義不太對。
有爭論和難以理解是兩個不同維度的概念好嗎?
而且很多時候當爭論發生在大量普通人之中時只能說明爭論的話題容易理解好嗎?
比如大陸民眾和台灣民眾可以就愛能不能發電爭論的非常激烈,但是讓他們來討論托馬克和仿星型哪個才是可控核聚變的未來,你覺得爭的起來嗎?哪個問題才是真的難以理解?
回到CS領域,哪個語言或者框架更好這樣的問題你真的覺得會比類似全同態加密的最新進展這種更難理解嗎?真正難的問題對於大部分熱心聖戰的人根本就看不懂好嗎?
而且很多時候人們爭論半天只是因為屁股的原因好嗎?如果評選最好的語言時不許提自己用的最多的2種語言,你看看還有多少人對這個爭論有興趣?
有些是挺難理解的,比如我正在啃的這個
Homotopy type theory
剛知道提出者Vladimir Voevodsky 02年得了菲爾茲獎..
這個問題本身也問得很難以理解。
我從沒覺得量子力學容易理解,前沿的還有各種沒有證實的理論。
而要說概念難以理解的話,哲學才是王者。理論的推導離不開知識和邏輯。是否具備充足的知識和可理解問題推演的邏輯思維,是理解計算機概念的基礎,也是學習更深入的理論的基礎。知識的積累需要大量的學習,邏輯思維的鍛煉則需要更多的經驗總結和潛移默化的訓練。通常,後者比前者更代表一個人的能力。
對於計算機的概念,不同計算機學科的基礎知識和邏輯體系是不同的,有的偏工程,有的偏數學,甚至像界面設計這樣的領域會偏向藝術。這些不同的邏輯和知識,統一到計算機技術的旗幟下,構成了五彩繽紛的計算機科學。
這樣才有趣嘛。
目前答案都弱爆了。
真正的原因是,每個事物都有自己的優缺點,並且都不簡單。縱觀世界,各行各業其實都如此。只是題主你不懂、不了解、不深入罷了。
說些簡單的,比如蛋炒飯,題主你吃過幾種?
再比如遊戲,題主你玩過幾類,每個類型你又玩過幾種?
不要抱怨世界的複雜性,正因它如此複雜,才能如此精彩,你的生命才得以如此絢麗多彩。工程問題各自有各自的解決方案很正常。
當程序員不把信仰帶入解決思路的時候,所有人都會這麼回答:
1. xxx和ooo哪個好系列:
各有各的使用場景。2. 寫xxx應該用什麼ooo系列
用你最熟悉(學起來最省力)的那個。3. xxx就是好系列
無法帶入使用場景的時候,只能說出特點,哪能說出優點來?4. python還有2.*和3.*呢。
5. 是不是工程問題比科學難理解?
不是,科學問題就算不比工程更難,至少也是不相伯仲。可是你舉例的科學問題是經過無數次分解之後,能夠給出單一解法的問題,為什麼舉例的工程問題連個使用場景都不給?-------
另外,有信仰的程序員從不討論,他們只會傳教。
推薦閱讀:
※如何處理網上個人信息泄露?
※初三畢業的學生,如何把有限的時間、極限的努力正確投入 IT 行業?
※大家對於 CSDN 等網站的用戶密碼泄漏事件怎麼看?
※OS X 10.10.3 使用自動代理配置 (Pac) 設置好後,Safari 無法上網,但是 Chrome 卻可以?