分享好文,中學生要學電腦嗎?
作者:創新工場CTO、人工智慧工程院執行院長 王詠剛
文章来自半轻人微信公众号(ban-qing-ren)
………………………………
朋友的孩子高中剛畢業,已拿到美國頂尖大學(非電腦專業)的錄取通知。疫情影響,不知何時才能去學校報到。孩子想抓緊學習一下程式設計,為大學打好基礎。這孩子找我聊了一個多小時,從如何學程式設計,聊到非電腦專業和電腦專業的路徑差異,又聊到如何從不同角度認識電腦與程式設計。聊得比較寬泛,不知是否對這孩子有用。
回想我自己的高中時代:那時雖迷戀程式設計,卻完全沒有懂行的人指導。在我們那個四線城市的廠礦中學裡,開設電腦興趣課的老師知道的資訊還沒我多。我高一時跑到北京中關村逛街,卻完全沒意識到中國第一代頂尖程式師當時就在我身邊的低矮辦公樓裡寫代碼(這話說得並不準確,比如求伯君那年就主要是在珠海做開發),鼎鼎大名的UCDOS、WPS、CCED就出自他們之手……我在當時街邊的一家書店(位置似乎就在今天的鼎好大廈對面)買到了許多種印刷品質極低劣的電腦圖書。用今天的標準看,那就是一批盜版影印或未授權翻譯的國外圖書。可那批書竟成了我高中時代最寶貴的程式設計知識來源。
顯然,我在高中時根本就是野路子學電腦。現在後悔也沒用,當時我的眼界或能觸及的資源就那麼多。如果能穿越回30年前,我該對喜歡程式設計的自己說些什麼呢?這些年,我與世界上最好的一批程式師合作過,也參與過世界上最有價值的軟體系統研發——我所積累的一些粗淺經驗裡,有哪些可以分享給一個愛程式設計的中學生?
【問題1】中學生要不要學電腦?
當然要!
每個中學生都要學。只不過——建議大部分中學生使用“休閒模式”,小部分(不超過10%)中學生使用“探險模式”。
啊?兩個模式?那我該進入哪個模式?⟹請跳轉至【問題2】
【問題2】選哪個模式?
你癡迷電腦嗎?比如,你玩遊戲時會特別想知道這遊戲背後的代碼是如何編寫的嗎?再比如,就算老師家長不同意你學電腦,甚至當著你的面把電腦砸了,你也要堅持學電腦嗎?如果是,恭喜你進入“探險模式”⟹請跳轉至【問題200】
你對數學有興趣嗎?比如,你看到街邊建築的曲線,就會在腦子裡琢磨曲線對應的函數或方程嗎?每當手裡攥著幾粒骰子,你就會不由自主地計算概率嗎?如果是,歡迎進入“探險模式”⟹請跳轉至【問題200】;當然,如果有些猶豫,也可以先進入“休閒模式”⟹請跳轉至【問題100】
即便你對電腦和數學興趣不大,家長、老師還是強烈建議你學電腦嗎?就算你一百個沒時間一千個不願意,家長、老師還是會逼著你學電腦嗎?如果是,建議你主動進入“休閒模式”並向家長、老師彙報說“我已經按照前谷歌資深軟體工程師的專業建議在認真學程式設計了”⟹請跳轉至【問題100】
其他情況,一律進入“休閒模式”。⟹請跳轉至【問題100】
【問題100】休閒模式 | 主要學什麼?
“休閒模式”將電腦視為我們生活、工作中的必備工具,主要學習如何聰明、高效、優雅地使用計算設備。這裡說的計算設備,包括所有形式的電腦、手機、遊戲機、智慧家電以及未來一定會進入生活的自動駕駛汽車。
什麼什麼?你已經會用電腦、會玩手機、會打遊戲了?別著急,慢慢往下看。
【問題101】休閒模式 | 我會用搜尋引擎嗎?
我知道你會用百度搜習題答案。但,習題答案不是知識。你會用搜尋引擎來搜索和梳理知識嗎?請試著用電腦和你喜歡的搜尋引擎來解決如下兩個問題:
(1)圓周率𝜋的計算方法有多少種?每種不同的計算方法分別是由什麼人在什麼時代提出的?借助電腦,今天人們可以將圓周率𝜋計算到小數點後多少位?將圓周率𝜋計算到小數點這麼多位元,一次大概需要花掉多少度電?
(2)全球大約有多少個廁所?在發展程度不同的國家,分別有多少比例的人可以享用安裝了抽水馬桶的衛生廁所?為什麼比爾·蓋茨曾大力推動一個設計新型馬桶的研發專案?比爾·蓋茨的公益組織在這個專案上大約花費了多少資金,最終收到了多大的效果?
如果你沒法快速得到上述問題的全部答案,那就給自己設一個小目標:一個月內,學會用搜尋引擎系統地獲取、梳理一組知識點的全部技巧。
【問題102】休閒模式 | 接下來學什麼?
建議學好典型的工具軟體。比如,我知道你會用Office了,但用Office和用Office是很不一樣的。對生活、學習、工作來說,學好、學透一個工具軟體比鑽研程式設計技巧更實用。
你會用Excel來管理班級公益基金的預算和實際收支情況嗎?
你會用Excel做出過去20年裡全球大學排名的演變趨勢圖嗎?
你會用Word排版一篇中學生論文嗎?論文中的圖表和最後的參考文獻部分該如何排版?
你會用Word編排一份班級刊物,包含封面、扉頁、目錄、插圖頁、附錄、封底等部分,可以在列印後直接裝訂成冊嗎?
PowerPoint呢?你有沒有研究過蘋果公司發佈會上那些幻燈片的設計?當約伯斯(多年以前)或蒂姆·庫克站在幻燈片前的時候,他們的演講思路是如何與幻燈片完美結合的?
還有哦,別忘了學學如何為數碼照片做後期,如何用電腦或手機剪視頻,如何為剪輯好的視頻配字幕,如何將照片、音樂、視頻等素材結合起來,做出一段吸引人的快手/抖音短視頻。
最後,抽空玩玩那些設計精妙的遊戲吧,比如《紀念碑穀》、《塞爾達傳說:曠野之息》之類;同時,遠離那些滿屏廣告,或者一心騙你在遊戲裡充值花錢的垃圾。
【問題103】休閒模式 | 不學學知識嗎?
當然要學知識。下面每種實用的電腦知識都夠大家學一陣子了。
(1)色彩知識:你知道同一張數碼照片在不同品牌的手機螢幕上、不同的電腦螢幕上、不同的智慧電視上顯示時,為什麼經常有較大色差嗎?你知道有一些色彩只適合螢幕顯示,不適合列印輸出嗎?你知道軟體工具裡常用的RGB、HSL之類的色彩空間都是什麼意思嗎?如何在設計PowerPoint幻燈片時選擇一組和諧美觀的色彩?
(2)字體知識:你知道什麼是襯線字體,什麼是無襯線字體嗎?你知道網頁中常用的英文字體都有哪些嗎?你知道商務演講時最適用于幻燈片的英文字體有哪些嗎?你知道電腦和手機常用的黑體、宋體、仿宋體、楷體等中文字體分別適合哪些實際應用場合嗎?你會將不同字體混排成一個美觀的頁面嗎?
(3)網路知識:你知道5G是什麼嗎?你知道5G和4G在通信頻寬、通信距離上的具體區別嗎?你知道什麼是路由器,什麼是防火牆嗎?你知道如何配置路由器,如何配置防火牆嗎?微信或QQ聊天時,對方發的文字、語音或視頻是如何傳送到你的手機上的?
(4)應用知識:淘寶中搜索得到的商品資訊是從哪裡來的?商品是按什麼方式排序的?為什麼購物APP經常會推薦給你一些曾經買過、看過的商品?你知道如何為自己建立個人網站嗎?你知道如何管理微信公眾號嗎?
(5)安全知識:你知道網路上的釣魚攻擊是怎麼回事兒嗎?你知道什麼是電腦漏洞嗎?你知道駭客為什麼想把一大批受攻擊的電腦變成可以遠端操控的傀儡機嗎?你知道為什麼現在很多手機APP都要通過短信發送驗證碼嗎?如果驗證碼被壞人截獲,你會面臨哪些風險?
這裡只是舉例。實用的電腦知識還有很多。大家可以自己發掘。
【問題104】休閒模式 | 我需要學程式設計嗎?
可以學,但不是必須。即便學,也只需要根據自己的需要,學那些最能幫你解決現實問題的部分。
【問題105】休閒模式 | 我該學什麼程式設計語言?
在“休閒模式”裡,電腦就是工具,程式設計也是工具,夠用就好。學什麼程式設計語言,完全看你想要電腦幫你做什麼。
• 如果你想對資料處理有更多自主權,那不妨學學Python;
• 如果你想做簡單的交互演示程式,那就先把JavaScript學起來;
• 如果你想更好、更快地寫論文,那不妨學學LaTeX(什麼什麼,LaTeX不是程式設計語言?你太小看LaTeX了);
• 如果你想學做簡單的手機APP,那麼,Android手機就學Java,蘋果手機就學Swift好了;
• 如果你只想知道程式設計是怎麼回事,那……從Python或JavaScript開始就行。其實,跟五六歲的小朋友一起學學Scratch圖形程式設計也不錯。
【問題106】休閒模式 | 我需要學人工智慧嗎?
在“休閒模式”裡,最需要學的不是“人工智慧的實現原理”,而是“什麼是人工智慧”,以及“人工智慧能做什麼,不能做什麼”。
• 在手機上試一試,人工智慧做語音辨識時能做到什麼水準?哪些話容易識別,哪些話不容易識別?
• 打開機器翻譯軟體,試一試哪些資訊翻譯得好,哪些資訊翻譯得不好?
• 手機上的拍照軟體一般都有人臉識別功能。試一試人臉識別在什麼場景下做得好,什麼場景下做得不好?
• 找一部講人工智慧的科幻電影,用自己的判斷解讀一下,電影裡哪些技術有可能成為現實,哪些技術存在邏輯矛盾。
【問題107】休閒模式 | 推薦什麼參考書、參考文獻?
書不重要,豆瓣評分7分以上的電腦應用、程式設計甚至科普類圖書都可以拿來翻翻。
直接在知乎裡搜索你想瞭解或學習的知識點可能更有效率。
如果你意猶未盡,覺得自己剛活動開筋骨,還想挑戰更高層次,歡迎進入“探險模式”。⟹請跳轉至【問題200】
否則,“休閒模式”到此結束。⟹請離開此問答
【問題200】探險模式 | 主要學什麼?
“探險模式”需要有挑戰精神。電腦科學的世界技術演進快,脈絡複雜,要想在探索時不迷路,你得通過有順序、有系統地學習電腦知識,慢慢構建出一張可以在未來幫你走得更遠的思維地圖來。
在“探險模式”裡,電腦就不止是一件能快速計算的工具了。電腦更像是我們大腦的一種延伸。這既包括認知能力的延伸,也包括認知邏輯的延伸。隨著學習深入,大家會逐漸體會到電腦所具有的多維度能力:
電腦是一種可以表示不同類型資訊(數、符號、文字、語音、圖像、視頻、虛擬空間、抽象邏輯)的“資訊管理機”;
同時,電腦也是一種可以連續執行指令以完成特定的資訊處理任務的“指令處理機”;
同時,電腦還是一種可以在知識與邏輯層面完成特定推理任務的“知識推理機”;
同時,電腦也是一種可以從人類給定的資料或自我生成的資料中總結規律,建立模型,自主完成某些決策的“智慧學習機”。
“探險模式”的目標就是盡可能準確地認識電腦,掌握有關電腦運行的最基本規律。有了這些基礎。未來在大學期間或工作中,你就能更容易地設計電腦軟硬體系統,或是設計出碳基大腦(人類)與矽基大腦(機器智慧)之間的最佳協作方案。
【問題201】探險模式 | 我的英語水準足夠嗎?
蘋果每年秋季的新品發佈會,不加字幕的話,你能聽懂多少?
能聽懂大部分:建議在學習電腦的過程中,盡可能使用英文教材、英文文檔。
能聽懂小部分:建議將原來準備學電腦的時間,分出一部分來學英語。
只能聽懂“你好”“再見”之類:⟹請離開此問答。然後,把原來準備學電腦的時間用於學英語,六個月後再回來。
【問題202】探險模式 | 我的數學水準足夠嗎?
如果你是數學和數學應用小能手——較複雜的數學問題總能快速找到核心思路,或快速簡化為簡單問題;很容易就能將抽象概念映射到具體的數學圖形,或將數學問題與相應的現實問題關聯在一起:請繼續探險之旅。
如果你應付正常數學課程感到吃力:建議將原來準備學電腦的時間,分出一部分來學數學。
如果你還搞不清楚什麼是方程、函數、集合、概率……:⟹請離開此問答。然後,把原來準備學電腦的時間用於學數學,六個月後再回來。
【問題203】探險模式 | 為什麼強調英語和數學?
(1)統計上說,最好的電腦參考資料大都是英文寫的,最好的電腦課程大都是用英文講的,最新的電腦論文大都是用英文發表的。
(2)函數、方程、坐標系、標量、向量、排列組合、概率這些中學數學裡會初步學習到的數學知識,是電腦科學的基礎。
【問題204】探險模式 | 電腦知識那麼多,正確的學習順序是什麼?
最重要的順序有兩個。建議先從順序一開始,學有餘力時兼顧兩個順序。
順序一:自底向上,即,自底層原理向上層應用拓展的順序。
電腦原理的基礎知識:
為什麼每台電腦(包括手機)都有CPU、記憶體和外部設備?
(馮·諾依曼體系結構的)記憶體中為什麼既可以存儲資料,也可以存儲指令?
CPU是如何完成一次加法運算的?
程式設計語言的基礎知識:
資料類型,值,變數,作用域……
語句,流程控制語句……
過程、方法或函數,類,模組,程式,服務……
編譯系統的基本概念:
電腦程式是如何被解釋或編譯成目標代碼的?
演算法和資料結構的基礎知識:
陣列,向量,鏈表,堆,棧,二叉樹,樹和圖……
遞迴演算法,排序演算法,二叉樹搜索演算法,圖搜索演算法……
應用層的基礎知識:
為什麼電腦需要作業系統?設備驅動程式是做什麼的?
網路通信的基本原理是什麼?流覽器是怎麼找到並顯示一個網頁的?
資料庫是做什麼用的?
虛擬機器是怎麼回事?
人工智慧系統的基礎知識:
先熟悉些線性代數、概率和數學優化的基礎知識。
什麼是機器學習?從簡單的線性回歸中體會機器學習的基本概念、基本思路。
什麼是神經網路?什麼是深度神經網路?為什麼神經網路可以完成機器學習任務?
如何使用PyTorch或TensorFlow實現簡單的深度學習功能?
順序二:自頂向下,即,自頂層抽象邏輯向下層具體邏輯拓展的順序。
• 電腦的本質是什麼?
• 什麼是圖靈機?什麼是通用圖靈機?
• 什麼是讀取﹣求值﹣輸出迴圈(Read–eval–print Loop,REPL)?
如何用自頂向下的方式理解(解析、解釋、編譯)一段程式碼?
• 靜態語言和動態語言的區別?
如何理解變數與資料類型之間的綁定關係?
• 什麼是函數式程式設計?
程式設計語言中,函數的本質是什麼?
函數為什麼可以像一個值一樣被表示、存儲、傳遞和處理?
• 什麼是物件導向?
類的本質是什麼?
如何用物件導向的方式定義個功能介面?
如何依據介面實現具體功能?
• 什麼是事件驅動?
什麼是事件?事件如何分發到接收者?
如何在事件驅動的環境中理解代碼的狀態和執行順序?
【問題205】探險模式 | 如何提高程式設計水準?
在掌握基本知識體系的基礎上,學好程式設計只有一條路:多程式設計,多參加程式設計比賽,多做程式設計題,多做實驗項目,多找實習機會——其中,能參與真實專案是最有價值的。
【問題206】探險模式 | 該從哪一門程式設計語言學起?
我個人推薦的程式設計入門語言(可根據情況任選):
Python
Java
Swift
C#
JavaScript / TypeScript
Ruby
……
可能不適合入門,但適合後續深入學習的語言:
C
C++
Go
Objective-C
組合語言
機器語言(CPU指令集)
Shell Script
Lua
Haskell
OCaml
R
Julia
Erlang
MATLAB
……
【問題207】探險模式 | 如何選參考書和參考資料?
(1)強烈推薦的參考書和參考資料:
• MIT、Stanford、CMU、UC Berkeley這四所大學中任何一個電腦專業方向使用的教學參考書或參考資料。網上可以查到這些學校電腦專業方向的課程體系,有的學校甚至公開了課程視頻。其中往往會列舉參考書和參考資料連結。
• 維琪百科(英文)上的數學、電腦科學相關條目。
• Github上star數在1000以上的開原始程式碼和開來源文件。
(2)強烈推薦但須小心辨別的參考資料:
知乎上的數學、電腦科學相關條目。使用時需要格外注意三件事:
儘量只看高贊答案或高贊文章;
辨別並避開廣告軟文;
辨別並避開純抖機靈的故事或段子。
Stack Overflow上的程式設計問題解答:
自己動手實驗,辨別解答是否有效。
CSDN上的程式設計問題解答:
自己動手實驗,辨別解答是否有效。
(3)其他推薦的參考書和參考資料:
國內專業作者寫作的專業技術書籍(豆瓣評分7分以上的)。
大廠(Google、Facebook、Microsoft、Amazon、阿裡、騰訊、百度、頭條等)資深工程師的技術公號、專欄、博客等。
著名圖書系列:如O’Reilly的動物封面的系列圖書(請注意最新版本和時效性)。
國內翻譯的著名技術圖書(譯本在豆瓣評分7分以上的)。
(4)儘量避免的參考書和參考資料:
• 已經過時的圖書或參考資料。
• 作者或譯者人數比章節數還多的專業圖書。
• 百度百科上的數學或電腦科學相關資料。
什麼什麼?你這篇問答居然沒有推薦一本具體的圖書?是,沒錯。如果你覺得即便有了上面的線索,自己還是找不到好書好資料,那也許你還是適合“休閒模式”⟹請跳轉至【問題100】
同時也有1部Youtube影片,追蹤數超過1,580的網紅光引擎,也在其Youtube影片中提到,光引擎樂團 http://www.facebook.com/LightEngineBand 首張迷你專輯 My Journey‧旅程 收錄歌曲 Q.E.D.:quod erat demonstrandum 故得證之意,宣示定理真實性的建立。 這是一首歌頌知識與真理的歌曲。 步入社會後,就會開始懷念...
「圓周率計算程式」的推薦目錄:
- 關於圓周率計算程式 在 李開復 Kai-Fu Lee Facebook 的最佳解答
- 關於圓周率計算程式 在 余海峯 David . 物理喵 phycat Facebook 的最讚貼文
- 關於圓周率計算程式 在 台灣夯創業 Facebook 的精選貼文
- 關於圓周率計算程式 在 光引擎 Youtube 的最佳貼文
- 關於圓周率計算程式 在 [心得] 計算π到小數點下十億位─ 超進化版- 看板Python 的評價
- 關於圓周率計算程式 在 自己算圓周率吧~提供範例程式打開電腦直接算使用 ... - YouTube 的評價
- 關於圓周率計算程式 在 #14 Java程式設計新手教學- 圓周率計算(THE END) - YouTube 的評價
圓周率計算程式 在 余海峯 David . 物理喵 phycat Facebook 的最讚貼文
【推舊文】方程是永恆:愛因斯坦
今日係圓周率日、白色情人節,同時亦係愛因斯坦生日。
注:感謝讀者Ka Wa Tsang 指正,狹義相對論可以用於非慣性參考系。我曾在另一文章談及這錯誤,但忘了修改此文。在非慣性參考系使用狹義相對論的結果,是會出現不存在的「偽力」,情況如同離心力一樣。
//1879年,愛因斯坦出生於德國南部小鎮烏姆(Ulm)。1880年,他隨家人搬到慕尼黑(München)。與一般印象相反,愛因斯坦小時候因為鮮少說出完整句子,父母曾以為他有學習障礙。
愛因斯坦在慕尼讀中學。他非常討厭德國學校著重背誦的教育方式,課堂上總自己思考問題,不專注聽課,所以經常被老師趕出班房。1894年,愛因斯坦15歲,他父親赫爾曼・愛因斯坦(Hermann Einstein,1847-1902)在慕尼黑的工廠破產,迫使舉家遷往意大利帕維亞(Pavia),留下愛因斯坦在慕尼黑完成中學課程。同年12月,愛因斯坦以精神健康理由讓學校準許他離開,前往帕維亞會合家人。
這次出走改變了愛因斯坦的一生,甚至可說改變了人類文明的科學發展。
愛因斯坦不懂意大利語,不能在帕維亞上學。他早有準備,前往瑞士德語區蘇黎世(Zürich)投考蘇黎世聯邦理工學院(Eidgenössische Technische Hochschule Zürich,通常簡稱ETH Zürich)。結果愛因斯坦數學和物理學都考得優異成績,但其他科目如文學、動物學、政治和法語等等卻全部不合格。
蘇黎世聯邦理工學院給予愛因斯坦一次機會,著他到附近小鎮阿勞(Aarau)去完成中學課程,明年再考。在這段期間,愛因斯坦暫住在斯特・溫特勒教授(Jost Winteler,1846-1929)家中。愛因斯坦很喜歡開明、自由的溫特勒教授一家,利用這一年溫習各科目,更與溫特勒的女兒瑪麗・溫特勒(Marie Winteler,1877-不詳)相戀。
瑞士的教育方式與德國的不相同,並不強調背誦。瑞士學校老師非常鼓勵學生發表意見,不會以權威自居,這一點與討厭權威的愛因斯坦非常合得來。愛因斯坦曾於寄給溫特勒的信中寫道:「對權威不經思索的尊重,是真理的最大敵人。」[1]他稱自己為世界主義者,不喜歡德國日漸升溫的國家主義。溫特勒教授就幫助愛因斯坦放棄德國國籍,愛因斯坦因而成為了無國籍人士,他很喜歡這個「世界公民」身份。
一年後,愛因斯坦再次投考蘇黎世理工學院。物理、數學當然成績優異,其他科目亦合格,愛因斯坦順利被取錄入讀物理學系。然而,他父親卻期望他進入工程學系,將來繼續家族工廠,因此他們大吵了一場。
愛因斯坦大學時繼續他我行我素的性格,經常逃課去上其他科目的課堂,所以都要他的同學們幫他抄筆記,他才知道考試範圍。加上愛因斯坦以刺激權威為樂,教授們都不喜歡這個又煩又懶的學生,不願意幫他寫好的推薦信,所以他畢業後一直找不到工作。
在學時,愛因斯坦與物理系唯一一個女同學米列娃・馬利奇(Mileva Marić,1875-1948)相戀。根據膠囊資料顯示,愛因斯坦與米列娃的書信中曾提到他們有個女兒叫麗瑟爾。不過後來他們就再沒提到她,歷史學家估計麗瑟爾出生不久就死於猩紅熱。愛因斯坦與米列娃在1903年結婚,之後他們生了兩個兒子——大子漢斯和二子愛德華。他們最終在1914年分居,1919年離婚。
愛因斯坦於1900年畢業,取得了教學文憑。可是,由於教授們都不喜歡愛因斯坦,他申請大學職位的申請信全都石沉大海。愛因斯坦非常沮喪,以致他父親於1901年寫信給威廉・奧斯特瓦爾德教授(Wilhelm Ostwald,1853-1932,1909年諾貝爾化學獎得主)請求他聘請愛因斯坦當助手,或者至少寫給愛因斯坦鼓勵說話。當愛因斯坦快要連奶粉錢也不夠的時候,他大學時的舊同學格羅斯曼・馬塞爾(Grossmann Marcell,1878-1936)[2]的岳父以人事關係幫他在瑞士專利局找到了一份二級專利員的工作,愛因斯坦才度過難關。
愛因斯坦喜歡在早上就把所有工作做完,利用整個下午在辦公桌上思考物理問題。一個從學生時代就已令他著迷的問題就是:如果他能夠跑得和光一樣快,會看到什麼?
詹士・馬克士威(James Clerk Maxwell,1831-1879)的電磁學方程組說明光線就是電磁場的波動,而電磁波亦已被亨里希・赫茲(Heinrich Hertz, 1857-1894)的無線電實驗證明存在。科學家認為,既然光是波動,就跟所有其他波動一樣需要傳播媒介:聲波需要粒子、水波需要水份子,而光需要「以太」才能在宇宙直空中傳播。
愛因斯坦於1905年發表狹義相對論。在這之前牛頓的絕對時空觀早已令科學界困擾多年。著名的邁克遜—莫雷實驗結果與牛頓力學速度相加法則相違背[3]。無論地球公轉到軌道的哪個位置,無論實驗儀器轉向哪個方向,光線都相對以太以同樣秒速30萬公里前進,分毫不差。這就好像下雨時無論向哪個方向跑,雨點總是垂直落在我們的頭頂。難道雨點知道我們跑步方向,故意調整落下角度嗎?
光速不變概念非常革命性。因為光速不變,在我們眼中同時發生的兩件事,其他人看起來卻不一定同時。時間與空間有微妙關係,兩者結合在一起成為時空。當年大部分科學家都認為問題必然出在馬克士威電磁方程式,但愛因斯坦卻不這麼想。他認為,我們常識中對「同時」的理解根本有誤。不過,愛因斯坦並非以力學切入這個問題,而是思考一個著名的電磁現象:法拉第電磁感生效應。
法拉第電磁感應定律指出,移動的帶電粒子會同時產生電場與磁場,靜止的帶電粒子則只會產生電場,沒有磁場。但相對論說宇宙並沒有絕對空間,速度只有相對才有意義。而物理現象必須是唯一的,所以我們就有個問題:究竟有沒有磁場存在?把電磁鐵穿過線圈,我們可以做以下三個實驗:
(一)固定電磁鐵,移動線圈;
(二)固定線圈,移動電磁鐵;
(三)固定線圈及電磁鐵,改變磁場強度。
實驗結果:三個實驗之中都有電流通過線圈,而且數值完全一樣!
我們可以從實驗結果得出甚麼結論?基於完全不同的物理過程,實驗(一)與實驗(二)和(三)得到相同的電流。實驗(一)產生電流的是磁場,而實驗(二)和(三)產生電流的卻是改變的磁場所感生的電場。嚴格來說,實驗(一)的結果並非法拉第定律,因為法拉第定律所指的是磁場感生電場。正是這區別令愛因斯坦得到靈感,他在論文中說這個現象顯示無論是電動力學與力學,根本不存在絕對靜止這回事。
愛因斯坦預期相對論會在科學界引起廣泛討論,結果卻是異常安靜。愛因斯坦突然拋棄了物理「常識」,此舉令科學界摸不著頭腦。馬克斯・普朗克(Max Karl Ernst Ludwig Planck,1858-1947,1918 年諾貝爾物理奬得主)可能是唯一一個明白相對論重要性的人,他讀到論文後寫過信去問愛因斯坦解釋清楚一些理論細節,更派馬克斯・馮勞厄(Max von Laue,1879-1960,1914 年諾貝爾物理奬得主)去拜訪愛因斯坦。馮勞厄發現愛因斯坦竟然不是大學教授,而是瑞士專利局裡的小職員。回家路上,愛因斯坦送給馮勞厄一支雪茄,馮勞厄嫌品質太差,趁愛因斯坦不為意從橋上把雪茄丟了下去。
愛因斯坦導出那舉世聞名的質能關係方程式E=mc2,解釋了放射性同位素輻射能量來源和太陽能量來源。不過愛因斯坦後來在1921年獲頒的諾貝爾物理學獎並非因為相對論,而是因為他應用普朗克的量子論解釋了光電效應。
愛因斯坦並沒有滿足於狹義相對論。狹義相對論只適用於慣性坐標系,可是宇宙裡絕大部份坐標系都是非慣性的,例如地球就是個加速中的坐標系。愛因斯坦知道必須找出一個新理論去解釋加速坐標系中的運動定律。他幾乎是獨力地與新發展的數學分支「張量分析」在黑暗之中搏鬥了十年之久,最後才於1915年11月完成廣義相對論。我們已經觀賞過的宇宙大爆炸,都遵守廣義相對論的方程式。
愛因斯坦尋找正確的廣義相對論公式期間,米列娃與愛因斯坦的關已經變得非常惡劣,而且愛因斯坦的母親非常不喜歡他倆的婚姻,米列娃她就在1914年帶著兩個孩子離開他們的家柏林,到瑞士去了。與孩子分離使愛因斯坦非常傷心,因為他堅持留在德國做研究。不過,他與後來第二任妻子、表妹愛爾莎・愛因斯坦(Elsa Einstein,1876-1936)[4]的曖昧關係已經一發不可收拾。
我們穿越時間來到了1915年11月底,愛因斯坦就快發現能夠描述整個宇宙的新理論了。狹義相對論裡時空是平的,並且所有慣性坐標系都是等價的。廣義相對論描述的是更廣泛的彎曲時空,它能描述所有坐標系。只要指定一套時空度規、給定能量與物質密度分佈,就能夠計算出時空曲率如何隨時間改變。相對論大師約翰・惠勒(John Archibald Wheeler,1911-2008)曾說:「時空告訴物質如何運動;物質告訴時空如何彎曲。」[5]
狹義相對論改正了以往區分時間與空間的常識,而廣義相對論則把萬有引力描述成時空曲率,連光線也會被重力場彎曲,再次顛覆了常識。我們只需要把一組十式的愛因斯坦場方程式配合相應時空度規,任何宇宙的過去與未來都能夠計算出來。
當然很多人質疑廣義相對論的正確性,因為科學理論必須接受實驗驗證。終於在1919年,英國天文學家亞瑟・愛丁頓(Sir Arthur Stanley Eddington, 1882-1944)來到西非畿內亞灣普林要比島(Principe)以日全食觀測結果驗證了廣義相對論。1919年5月29日早晨,下著傾盆大雨。幸好到了下午1時30分雨停了,不過還有雲。愛丁頓努力拍攝了許多照片,希望能夠拍到太陽附近的星光偏折。最後結果出來了:在拍得的照片中,有一張與愛因斯坦的預測數值吻合。其實在科學裡,一個證據並不足以支持一個理論,但愛丁頓是個廣義相對論狂熱擁護者,他立即對外公佈廣義相對論已經被證實了。
廣義相對論場方程式顯示,宇宙若不是正在收縮就是正在膨脹。我們已經知道,當年愛因斯坦認為宇宙永遠存在,因此他在場方程式裡加入了宇宙常數,用來抵消重力,使宇宙變得平衡,不會擴張也不會收縮。但這樣的宇宙極不穩定,只要非常細微的擾動,宇宙就會膨脹或收縮。就好像把一個保齡球放在筆尖上,理論上保齡球可以停在筆尖上,但只要一點點風就能使保齡球滾下來。
不過,這個常被人說成是愛因斯坦一生最大錯誤的宇宙常數,其實的確存在。錯有錯著,歷史再次證明愛因斯坦正確,儘管這並非愛因斯坦的原意。1929年,愛德溫・哈勃(Edwin Hubble,1889-1953)發現星系正在遠離地球,而且越遙遠的星系後退的速度就越快。這只能有兩個解釋:要麼地球是宇宙的中心、要麼宇宙正在膨脹。當愛因斯坦知道哈勃的發現後,他後悔在廣義相對論方程式裡加入了人為的宇宙常數[6]。
今天,科學家已經發現宇宙不單正在膨脹,而且膨脹正在加速。暗能量、或者宇宙常數,因而在上世紀末重新復活。一個正在加速膨脹的宇宙,比一個靜止的宇宙需要更巨大的宇宙常數。而且事實上,即使有宇宙常數,宇宙亦不可能靜止。
愛因斯坦在第二次世界大戰時,因為擔心納粹德國會製造出原子彈,所以他曾寫信致羅斯福總統要求美國搶先研究製造原子彈。到戰後才發現,當時的德國根本無法造出原子彈,因為大多數的科學家已經被希特拉趕走了。那天早上,當愛因斯坦聽到原子彈已經把日本廣島夷為平地,他就呆坐在家,久久未能平復心情。從此以後,愛因斯坦極力主張廢除核武,導致他被50年代著名的FBI胡佛探長(John Edgar Hoover,1895-1972)認為他是共產黨間諜。理所當然,胡佛始終無法找到任何證據捉拿愛因斯坦。
愛因斯坦因以普朗克的光量子概念解釋了光電效應而獲得1921年諾貝爾物理獎。光電效應論文證明了光同時是波動和粒子,稱為光的波粒二象性,是量子力學的基本原理。不過,儘管量子力學和廣義相對論的所有預測都未曾出錯,兩者卻互不相容。現在的科學家十分清楚:要不是量子力學是錯的、或廣義相對論是錯的、或兩者都是錯的。
愛因斯坦於1923年7月11號在瑞典哥德堡舉行的Nordic Assembly of Naturalists會講上講了他的諾貝爾獎講座。雖然他得到的是1921年諾貝爾獎,可是因為諾貝爾奬委員會認為在1921年的提名名單中沒有人能夠得獎,跟據規則該年度之獎項順延至下一年頒發,所以愛因斯坦實際於1922年得到1921年的諾貝爾獎。而由於在1922年諾貝爾獎頒獎典禮舉行時愛因斯坦正在遠東旅行,直到1923年愛因斯坦才在哥德堡講出他的諾貝爾奬講座。順帶一提,愛因斯坦獲頒諾貝爾獎不久之前,他正在香港。
愛因斯坦雖然有份為量子力學打下基礎,後來卻變得不相信量子力學,例如他與兩個物理學家共同提出的愛因斯坦—波多爾斯基—羅森悖論[7]就是為了推翻量子力學的。可是,科學家後來發現愛因斯坦—波多爾斯基—羅森悖論的假設「局域性」是錯的。廣義相對論認為宇宙是「局域」的,只有無限接近的兩個點才能有因果關係,因此推翻了牛頓重力理論中的「超距作用」。但量子力學卻說,兩個相距非常遠的粒子也能夠互相影響,因此量子力學與廣義相對論的假設是不相容的。
愛因斯坦一生都在尋找量子力學的錯處,結果是一個都找不到。他晚年一直在研究統一場論,希望統一電磁力和重力。不過,在他死前,人類並不知道除電磁力和重力以外還有強核力和弱核力。所以愛因斯坦根本沒有足夠的資訊去進行統一場論的研究,歷史注定要他失敗。
愛因斯坦一生對金錢、物質、名譽等不感興趣,他喜愛的東西大概可說只有物理和女人。他希望找出大自然的終極奧秘,並以優美、永恆不變的數學方程式表達出來。愛因斯坦覺得「政治只是一時,方程式卻是永恆。」[8]愛因斯坦聲稱自己並不擅長政治,但他在一生中卻經常對種族平等、世界和平等政治大議題作公開演講。因此他也引來許多人對他的政治立場表達不滿。
當以色列的第一任總統哈伊姆・魏茲曼(Chaim Azriel Weizmann,1874-1952)於1952年逝世時,以色列官方曾邀請愛因斯坦擔任第二任總統。最後,愛因斯坦寫了一封回信感謝並婉拒。
1955年4月18號,愛因斯坦在撰寫祝賀以色列建國七週年的講稿中途逝世。他生前堅拒以人工方法勉強延長生命,他說:「當我想要離去的時候請讓我離去,一味地延長生命是毫無意義的。我已經完成了我該做的。現在是該離去的時候了,我要優雅地離去。」//
圓周率計算程式 在 台灣夯創業 Facebook 的精選貼文
😲#用文言文coding你見過嗎
IEEE Spectrum 雜誌最新期報導中國籍美國留學生 Lingdong Huang 研發的程式語言,一系列需使用的代碼由最常用及常見的英文變成文言文,內容也按照中國古時數學書編輯,包括三國時代數學家劉徽計算圓周率的方法及易經算命等不同演算法,加入中國歷史元素
➡更多創業課程:http://bit.ly/2YK8YUS
➡商辦、空間就找 CLBC:https://clbc.tw/
圓周率計算程式 在 光引擎 Youtube 的最佳貼文
光引擎樂團 http://www.facebook.com/LightEngineBand
首張迷你專輯 My Journey‧旅程 收錄歌曲
Q.E.D.:quod erat demonstrandum 故得證之意,宣示定理真實性的建立。
這是一首歌頌知識與真理的歌曲。
步入社會後,就會開始懷念起學生時代單純的美好。在純粹知識的世界裡,一切如此分明。長大後的世界,是非界線變得模糊,令人不知所措。儘管如此,我們依舊努力用著自己的方式,追尋著那個,絕對純粹的世界。
3.1415927
16384次艱辛*
追尋與真理最近距離
轉角遇見費布納西**
鸚鵡螺的曲線曼妙美麗
樹葉一片片排列整齊
* 古代數學家用正多邊形的面積來逼近圓面積,原理簡單,但計算時要不斷開平方,過程非常繁複。南北朝的祖沖之算到16384邊,而得知圓周率介於3.1415926與3.1415927之間。
** 費布納西(Fibonacci)數列:1,1,2,3,5,8,13,21,34,55... 費布納西於西元1202年提出,在葉序問題、最佳化理論、結晶結構等領域都有直接應用。
畢達哥拉斯和商高先生
都發現勾股弦中的秘密*
引領千年後費瑪最後定理**
懷爾斯的熱情與堅定不移
解開懸宕三百年的世紀謎題
* 畢氏定理,又稱商高定理或勾股弦定理,a2 + b2 = c2。
** 費瑪最後定理,源於畢氏定理,17世紀的數學怪傑費瑪在書頁空白處寫下:「xn + yn = zn,當n大於2時沒有整數解。我已為這個命題找到一個非常巧妙的證明,然而這裡狹窄的篇幅不足以讓我寫下。」如此簡短的敘述,卻成為數學史上最深奧的謎團。一直到二十世紀,才由安德魯懷爾斯(Andrew Wiles)破解。
一次一次一次證明 都更接近真理
零是零 一是一 這世界黑白分明
不同不同不同 不同於模糊難解的人心
這浩瀚宇宙是如此美麗
127.0.0.1 *
最美好的秘密基地
二進位言語
改變世界的超能力
沒有終止條件的遞迴函式**
不斷呼喊自己 不到終點永不放棄
* 127.0.0.1 = localhost = home
** 遞迴(recursion),是「函式(function)不斷呼叫自身」的一種程式撰寫法。而為了防止程式無窮盡的遞迴下去,必須為所寫出來的遞迴函式設定一個終止條件(termination condition)。
一次一次一次證明 都更接近真理
零是零 一是一 這世界黑白分明
不同不同不同 不同於模糊難解的人心
這浩瀚宇宙是如此美麗
一次一次一次 喔 接近真理
零是零 一是一 絕對的純粹
不同不同不同 不同於模糊難解的人心
這浩瀚宇宙是如此美麗
圓周率計算程式 在 自己算圓周率吧~提供範例程式打開電腦直接算使用 ... - YouTube 的推薦與評價
下載 程式 https://drive.google.com/file/d/ ... 範例 程式 打開電腦直接算使用Nilakantha 級數# 圓周率 #算 圓周率 #pi#python ... 为什么要 计算圆周率 ? ... <看更多>
圓周率計算程式 在 #14 Java程式設計新手教學- 圓周率計算(THE END) - YouTube 的推薦與評價
在這次的教學中,綜合了過去所學,有別於許多複雜的數學方法,使用了一個簡單且有趣的概念來 計算圓周率 ;同時這也是新手教學系列的最終章, ... ... <看更多>
圓周率計算程式 在 [心得] 計算π到小數點下十億位─ 超進化版- 看板Python 的推薦與評價
和上篇一樣,這篇是把計算圓周率π的程式照樣修改,
執行速度也快了兩倍多,
原本十億位需要 1 小時 28 分鐘,縮短到 40 分鐘
速度變快的關鍵主要出在三處:
1. mpfr.div() 原本寫錯了,應該要把整數的 mpz 轉成浮點數 mpfr 再除比較快,
我卻寫錯了,直接拿 mpz 去除,不知為何這樣會讓運算速度變得超級慢。
2. 寫檔時 write_string() 裡面有做排版,而這個排版的迴圈是一個字元一個字元
處理,速度非常的慢,我改成一次處理 50 個字元一行,速度就快了 50 倍。
3. 進度條處理得不好,不需更新進度時應該儘快 return,我卻做了多餘的
數學運算,多做一次當然沒什麼,多做七千萬次就有影響效能了。
這個 Divide and Conquer 的寫法很適合 multi-processing,
以及進度條可以改用 tqdm module,這些建議都不錯,
不過請體諒我才剛學 Python 沒幾天,需要點時間消化 (汗)
這次程式碼也放在 https://ideone.com/6YO1zU 方便大家複製貼上
#!/usr/bin/env python3
#
# pi.py - Calculate Pi
#
import sys
import time
import math
import gmpy2
from gmpy2 import mpfr
from gmpy2 import mpz
#
# Global Variables
#
count = 0
total = 0
grad = 0
step = 0
#
# Show Progress
#
def progress_init(max):
global count, total, grad, step
total = max
count = 0
step = int(total / 1000)
grad = int(step / 2)
def progress():
global count, total, grad, step
if (count > grad):
grad += step
g = int(math.floor(72.5*count/total+0.5))
p = int(math.floor(1000.5*count/total+0.5))
msg = "H" * g + "-" * (72-g) + " " + str(p/10) + "%\r"
if (grad > total):
msg += "\n"
print(msg, sep="", end="", flush=True)
#
# Write digit string
#
def write_string(digit_string):
fd = open("pi-py.txt", mode="w")
fd.write(" pi = ")
fd.write(digit_string[0])
fd.write(".")
for c in range(1, len(digit_string), 50):
if (c != 1):
fd.write("\t")
fd.write(digit_string[c:c+50])
if ((c % 1000) == 951):
fd.write(" << ")
fd.write(str(c+49))
fd.write("\r\n")
elif ((c % 500) == 451):
fd.write(" <\r\n")
else:
fd.write("\r\n")
# Final new-line
fd.write("\r\n")
fd.close()
#
# Recursive funcion.
#
def s(a, b, max):
global count
m = math.ceil((a + b) / 2)
if (b - a == 1):
if (a == 0):
r = 120 # 6!
q = mpz(640320**3)
p = gmpy2.sub( gmpy2.mul(q, 13591409),
gmpy2.mul(r, 13591409+545140134) )
else:
r = mpz(8 * (a*6+1) * (a*6+3) * (a*6+5))
q = mpz((b*640320)**3)
if ((b%2) == 0):
p = gmpy2.mul(mpz(13591409 + b*545140134), r)
else:
p = gmpy2.mul(mpz(-13591409 - b*545140134), r)
else:
p1, q1, r1 = s(a, m, max)
p2, q2, r2 = s(m, b, max)
# Merge
p = gmpy2.add( gmpy2.mul(p1, q2), gmpy2.mul(p2, r1) )
q = gmpy2.mul(q1, q2)
if (b != max):
r = gmpy2.mul(r1, r2)
else:
r = 0
count += 1
progress()
return p, q, r
#
# Calculate e
#
def calc_pi(digits):
global total
d = digits+1
n_terms = math.ceil(d*math.log(10)/(3*math.log(53360)))
precision = math.ceil(d * math.log2(10)) + 4
print("d = ", d, ", n = ", n_terms, ", precision = ", precision, sep="")
print("gmpy2 version:", gmpy2.version())
print("MP version:", gmpy2.mp_version())
print("MPFR version:", gmpy2.mpfr_version())
max_precision = gmpy2.get_max_precision()
print("max_precision =", max_precision)
max_emax = gmpy2.get_emax_max()
print("max_emax =", max_emax)
if (max_precision < precision):
print("Error! Max precision is too small! Program terminated.")
return
gmpy2.get_context().precision = precision
gmpy2.get_context().emax = max_emax
print("Real precision = ", gmpy2.get_context().precision)
progress_init(n_terms * 2 - 1) # Initialize progress bar
# Recursion
start_time = time.monotonic_ns()
p, q, r = s(0, n_terms, n_terms)
end_time = time.monotonic_ns()
elapsed = (end_time - start_time) / 1000000000
print("Recursion:", elapsed, "seconds.")
start_time = time.monotonic_ns()
q = gmpy2.mul(q, 426880)
end_time = time.monotonic_ns()
elapsed = (end_time - start_time) / 1000000000
print("Multiply by 426880:", elapsed, "seconds.")
start_time = time.monotonic_ns()
pf = mpfr(p)
qf = mpfr(q)
ef = gmpy2.div(qf, pf)
end_time = time.monotonic_ns()
elapsed = (end_time - start_time) / 1000000000
print("Grand Division:", elapsed, "seconds.")
start_time = time.monotonic_ns()
ef = gmpy2.mul(ef, gmpy2.sqrt(10005))
end_time = time.monotonic_ns()
elapsed = (end_time - start_time) / 1000000000
print("Multiply by sqrt(10005):", elapsed, "seconds.")
# Convert to decimal digits
start_time = time.monotonic_ns()
estr, exp, prec = mpfr.digits(ef)
estr = estr[0:d]
end_time = time.monotonic_ns()
elapsed = (end_time - start_time) / 1000000000
print("Convert to decimal digits:", elapsed, "seconds.")
# Write to file
start_time = time.monotonic_ns()
write_string(estr)
end_time = time.monotonic_ns()
elapsed = (end_time - start_time) / 1000000000
print("Write to file:", elapsed, "seconds.")
#
# main program
#
if __name__ == '__main__':
argc = len(sys.argv)
if (argc >= 2):
digits = int(sys.argv[1])
else:
digits = 100000
calc_pi(digits)
# End of pi.py
--
桃樂絲: 可是, 如果你沒有頭腦, 為什麼會說話?
稻草人: ㄝ, 我也不知... 但是有些人沒有頭腦也能說超~多話呢。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.165.64.143 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1614281244.A.F7F.html
雖說有聽人講過,用 Python 就不要太期待效能,
但這不妨礙我繼續追求更高的執行速度
最終能和 C 語言版差不多快也是始料未及......
※ 編輯: Schottky (118.166.39.82 臺灣), 03/07/2021 09:16:36
... <看更多>