導航:首頁 > 程序命令 > 適合程序員看的雜志

適合程序員看的雜志

發布時間:2024-01-12 11:05:21

① 一個合格的程序員應該讀過哪些書

1、《代碼大全》 史蒂夫·邁克康奈爾
推薦數:1684

「優秀的編程實踐的網路全書,《代碼大全》注重個人技術,其中所有東西加起來, 就是我們本能所說的「編寫整潔的代碼」。這本書有50頁在談論代碼布局。」 —— Joel Spolsky

對於新手來說,這本書中的觀念有點高階了。到你准備閱讀此書時,你應該已經知道並實踐過書中99%的觀念。– esac

Steve McConnell的原作《代碼大全》(第1版)是公認的關於編程的最佳實踐指南之一, 在過去的十多年間,本書一直在幫助開發人員編寫更好的軟體。

現在,作者將這本經典著作全新演繹,融入了最前沿的實踐技術,加入了上百個嶄新的代碼示例, 充分展示了軟體構建的藝術性和科學性。 McConnell匯集了來自研究機構、學術界以及業界日常實踐的主要知識, 把最高效的技術和最重要的原理交織融會為這本既清晰又實用的指南。

無論您的經驗水平如何,也不管您在怎樣的開發環境中工作,也無論項目是大是小, 本書都將激發您的思維並幫助您構建高品質的代碼。

《代碼大全(第2版))》做了全面的更新,增加了很多與時俱進的內容,包括對新語言、新的開發過程與方法論的討論等等。

2、《程序員修煉之道》
推薦數:1504

對於那些已經學習過編程機制的程序員來說,這是一本卓越的書。 或許他們還是在校生,但對要自己做什麼,還感覺不是很安全。

就像草圖和架構之間的差別。雖然你在學校課堂上學到的是畫圖,你也可以畫的很漂亮, 但如果你覺得你不太知道從哪兒下手,如果某人要你獨自畫一個P2P的音樂交換網路圖,那這本書就適合你了。—— Joel

《程序員修煉之道:從小工到專家》內容簡介:《程序員修煉之道》由一系列獨立的部分組成, 涵蓋的主題從個人責任、職業發展,知道用於使代碼保持靈活、並且易於改編和復用的各種架構技術, 利用許多富有娛樂性的奇聞軼事、有思想性的例子及有趣的類比, 全面闡釋了軟體開發的許多不同方面的最佳實踐和重大陷阱。

無論你是初學者,是有經驗的程序員,還是軟體項目經理,《程序員修煉之道:從小工到專家》都適合你閱讀。

3、《計算機程序的構造和解釋》
推薦數:916

就個人而言,這本書目前為止對我影響醉倒的一本編程書。

《代碼大全》、《重構》和《設計模式》這些經典書會教給你高效的工作習慣和交易細節。 其他像《人件集》、《計算機編程心理學》和《人月神話》這些書會深入軟體開發的心理層面。 其他書籍則處理演算法。這些書都有自己所屬的位置。

然而《計算機程序的構造和解釋》與這些不同。 這是一本會啟發你的書,它會燃起你編寫出色程序的熱情; 它還將教會你認識並欣賞美; 它會讓你有種敬畏,讓你難以抑制地渴望學習更多的東西。

其他書或許會讓你成為一位更出色的程序員,但此書將一定會讓你成為一名程序員。

同時,你將會學到其他東西,函數式編程(第三章)、惰性計算、元編程、虛擬機、解釋器和編譯器。

一些人認為此書不適合新手。 個人認為,雖然我並不完全認同要有一些編程經驗才能讀此書,但我還是一定推薦給初學者。 畢竟這本書是寫給著名的6.001,是麻省理工學院的入門編程課程。 此書或許需要多做努力(尤其你在做練習的時候,你也應當如此),但這個價是對得起這本書的。

4、《C程序設計語言》
推薦數:774

這本書簡潔易讀,會教給你三件事:C 編程語言;如何像程序員一樣思考;底層計算模型。 (這對理解「底層」非常重要)—— Nathan

《C程序設計語言》(第2版新版)講述深入淺出,配合典型例證,通俗易懂,實用性強, 適合作為大專院校計算機專業或非計算機專業的C語言教材,也可以作為從事計算機相關軟硬體開發的技術人員的參考書。

《C程序設計語言》(第2版新版)原著即為C語言的設計者之一Dennis M.Ritchie和著名的計算機科學家Brian W.Kernighan合著的 一本介紹C語言的權威經典著作。 我們現在見到的大量論述C語言程序設計的教材和專著均以此書為藍本。 原著第1版中介紹的C語言成為後來廣泛使用的C語言版本——標准C的基礎。

人們熟知的「hello,world」程序就是由本書首次引入的,現在,這一程序已經成為所有程序設計語言入門的第一課。

5、《演算法導論》
推薦數:671

《代碼大全》教你如何正確編程; 《人月神話》教你如何正確管理; 《設計模式》教你如何正確設計……

在我看來,代碼只是一個工具,並非精髓。 開發軟體的主要部分是創建新演算法或重新實現現有演算法。 其他部分則像重新組裝樂高磚塊或創建「管理」層。

我依然夢想這樣的工作,我的大部分時間(>50%)是在寫演算法,其他「管理」細節則留給其他人…… —— Ran Biron

經典的演算法書,被亞馬遜網,《程序員》等評選為2006年最受讀者喜愛的十大IT圖書之一。
演算法領域的標准教材,全球多所知名大學選用
MIT名師聯手鑄就,被譽為「計算機演算法的聖經」
編寫上採用了「五個一」,即一章介紹一個演算法、一種設計技術、一個應用領域和一個相關話題。
6、《重構:改善既有代碼的設計》
推薦數:617

《重構:改善既有代碼的設計》清晰地揭示了重構的過程,解釋了重構的原理和最佳實踐方式, 並給出了何時以及何地應該開始挖掘代碼以求改善。 書中給出了70多個可行的重構,每個重構都介紹了一種經過驗證的代碼變換手法的動機和技術。

《重構:改善既有代碼的設計》提出的重構准則將幫助你一次一小步地修改你的代碼,從而減少了開發過程中的風險。

《重構:改善既有代碼的設計》適合軟體開發人員、項目管理人員等閱讀, 也可作為高等院校計算機及相關專業師生的參考讀物。

我想我不得不推薦《重構》:改進現有代碼的設計。—— Martin

我必須承認,我最喜歡的編程語錄是出自這本書:任何一個傻瓜都能寫出計算機能理解的程序, 而優秀的程序員卻能寫出別人能讀得懂的程序。—— Martin Fowler

7、《設計模式》
推薦數:617

自1995年出版以來,本書一直名列Amazon和各大書店銷售榜前列。 近10年後,本書仍是Addison-Wesley公司2003年最暢銷的圖書之一。 中文版銷售逾4萬冊。

就我而言,我認為四人幫編著的《設計模式》是一本極為有用的書。 雖然此書並不像其他建議一樣有關「元」編程,但它強調封裝諸如模式一類的優秀編程技術, 因而鼓勵其他人提出新模式和反模式(antipatterns),並運用於編程對話中。—— Chris Jester-Young

8、《人月神話》
推薦數:588

在軟體領域,很少能有像《人月神話》一樣具有深遠影響力並且暢銷不衰的著作。

Brooks博士為人們管理復雜項目提供了最具洞察力的見解。 既有很多發人深省的觀點,又有大量軟體工程的實踐。 本書內容來自Brooks博士在IBM公司System/360家族和OS/360中的項目管理經驗。

該書英文原版一經面世,即引起業內人士的強烈反響,後又譯為德、法、日、俄中等多種語言,全球銷量數百萬冊。 確立了其在行業內的經典地位。

9、《計算機程序設計藝術》
推薦數:542

《計算機程序設計藝術》系列著作對計算機領域產生了深遠的影響。 這一系列堪稱一項浩大的工程,自1962年開始編寫,計劃出版7卷,目前已經出版了4卷。

《美國科學家》雜志曾將這套書與愛因斯坦的《相對論》等書並列稱為20世紀最重要的12本物理學著作。 目前Knuth正將畢生精力投入到這部史詩性著作的撰寫中。

這是高德納傾注心血寫的一本書。—— Peter Coulton

10、《編譯原理》(龍書)
推薦數:462

我很奇怪,居然沒人提到龍書。(或許已有推薦,我沒有看到)。 我從沒忘過此書的第一版封面。 此書讓我知道了編譯器是多麼地神奇絕妙。- DB

② 《代碼整潔之道》epub下載在線閱讀,求百度網盤雲資源

《代碼整潔之道》([美] Robert C. Martin)電子書網盤下載免費在線閱讀

鏈接:https://pan..com/s/1iM-wXXGr5aY4JXApiLPwzg

提取碼:9es3

書名:代碼整潔之道

作者:[美] Robert C. Martin

譯者:韓磊

豆瓣評分:8.7

出版社:人民郵電出版社

出版年份:2020-2

頁數:387

內容簡介:

軟體質量,不但依賴架構及項目管理,而且與代碼質量緊密相關。這一點,無論是敏捷開發流派還是傳統開發流派,都不得不承認。本書提出一種觀點:代碼質量與其整潔度成正比。干凈的代碼,既在質量上較為可靠,也為後期維護、升級奠定了良好基礎。作為編程領域的佼佼者,本書作者給出了一系列行之有效的整潔代碼操作實踐。這些實踐在本書中體現為一條條規則(或稱「啟示」),並輔以來自實際項目的正、反兩面的範例。只要遵循這些規則,就能編寫出干凈的代碼,從而有效提升代碼質量。

本書閱讀對象為一切有志於改善代碼質量的程序員及技術經理。書中介紹的規則均來自作者多年的實踐經驗,涵蓋從命名到重構的多個編程方面,雖為一「家」之言,然誠有可資借鑒的價值。

作者簡介:

作者 | Robert C. Martin

世界級軟體開發大師,設計模式和敏捷開發先驅,敏捷聯盟首任主席,C++ Report前主編,被後輩程序員尊稱為「Bob大叔」。20世紀70年代初成為職業程序員,後創辦Object Mentor公司並任總裁。Martin還是一名多產的作家,至今已發表數百篇文章、論文和博客文章。除本書外,還著有《代碼整潔之道:程序員的職業素養》《敏捷軟體開發:原則、模式和實踐》《UML:Java程序員指南》等。

譯者 | 韓磊

互聯網產品與社區運營專家,技術書籍著譯者。曾任CSDN及《程序員》雜志副總經理、總編輯,廣東二十一世紀傳媒新媒體事業部總經理等職。現任AR初創企業亮風台廣州公司總經理。除本書外,還譯有《夢斷代碼》《C#編程風格》等書。與劉韌合著《網路媒體教程》,與戴飛合譯《Beginning C# Objects中文版:概念到代碼》。

③ 編程貓雜志是什麼雜志

編程貓雜志是針對少年兒童編程方面的期刊,是依據少年兒童的特點和現代教育理念設計的一種課程。學習編程推薦去童程童美,童程童美獨立開發的專有可視化在線少兒編程教育平台,針對6—18歲青少兒提供線上小班直播授課。

童程童美少兒編程的課程體系還涵蓋了樂高,機器人,Scratch,Python,APP手機軟體(JAVA),信息學奧賽(C/C++)等等。其中樂高、機器人的學習,屬於線下小班課,Scratch和信息學奧數是線上小班課,Python和APP(JAVA)使用的是線上線下雙向的學習路線。童程童美的師資由CEO親自掛帥,打造適合中國孩子的編程課程。韓少雲CEO、首席教育官,前亞信公司軟體事業部總工程師,軟體設計專家、課程設計專家和教師培訓專家。別的的老師也均擁有多年的教學經驗,以及自己擅長的教學領域。【學少兒編程可以提高孩子邏輯思維、專注力!】

想了解更多關於少兒編程的相關內容,推薦咨詢童程童美。童程童美實施5S(整頓、整理、清掃、清潔、素養)管理辦法,以加強對環境的長效管理,注重科技素質教育氛圍的營造,傳遞良好的教育理念,正向影響孩子意識,讓孩子在成長中心可以舒適學習。【童程童美少兒編程體驗課,點擊可免費報名試聽】

④ 《Windows程序設計》epub下載在線閱讀,求百度網盤雲資源

《Windows程序設計》(佩措爾德)電子書網盤下載免費在線閱讀

資源鏈接:

鏈接:https://pan..com/s/1RzM_2TB0AvVAL1RRHdFWkA

提取碼:ijkd

書名:Windows程序設計

作者:佩措爾德

譯者:方敏

豆瓣評分:9.1

出版社:北京大學出版社

出版年份:2010-9

頁數:1114

內容簡介:

《Windows程序設計(第5版 珍藏版)》是一本經典的Windows編程聖經,曾經伴隨著近50萬Windows程序員步入編程殿堂,成長為IT時代的技術精英。

作為Windows開發人員的必備參考,涵蓋基礎知識和中高級主題,全面地介紹了Windows程序設計所涉及的細枝末節,旨在幫助讀者從高屋見瓴的角度,建立完整的知識體系,為以後的職業生涯奠定良好的基礎。全書共3部分23章。第1~12章著重介紹基礎知識,第13~18章的主題為圖形,第19~23章涉及更多高級主題。

《Windows程序設計(第5版 珍藏版)》適合任何層次的Windows程序員閱讀和參考,是幫助他們梳理和建立Windows知識體系的理想讀物。


點擊鏈接進入英文版:

Programming Windows 5th Edition Book/CD Package

作者簡介:

Charles Petzold 從1984年開始編寫個人計算機程序,從1985年開始編寫Micrososft Windows程序。他在《Microsoft Systems Journal》1986年12月號上發表了第一篇關於Windows程序設計的雜志論文。從1986年到1995年,他為《PC Magazine》撰寫「Environments」專欄,給讀者介紹了Windows和OS/2程序設計的許多方面。

《Windows程序設計》由微軟出版社在1988年首次出版,後來被認為是這方面最好的導論性讀本。在1994年5月,Petzold作為僅有的七個人之一(並且是唯一的作家)被《Windows Magazine》和Microsoft公司授予Windows Pioneer獎,以表彰他對Microsoft Windows的成功做出的貢獻。

在1999年秋天,微軟出版社將出版Charles Petzold 面向普通讀者的第一本書。暫時命名為《Code: The Hidden Language of Computer Hardware and Software》,這本書專門介紹數字信息的本質以及計算機處理數字信息的方式。

⑤ 比較著名的電腦雜志都有哪些

1。計算機世界 太多廣告,技術少,可以開闊視野.
2。個人電腦 每期針對性太強,長期購買,您將變得非常專業(非IT軟技術)
3。電腦報 以前經常看,現在每年買合訂本,覺得報刊不如雜志方便
4。電腦愛好者 初學者進步的階梯
5。程序員 我沒有看過,但知道是專業的程序員雜志

⑥ 程序員的開源月刊《HelloGitHub》第 68 期

HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。

這里有實戰項目、入門教程、黑 科技 、開源書籍、大廠開源項目等,涵蓋多種編程語言 Python、Java、Go、C/C++、Swift...讓你在短時間內感受到開源的魅力,對編程產生興趣!

1、 toybox :該項目將 200 多個常用的 Linux 命令行工具,做成一個可執行文件。從而可以讓 Android 這種原本不支持 Linux 命令的系統,也得以用上 ls、find、ps 等命令。還可以用於快速構建最小的 Linux 環境

2、 the_silver_searcher :比 ack 更快的命令行搜索工具。速度快、功能強大、使用簡單,支持 Linux、Windows、macOS 操作系統,還能夠整合進 Vim 和 Emacs 等編輯器

3、 WindTerm :支持 SSH/Telnet/Serial/Shell/Sftp 的終端工具。雖然該軟體完全免費,但部分代碼尚未完全開源,對安全敏感的同學可以再觀望下

4、 wavefunctioncollapse :基於波函數坍縮 (WFC) 演算法,實現的無限城市示例。城市裡有房子、樓梯、樹木、連接房屋的通道,你可以在城市中自由移動、跳躍、飛行,但不論你怎麼移動都找不到盡頭,因為這座城市會無限延伸

5、 NETworkManager :管理和解決網路問題的工具。它集成了 IP 和埠掃描、WiFi 分析器、跟蹤路由、DNS 查詢等工具

6、 ppsspp :能夠運行在 Android 和 PC 上的開源 PSP 模擬器

7、 leocad :用來創建虛擬樂高模型的 CAD 工具。適用於 Windows、Linux 和 macOS 系統

8、 csshake :用 CSS 實現抖動效果

9、 MangoDB :真正開源的 MongoDB 替代品。它底層採用 PostgreSQL 作為存儲引擎,用 Go 語言實現了 MongoDB 協議,所以幾乎兼容所有的 MongoDB 庫,遷移起來毫無負擔。如果你用不到 MongoDB 的高級功能,還受限於它的開源協議,那麼這個項目可作為 MongoDB 的開源替代方案。它才剛剛起步,建議觀望一段時間或做足測試再用於生產環境

10、 caddy :用 Go 編寫的輕量級 Web 伺服器。它相較於 Apache、Nginx 這些知名 Web 伺服器,獨特點在於提供了編譯好的可執行文件,實現了真正的開箱即用。無需任何配置即可擁有免費的 HTTPS、自動把 Markdown 文件轉化成 HTML 等人性化的功能。如果是搭建中小型的 Web 服務,它完全夠用而且省時省心

11、 croc :可以讓任意兩台計算機,安全方便地傳輸文件和文件夾的工具。輕松實現端到端加密的跨平台文件傳輸,還支持多文件傳輸、傳輸中斷和恢復等功能

12、 jnativehook :獲取鍵盤和滑鼠事件世譽的 Java 庫。輕松監聽按鍵、滑鼠移動、點擊等事件

13、 spider-flow :用流程圖的方式編寫爬蟲的平台。無需寫代碼就可以快速完成一個簡單的爬蟲

14、 greenDAO :高性能的 Android ORM 庫。擁有體積小、易於使用、支持資料庫加密等特點,通過它 Android 開發者可以採用面向對象的方式操作資料庫,不需要再手寫和拼接 SQL 啦

15、 vue-color-avatar :純前端實現的矢量風格頭像生成網站。可以通過搭配不同的素材,生成個性化頭像。該項目使用 Vite + Vue3 開發,能夠幫助前端初學者熟悉 Vue3 語法並掌握項目搭建的相關知識

16、 colorfu :自動生頃腔成雀返衫由文字/顏色/圖片/紋理元素組成的壁紙

17、 pm2 :Node.js 的進程管理工具。它容易上手操作簡單,可以有效地提高 Node.js 程序運行的穩定性,支持自動重啟、負載均衡、不停服務重啟、性能監控等功能,多用於生產環境中管理、監控 Node.js 進程

18、 automa :通過圖形化界面拖拽功能模塊,實現瀏覽器自動操作的擴展工具。輕松實現自動填表、截圖、定時執行等操作。讓瀏覽器自動完成預設工作流的插件,從而減少重復性操作提高效率

19、 PyWebIO :快速構建 Web 應用的 Python 工具。通過該項目你可在不寫 HTML、CSS、JS 代碼的前提下,僅用 Python 快速完成一個包含數據展示、表單的小型 Web 應用頁面

20、 pottery :以 Python 的方式操作 Redis 的庫。忘記那些 Redis 命令吧,只要你知道如何使用 Python 字典,那麼你就會用這個庫操作 Redis

21、 zulip :完全開源的企業級即時通訊項目。後端採用 Python 語言實現性能足夠強大,功能齊全相當於開源、免費的 Slack,擁有拖拽上傳文件、代碼高亮、Markdown 語法、應用整合、容易接入的 API 等功能,還支持 Web、PC、iOS 和 Android 主流平台,眾多知名企業都在用,能夠有效地提高團隊溝通和辦公效率。同時該項目對新手用戶友好,如果你想加入一個不錯的 Python 開源項目,推薦你花時間研究下它一定會有所收獲

22、 webssh :簡單的 SSH 連接伺服器的 Python Web 應用。該項目後端採用 Tornado Web 框架和 Python SSH 庫 paramiko,前端是 TypeScript 寫的命令行前端組件 Xterm.js 實現。整個項目簡單還具有實用價值,可作為 Python Web 的實戰項目學習

23、 django-debug-toolbar :Django 的調試工具欄。可顯示當前請求和響應有關的各種調試信息,包括耗時、SQL、配置、性能等信息

24、 hyperfine :命令行基準測試工具。可用來查看和對比命令的耗時,支持多次運行的統計分析、結果導出等功能

25、 xcode-dev-cleaner :用於清理各種 Xcode 的緩存數據,釋放存儲空間。注意是清除 Xcode 緩存數據,不是卸載 Xcode 哈

26、 toml :更易讀和易於維護的配置文件格式。如果你厭倦了 INI 的局限性、層層嵌套的 JSON 和 YAML 令人心驚膽戰的縮進語法,不防給 TOML 一個機會,它支持多種數據類型、拋棄了縮進和嵌套,而且眾多流行編程語言都有對應的庫。TOML 已經足夠成熟,絕對值得一試

27、 waka-readme-stats :自動在 GitHub 個人首頁展示編程時長的工具。該項目通過 WakaTime 記錄用戶在 IDE 的使用時間,統計編程時長和數據,然後採用 GitHub Action 自動獲取並動態更新到 GitHub 個人首頁。輕而易舉地展示自己的編程時長

28、 PathPlanning :常見的路徑規劃演算法集合。項目包含了 Python 代碼實現、運行過程動畫以及相關論文

29、 howdy :為 Linux 系統提供人臉識別解鎖電腦的工具。通過電腦內置的攝像頭和紅外設備,實現了類似 Windows Hello 風格的身份認證,可用於登陸、鎖屏、sudo 等任何需要輸入密碼的地方

30、 The-Open-Book :開源的電子水墨屏閱讀設備。動手能力強的同學可跟著這個項目,從焊電路板開始親手製作出一個類 Kindle 的 4.2 英寸閱讀設備

31、 fl_chart :Flutter 圖表庫。它支持折線圖、條形圖、餅圖、散點圖和雷達圖

32、 ugo-compiler-book :《從頭開發一個迷你 Go 語言》該書教你從頭實現迷你 Go 語言,內容包含了詞法解析、語法樹構建、函數閉包、介面、CGO 的實現等內容

33、 archbase :教科書《計算機體系結構基礎》第三版

34、 spring-in-action-v6-translate :《Spring 實戰第 6 版》中文翻譯

35、 best_AI_papers_2021 :2021 年必看的人工智慧論文列表。該項目不是簡單的羅列論文,它不僅包含相關論文的代碼、效果展示,還有深入的文章和講解視頻。通過學習這些前沿的人工智慧論文,提前了解 AI 在未來更多可能性

36、 AnimeGANv2 :可以將圖片和視頻轉換成漫畫風格的工具。採用的是神經風格遷移+生成對抗網路(GAN)的組合,轉換速度快

感謝您的閱讀,如果覺得內容還不錯的話 求贊、求分享 ,您的每一次支持都將讓 HelloGitHub 變得更好!

⑦ 程序員一般通過怎樣的途徑獲取行業內的最新信息

我覺得程序員需要掌握最新的行業信息來完善自己的作品,不然很快就會被淘汰掉。

雖然我不是一個專業的程序員,但是我的專業也是計算機,所以,就我個人而言,我一般會去看一些論壇,貼吧,或者是微博,這些都是信息更新最快的地方,總能受益匪淺。

或者是可也關注微信公眾號,有些軟體開發或者是程序員論壇也會設立微信公眾號,也會在第一時間推送最新的信息。還有一些手機app也會有很多行業內最新的信息推送,現在大多數人們都是手機不離手,所以,可以在手機上多下載一些app或者是多關注一些微信公眾號,也是獲取行業內最新信息的有效途徑。

⑧ 《自然》評選改變科學的10個計算機代碼項目

從Fortran到arXiv.org,這些計算機編碼和平台讓生物學、氣候科學和物理學等學科的發展達到了真正「日新月異」的速度。

2019年,事件視界望遠鏡團隊讓世界首次看到了黑洞的樣子。不過,研究人員公布的這張發光環形物體的圖像並不是傳統的圖片,而是經過計算獲得的。利用位於美國、墨西哥、智利、西班牙和南極地區的射電望遠鏡所得到的數據,研究人員進行了數學轉換,最終合成了這張標志性的圖片。研究團隊還發布了實現這一壯舉所用的編程代碼,並撰文記錄這一發現,其他研究者也可以在此基礎上進一步加以分析。

這種模式正變得越來越普遍。從天文學到動物學,在現代每一項重大科學發現的背後,都有計算機的參與。美國斯坦福大學的計算生物學家邁克爾·萊維特因「為復雜化學系統創造了多尺度模型」與另兩位研究者分享了2013年諾貝爾化學獎,他指出,今天的筆記本電腦內存和時鍾速度是他在1967年開始獲獎工作時實驗室製造的計算機的1萬倍。「我們今天確實擁有相當可觀的計算能力,」他說,「問題在於,我們仍然需要思考。」

如果沒有能夠解決研究問題的軟體,以及知道如何編寫並使用軟體的研究人員,一台計算機無論再強大,也是毫無用處的。如今的科學研究從根本上已經與計算機軟體聯系在一起,後者已經滲透到研究工作的各個方面。近日,《自然》(Nature)雜志將目光投向了幕後,著眼於過去幾十年來改變科學研究的關鍵計算機代碼,並列出了其中10個關鍵的計算機項目。

這台CDC 3600型計算機於1963年交付給位於科羅拉多州博爾德的國家大氣研究中心,研究者在Fortran編譯器的幫助對其進行了編程

語言先驅:Fortran編譯器(1957年)

最初的現代計算機並不容易操作。當時的編程實際上是手工將電線連接成一排排電路來實現的。後來出現了機器語言和匯編語言,允許用戶用代碼為計算機編程,但這兩種語言都需要對計算機的架構有深入的了解,使得許多科學家難以掌握。

20世紀50年代,隨著符號語言的發展,特別是由約翰·巴克斯及其團隊在加州聖何塞的IBM開發的「公式翻譯」語言Fortran,這種情況發生了變化。利用Fortran,用戶可以用人類可讀的指令來編程,例如x = 3 + 5。然後由編譯器將這些指令轉換成快速、高效的機器代碼。

不過,這一過程仍然很不容易。早期的程序員使用打孔卡來輸入代碼,而復雜的模擬可能需要數萬張打孔卡。盡管如此,新澤西州普林斯頓大學的氣候學家真鍋淑郎(Syukuro Manabe)還是指出,Fortran讓非計算機科學家也能編程,「這是我們第一次能夠自己給計算機編程」。他和同事們利用這種語言開發的氣候模型是最早取得成功的模型之一。

Fortran發展至今已經到了第八個十年,它仍然廣泛應用於氣候建模、流體動力學、計算化學等學科,這些學科都涉及到復雜線性代數並需要強大的計算機來快速處理數字。Fortran生成的代碼速度很快,而且仍然有很多程序員知道如何編寫。古早的Fortran代碼庫仍然活躍在世界各地的實驗室和超級計算機上。「以前的程序員知道他們在做什麼,」美國海軍研究院的應用數學家和氣候模型師弗蘭克·吉拉爾多說,「他們非常注重內存,因為他們擁有的內存非常少。」

信號處理器:快速傅立葉變換(1965)

當射電天文學家掃描天空時,他們捕捉到的是隨時間變化的復雜信號雜音。為了理解這些無線電波的本質,他們需要看到這些信號作為頻率的函數時是什麼樣的。一種名為「傅里葉變換」的數學過程可以幫到研究人員,但它的效率很低,對於一個大小為N的數據集需要N^2次計算。

1965年,美國數學家詹姆斯·庫利和約翰·杜基想出了一種加速該過程的方法。快速傅里葉變換(FFT)通過遞歸(一種通過重復將問題分解為同類的子問題而解決問題的編程方法)將計算傅里葉變換的問題簡化為N log2(N)步。隨著N的增加,速度也會提高。對於1000個點,速度提升大約是100倍;100萬個點則是5萬倍。

這個「發現」實際上是一個再發現,因為德國數學家高斯在1805年就對此進行了研究,但他從未發表過。而詹姆斯·庫利和約翰·杜基做到了,他們開啟了傅里葉變換在數字信號處理、圖像分析、結構生物學等領域的應用,成為應用數學和工程領域的重大事件之一。FFT在代碼中的應用已有很多次,近年一個流行的方案是FFTW,被認為是世界上最快的FFT。

保羅·亞當斯是加州勞倫斯伯克利國家實驗室分子生物物理學和綜合生物成像部門的主任,他回憶稱,當他在1995年改進細菌蛋白質凝膠的結構時,即使使用FFT和超級計算機,也需要「很多個小時,甚至數天」的計算。「如果在沒有FFT的情況下嘗試做這些,我不知道在現實中應該如何做到,」他說,「那可能要花很長時間。」

分子編目:生物資料庫(1965年)

資料庫是當今科學研究中不可或缺的組成部分,以至於人們很容易忘記它們也是由軟體驅動的。過去的幾十年中,資料庫資源的規模急劇膨脹,影響了許多領域,但或許沒有哪個領域的變化會比生物學領域更引人注目。

蛋白質資料庫Protein Data Bank擁有超過17萬個分子結構的檔案,包括這種細菌的「表達子」(expressome),其功能是結合RNA和蛋白質合成的過程。

今天,科學家所用的龐大基因組和蛋白質資料庫源於美國物理化學家瑪格麗特·戴霍夫的工作,她也是生物信息學領域的先驅。20世紀60年代初,當生物學家們致力於梳理蛋白質的氨基酸序列時,戴霍夫開始整理這些信息,以尋找不同物種之間進化關系的線索。她與三位合著者於1965年發表了《蛋白質序列和結構圖譜》,描述了當時已知的65種蛋白質的序列、結構和相似性。 歷史 學家布魯諾·斯特拉瑟在2010年寫道,這是第一個「與特定研究問題無關」的數據集,它將數據編碼在打孔卡中,這使得擴展資料庫和搜索成為可能。

其他「計算機化」的生物資料庫緊隨其後。蛋白質資料庫Protein Data Bank於1971年投入使用,如今詳細記錄了超過17萬個大分子結構。加州大學聖地亞哥分校的進化生物學家拉塞爾·杜利特爾在1981年創建了另一個名為Newat的蛋白質資料庫。1982年,美國國立衛生研究院(NIH)與多個機構合作,成立了GenBank資料庫,這是一個開放獲取的DNA序列資料庫。

這些資料庫資源在1983年7月證明了其存在價值。當時,由倫敦帝國癌症研究基金會蛋白質生物化學家邁克爾·沃特菲爾德領導的團隊,與杜利特爾的團隊各自獨立報道了一個特殊的人類生長因子序列與一種導致猴子出現癌症的病毒蛋白質之間的相似性。觀察結果顯示了一種病毒誘發腫瘤機制——通過模仿一種生長因子,病毒會誘導細胞不受控制地生長。美國國家生物技術信息中心(NCBI)前主任詹姆斯·奧斯特爾說:「這一結果讓一些對計算機和統計學不感興趣的生物學家頭腦里靈光一閃:我們可以通過比較序列來了解有關癌症的一些情況。」

奧斯特爾還表示,這一發現標志著「客觀生物學的到來」。除了設計實驗來驗證特定的假設,研究人員還可以挖掘公共數據集,尋找那些實際收集數據的人可能從未想到的聯系。當不同的數據集連接在一起時,這種力量就會急劇增長。例如,NCBI的程序員在1991年通過Entrez實現了這一點;Entrez是一個可以讓研究人員在DNA、蛋白質和文獻之間自由檢索和比對的工具。

預測領先者:大氣環流模式(1969年)

在第二次世界大戰結束時,計算機先驅約翰·馮·諾伊曼開始將幾年前用於計算彈道軌跡和武器設計的計算機轉向天氣預測問題。真鍋淑郎解釋道,在那之前,「天氣預報只是經驗性的」,即利用經驗和直覺來預測接下來會發生什麼。相比之下,馮·諾伊曼的團隊「試圖基於物理定律進行數值天氣預測」。

新澤西州普林斯頓的美國國家海洋和大氣管理局(NOAA)地球物理流體動力學實驗室的建模系統部門負責人Venkatramani Balaji表示,幾十年來,人們已經熟知這些方程式。但早期的氣象學家無法實際解決這些問題。要做到這一點,需要輸入當前的條件,計算它們在短時間內會如何變化,並不斷重復。這個過程非常耗時,以至於在天氣狀況實際出現之前還無法完成數學運算。1922年,數學家劉易斯·弗萊·理查森花了幾個月時間計算德國慕尼黑的6小時預報。根據一段 歷史 記載,他的結果是「極不準確的」,包括「在任何已知的陸地條件下都不可能發生的」預測。計算機使這個問題變得很容易解決。

20世紀40年代末,馮·諾伊曼在普林斯頓高等研究院建立了天氣預報團隊。1955年,第二個團隊——地球物理流體動力學實驗室——開始進行他所謂的「無限預測」,也就是氣候建模。

真鍋淑郎於1958年加入氣候建模團隊,開始研究大氣模型;他的同事柯克·布萊恩將這一模型應用在海洋研究中。1969年,他們成功將二者結合起來,創造了《自然》雜志在2006年所說的科學計算「里程碑」。

今天的模型可以將地球表面劃分為一個個25公里 25公里的正方形,並將大氣層劃分為數十層。相比之下,真鍋淑郎和布萊恩的海洋-大氣聯合模型劃分的面積為500平方公里,將大氣分為9個層次,只覆蓋了地球的六分之一。盡管如此,Venkatramani Balaji表示,「這個模型做得很好」,使研究團隊第一次能夠通過計算機預測二氧化碳含量上升的影響。

數字運算機:BLAS(1979年)

科學計算通常涉及到使用向量和矩陣進行相對簡單的數學運算,但這樣的向量和矩陣實在太多了。但在20世紀70年代,還沒有一套普遍認可的計算工具來執行這些運算。因此,從事科學工作的程序員會將時間花在設計高效的代碼來進行基本的數學運算,而不是專注於科學問題。

加州勞倫斯利弗莫爾國家實驗室的Cray-1超級計算機。在BLAS編程工具於1979年問世之前,並沒有線性代數標准可供研究人員在Cray-1超級計算機等機器上工作

編程世界需要一個標准。1979年,這樣的標准出現了:基本線性代數程序集(Basic Linear Algebra Subprograms,簡稱BLAS)。這是一個應用程序介面(API)標准,用以規范發布基礎線性代數操作的數值庫,如矢量或矩陣乘法。該標准一直發展到1990年,為向量數學和後來矩陣數學定義了數十個基本常式。

美國田納西大學計算機科學家、BLAS開發團隊成員傑克·唐加拉表示,事實上,BLAS把矩陣和向量數學簡化成了和加法和減法一樣基本的計算單元。

美國德克薩斯大學奧斯汀分校的計算機科學家Robert van de Geijn指出,BLAS「可能是為科學計算定義的最重要的介面」。除了為常用函數提供標准化的名稱之外,研究人員還可以確保基於BLAS的代碼在任何計算機上以相同方式工作。該標准還使計算機製造商能夠優化BLAS的安裝啟用,以實現在其硬體上的快速操作。

40多年來,BLAS代表了科學計算堆棧的核心,也就是使科學軟體運轉的代碼。美國喬治·華盛頓大學的機械和航空航天工程師洛雷娜·巴爾巴稱其為「五層代碼中的機械」。而傑克·唐加拉說:「它為我們的計算提供了基礎結構。」

顯微鏡必備:NIH Image(1987年)

20世紀80年代初,程序員韋恩·拉斯班德在馬里蘭州貝塞斯達的美國國立衛生研究院的腦成像實驗室工作。該實驗室擁有一台掃描儀,可以對X光片進行數字化處理,但無法在電腦上顯示或分析。為此,拉斯班德寫了一個程序。

這個程序是專門為一台價值15萬美元的PDP-11小型計算機設計的,這是一台安裝在架子上的計算機,顯然不適合個人使用。然後,在1987年,蘋果公司發布了Macintosh II,這是一個更友好、更實惠的選擇。拉斯班德說:「在我看來,這顯然是一種更好的實驗室圖像分析系統。」他將軟體轉移到新的平台上,並重新命名,建立了一個圖像分析生態系統。

NIH Image及其後續版本使研究人員能在任何計算機上查看和量化幾乎任何圖像。該軟體系列包括ImageJ,一個拉斯班德為Windows和Linux用戶編寫的基於Java的版本;以及Fiji,這是ImageJ的分發版,由德國德累斯頓的馬克斯普朗克分子細胞生物學和遺傳學研究所的Pavel Tomancak團隊開發,其中包括關鍵的插件。「ImageJ無疑是我們所擁有的最基礎的工具,」布洛德研究所(由麻省理工學院和哈佛大學聯合創立)成像平台的計算生物學家貝絲·契米妮說,「我從來沒有和一個使用過顯微鏡,但沒有使用過ImageJ或Fiji的生物學家說過話。」

拉斯班德表示,部分原因可能是這些工具是免費的。但威斯康星大學麥迪遜分校的生物醫學工程師Kevin Eliceiri指出,另一個原因是用戶可以很容易地根據自己的需求定製工具。自拉斯班德退休後,Kevin Eliceiri的團隊一直領導著ImageJ的開發。ImageJ提供了一個看似簡單、極簡主義的用戶界面,自20世紀90年代以來基本上沒有改變。然而,由於其內置的宏記錄器(允許用戶通過記錄滑鼠點擊和菜單選擇的序列來保存工作流)、廣泛的文件格式兼容性和靈活的插件架構,該工具具有無限的可擴展性。該團隊的編程主管柯蒂斯·魯登表示,有「數以百計的人」為ImageJ貢獻了插件。這些新添加的功能極大擴展了研究人員的工具集,例如在視頻中跟蹤對象或自動識別細胞的功能。

Kevin Eliceiri說:「這個程序的目的不是做到一切或終結一切,而是服務於用戶的目標。不像Photoshop和其他程序,ImageJ可以成為你想要的任何東西。」

序列搜索器:BLAST (1990年)

可能沒有什麼能比把軟體名稱變成動詞更能說明文化的相關性了。提到搜索,你會想到谷歌;而提到遺傳學,研究者會立刻想到BLAST。

通過諸如替代、刪除、缺失和重排等方式,生物將進化中的改變蝕刻在分子序列中。尋找序列之間的相似性——特別是蛋白質之間的相似性——可以讓研究人員發現進化關系,並深入了解基因功能。在迅速膨脹的分子信息資料庫中,想要快速而准確地做到這一點並不容易。

瑪格麗特·戴霍夫在1978年提供了關鍵的進展。她設計了一種「點接受突變」矩陣,使研究人員不僅可以根據兩種蛋白質序列的相似程度,還可以根據進化距離來為評估它們的親緣關系。

1985年,弗吉尼亞大學的威廉·皮爾森和NCBI的大衛·利普曼引入了FASTP,這是一種結合了戴霍夫矩陣和快速搜索能力的演算法。

數年後,利普曼與NCBI的沃倫·吉什和斯蒂芬·阿特舒爾,賓夕法尼亞州立大學的韋伯·米勒,以及亞利桑那大學的吉恩·邁爾斯一起開發了一種更強大的改進技術:BLAST(Basic Local Alignment Search Tool)。BLAST發布於1990年,將處理快速增長的資料庫所需的搜索速度,與提取進化上更為遙遠的匹配結果的能力結合起來。與此同時,該工具還可以計算出這些匹配發生的概率。

阿特舒爾表示,計算結果出來得非常快,「你可以輸入搜索內容,喝一口咖啡,搜索就完成了。」但更重要的是,BLAST很容易使用。在一個通過郵寄更新資料庫的時代,沃倫·吉什建立了一個電子郵件系統,後來又建立了一個基於網路的架構,允許用戶在NCBI計算機上遠程運行搜索,從而確保搜索結果始終是最新的。

哈佛大學的計算生物學家肖恩·艾迪表示,BLAST系統為當時處於萌芽階段的基因組生物學領域提供了一個變革性的工具,即一種根據相關基因找出未知基因可能功能的方法。對於各地的測序實驗室,它還提供了一個新穎的動詞。「它是眾多由名詞變成動詞的例子之一,」艾迪說,「你會說,你正准備BLAST一下你的序列。」

預印本平台:arXiv.org (1991年)

20世紀80年代末,高能物理學家經常將他們已投稿的論文手稿副本郵寄給同行,徵求他們的意見——但只發給少數人。物理學家保羅·金斯帕格在2017年寫道:「處於食物鏈較低位置的人依賴於一線研究者的成果,而非精英機構中有抱負的研究人員則往往身處特權圈以外。」

1991年,當時在新墨西哥州洛斯阿拉莫斯國家實驗室工作的金斯帕格編寫了一個電子郵件自動應答程序,希望建立一個公平的競爭環境。訂閱者每天都會收到預印本列表,每一篇都與文章標識符相關聯。只需通過一封電子郵件,世界各地的用戶就可以從實驗室的計算機系統中提交或檢索論文,並獲得新論文的列表,或按作者或標題進行搜索。

金斯帕格的計劃是將論文保留三個月,並將內容限制在高能物理學界。但一位同事說服他無限期地保留這些文章。他說:「就在那一刻,它從布告欄變成了檔案館。」於是,論文開始從比各個領域如潮水般涌來。1993年,金斯伯格將這個系統遷移到互聯網上,並在1998年將其命名為arXiv.org,沿用至今。

arXiv成立已近30年,擁有約180萬份預印本,全部免費提供,而且每月有超過1.5萬份論文提交,下載量達3000萬次。十年前,《自然-光子學》(Nature Photonics)的編輯在評論arXiv創立20周年時寫道:「不難看出為什麼arXiv的服務會如此受歡迎,這個系統讓研究人員能快速而方便地插上旗幟,顯示他們所做的工作,同時避免投稿傳統同行評議期刊時的麻煩和時間成本。」

arXiv網站的成功也促進了生物學、醫學、 社會 學和其他學科同類預印本網站的繁榮。在如今已出版的數萬份關於新冠病毒的預印本中就可以看到這種影響。「很高興看到30年前在粒子物理學界之外被認為是異端的方法,現在被普遍認為是平淡無奇和自然而然的,」金斯伯格說,「從這個意義上說,它就像一個成功的研究項目。」

數據瀏覽器:IPython Notebook (2011年)

2001年,費爾南多·佩雷斯還是一位希望「尋找拖延症」的研究生,當時他決定採用Python的一個核心組件。

Python是一種解釋型語言,這意味著程序是逐行執行的。程序員可以使用一種稱為「讀取-評估-列印循環」(read–evaluate–print loop,簡稱REPL)的計算調用和響應工具,在其中輸入代碼,然後由解釋器執行代碼。REPL允許快速 探索 和迭代,但佩雷斯指出,Python的REPL並不是為科學目的而構建的。例如,它不允許用戶方便地預載入代碼模塊,也不允許打開數據可視化。因此,佩雷斯自己編寫了另一個版本。

結果就是IPython的誕生,這是一個「互動式」Python解釋器,由佩雷斯在2001年12月推出,共有259行代碼。十年後,佩雷斯與物理學家布萊恩·格蘭傑和數學家埃文·帕特森合作,將該工具遷移到web瀏覽器上,推出了IPython Notebook,開啟了一場數據科學革命。

與其他計算型Notebook一樣,IPython Notebook將代碼、結果、圖形和文本合並在一個文檔中。但與其他類似項目不同的是,IPython Notebook是開源的,邀請了大量開發者社區的參與其中。而且它支持Python,一種很受科學家歡迎的語言。2014年,IPython演變為Jupyter,支持大約100種語言,允許用戶在遠程超級計算機上 探索 數據,就像在自己的筆記本電腦上一樣輕松。

《自然》雜志在2018年寫道:「對於數據科學家,Jupyter實際上已經成為一個標准。」當時,在GitHub代碼共享平台上有250萬個Jupyter Notebook;如今,這一數字已經發展到1000萬個,在2016年引力波的發現,以及2019年的黑洞成像工作中,它們都發揮了重要的作用。佩雷斯說:「我們對這些項目做出了很小的貢獻,這是非常值得的。」

快速學習器:AlexNet(2012年)

人工智慧有兩種類型。一種是使用編碼規則,另一種則通過模擬大腦的神經結構來讓計算機「學習」。加拿大多倫多大學的計算機科學家傑弗里•辛頓表示,幾十年來,人工智慧研究人員一直認為後者是「一派胡言」。但在2012年,他的研究生亞力克斯·克里澤夫斯基和伊爾亞·蘇茨克維證明了事實並非如此。

在一年一度的ImageNet比賽中,研究人員被要求在一個包含100萬張日常物體圖像的資料庫中訓練人工智慧,然後在一個單獨圖像集上測試生成的演算法。辛頓表示,當時最好的演算法錯誤分類了大約四分之一的圖像。克里澤夫斯基和蘇茨克維的AlexNet是一種基於神經網路的「深度學習」演算法,它將錯誤率降低到了16%。辛頓說:「我們基本上把錯誤率減半了,或者說幾乎減半了。」

辛頓還指出,該團隊在2012年的成功反映了足夠大的訓練數據集與出色的編程,以及新出現的圖形處理單元的強大能力的結合。圖形處理單元是最初設計用來加速計算機視頻性能的處理器。「突然之間,我們可以將(演算法)運行速度提高30倍,」他說,「或者說,學習多達30倍的數據。」

真正的演算法突破實際上發生在三年前,當時辛頓的實驗室創建了一個神經網路,可以比經過幾十年改進的傳統人工智慧更准確地識別語音。「只是稍微好一點,」辛頓說,「但這已經預示了某些東西。」

這些成功預示著深度學習在實驗室研究、臨床醫學和其他領域的崛起。通過人工智慧的深度學習,手機能夠理解語音查詢,圖像分析工具能夠很容易地在顯微照片中識別出細胞;這就是為什麼AlexNet會成為眾多從根本上改變科學,也改變世界的工具之一。(任天)

閱讀全文

與適合程序員看的雜志相關的資料

熱點內容
黑上宏命令 瀏覽:644
mac解壓壓縮包有密碼 瀏覽:704
命令與征服知乎 瀏覽:561
小時代pdf 瀏覽:221
化工設備第三版答案pdf 瀏覽:465
防火卷簾控制器單片機程序 瀏覽:16
rdlcpdf 瀏覽:109
鏈表實現快速排序python 瀏覽:590
php輸出命令 瀏覽:987
d站app叫什麼名字 瀏覽:172
oppor系列如何解除應用加密 瀏覽:601
程序員那麼可愛姜逸城初戀 瀏覽:499
modbustcp編程 瀏覽:493
實況為什麼安卓看不了 瀏覽:129
Java多線程Queue 瀏覽:95
雲伺服器499元三年 瀏覽:980
nbd源碼 瀏覽:847
x86在arm上編譯 瀏覽:8
linux怎麼配置網路 瀏覽:307
程序員想要的小禮物 瀏覽:188