偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

我只會(huì)Java一門(mén)語(yǔ)言夠用嗎?

開(kāi)發(fā) 前端
我們簡(jiǎn)要地了解了程序設(shè)計(jì)語(yǔ)言的發(fā)展歷史,從最開(kāi)始的對(duì)機(jī)器模型的封裝,到今天不斷降低的開(kāi)發(fā)門(mén)檻,程序設(shè)計(jì)語(yǔ)言的演化從未停止。我們也看到各種不同的編程風(fēng)格在經(jīng)歷了最初各自獨(dú)立的發(fā)展之后,開(kāi)始慢慢融合。

我只會(huì) Java 一門(mén)語(yǔ)言夠用嗎?

  • 面向?qū)ο笥脕?lái)組織程序是好,但我用C
  • 我用C++,函數(shù)式編程的好,跟我有什么關(guān)系
  • 動(dòng)態(tài)語(yǔ)言那些特性很好,可惜我用Java
  • ……

如果你這么想,說(shuō)明你被自己的看家本事給局限住了,這種思維方式會(huì)讓你即便學(xué)到了更多好東西,也無(wú)可奈何。

程序設(shè)計(jì)語(yǔ)言之間沒(méi)那么涇渭分明,多學(xué)幾門(mén)才能打破語(yǔ)言局限,讓設(shè)計(jì)更好落地??筛鶕?jù)項(xiàng)目特點(diǎn)選擇合適語(yǔ)言,也可以將其它語(yǔ)言一些優(yōu)秀的地方借鑒過(guò)來(lái)。Andrew Hunt和David Thomas在《程序員修煉之道》(The Pragmatic Programmer)中給程序員們提了一項(xiàng)重要的建議:每年至少學(xué)習(xí)一門(mén)新語(yǔ)言。

語(yǔ)言那么多,我要一個(gè)一個(gè)都學(xué)過(guò)去嗎?學(xué)語(yǔ)言到底在學(xué)啥?

程序設(shè)計(jì)語(yǔ)言本身也是一個(gè)軟件,它也包含模型、接口和實(shí)現(xiàn)。學(xué)習(xí)程序設(shè)計(jì)語(yǔ)言主要是為了學(xué)習(xí)程序設(shè)計(jì)語(yǔ)言提供的編程模型,比如:不同的程序組織方式,不同的控制結(jié)構(gòu)等等。不同編程模型會(huì)帶給你不同思考方式。

1 程序設(shè)計(jì)語(yǔ)言發(fā)展簡(jiǎn)史

程序設(shè)計(jì)語(yǔ)言都是圖靈完備:語(yǔ)言指定的數(shù)據(jù)操作規(guī)則能夠?qū)崿F(xiàn)圖靈機(jī)的全部功能。圖靈機(jī)是所有程序設(shè)計(jì)語(yǔ)言最底層的模型,程序設(shè)計(jì)語(yǔ)言都是在這個(gè)基礎(chǔ)上生長(zhǎng),包括計(jì)算機(jī)用0、1編碼。

計(jì)算機(jī)能夠識(shí)別的都是0、1,但用0、1寫(xiě)代碼太麻煩。所以,計(jì)算機(jī)誕生之初,就產(chǎn)生匯編語(yǔ)言,將那些0101操作符變成更容易記住的ADD、MOV等指令。

后來(lái)發(fā)現(xiàn)匯編寫(xiě)程序也痛苦,只有對(duì)計(jì)算機(jī)了如指掌,才能寫(xiě)好匯編。即便你熟練掌握一種計(jì)算機(jī)的匯編語(yǔ)言,換成另外一種計(jì)算機(jī),也得從頭學(xué)。

高級(jí)程序設(shè)計(jì)語(yǔ)言登場(chǎng)。

第一門(mén)高級(jí)程序設(shè)計(jì)語(yǔ)言Fortran,為程序設(shè)計(jì)語(yǔ)言的發(fā)展奠定基礎(chǔ)。數(shù)據(jù)開(kāi)始擁有類(lèi)型(類(lèi)型就是一種對(duì)內(nèi)存數(shù)據(jù)的解釋方式)。人們逐漸認(rèn)識(shí)到高級(jí)程序設(shè)計(jì)語(yǔ)言對(duì)開(kāi)發(fā)效率提高。

早期程序設(shè)計(jì)語(yǔ)言探索的集大成者就是C,它提供對(duì)計(jì)算機(jī)而言最恰當(dāng)抽象,屏蔽了計(jì)算機(jī)硬件諸多細(xì)節(jié)。隨高級(jí)程序設(shè)計(jì)語(yǔ)言發(fā)展,門(mén)檻逐步降低,可開(kāi)發(fā)的程序規(guī)模膨脹。搭著C語(yǔ)言的便車(chē)將面向?qū)ο蟮某绦蛟O(shè)計(jì)風(fēng)格成為主流,即C++。

各種高級(jí)程序設(shè)計(jì)語(yǔ)言已屏蔽很多細(xì)節(jié),但內(nèi)存管理始終沒(méi)有得到很好解決。人們?cè)缇驮趪L試各種屏蔽內(nèi)存管理的方式,但因早期計(jì)算機(jī)硬件性能有限,沒(méi)有一種成為行業(yè)主流。

后來(lái),計(jì)算機(jī)硬件能力得到大幅提升,這讓那些在故紙堆里的技術(shù)又煥發(fā)了新的活力。該階段勝者Java,一方面,支持面向?qū)ο缶幊?;還有垃圾回收機(jī)制——一種內(nèi)存管理的方式。

Java之路也很坎坷,因?yàn)樗缙谠趥€(gè)人電腦上的嘗試并不算成功。后來(lái)選擇了企業(yè)級(jí)開(kāi)發(fā)的賽道,才有機(jī)會(huì)展現(xiàn)自己的優(yōu)勢(shì)。因?yàn)槠髽I(yè)級(jí)服務(wù)器本身性能優(yōu)于個(gè)人電腦,對(duì)Java有更高的容忍度,它才得到了機(jī)會(huì),不斷進(jìn)行自身的優(yōu)化。

當(dāng)硬件不再是程序設(shè)計(jì)語(yǔ)言的發(fā)展障礙之后,程序設(shè)計(jì)語(yǔ)言又該如何發(fā)展呢?

從前面的歷程不難看出,程序設(shè)計(jì)語(yǔ)言的發(fā)展就是一個(gè)“逐步遠(yuǎn)離計(jì)算機(jī)硬件,向著待解決的問(wèn)題靠近”的過(guò)程。所以,程序設(shè)計(jì)語(yǔ)言接下來(lái)的發(fā)展方向就是探索怎么更好地解決問(wèn)題了。

前面說(shuō)的這些只是程序設(shè)計(jì)語(yǔ)言發(fā)展的主流路徑。

還有一條不那么主流的路徑也一直在發(fā)展,就是函數(shù)式編程的程序設(shè)計(jì)語(yǔ)言,這方面的代表就是LISP。在這條路上,剛開(kāi)始,很多人都是偏學(xué)術(shù)風(fēng)格的,關(guān)心解決方案是否優(yōu)雅,也就是說(shuō),如何解決問(wèn)題,如何一層層構(gòu)建抽象。也探索更多可能,垃圾回收機(jī)制就是從這里來(lái)的。但同樣受限于當(dāng)時(shí)硬件的性能,這條路上的探索在很長(zhǎng)一段時(shí)間之內(nèi)都只是一個(gè)小眾游戲。

當(dāng)硬件的性能不再成為阻礙,如何解決問(wèn)題開(kāi)始變得越來(lái)越重要時(shí),函數(shù)式編程終于和程序設(shè)計(jì)語(yǔ)言發(fā)展的主流匯合了。促進(jìn)函數(shù)式編程引起廣泛重視也還有一個(gè)硬件因素:多核。

多核的出現(xiàn),本身是IT行業(yè)應(yīng)對(duì)CPU發(fā)展進(jìn)入瓶頸期的一個(gè)解決方案,但它卻打破了很多程序員只習(xí)慣于利用一個(gè)CPU寫(xiě)程序的傳統(tǒng)方式。

為了利用多核的優(yōu)勢(shì),人們探索了各種方案,今天看到的各種并發(fā)模型、異步模型等解決方案都從那時(shí)開(kāi)始得到了蓬勃的發(fā)展。函數(shù)式編程在這個(gè)方面的探索就是利用自己聲明式的表達(dá)方式屏蔽了硬件差異。讓人們注意到函數(shù)式編程的價(jià)值的就是著名的MapReduce。

函數(shù)式編程興起,讓那些在函數(shù)式編程社區(qū)的探索隨之興起,比如,聲明式編程、DSL、元編程等等。一些后出現(xiàn)的程序設(shè)計(jì)語(yǔ)言開(kāi)始將面向?qū)ο蠛秃瘮?shù)式編程二者融合起來(lái),比如Scala。而像Java和C++這些“老戰(zhàn)士”則逐漸地將函數(shù)式編程的支持加入到語(yǔ)言之中。

相比于這些“正規(guī)軍”,還有一股力量也逐漸從邊緣走上了舞臺(tái),這就是動(dòng)態(tài)語(yǔ)言,代表語(yǔ)言有 Perl、Python、Ruby、PHP等等。以前,人們更喜歡用“腳本語(yǔ)言”稱(chēng)呼這類(lèi)程序設(shè)計(jì)語(yǔ)言,這個(gè)名字表明,它就是為了簡(jiǎn)單地解決一些特定的問(wèn)題而出現(xiàn)的。所以,在人們心目中,它們顯得并不那么正式。但它們簡(jiǎn)單、輕巧的特性有效地降低了入門(mén)的門(mén)檻,也贏得了一大批擁躉。

語(yǔ)言的發(fā)展就是一個(gè)互相學(xué)習(xí)和借鑒的過(guò)程。以前,動(dòng)態(tài)語(yǔ)言的弱項(xiàng)在于不適用于規(guī)模比較大的工程,而近些年來(lái),隨著動(dòng)態(tài)語(yǔ)言用戶(hù)的增多,配套的工具也逐漸多了起來(lái),動(dòng)態(tài)語(yǔ)言項(xiàng)目的規(guī)模也逐漸增大。而在主航道的程序設(shè)計(jì)語(yǔ)言,也紛紛向動(dòng)態(tài)語(yǔ)言學(xué)習(xí),努力地簡(jiǎn)化代碼編寫(xiě)的難度,比如,Java和C++都開(kāi)始支持類(lèi)型推演(Type Inference),目的就是讓程序員少敲幾個(gè)字符。

把程序設(shè)計(jì)語(yǔ)言當(dāng)作一個(gè)軟件,它的發(fā)展歷程就是一個(gè)逐漸添加新模型的過(guò)程,而其發(fā)展的結(jié)果就是如今的開(kāi)發(fā)門(mén)檻越來(lái)越低,能夠開(kāi)發(fā)的程序規(guī)模越來(lái)越大。

2 語(yǔ)法都是語(yǔ)法糖

C語(yǔ)言提供了對(duì)匯編指令直接的封裝。C++先是提供了面向?qū)ο螅髞?lái)又提供了泛型編程。Java把內(nèi)存管理從開(kāi)發(fā)者面前去掉了,后來(lái)引入的Annotation可以進(jìn)行聲明式編程。Ruby提供了動(dòng)態(tài)類(lèi)型,以及由Ruby on Rails引導(dǎo)出的DSL風(fēng)格。Scala和Clojure提供了函數(shù)式編程。Rust提供了新的內(nèi)存管理方式,而Libra提供的Move語(yǔ)言則把它進(jìn)一步抽象成了資源的概念。既然學(xué)習(xí)新的程序設(shè)計(jì)語(yǔ)言是為了學(xué)習(xí)新的編程模型,反過(guò)來(lái)也可以說(shuō),不提供新編程模型的語(yǔ)言是不值得刻意學(xué)習(xí)的。如果你已經(jīng)學(xué)會(huì)了一兩門(mén)程序設(shè)計(jì)語(yǔ)言,學(xué)習(xí)一門(mén)新的語(yǔ)言其實(shí)并不困難,因?yàn)槊糠N語(yǔ)言提供的新模型是有限的,基本的元素類(lèi)似,無(wú)非用不同關(guān)鍵字。

所以,學(xué)習(xí)新語(yǔ)言,只是在做增量的學(xué)習(xí),思維負(fù)擔(dān)并沒(méi)那么沉重。一旦對(duì)于程序設(shè)計(jì)語(yǔ)言的模型有了新的認(rèn)識(shí),你就能理解一件事:一切語(yǔ)法都是語(yǔ)法糖。

語(yǔ)法糖(Syntactic sugar)是英國(guó)計(jì)算機(jī)科學(xué)家彼得·蘭丁發(fā)明的一個(gè)術(shù)語(yǔ),指的是那些為了方便程序員使用的語(yǔ)法,它對(duì)語(yǔ)言的功能沒(méi)有影響。

懂得了語(yǔ)法糖的道理,要想更好地理解程序設(shè)計(jì)語(yǔ)言,一種好的做法就是打開(kāi)語(yǔ)法糖,了解一下語(yǔ)法是怎么實(shí)現(xiàn)的:

類(lèi)型是一種對(duì)內(nèi)存的解釋方式。class/struct是把有相關(guān)性的數(shù)據(jù)存放到一起的一種數(shù)據(jù)組織方式。Groovy、Scala、Kotlin、Clojure等JVM上的新語(yǔ)言,提供了一種不同于Java的封裝JVM的方式。……

3 總結(jié)

語(yǔ)言的發(fā)展并非一蹴而就,而是一個(gè)漸進(jìn)式的發(fā)展歷程。一些新的嘗試總會(huì)在一些不起眼的地方冒出來(lái),而且語(yǔ)言之間也在相互借鑒。

如果你能每年學(xué)習(xí)一門(mén)新語(yǔ)言,起初,你可以了解不同的編程模型。當(dāng)你的積累足夠多了,學(xué)習(xí)語(yǔ)言就是在跟蹤程序設(shè)計(jì)語(yǔ)言的最新發(fā)展了。

當(dāng)你手里有了足夠多的“武器”時(shí),你就可以打開(kāi)思路,運(yùn)用不同的方式解決問(wèn)題了,甚至把其它語(yǔ)言的好東西,借鑒到自己使用的語(yǔ)言中。

學(xué)習(xí)不同的程序設(shè)計(jì)語(yǔ)言可以幫助我們更好地落地設(shè)計(jì),也可以讓我們向不同的語(yǔ)言借鑒優(yōu)秀的方面。

我們簡(jiǎn)要地了解了程序設(shè)計(jì)語(yǔ)言的發(fā)展歷史,從最開(kāi)始的對(duì)機(jī)器模型的封裝,到今天不斷降低的開(kāi)發(fā)門(mén)檻,程序設(shè)計(jì)語(yǔ)言的演化從未停止。我們也看到各種不同的編程風(fēng)格在經(jīng)歷了最初各自獨(dú)立的發(fā)展之后,開(kāi)始慢慢融合。

對(duì)程序設(shè)計(jì)語(yǔ)言發(fā)展的了解,可以幫助我們理解一件事:一切語(yǔ)法都是語(yǔ)法糖。新的語(yǔ)法通常是在既有的結(jié)構(gòu)上不斷添加出來(lái)的,為的是簡(jiǎn)化代碼的編寫(xiě)。

《程序員修煉之道》鼓勵(lì)程序員們每年至少學(xué)習(xí)一門(mén)新語(yǔ)言,主要是為了讓我們?nèi)W(xué)習(xí)新的編程模型,而不提供新編程模型的語(yǔ)言不值得刻意去學(xué)習(xí)。

不過(guò),這就需要你對(duì)程序設(shè)計(jì)語(yǔ)言有著更深的理解。

本文轉(zhuǎn)載自微信公眾號(hào)「 JavaEdge」,作者「 JavaEdge」,可以通過(guò)以下二維碼關(guān)注。

轉(zhuǎn)載本文請(qǐng)聯(lián)系「 JavaEdge」公眾號(hào)。

責(zé)任編輯:武曉燕 來(lái)源: JavaEdge
相關(guān)推薦

2015-07-28 15:35:48

學(xué)習(xí)語(yǔ)言

2022-02-27 14:45:16

編程語(yǔ)言JavaC#

2022-11-04 11:11:15

語(yǔ)言入職項(xiàng)目

2019-11-18 11:00:58

程序員編程語(yǔ)言

2012-09-04 11:20:31

2014-09-26 09:29:12

Python

2016-05-19 13:55:19

Linux運(yùn)維編程語(yǔ)言

2022-02-21 11:15:59

編程語(yǔ)言后端開(kāi)發(fā)

2021-07-09 06:48:30

語(yǔ)言Scala編程

2012-03-28 09:40:40

JavaScript

2020-09-27 15:52:02

編程語(yǔ)言C 語(yǔ)言Python

2024-06-27 09:00:00

人工智能編程語(yǔ)言軟件開(kāi)發(fā)

2014-12-03 09:48:36

編程語(yǔ)言

2011-12-30 09:33:02

程序員語(yǔ)言

2013-07-26 10:23:04

2017-04-07 10:45:43

編程語(yǔ)言

2015-08-17 15:12:56

新技術(shù)語(yǔ)言框架

2017-04-07 16:49:00

語(yǔ)言程序編程

2018-07-16 12:36:48

編程語(yǔ)言PythonJava

2017-10-26 11:44:19

工具語(yǔ)言編寫(xiě)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)