如果出現一種實用的新型計算機(未來計算機,比如基於憶阻器的),那麼需要學習新的編程語言么?
各種新型的計算機聽到不少了,比如量子計算機、光計算機、生物計算機、憶阻器計算機等。
或者說如果在新型計算機中直接使用現在的編程語言的話,能發揮出新型計算機全部能力么?退一步說,現在的高級語言中的概念能直接用到新型計算機的編程語言中么?我想深入學C++,因為據說C++學好了之後學其他編程語言都相當容易。但是現在技術發展這麼快,再加上C++的學習周期相當長,我怕沒等我C++學成型所有主流編程語言就都過時了。
憶阻器對現有的基礎科學影響不是很大。
因為計算模型上仍然是圖靈完備的,實際機器結構也不容易擺脫馮諾依曼體系。
實現細節和優化之類的倒是差很多,看起來比較像是放大版的 HD - SSD 的過渡,或者是像那種內存極為富餘的系統 —— 什麼東西都先扔到內存中再說。一些為現在的IO體系優化的結構以後可能都不太需要了,內存和外存的差別也可能會模糊化,所以持久化技術(比如ORM)可能在這一體系上消失,資料庫的實現會發生根本性的變化 —— 但是介面並不會,你仍然可以用SQL語句查詢對象。
比如基於B樹的文件系統,某些情況下就可以直接用Hash Table來替代。也許那個時候MS當年在Longhorn規劃時,雄心勃勃的WinFS就可以被實用化了。還有Smalltalk machine或者是Lisp machine這種高層次、富表達的Machine也有希望重搗漿糊,哦不,重出江湖。
至於題主問到的C++,其實這個完全不用擔心。因為C++在有生之年都是學不成的。計算機語言潮流的慣性很大的,一個流行了幾十年的語言(比如C),首先意味著有一堆能用的庫,其次意味著有一堆會這種語言的熟練程序員。這使得即便有新的語言,也會盡量和老的語言在各種方面兼容。除非人們學習一門語言門檻大幅度降低(比如都可以用自然語言寫程序了),編寫新的程序的效率大幅度提升(比如計算機自己能寫程序了),否則語言潮流很難發生本質突變的。再牛逼的架構,天下沒幾個人會用,也流行不開的。
不過注意到,這個世界有這樣一群怪人,他們對新事物抱有另一種態度。他們不擔心新語言會讓他們的知識和技能變得過時,相反,他們會覺得有新語言玩是一件非常令人興奮而歡喜的事情。這些對計算機有著更純粹興趣的人,可能才是您飯碗的最大威脅。樓主你知道什麼是「圖靈完備」么?除了 QC 其他都還是 RASP,變成基礎沒有變化。具體結構是細節問題。
是的,很有可能。
有一門量子計算的語言叫quipper(The Quipper Language),基於haskell的。當然,目前只能用經典計算機模擬低效運行,沒有「量子語言編譯器」,更沒有量子計算機可以執行編譯結果。現在的語言很可能無法表述非經典圖靈機模型的一些概念,也就無法發揮量子計算的性能。經典比特會變成量子比特,邏輯運算會變成酉矩陣,如果量子計算機上發展出某種高級語言,它需要的高級概念可能是目前我們難以想像的。當然,也會有大量的概念比如函數等會被繼續使用。經典計算機與量子計算機不是嚴格的替代關係,在可預見的未來,經典計算機依然會在它可以有效解決的問題上佔據絕對統治地位。我覺得現在談論取代經典計算機編程語言還為時過早。
quipper的一些示常式序http://arxiv.org/pdf/1406.4481v2.pdf你的擔心是對的解決辦法也是有的學 Lisp 就好了(逃
所有程序語言都會過期噠,我們的目標是自然語言編程啊。會進化的又不是只有硬體
&> 據說C++學好了之後學其他編程語言都相當容易。
先問是不是,再問為什麼。對,前提是現有計算機。對體系結構依賴比較強的都要跪。
依賴最強的就是C,C++,Rust。不過現在有一些很強大的LLVM衍生項目可以編譯C++到JavaScript這樣的對體系結構依賴比較弱的語言中,所以這個問題就變小了。
另外一方面就是對操作系統的依賴。這方面幾乎所有語言都繞不過。相比之下Scheme的核心比較小,對經典的位元組的概念的依賴比較弱,移植起來就簡單一些。
I/O抽象也是很重要的方面。C++的代碼對I/O的假設比較多,即使要移植,原有的庫可能都不能要了。
總的來說面向未來考慮可以注重函數式語言,這些語言對體系結構的依賴更弱,吸納了更多的新東西,如內存事務模型、無副作用、單子等等。先說我的結論:在可預見的將來,不會出現一種新型計算機從根本上動搖現有主流編程語言(包括但不限於 C / C++ / Java)的地位。
再說理由。題主所說的「新型計算機」,大致可以分成兩類:
1. 運用新技術大幅度地提升現有體系結構的框架下面某類部件的性能。
比如題主提到的「憶阻器」,不妨看看維基上關於它的應用的介紹(http://en.wikipedia.org/wiki/Memristor#Applications),這玩意主要是 HP 在搞,它的前景是可以做出新的存儲設備,能夠兼具內存的訪問速度和硬碟的容量,而且斷電之後數據不會丟失。這當然很具有革命性,但現有整個體系結構的大框架不會有變化,現有的程序該怎麼跑還是怎麼跑,現有的語言使用起來毫無壓力 —— 當然操作系統、程序庫、編譯器的實現會需要調整以充分利用新設備的潛力 —— 這種情況下,沒有任何理由需要改用新的編程語言。
2. 使用嶄新的體系結構、與現有結構完全不兼容的新計算機。
題主提到的光計算機、生物計算機、量子計算機屬於這一類。必須承認,如果這一類計算機成功地實用化並成為主流,那麼現有主流編程語言確實有可能被徹底顛覆。但很可惜,目前我沒有看到這樣的徵兆:- 光計算機。八九十年代熱過一陣子,但一直沒啥像樣進展,爭論很多,而且看它這個拿光器件實現與或非門的架勢,還是想往現有的體系結構裡面靠。
- 生物計算機 …… 對於這種拿生物分子在溶液里的化學反應來實現計算的想法 ……
- 量子計算機。這是目前看起來最靠譜的方向,但可惜自 IBM 成功實現 15 = 3 * 5 的因式分解之後,再也沒有看到量子計算在實現通用計算機方向上的進展,退相干的問題一直沒解決。之前一度熱炒的 D-Wave 量子計算機,是專門為運行量子退火演算法設計的專用設備,並非通用計算機,而且學界對 D-Wave 設備中究竟有沒有量子糾纏、算不算量子計算機一直都有爭議。
改編譯器就是了,動語言幹嘛?高級語言的優勢不就在這裡嗎?
學微電子的表示這些個計算機出來了,差不多我們就失業了。
樓主這種心態永遠學不到東西啊 而且有點杞人憂天
其實我想說,如果連C++這種東西都要找個理由避免去學的話,新架構直接就跪了吧!遠離吧!你想,馮諾依曼剛出來的時候,鼓搗這玩意的人連彙編都沒有,得打紙帶!雖然現在技術進步了,滑鼠鍵盤沒準語音VR都有,但是這種新體系架構上的新語言,絕壁不會比C++好學的。
於是就要等一個新架構上的容易學習的新語言出現?
好吧,有生之年。量子計算可以分為三種:
Quantum Annealer 量子退火
Analog Quantum 模擬量子
Universal Quantum 通用量子
Quantum Annealer 主要是用來找問題最優解。通俗來講就是模擬一個坑坑窪窪的能量平面,每一個坑就是一個本地最優解。比較容易實現,但是通用性不是很強
Analog Quantum 可以用來做量子模擬,比如搞幾十個人造粒子看看它們之間的相互作用和相變等等, 一般用於物理,化學,材料等學科的科研。實現難度一般,通用性一般
Universal quantum 用量子門(quantum gates)來做量子網路,可以實現一些比傳統演算法快很多的量子演算法,很難實現,通用性高
從上面三個角度來講 你所指的現在的高級語言中的概念並不能直接用到新型計算機的編程語言中。
對於生物計算機。。
編程語言是操作系統的一個附帶部分。編程語言就是針對操作系統的 I/O 介面。
編程語言源代碼經過編譯器,變成操作系統可執行的形式。這整個過程都是圍繞某個特定的操作系統進行的。(雖然有跨操作系統語言,那可以把虛擬機看作是操作系統 。java虛擬機就是一種操作系統)。
如果操作系統有本質上的變化,那麼編程語言就有本質的變化。
自從UNIX以來,IT人士就固化地認為,開天闢地以來,軟體就是針對「類unix"環境編程而已。
其實這只是歷史的一瞬。unix之前不是這樣的,那時候很長時間都是用打孔紙帶。那麼unix之後呢。現在的IBM WATSON, SIRI, MS Cornata 們,就是未來的操作系統。這些」智能系統「會完全覆蓋住unix windows,把unix變成不需要了解的底層,而編程只需要面向人工智慧界面。
現在我們面對siri,watson,cornata們,只能傻傻的喊hello google, 遠遠沒有發揮出這些系統的能力。如同面對強大的計算機,只能使用打孔紙帶交流一樣。未來當然要直接面向智能界面編程。
新的源代碼將直接交給智能界面,去解讀,而編程員完全不需要知道unix等變成底層的東西。由於智能界面的強大,源代碼將會更抽象,更接近自然語言。不需要編譯,由於智能界面強大的邏輯能力,將直接解讀源代碼並理解其意圖。未來10年將會出現直接面向智能界面編程的新語言。
現在強大的IBM WATSON, Siri, Cornata,用來改造醫療,快遞,翻譯,製造,炒股,但其實最需要使用這個強大人工智慧工具的,是軟體行業本身。雖然醫療,製造,翻譯,快遞行業都在IT 智能 幫助下突飛猛進,但編程行業本身,還和70年代c語言剛發明出來的時候差不多。這就叫燈下黑。憶阻器作為統一儲存的計算機體系確實是量子計算機普及之前的明星,想想看現有的計算體系里,數據都是拷貝來拷貝去,浪費計算機資源,而且速度還不一樣,那就會有等待影響計算。如果用憶阻器做為統一儲存,要重新開發計算機內核,那麼計算機就不用電來維持數據,電腦可以隨時開關不丟失計算,而且計算數據時不用載入內存再計算而是直接傳址,那將極大的增加速度減少功耗。還有的就是如果與FPGA聯合的話,用FPGA的現場可編程功能,那麼將極大的讓計算機體系更加靈活。
這個真不好說。就像工業革命時代,誰也 想不到將來會出現一堆人坐在電腦前編程序這種事。我們就是技工,像那個時代的會使用卡尺的工人一樣。將來要是出現了生物DNA革命,人的大腦突破了暫時記憶的本領(就是看過的,想過的馬上能永久記住並像計算1+1一樣熟練),那麼可能真的不需要編程序了,因為不需要計算機了。因為計算機為我們做的事情,很多都是在大量方案裡面窮舉,找出最佳答案。但人要是能什麼都記住了,所有的窮舉運算都能自己實現了,無需計算機幫忙。比如說從100億個網頁里找出有用的信息,我們要是能突破暫時記憶了,自己憑想像就能把這100億個網頁瀏覽一遍了。
摘自Wikipedia - Indirection:
A famous aphorism of David Wheeler goes:All problems in computer science can be solved by another level of indirection.
Humorous Internet memorandum RFC 1925 insists that:
(6) It is easier to move a problem around (for example, by moving the problem to a different part of the overall network architecture) than it is to solve it.
(6a) (corollary). It is always possible to add another level of indirection.
怕啥,反正大家都不會,同一個起跑點上大家都要重新學,那就意味著新的機會~你可以想像下你的老闆要跟你一起重新學習的情景嗎........你學的比他快你就是老闆了~
看題目以為題主學物理考研選擇方向,原來是選擇學習編程語言,這樣問題就簡單多了。以我對憶阻器的了解,這玩意離商用遠著呢,而量子計算機更是別提了。所以不用擔心這些技術對編程的影響。
歷史的車輪是不斷前進的,就像蒸汽機的出現,內燃機的出現,他們甚至原理互不相干,我們也不知道什麼時候計算機會被取締每一個新事物的出現都會引起生產力的提高和舊事物被淘汰,但是這種徹底毀掉一個行業的變動首先周期很長,其次這也不是我們個人可以預測的,所以還是該學學吧。
這些計算機硬體大多是針對某些專用領域的優化。比如說某些特殊的複雜函數,或者可以高度並行的演算法。(可以打個比方,你要算一個球飛到門內的軌跡,如果算個大概,把球當作一個質點,一個物理公式+計算機很容易求出一個經典的結果,但是如果你的精度要求高,把每個粒子的碰撞受力都算出來,呵呵,計算機算出來的時間弄不好比做一次試驗測定出來還慢)這些硬體能完成的任務,圖靈機都能完成。這些硬體不能完成的任務,圖靈機也可能完成一部分。主要的區別在於演算法優化。不同的機器優化方法肯定有區別。比如一台機器只有1個cpu,任務再多你也只能分時。但是,你有3個cpu的機器卻只能同時做一件事,效率就浪費了。所以如果你是1個cpu,你只要考慮分時就行了,多cpu,你還要考慮一個串列演算法能不能拆分成等價或者近似的並行演算法。假設你是專門從事這些方面的編程,雖然目前的編程語言可以完成任務,但是肯定有這樣那樣的不爽,就像現在的非同步回調被await async代替一樣,編程語言必然會革新,增加語法糖。但是本質的變化是不容易出現的。
推薦閱讀:
※在軟體開發的職業領域裡,在什麼樣的情況下才會遇到 : 計算機編程藝術《The Art of Computer Programming》以及 演算法導論《Introduction to Algorithms》 中的知識呢?
※函數調用過程中棧到底是怎麼壓入和彈出的?
※進入計算機領域學習的學生已經太多了嗎?
※軟體工程在工作中到底起多大作用?
※Computer Science(計算機科學)對數學要求有多高?