天文學領域都需要哪些計算機技術?
題主CS專業,喜歡天文。
聽說天文學對計算機技術的需求也是非常高的,數據分析啥的,但並不了解。
希望您們能介紹一下,謝謝
-----本題已收錄至知乎圓桌 ? 成為天文學家,更多與天文學家研究生涯,職業發展,工作生活相關的問題歡迎關注討論。
用宇宙學領域以及系裡看到的狀況來報告一下:
1)語言
天文系大部分人沒有受到過正規的計算機訓練,都是半路出家,用的語言主要是:Python,IDL,C/C++,Fortran,Matlab等。老一輩的教授們用Fortran和C;IDL是一個類似Python的語言,因為有許多天文專用的package,所以受到青睞(但是彷彿只有天文學的人在用)。不過近期IDL在Python天文學package越來越猛的形勢下,開始失去優勢。Python越來越廣泛,一方面因為容易上手,一方面因為很多天文的package是用Python寫的了,比如很常用的AstroPy。Matlab也有少數人用,它有強大的代數和畫圖功能。C++適合大的collaboration一起寫,所以我在天文系比較少見到(大家比較獨來獨往),但是在粒子物理用的很多。
基本上,我們被建議需要學兩類語言,一個是比較基礎的,比如Fortran或者C,跑大程序、並行計算用。另外一個是高層次(High-level)語言,比如Python,IDL,Matlab,這些語言不用compile,可以快速地用來分析數據、畫圖、做簡單運算用。當然高層次語言也可以用來做並行運算,但是速度很難上去。
2)觀測VS理論
做觀測和做理論的同學用的軟體是很不一樣的。比如做觀測的有:高能天體物理用NASA HEASARC的軟體,可見波段用NOAO寫的IRAF,宇宙微波背景的用HEALPix。這些基本都需要在你決定研究方向後專門去學一下。
做理論的。。幾乎每個研究組都有自己的程序。成千上萬的程序在業界流通。有的時候一個項目裡面要用數個程序(甚至是用不同語言寫的)。所以基本上沒有辦法學好一個就一了百了,而是要把自己培養成萬金油,拿到新的程序馬上就要能跑。
3)宇宙學對計算機知識的極度渴求
宇宙學在近期從一個幾個人一個組就能獨立做的領域,變成一個大數據、大組織的領域。大部分的宇宙學項目,比如針對宇宙微波背景的剛做完的Planck、十年內要啟動的歐洲ESO的Euclid、美國NASA的WFIRST、美國NSF的LSST,大都是千人級的大組織。未來的數據量也將變得非常龐大,比如LSST每晚的觀測數據量是15TB——目前天文學屆尚無法處理這的大數據。所以天文學越來越多需要計算機領域的幫助。一是處理初試數據的軟體,二是分析數據的程序。
看到其他回應中說「數據挖掘、大數據技術等,抱歉我似乎沒聽說過有人用過」,我不贊同。宇宙學中有許多項目都需要用到大數據,比如Planck的官方論文就用了很多MCMC(馬爾科夫鏈蒙特卡洛),我和同事日常工作中需要用到有數萬核的超級計算機、同時跑數千個任務。我學校也有天文系和計算機系的教授們合作,用機器學習來分析天文學數據。在技術上,也有許多人用到大數據、機器學習。甚至有本專門為天文研究員而出的程序書:《Statistics, Data Mining, and Machine Learning in Astronomy》 作者:Zeljko Ivezic, Andrew Connolly, Jacob VanderPlas, and Alex Gray,網路的附帶教材可以在這裡看到:astroML: Python Datamining for Astronomy
也會時常見到做天文大數據博士生博士後,找不到天文的工作然後跑去google、facebook、華爾街做data scientist的。。導致現在看到data scientist的頭銜,腦海中自動出現「找不到工作的天文系學生」。。不過,工資也是翻了5倍的。。。作為在讀天文學博士的計算機碩士,說說我的經驗:
1,操作系統
不需要你了解非常深入,但是Linux/Unix必須熟悉,尤其命令行操作。大量的天文軟體(其實很多科學計算軟體都有類似的問題)都是在*nix下工作的。
另外,如果做計算機出身的在課題組負責伺服器維護、技術支持等方面,那麼基本上需要掌握網管方面的各種技能,起碼要掌握搜索與制定、實施解決方案的能力。
2,語言
天文學方面使用的語言簡單來說可以分為常規高級語言和腳本(數據處理)語言兩大類,前者例如C/Fortran等,後者比如IDL/Python/matlab/maple等等。然後還有一類特殊的語言,就是在各種天文軟體中進行簡單批處理的語言,比如iraf。
對於C/Fortran等,可以多看看關於在其中進行科學計算的部分。
IDL和python是天文學界比較常用的數據處理語言,可以比較方便快捷地處理數據,並且具有較為充實的天文庫。至於matlab/maple等等,在一般的計算機系、數學系學數值計算一般是用這個,可以通過它熟悉數值分析,不過天文學圈內用這個的實在太少,庫也很少。
至於Java、DotNet等等,其實也用,用來做界面。比如我們有些用戶操作層面的東西,就是用DotNet WinForm開發的。當然了,對於大部分天文學家來說,他們只是計算機用戶,不需要DotNet這樣的編程技術。
然後還有php/aspx/mysql這些,天文學家大部分是不寫網站的,那各類數據分享、課題組網站誰來做?很顯然,誰熟悉這些誰做……呵呵呵
另外,編程基本功好的人,可以很快熟悉新語言和新工具,能夠更快更好地進行數據處理。
3,演算法
很多人覺得演算法無所謂,其實並不完全是這樣,只是因為各類語言以及庫已經在底層把演算法的工作完成了而已。比如演算法課主要討論的列表、鏈表、排序、樹、圖等等,大部分都是開發者幫你做了。可是如果涉及到特殊的數據表達,還是需要自己去寫這些結構的。
而且演算法熟悉的人,在分析數據的時候,可以充分根據演算法的需求去組織數據,提高效率。比如我這樣的,碩士做的是數據結構,現在每次寫程序,都要糾結半天數據怎麼組織才能提高效率……雖然現在的處理器已經不在乎我提高的那5%甚至更少,但是還是會去想。。。
4,科學計算
數值分析、科學計算、計算方法,不管叫啥吧,這是天文學用計算機的大頭。這方面前面說了,用啥的都有,但是核心是數學模型和數學計算,比如概率、統計等等。
5、數據挖掘、機器學習
雖然傳統的天體物理科研人員不一定用得到這些,因為很多人的研究就是盯著一類特殊天體進行的,可能只有那麼三五顆,你有啥好挖的。但是現在數據是越來越多了,比如我們做個巡天,每個晚上都有幾十個GB數據出來(這比起別的望遠鏡還算少了,別的都是每天TB級別),這麼多的數據,為啥不挖?當年赫羅圖上的主序,是肉眼看出來的,現在為啥不能用機器學習的方法去重新分類?完全是可以的。。。
有好幾個大學的計算機系,雖然不是做天文的,但是在做天文數據挖掘,也做得有聲有色的。
學好Linux
學好數學,包括高數、線性代數、概率和統計
學好數值分析
學好英語!!(哪怕是學其他小語種的,也需要學好英語,因為學術交流用的主要是英語)
學好主機拆裝、操作系統安裝、維護,基本上課題組看到計算機出身的,肯定會有這些活的
物理方面的,學好大學必修課普通物理,然後有時間可以去看看天文學和天體物理的基礎教材(另外一個問題下有大牛推薦書)
我是物理系旗下的碼農+電工,乾的活兒其實是硬體加速,主要為廣大物理學工作者寫code,加速code。算是替物理工作者干碼農活兒,替碼農硅農們拓展新的應用領域。天文方面主要是用GPU / FPGA加速一些N body模擬的代碼,比如RAMSES、Gadget之類。
正如 @Veri 所說,天文領域是付不起BAT那麼高的薪酬的,所以用到的軟體基本是各組自行開發的,多數秉承能用就好的原則,性能、重用性、可移植性一般不高。而且天文領域還是需要程序員有一些數學物理基礎的,對於流體、偏微分方程要有一些基礎,能夠跟天文工作者比較順暢地交流需求。我本科水過了四年物理,大多數東西都還給老師了,但是基礎知識還是剩下點的,然而交流需求時還是會有些吃力。個人感覺還是需要碼農跟天文學家相向而行,碼農們學點背景知識,天文學家也了解點計算機常識,以便把演算法用我們能理解的方式表達出來。
從EECS的同志們的角度來說,我覺得天文領域真的是一個待開發的處女地,望遠鏡獲取的數據每天都是按TB計的,是真正的大數據處理。相較於CSer傳統的大數據領域,比如AI,CV,資料庫等,天文實在少人涉足且富有挑戰性。天文學界拿不出BAT,FLAG那麼有競爭力的工資,所以在此我就不得不扯扯情懷了,畢竟生活不止北上廣的房貸車貸,還可以有雲貴的天文台和星空嘛。希望能有更多的碼農們來這個小眾領域來看看。
計算機好肯定是有好處的,起碼現在天文領域各種code滿天飛,不同語言,不同風格,而且多半對兼容問題不太仔細,所以有可能一篇文章用幾種code,並且安裝起來也很可能死費勁了。
目前鄙人在搞點流體模擬,具體來說是活動星系核周圍的塵埃環的輻射流體力學模擬。程序是用C寫的,基於義大利人搞的一個流體code,名叫Pluto,後來某個德國人在博士期間加上輻射轉移模塊(他博士期間就干那麼一件事);然後我們就找他合作,把他原來用在原恆星形成上的這套程序移植過來。剛拿到這個code時,一臉懵逼,在那位德國同行的指導下,才會用。後來又參加了幾個高性能計算班,東拼西湊學了點東西,能做的最多也就是加個模型,在某些步驟上稍微進行些優化。當然,這裡要用到並行運算。
除了流體模擬,還有做宇宙學的要用到Nbody模擬,經常也是上萬個核在跑程序。如果不做這些數值模擬,一般idl,Python差不多夠用了,甚至還有只用origin來工作的……
總的來說,計算機好的確是王道!也很羨慕那些計算機大神……我來試答一下,獻個丑。
不知道題主是CS專業的哪個方向呢?以我極其有限的見識,我身邊CS專業同學裡很多都是搞計算機網路,用的是PHP,JavaScript等等。而對這些語言,我目前沒有發現身邊有哪位同學用這些語言來做與天文相關的工作,倒是有不少的人轉行到CS,所以學了不少的PHP,JavaScript……
最多人使用的
C/C++,Fortran,IDL,Python
如果沒有Mac的話,那很可能要裝一個Linux系統,因為很多程序包在windows下運行不了。
題主是CS專業,應該有不少的基礎課是和數學系的學生一起上的,數學分析,高等代數等等,這些基礎課都是學過的。我認為物理第一大難關是數學,數學過關了,再補回些物理,建立相應的物理圖像,那麼搞天文就容易了。
如果做純理論,使用的計算機技術可能相對少一些,以我的個人經驗,最好學一下符號計算,因為少不了推導公式,例如,第三體引力攝動按偏心率二階展開有幾百項,然後這幾百項再用積化和差化簡,手推浪費時間且意義不大,而用Mathematica不用一秒鐘就將結果給出。常見的符號計算軟體:Mathematica,Maple和Python-Sympy。
如果是做模擬的話,可能就要用到別人的程序包或是開發屬於自己的程序,那用C,Fortran寫代碼也是很常見的事了。C和Fortran,至少得會一種,很多上一代流傳下來的代碼就是用C或Fortran寫的。雖然現在天文裡面很多人用IDL和Python,但講到計算速度肯定比不上C和Fortran這些經過編譯的語言。
做觀測的,有各種各樣處理觀測數據的軟體,像DS9,CLASS這些,這些具體到用到時候再學也是不晚的。
至於演算法的話,《演算法導論》那本書裡面的演算法幾乎沒什麼用,因為大多數時候都是用數值演算法。
舉個例子,保辛演算法和有限元演算法(這兩種演算法都是由我國的馮康先生提出的),很多N體模擬的程序包里都用到了保辛演算法,因為保辛演算法比經典的龍格庫塔有更好的穩定性和更小的截斷誤差。有限元法是求解偏微分方程的利器,但入門並不容易,花費的時間較長。MCMC(Monte Carlo Markov Chain)也是非常常用的演算法,我現在就用MCMC來做一些參數估計。
第一次回答問題,獻醜了。。。不是cs出身,半路學Linux,Windows至今只會簡單操作(很幸運木有被「毒害」)
如果是偏向天文數據的傳輸與管理類的,確實會要求很高,比如海量數據從天上掉下來,每天NT的量。。。我不做那方面,但是斜對門的老師組裡做這個,門口的展板上也介紹了一堆跟計算機關係很緊密的東東,可惜不懂。。。
如果是偏向數據分析或者理論,我覺得數值演算法很重要,老闆也一直強調這一點。這些做好了,可以自己寫程序完成各種複雜計算,不必太依賴前人的程序,同時自己又可以對其中的細節了如指掌,甚至有機會發現前人的不足或者漏洞試著從另一個角度來說說。
上面提到了很多比如精通C,Python,IDL什麼的,私以為這個可以理解為天文學需要掌握的計算機技術的「深度」,而實際上要做好天文,不僅要深度,廣度也不可少。
下面簡單列一下天文研究各個步驟中可能涉及到的各類軟體/語言。因為自己是做觀測的,所以從觀測方面來講。
拿到數據首先是Data reduction,就是將望遠鏡拍下來的數據(稱為raw data),處理成可以用於天文學研究的數據:
這裡一般都用稱為pipeline的程序來處理,編寫pipeline常用的語言有C,Python,IDL,IRAF,我還見過用gnuplot的。雖然很多時候不用你寫pipeline,但是可能需要你來debug(天文學家的編程水平你懂的)。IRAF等軟體不支持windows,所以你需要Linux或者OS X.
Data reduction完畢,之後是對數據的分析:
這裡常用的是IRAF,IDL,Python,當然還有神器Excel,然後還有DS9這類看fits文件的,作圖可能還會用到gnuplot(編程用什麼編輯器就不說了,自己選一個順手的就好)。此外不同的望遠鏡可能還會使用專用的軟體,比如ALMA的CASA。如果需要針對觀測結果進行模擬,就要接觸一些數值模擬的代碼,這時還需要了解一下Fortran. Photoshop這類軟體有時會用來疊加不同波段的圖像。
數據處理完畢,經過各種討論準備發表,寫論文需要Latex,管理看過的論文需要Papers/Mendeley這類文獻管理軟體。可能會需要用Photoshop/Illustrator這類圖像處理軟體修圖,乃至製作一些圖。
出去開會做報告,海報的製作需要Illustrator/Inkscape(powerpoint也不錯),做幻燈片需要powerpoint或者keynote或者libreoffice。為了讓廣大聽眾聽明白有些人還會製作一些動畫,這裡就可能用到Adobe Effects乃至3DS Max.
最後,你發了不少文章,可能會想到做一個個人主頁宣傳一下。這裡可能需要wordpress,想玩點花樣就需要PHP或者Javascript這類的。按照我老闆的說法:
1. 熟練操作UNIX系統(Linux或者OSX)
2. 熟練掌握一門腳本語言,IDL或者python
3. 熟練掌握相關的天文數據處理軟體(比如Xspec、iraf等)
一般來說對計算機技術的需求沒有那麼高,夠用就行;數據挖掘、大數據技術等,抱歉我似乎沒聽說過有人用過——不過數據挖掘中的一些常見方法(比如PCA)偶爾也會用到。
關鍵還是對處理數據後所得結果的分析,這需要比較好的數理基礎及天文學知識。
總的來說,只要計算機技術不是瓶頸問題,那麼夠用就行。
-
以前提到天文領域對比照片就能發現新星,相互祝賀,程序當然是小型機起,分時操作系統什麼都有,這些人精只能自己動手,一個衛星軌道專家利用引力讓衛星幾十次改變軌道加速嘆為觀止
坐等大神來回答,我也是學CS的,想未來從事天文方面的研究。個人覺得數據挖掘,大數據技術是必不可少的吧,很多是需要回歸運算之類的。
不是說天文領域用forth的比較多嗎??
linux系統肯定要熟練, 天文軟體和可能用到的軟體特別多, 最好能現學現會
推薦閱讀:
※英語差對學計算機有影響嗎?
※如何用機器學習進行天氣預報?
※海洋工程領域有哪些經典的教材(涉及傳統力學結構、機械電子、信息技術等各方面)?
※如果外星科技中也有電腦,但是他們基礎科學中的數字不是阿拉伯數字,還能做出與我們電腦一樣的功能么?
※目前超級計算機的性能局限是硬體還是軟體,為什麼?