標籤:

物理專業的學生編程很厲害是怎樣一種體驗?


編程不厲害的一隻滾來答題。

很久很久以前,小學的時候開始接觸編程(真的只是接觸,用的很基礎的那種只用拖滑塊的軟體,叫啥都忘了),初中開始玩簡單的c,高中的時候連碰電腦的機會都少了更何況碼代碼。拿過挺多相關的獎,出國比賽幾趟眼界增長不少課也曠了不少。因此挨罵不少哈哈哈。

現在也很忙很忙,但是依然決定學c++。

體驗就是,很慶幸自己走上了編程的道路。

編程給我帶來的思維方式上的影響很大,體現在生活里就是做事更有條理性~這些機制融入了一個人本身,就是編程的價值所在吧。

即使在世人看來編程兩個字聽起來高端,程序猿工資高,但這些其實都不重要。至少於我們這些學物理的來說,學編程圖什麼?費那麼多精力就為了和別人談話的時候裝個b?

還是賺點錢?算了吧,學物理已經夠我們累的了!於我,唯一的原因就是興趣。

人活著就圖個快活。我喜歡,就努力學,不是為了讓誰高看我一眼,學得一點淺顯的東西也不是要賺什麼錢,只求滿足這顆心。

最後,作為一個手能提肩能扛的女漢子求個贊( ????? )


既然 @胡曉 邀請我,作為謝邀,我就把我的知乎上的首次認真回答獻給這個問題好了。本人曾在中科大物理學院就讀,現在在美國讀PhD,跟了一個做分子動力學的老闆,在做著machine learning的事情。

重要的寫在最前面:其實「很厲害」是相對的,即使你在周圍同學眼中計算機的能力非常高,但是跟那些真正的geek,甚至有點水平的專業CS學生相比,水平還是不知道差幾條街的。

編程,或者更廣泛地說是折騰電腦,可以切實改變你的生活。如果你會編程,工作生活中你就可以經常寫一些簡單的小程序來完成自己的一些特殊需求。而因為你的這項能力,也經常會有周圍人求你幫忙,你也會藉此認識一些人。

比如說我高三的時候,由於已經保送,在家裡比較閑,於是我們高中班主任就讓我把全班同學的評語都給寫了,並且輸入到教委給的系統里。評語這東西,寫來寫去無非也就是些糊弄人的話,比如說「該生尊敬師長、團結同學、熱愛班集體、學習刻苦」之類的。教委的系統對評語是有查重的,所以還不能直接從網上下載評語。於是我就自己寫了個程序,直接往系統寫入隨機生成的無重複的評語。後來這個事情被教務處的老師知道了,找我把程序要走了,從此以後全校的評語都是我的程序生成的了。

再比如說我本科宿舍學校不給通網,電信又通過各種噁心人的手段不讓你用路由器,當時我就在我們宿舍電腦都搭建了代理伺服器,成功人宿舍所有人實現了同時上網,周圍有很多同學慕名前來求我幫忙搭建代理伺服器,我也通過這個在同學心目中有一定的地位,經常有人有編程的問題前來求教,我也通過這個認識而不少人。

-- Update--

再補充個例子,比如說某次我QQ郵箱收到一個郵件,發件人名叫「媽媽」,內容說是我爸爸的體檢狀況之類的,讓我點擊查看,點擊進去以後就讓我輸入QQ的用戶名跟密碼,一看就是盜號的。於是順手寫了個小程序往盜號網站的資料庫里灌入大量垃圾數據,過不了多久那個網站就被迫下線了,也算是為廣大網友做了點微薄的貢獻吧。

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

最後,藉此地方分享一下自己本科折騰電腦的一系列事情:

我本科所在的學校是不給本科生通網的,大一到大四都不給。於是,從大一開始,上網,就成了一個美好而奢侈的願望。既然學校不給通網,辦理電信的電話上網就成了唯一的選擇。這個電信特別坑,只有2Mbps的速度,卻要付高昂的資費。而且,電信會強迫你辦他家的手機,並且強制你每月電話或簡訊消費10元以上,不然網費會更貴,為此我還特地買了個50元的二手電筒信手機,每個月自己給自己打100分鐘。如果你遇到了問題,你會被校內跟校外的營業廳之間踢皮球,服務員個個臉板的跟家裡死了人一樣難看。最噁心的是,你必須用客戶端撥號,目的就是為了不讓你用路由器。於是,跟客戶端做鬥爭就成了我業餘時間做的事情之一。

最開始的想法是去破解客戶端,上網查資料得到的結論是,這種客戶端原理往往非常簡單,實際上電信給你的密碼並不是真正的密碼,電信客戶端做的事情是,把你輸入的密碼做一些簡單的運算得到真正的密碼,並且調用Windows的相應的API,進行撥號。網上給出的教程說的破解方法是,對網路進行抓包就能看到真實密碼。於是嘗試之,發現教程裡面針對的電信撥號認證方式用的是Password Authentication Protocol (PAP),密碼是明文傳輸的,所以能通過抓包獲得,但是我們這裡電信送的認證方式是Challenge Handshake Authentication Protocol (CHAP),密碼並不是明文傳輸,所以無法通過抓包獲取到,首戰失敗。

既然抓包獲取不到,於是我便採用另一種方法,既然電信要撥號,那肯定要調用系統的API,那我就從系統的API入手,在API上掛上鉤子(Hook),讓API主動告訴我電信都在幹啥。API Hook的原理其實很簡單:從指令的角度來看,系統API的調用無非就是先將參數壓棧,然後跳轉到系統API的代碼處。而我們要做的,無非就是在系統API代碼的開頭插入一條跳轉指令,跳轉到我們自己而代碼,我們自己的代碼負責讀取棧中的參數,獲取其中的真實密碼,彈出對話框顯示之,然後跳轉回系統API的代碼處。搞懂了Hook的原理,準備自己實現的時候,無意間發現已經有人干過這件事情了,遂直接用其代碼。看到了真實的密碼,心中更是千萬頭草泥馬奔騰,真實密碼竟然跟電信給我們的密碼完全一樣。

既然電信不是通過簡簡單單地篡改密碼的手段,那電信又會是怎麼知道我們是否在使用電信客戶端呢?聯想到之前觀察到的事實:1. 自從安裝了天翼客戶端,系統就經常藍屏,藍屏的原因總是netfilter.sys。打開天翼客戶端,點擊鏈接,然後用任務管理器終止天翼客戶端的進程,仍然能上網,此時在Windows的設置裡面關閉網路,並重新撥號,正常連接到網路。於是斷定電信是通過netfilter.sys這個文件來實現認證的。認真研究這個文件,發現這是一個Windows下的NDIS驅動。看來電信是直接把協議都給篡改了,這我就沒辦法了,及時破解了路由器也沒法用啊。於是嘗試另一條路:代理伺服器。

最開始的時候我是想把自己的電腦搭建成透明代理或者網關伺服器的,這樣做的好處是,宿舍里的其他電腦只需要把網關設置好就行了,不需要每個應用單獨設置。但是實踐中發現他們都要用到系統驅動,而這個驅動跟電信的netfilter.sys是衝突的,所以沒辦法,只能用普通的代理伺服器的方式了。於是我便在我們寢室所有的電腦上都裝上了代理伺服器,從此,我們宿舍終於過上了大家都能上網的日子,雖說不如用路由器那樣方便。在那段時間,我們宿舍經常說的一句話是:「XXX,開代理」以及「XXX,你電腦IP是多少」。後來我們宿舍的集體上網的事情被一些同學知道,不少同學前來求我幫他們宿舍配置,還有不少同學聽說我有辦法讓一個宿舍大家都能上網,也去電信營業廳辦理了電話上網的服務。就這樣,我通過給人弄網認識了不少人。有一次在食堂點菜,排隊的時候我滿腦子都在想代理伺服器,於是點菜的時候差點說了句「來一碗代理伺服器」,幸好及時意識到,改成了「來一碗牛肉麵」。

在經歷了三年宿舍沒有網的日子以後。大四那年,我們寢室樓四樓有人提議說組建寢室大區域網的構想,具體做法就是用線將各個寢室的路由器連接起來,四樓很多同學紛紛響應加入,我當時是在三樓,聽說了也加入了,並且跟那裡的核心人物一起討論網路優化。

剛開始的時候,我們的網路構架是,核心的那個宿舍找一台電腦作為伺服器,上面跑著論壇、還有魔獸世界的私服。採用的網段是192.168.1.X,其他宿舍的路由器的Wan口連接核心宿舍的Lan口,並且其他宿舍的路由器ip都改成192.168.2.X。這樣做的問題是,聯機打dota的時候,核心宿舍創建的房間能被所有其他人看到,但是其他人創建的房間就看不到了。於是我們後來經過商量,把網路構架改成了各個路由器的LAN口相連,為了避免同一個區域網之間ip地址衝突的問題,我們改用10.x.x.x的地址,並且對ip地址的編碼方式為:10.樓層.房間.x,這樣的話,316房間的路由器的dhcp伺服器只會分配10.3.16.x格式的地址。

後來我們還自己搭建了DNS伺服器,我還用node.js寫了個生成代理伺服器配置的文件的伺服器,方便寢室內不同同學連天翼的時候大家share網路的時候代理伺服器的配置。

也真是難為了我們這幫學物理的了。。。


史蒂芬·沃爾弗拉姆(Stephen Wolfram)

物理學得好:

15歲發表首篇粒子物理方面的學術論文,到17歲,他的科學論文發到了《核物理》(The Nuclear
Physics)雜誌上。在獲得牛津大學的獎學金並在牛津學習一年之後,即到了美國阿格納國家實驗室(Argonne National
Laboratory)的理論高能物理小組(Theoretical High-Energy Physics
Groups)工作。1978年19歲的沃爾夫勒姆受著名物理學家穆雷·蓋爾曼(Murray Gell-Mann)之邀去到加州理工學院(the
California Institute of
Technology),從事基本粒子物理學方面的研究,取得顯著成就,一年內獲得理論物理學博士學位。1980年沃爾夫勒姆成為加州理工學院一員,與費
曼(Richard Feynman)共事。

編程很厲害:

符號操作程序:

1979年和1981年之間,斯蒂芬領導加州理工學院物理系的計算代數系統(Symbolic Manipulation Program,SMP。即符號操作程序) 項目的開發。在1981年,斯蒂芬被授予麥克阿瑟獎(MacArthur Fellowship)。1983年,他在國家自然科學學院進一步學習,並進行元胞自動機的研究,主要研究計算機模擬。 80年代中期, 斯蒂芬使用元胞自動機進行了物理過程的模擬研究。

Mathematica:

1986年,斯蒂芬在伊利諾伊大學香檳分校建立了複雜系統研究中心,並開始開發計算代數系統Mathematica,第一個版本於1988年發行。在1987年,他與其他合作者共同創建了沃爾夫勒姆研究公司公司進一步開發和推廣Mathematica。斯蒂芬現為公司首席股東。


這個。。。謝 @Summer Clover@張小平 邀。

先講一個故事吧,那是高二的暑假,那時候我們還圖樣圖森破,一起坐上了綠皮火車去北京上物理競賽課,那時候我還不知道什麼是拉格朗日量和麥克斯韋方程組,更不知道什麼是常微分方程還有反雙曲餘弦函數。當時和知乎上某位我不想 at 的女生和另外一位女生朋友還有我,還有 at 不到的小綠同學一起課沒有上多少,玩倒是玩的開心,還結識了一位來自山東的女學霸,被他們叫做競賽姐,當時小綠同學作為陝西省的大神自然是看不慣競賽姐的囂張氣焰,於是在我方兩位女士的挑撥下開始展現男人風範,和競賽姐打賭做題。競賽姐甚至下了賭注,誰能解出來懸鏈線的分布給誰一個 kiss,

對,就是下面這個懸鏈線

這個的解現在看起來再簡單不過,競賽姐說,這不過是一個反雙曲餘弦函數而已,當時的我正在追我方某位女生,也就是被她挑撥的躺槍要做這個問題,怎麼能在這種事情上慫呢!可是我不知道什麼「反雙曲餘弦函數」的,於是瞅著那個微分表達式,開始推,好幾個晚上怎麼推也推不到能夠直接積分的地步(當時的積分水平只限於查表發現誒這個可以換掉)。這讓我非常無奈。終於我靈機一動,打開了 free pascal 寫了一個迭代程序,對稱化之後取一半懸鏈線,從上到下計算出了懸鏈線的數值解。然後用*的形式列印了出來。

我當時是沒有意識到這是我人生第一個數值計算程序,因為我連微分方程和數值計算是什麼都不知道。

當然那個競賽姐長得實在是太丑了我沒有 kiss 她,不過得到了幾位同學的好評。從此記住了「反雙曲餘弦函數個詞」。

後來我看三體入迷,受到這個事情的啟發,於是寫了一個三體運動的模擬程序,是我人生第一個 GUI 程序,使用看書腦補出來的方法解微分方程,那時候三體還沒現在這麼火。這個程序是我第一次觀察到了混沌,看到了引力彈弓之類有趣的現象和具象化的天體運動。。我去找找模擬圖,也不知道還能不能找到。

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

其實我物理課掛了好多,比如廣義相對論這種課是根本沒學懂,所以我更適合回答「搞 cs/ee 的人物理很好是怎麼樣」一種體驗。。

個人的體驗就是,大部分CS/robotics的東西我學的時候都會跳過數學/物理部分。

聽物理外行談論物理總想給他們一點人生的經驗。看著某些知乎程序員的物理相關回答真心覺得就你那編程水平還是別談論物理學了。

被部門主管拉去談了兩個小時宇宙。

看到蒙特卡洛相關的演算法會特別開心。

偶爾問別人,什麼你微分方程都不會解你大學怎麼過的?(實際上微分方程我也是剛剛及格而已)。

寫程序偏粗獷,喜歡到處加隨機數,喜歡用 Mathematica 而不是 MATLAB 做控制論。

什麼演算法到我手裡都要先想一想能不能蒙特卡洛化,喜歡非常精巧的數學搭配蒙特卡洛演算法。

大一時候配 vim 多,大二的敲代碼多,大三的時候泡妹子,大四的時候讀書聽公開課的時候多。

我的自動控制作業等很多作業的步驟都是,學習課本-&>分離關鍵步驟-&>寫成 Mathematica 程序-&>三十分鐘寫完一章作業。

覺得一切程序能做而讓人學的事情都是耍流氓,所以我大一上微積分九十多,大一下我熟練掌握了 Mathematica 以後就只有複變函數九十多,其他所有數學物理課都是六十多。

其實大部分時候我只是像一個正常的程序員那樣思考問題。有時候非要套一點物理進去感覺有點刻奇。

給程序員朋友推薦朗道和馬爾契夫,為了防止他們揍我沒有推薦吉米多維奇。

喜歡把時間軸拉成一個維度來做控制。

其實寫代碼真的比學物理簡單太多。。。。

而且我早已經不拼什麼編程技巧了或者編程工具了,現在學控制和探測,歸根到底還是數理統計,廣義相對論的見過的一些東西。

對了,作為半個遊戲程序員,我最喜歡的遊戲一個是坎巴拉太空計劃,一個是 besige

其實我的程序水平並不比科班出身的差。。所以從來沒有人拿物理系這個東西黑我代碼。。都是用我的變數名和英語黑我

就醬。


我寫代碼很菜,但有幸認識幾位符合題主標準的大牛。

@bnm zasdfg 這位我已經邀請回答了,這貨實在太謙虛,他本科物理,選了計算機的雙學位,我有次這樣問他:

」聽信院同學說,《編譯原理》這門課很難,是嗎?「

」是挺難的「

」那你拿了多少分「

」99「

」。。。。。。。「

我見過丫的雙學位成績單,除了一門60+其他全都是90+,我問他為啥,他說60多的那門只去了第一堂課就覺得無聊,最後只考了期末,沒想到後來老師一直點名。。。

現在他讀PhD的時候也去上CS的課,因為工作需要用到Machine Learning於是就去選,然而這門課人太多沒選上,就選了個Advanced Machine Learning,按理說這門課需要先上前一門的也不知道他怎麼就選上了。結果在那個大班他幾乎每次作業都是前三交,然後還有一堆上過Machine Learning的人找他請教問題。

除了這位,讓我印象深刻的還有幾位,其中兩位都源自本科上的《計算物理》,一位幾乎啥語言都會,每次計算物理交作業的時候可謂是幫全班人debug的小能手;還有一位是女生,當初我們《計算物理》課留了個寒假作業,題目是用模擬退火法解高階魔方,結果她花了一個寒假寫了數千行的C++程序把它給搞定了,答辯的時候我是聽的雲里霧裡,就連老師都說」我覺得我們智商都很低「。熟悉這位老師的同學肯定知道這位」殺手「幾乎不可能說這樣的話。

我引用一下學校新聞的報道

「在此之前,關於還原魔方問題的研究集中在低階上(3至11階),高階與超高階魔方少有人問津。因為魔方的狀態數隨其階數急劇增加,其中5階魔方就有10^75以上的狀態數,所以即便使用高性能計算機,上百階魔方的還原也是不易的,其難度好比於從構成整個宇宙的所有基本粒子中找到一個指定的粒子。因此計算機求解必須設計好的演算法。

這位同學改進的模擬退火演算法,串列程序在筆記本電腦上運行結果為:7階魔方可在3秒左右還原,101階魔方可用997秒還原;並行程序在上海超算中心「魔方」高性能並行機(Magiccube)上的運行結果為:5001階魔方可用1877秒還原,在我校超算中心的高性能並行機上也獲得類似的運算結果。「

最後一個是 @bnm zasdfg 跟我說的。他有個同學大二的時候調試一個代碼老出錯,檢查很多遍之後覺得自己的代碼肯定沒問題,懷疑是編譯器有毛病。於是乎他在gcc的源碼里找到了這個錯誤,然後自己給修正了!!!!


在MSRA的時候,我們組有個台灣人,學的是核電站的東西,然後跑去參軍,出來之後覺得做物理沒前途,就去一家嵌入式小公司打雜,跟同事學編程。

過了十幾年,就來微軟寫驅動了,對資料結構也特別熟悉,儼然就像科班出身的一樣。


靜候題主自問自答


首次回答問題,看到很多答主都自報家門,我也報一下。本人光學專業博士研究生,從事量子光學方面的實驗研究(當然也有很多理論需要研究),愛好計算機程序設計,熟悉(「精通」這個詞讓我惶惶然)C/C++,業餘參加一些專業的編程項目。

我從三方面來回答這個問題。

第一,物理專業的學生一旦進入科研工作中,編程是一種必備技能。我是從事實驗研究的,但是為了搞明白實驗原理和解釋實驗現象,做一些相關的理論研究也是很常見的事。單純只做實驗,靠合作者提供理論支持的人,很難做出出色的工作(當然也有例外)。作為一個實驗工作者,至少要有基本的物理圖像和理論框架,能夠勝任一些和本實驗工作相關的理論計算。我也認識幾個從事理論研究的同學,對此也略知一二。現在這個年代,除非你是超級大牛,能像愛因斯坦、狄拉克那樣從頭構建一套理論體系,一般從事這行的都是在大的理論框架下做一些比較細枝末節的工作。甚至很多領域連計算方法都很完善了,碩士甚至博士研究生也就針對不同的研究對象,改改參數,在前輩的基礎上在改改程序,運行個結果,發篇水文混個畢業也就拉到了。要想在科研工作中做出一點出色的工作,第零要在一個至少差不多的研究單位,第一要刻苦耐勞,第二要有紮實的理論功底,第三要有一定的編程技能。當然,如果有幸跟著泰山北斗級人物打打雜,也是能搞出很牛的文章的,這個另當別論。前三項要求因為和問題沒什麼大的關係,暫且不提,重點討論第三項要求。這個領域裡對編程技能的要求,和專業的計算機領域是非常不一樣的。比如,我所從事的研究最常處理的問題就是數值(有時候也有符號)求解線性方程組、微分方程、數值積分以及將結果做成一副漂亮的圖。我從來沒有用C/C++這種底層語言編程求解過這類問題(用也是用Fortran啊),一般情況下Mathematica和Matlab完全可以勝任。只有在非常特殊的情況下,比如做很精細的圖,Mathematica和Matlab限制太多,我用C調用GDI直接作圖。我想其他物理學領域也八九不離十了,無非是一些數值微積分、微分積分方程、線性問題、回歸問題、隨機過程模擬、蒙特卡洛方法之類的,大都有著很濃的數學味。解決這些問題,只要理解清楚了相應的數學概念,選擇你們組常用的編程工具,用心學上半年,再跟著師兄算一些東西,肯定都能掌握個差不多(熟練運用以至精通就另說了)。當然,如果你研究生以前就有很好的編程基礎,這些東西都很簡單,上手超快(前提是物理專業,不然也不知道要幹啥啊)。這些編程技能和計算機專業要求的編程技能相差還是比較大的。比如數據結構、演算法分析這樣的課程,除了一些最基本的東西,在物理專業基本用不到。在學習C/C++時,要求理解結構化程序設計和面向對象程序設計思想,要學會管理指針(也就是管理內存),時時刻刻警惕溢出、越界、懸空指針,我想除了結構化程序設計思想確實非常有用外,別的那些個東西對物理專業的人而言實在太過玄乎了。如果進一步學習Win32 API、MFC之類的玩意兒,即使把MFC複雜變態的結構搞得清清楚楚,放到物理專業也沒什麼用。在物理專業寫Windows程序,應該是很小眾的吧。但是,如果你不問學這玩意兒有什麼用,純粹出於愛好而去學習研究這些純計算機專業的技術,等你小小有所成(小有所成,我想還是很困難的吧,所以多加了一個「小」)後,你會發現物理專業要求的那些編程技術根本不是個事,只要搞明白了背後的數學和物理,編程更像體力勞動。如果你可利用C++寫出一個超級瑪麗來,只要你物理和數學不賴(畢竟是物理專業),那些編程問題對你來說都是小菜一碟。即使你學的這些技術在科研工作中都不會直接用到,比如我熟悉C語言,但是我們實驗室都用Mathematica和Matlab,重頭去學這些編程工具也是很簡單的事,畢竟編程思想都是通用的,只是結構和語法有些不同罷了。再說了,快速學習一門編程語言本就是搞計算機的人所必備的能力。如果你從事的實驗工作對儀器的操作需要相當高的要求,那麼可能會涉及到硬體編程,比如LabVIEW、單片機、FPGA之類的,那就比較困難了,但也不會太困難。熟悉C語言的人去入門單片機是一件很簡單的事情,何況很多大學的物理專業都會開微機原理之類的課程。當然這一切的前提都是對我所見識到的絕大部分人來說的,在中科院專門搞計算的人,可以自己開發計算包賣錢,那麼前面提到那些個技能(當然不止)就非常有用了。

第二,編程可以使你接觸到更廣闊的世界。如果你的編程技術使你達到了半專業的水平(從專業IT人士的角度看),那麼你就會得到機會去參與一些小項目,甚至做一些小項目。在這個過程中,相當於你以物理專業的身份從事IT專業,你絕對會得到終生受益的人生體驗。有很多人就這樣一去不復返,乾脆改行干IT了。如果你只是業餘干這些活,人還是處在物理專業中(比如我),那你就同時接觸了兩個行業。且不說這樣的人生體驗,無論是在你本專業的圈子裡還是在你IT行業的業餘圈子裡,你在另一個圈子的身份絕對是你吹牛裝逼的重要資本。身處兩個行業的你(80%物理+20%IT),會看到這兩個行業相當不一樣的技術思想。你那20%的IT身份會給你那80%物理事業帶來全新的思維模式。俗話說,隔行如隔山,如果你100%地獻身於物理學,那麼你的人生也就只能限於這個山裡了。你可能永遠不會知道百度那麼一個看似簡單的搜索欄背後有多麼龐大的軟硬體和人力資源在支撐著,你上網聊天買東西到底被這個社會體系監視到了何等的程度。假設你去北京旅遊,你會去什麼地方?天安門故宮鳥巢水立方長城?如果你認識了微軟百度搜狐的人,作為另一頭山的人,去微軟百度搜狐(中國)總部看看那一頭山的人是怎麼個活法,每天在想些什麼,豈不更有人生意義。當然,如果你能進去更高大上的門的話,那……你站在了更高的維度來看這兩座山,相信你起碼會對你那座山有更深刻的認識。進而推廣到這世上無數的山,想信你會看到更不一樣的東西。

第三,計算機科學可以使你重新審視物理學本身。這是個level非常高的話題,即使是稍微深入的討論估計也得一本書,而且定會引起很多的爭議。考慮到我是一個level相對較低的人,以下的簡單討論純屬自娛自樂,不敢對任何一個觀點負責。首先注意,這裡我取了一個非常寬泛的詞——計算機科學,因為編程(利用一門程序設計語言編寫程序)這個詞總給我一種意義很狹隘的感覺。另外,科學這個詞也比技術有著更寬泛的意義,例如計算機所涉及到的思想用技術這個詞來概括就不太好了。我所認識的熱愛物理學的朋友(注意,僅限於我所認識的,世上高人千千萬,我這個level的圈子肯定是非常渺小,思維相對狹隘的,以下討論若能對我這個level的同事們有哪怕一點助益,我都倍感榮幸),大都有一個共同的偏見,那就是:萬般皆下品,唯有物理高。我在接觸計算機技術之前(大一以前)也是這樣認為的,而且非常的堅定不移,估計跟基督徒認為上帝是存在的一樣堅定不移,以至於堅定不移地選擇了物理專業直到博士。存著這樣的偏見也不是沒有道理的,物理學作為自然科學最基礎也是最成功的學科,對這個世界不論是從思想上還是實踐上都產生了巨大的影響。在這個科學統治的世界中,物理學自然也就被人抬到了相當的高度。於是熱愛並從事著物理學的人(對於不熱愛卻從事著的人,沒有什麼可討論的,混口飯吃而已,不過也無可厚非),自然會有一種自豪感,這種自豪感久了也不知怎地就變成了一定的自負,悲乎哀乎。我非常慶幸我從這個思維中跳了出來,這當然要感謝我所學的計算機技術了。我學習編程純屬業餘愛好,至於這個愛好從何而來就不得而知了,這樣的問題還是留給心理學家去研究吧。起初只是學學C語言,寫一些「黑框框」(控制台)程序,總覺得程序有著一種令人心馳神往的結構美。後來進步學習了C++,從結構化編程升級到了面向對象編程。學過的人都知道,僅從語言定義上來說,C++要比C語言複雜太多了,面向對象思想也比結構化思想複雜多了。這裡就不討論面向對象思想了,僅說這個思想對我產生了非常大的震撼。如果量子力學是對世界的抽象的話,那麼面向對象也是對世界的一種抽象,只是抽象的層次不同罷了。一個著眼於世界的本源,一個著眼於世界的結構,並沒有孰優孰劣孰高孰低之分。後來我也稍微接觸了一些類似數據結構、操作系統、體系結構之類的課程,不過都所學甚淺,不敢妄論。學完C++以後,總覺得「黑框框」太也無聊了,於是進軍API和MFC了。我是先學的Win32編程,作為一個物理學專業的學生,我實在太佩服搞出操作系統的這幫人了,僅僅是API就這麼複雜了,其背後的實現該有多複雜啊。我知道了我移動一下滑鼠點一下我的電腦,這背後有著多麼複雜的軟硬體機制在支撐著。當然,後來我知道了這個世界上有大批大批的人研究明白了Linux源代碼,深深感到了自己能力有限,level很低。我僅僅窺視了操作系統的冰山一角,不,應該是一塊冰塊,就讓深深感受到了它的複雜精深,我再也不敢妄言物理學高於計算機科學了,當然我也不會被嚇倒,認為計算機科學高於物理學,畢竟物理學還是造出了原子彈,何況計算機的硬體基礎(半導體)也是物理學的功勞。單台計算機的操作系統尚且如此,那整個計算機網路呢!!!我不知道。如果我僅僅限於物理學的知識,不去深入接觸一下計算機技術,我是不可能如此深刻地感受到這種震撼的,不可能認識到類似搞明白操作系統源代碼的人有著多高的level。我的家鄉多山,如果你站在一座山頂上看別處的山,總會覺得別的山很低,只有你深入到那座山的深處,才能真正感受到那座山的高度。我想應該就是這個道理。進一步思考,何者為世界的本源,這個問題物理學一直沒搞明白。先是原子,後來又有了電子質子中子,後來又有了夸克,有了各種各樣莫名其妙的「基本」粒子。當今物理學認為,世界的本源就是四中相互作用加這些莫名其妙的「基本」粒子。可是誰又知道,哪天這些「基本」粒子不基本了,又會是什麼樣一種情形。可是計算機世界的本源很清楚:二進位。有or無,是or否,選擇or不選擇……這其實是一種機械的世界觀,從哲學的角度考慮,世界的本源是不是這樣還很難說。但是,計算機就是利用了這個非常基本的哲學思想構建出了精妙複雜的計算機世界,這是何等的思想深度啊!回顧起來,我僅僅是從物理學這座山跳到了計算機科學這座山,就感受到了如此大的震撼,如果再去別的山逛逛呢?經濟學、管理學、社會學、心理學……,我相信每一門學科都有著精深的思想,我們絕對不能輕易評判一門學科的優劣。再進一步,跳出科學這座龐大山脈,宗教、占星、算命……,我們也絕對不能輕易對他們指三道四。物理學甚至科學,不過是認識世界認識自我的一個維度而已,不妨出去走走,從別的維度看看這個世界。


物理學(理論物理)畢業,以下說說自己的幾點感受。

1.每年暑假,所有人都回家了(或許去做兼職),而自己要在寢室里死啃計算機的知識,c語言、面向對象、as3、數據結構……一種沉默式的成長,孤獨的體驗,每天除了痛苦的思考,絞盡腦汁的去理解以外,就只剩下吃飯拉屎。

2.經常去打聽計算機專業的同學都在學什麼,經常去問老師我學什麼畢業出來容易找工作,聽到有人談了計算機行業就躲在背後偷偷聽,回來後各種網上搜查資料。常常告訴自己,我不是計算機系的學生,所以要付出更多的努力。

3.在本專業同學裡面被公認為很有希望的人,會有很多人鼓勵你,通常會告訴你他的xx朋友學計算機,現在是如何如何的牛逼。會更有信心。

4.在大三就開始去實習,爭取畢業之後不輸在起跑線上。

5.畢業之後能順利的找到工作(最失敗的是把畢業後的第一份工作交給了一家垃圾公司,盲目的找工作,不知道自己的發展方向)。會遇到一些同屆計算機畢業的學生,經常發現他們的技術是如此的差。暗想,你這計算機都是怎麼學的,應該比我牛逼才對。後來類似的遇到太多,就習慣了。

6.目標不明確,工作兩年後,發現自己又和同等計算機專業畢業學生差不多。覺得自己白辛苦了。

總的來說,過程很辛苦,成果很理想,最終都一樣。


找女朋友更加困難了


就是從此純粹的理論物理, 抽象程度非常高的方向(量子場論,引力場論, 弦論,等研究方面)水平上不去,只好做計算物理(簡單點的涉及分子動力學和Monte Carlo模擬,複雜點涉及凝聚態方面的計算物理,或高能實驗方向,或者格點量子場論Lattice QCD), 再不濟點就只好做計算生物學,再再不濟就去google/fb/etc..當馬工或者去華爾街寫點交易模型混口飯吃。


物理系畢業的學渣滾進來答。

有門課是學編程,學的是Fortran,上大機,很多人共用主機的。在自習時手寫了打數字構成的日曆程序,上機執行列印後寄給中學同學。

89年機房裡開始流行病毒,後來自己用Turbo Pascal寫了個能殺20多種病毒的程序。還分析過一個隱藏很深的病毒,但同學認為投稿無用,就丟了。幾年後看到有人寫這個病毒分析說是超級難解的病毒,那作者不明白裡面dlut字元串啥意思,其實是大連理工啊。我在大工機房裡陸續見過這個病毒十幾個版本呢。

後來有單片機課,我又學會單片機彙編,8031。

實驗室有trs80,用basic。

畢業論文是列印工控的曲線,針打,行列印,涉及曲線放大,旋轉,灰度轉換。彙編做完給老師的basic程序調用。

對了,有同學輔修Pascal拿了雙學位,可他真的寫不出一行程序。

畢業後單位進了小型機,我想學,領導說我不是計算機專業畢業的,不讓我學。

為了評職稱,參加計算機水平考試,高級程序員,過了,全省也沒幾個過的,中級職稱。後來想拿證時,不給,說證沒來。找了北京,電話直接過來,那人當場打開柜子,拿出證填上我名字扣上鋼印給我。我就不猜他想拿我的證幹啥了。

大學老師找我干過一個工控程序,最後在DOS上實現了一套窗口程序,還寫了個ini讀寫。這是首次用C++寫大程序,3萬多行代碼。

接過一個工大計算機系研究生私活,半個月攢了個程序,查字典。後來人家用這個出國了,在微軟,IBM都干過,搞人工智慧。

兼職搞過電話報稅開發,把原來的彙編都改為C,啟用休眠喚醒工作方式,電流極大降低。做了個預處理,自動提取程序中中文字元串,生成小字型檔,提高開發效率。幾年後我發現他們還在用。

發現自己編程似乎還可以,去面試,人家一看,物理系,告訴我,我們只要計算機系畢業的。

98年去了北京,順利找到一個編程工作,上網計費。做售後,維護,後來管開發,做總工。

這幾年做工控軟體,圖像處理,字元識別之類的。

學物理使得我善於總結,歸納,動手能力強,每周一個實驗不是白練的。

學物理數學功底都不差,看論文容易。

高鐵上手機打字,先寫這些吧


我大概算一個……本科和碩士學的都是985光學專業,編程則是小學開始的熟手技能,ACM去過WF,大概在學生階段也不差了。

在校時的大致情況是,包括老師在內,能編程的不少,但是會編程的就很少了。國內物理專業里寫代碼大都基本上是這麼個流程:大家先手推公式,然後用matlab之類工具箱/模塊特別豐富的環境拿來當計算器求解。這沒什麼不好的,但是同樣情況下基本上沒什麼方便復用的東西,代碼凌亂。

所以當大家發現我寫的程序精簡短小界面友好能調comsol加上對於模擬結果自帶過濾什麼的……之後就幾乎成了但凡涉及寫代碼就想叫我過去幫手。

然而沒什麼報酬……所以後來就自己玩自己的去了……


我是物理系的,自學編程。每年都有物理系的人編程高手,每年的校編程大賽,都有物理系的人拿獎,我也拿了幾次。都說物理系是轉行最多的,轉行之後貌似還很厲害。

高中就對計算機很感興趣了,那時候只有286,1萬多,只能在街上打字店看到。學校的是appleii,只能玩basic,據說買來也1萬多。那時候計算機還沒普及,想想老師水平也不會高,自學就好了,因此報了物理系,大一就宿舍幾個湊了近萬元買來一台p75,8m內存,850m硬碟,剛剛出來的彩色顯示器(以前很多是單色,4色的),還有光碟機。然後幾個人分時上機,我出錢多點,上機時間也多點,一有時間基本都是在編程。暑假也不回去。偶爾通宵玩玩大航海,大富翁。後來學校開雙學位,就報名了一個計算機軟體,也就拿個文憑,基本都是自學的。大四暑假的時候去兼職過,就是現在的科大訊飛,給3000多一個月,給自己買了個手機。要是板凳能一直做到現在,想想也是挺好的。畢業後去了華為工作了2年多,板凳沒坐牢,出來自己創業。要說錢的話,無論留在科大訊飛,還是華為,都比現在多。就是喜歡自由,耐不住性子。

說一段跟師兄的故事。

那時候物理系機房由大我一級的師兄管理,dos系統,師兄,還有師兄的師兄寫了一個常駐內存的中斷處理程序,好像叫isr。就是把磁碟中斷(int 13中斷)改掉,然後防止我們寫c盤,我試圖破解這個防護,沒能成功。師兄應該是在時鐘中斷裡面不停檢測中斷向量,我找到原來的int13入口恢復回去,還沒來得及在debug裡面調用,就被他恢復了。試了幾次都無功而返。


編程很厲害?

體驗就是遠遠不如cs畢業的phd。

去it公司工作只能搞那些最不需要系統設計知識的民工工作=


知道Mathematica吧?知道Wolfram alpha嗎?請說過元胞自動機嗎?其實它們的創始人Stephen Wolfram 是個地地道道的物理學家、數學家、計算機科學家。


計算物理方向,正在努力提升自己的編程功力,期待有一天能夠正面回答此題。飄走~^?_?^


@曾博


第一性原理計算,自己編寫贗勢文件


姚期智:「我做理論物理的時候還覺得有些困難,但轉到計算機之後就發現沒有什麼難題了」

註:流傳甚廣的段子,未考證


推薦閱讀:

是什么让你觉得学习是一件讨厌的事情?
大學時代,沒有錢,怎樣才能經常去旅行?
計算機專業,想參加競賽,有什麼好建議嗎?
上大學能否暗中操作?
同濟大學現在是什麼地位?

TAG:大學 |