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

為什么需要更多的編程語(yǔ)言

開發(fā) 后端 開發(fā)工具
如今計(jì)算機(jī)已經(jīng)普及到各個(gè)領(lǐng)域,我們擁有的計(jì)算機(jī)語(yǔ)言難道還不夠用嗎?最簡(jiǎn)單的答案就是:不夠。只要有人想學(xué)新語(yǔ)言,我們就會(huì)開發(fā)新語(yǔ)言。這么做的原因很簡(jiǎn)單,而且能讓反對(duì)機(jī)械自動(dòng)化的人都可以接受。

蘋果公司推出了一個(gè)新的 Mac/iOS 應(yīng)用開發(fā)語(yǔ)言——Swift。以下是一個(gè)門外漢對(duì)此的理解。

對(duì)于Swift編程語(yǔ)言的興奮勁逐漸消散之后,早上我醒來(lái)后在《紐約時(shí)報(bào)》看到了Farhad Manjoo的推文,他非常好奇,為什么還有人會(huì)需要新的編程語(yǔ)言。

I would love to read a somewhat but not extremely technical article on this question: Why are we still seeing new programming languages?

如今計(jì)算機(jī)已經(jīng)普及到各個(gè)領(lǐng)域,我們擁有的計(jì)算機(jī)語(yǔ)言難道還不夠用嗎?最簡(jiǎn)單的答案就是:不夠。只要有人想學(xué)新語(yǔ)言,我們就會(huì)開發(fā)新語(yǔ)言。這么做的原因很簡(jiǎn)單,而且能讓反對(duì)機(jī)械自動(dòng)化的人都可以接受。(向我們的Node.js項(xiàng)目中的高手Chris McClellan致敬,他和我討論了這個(gè)話題。)

教人編程

如果這個(gè)問(wèn)題可以看做”先有雞還是先有蛋”的問(wèn)題,那么我們先從蛋開始。許多語(yǔ)言(譬如我接觸的***個(gè)語(yǔ)言,BASIC)的開發(fā)初衷是為了將編程概念簡(jiǎn)單化,好讓初學(xué)者、愛好者甚至所有人都能掌握。計(jì)算機(jī)實(shí)際上是以二進(jìn)制代碼在“思考”。這個(gè)說(shuō)法的理由很簡(jiǎn)單:如果你將下達(dá)給機(jī)器的指令都用“是”或“否”(分別用1和0來(lái)表示)的問(wèn)題來(lái)表達(dá),那么計(jì)算機(jī)是不可能將事情搞得一團(tuán)糟的(當(dāng)然,如果你的代碼有錯(cuò)的話另當(dāng)別論)。這個(gè)天才的想法是一個(gè)名為克勞德·香農(nóng)的人想出來(lái)的,他在二戰(zhàn)后認(rèn)識(shí)到無(wú)線電信號(hào)在傳輸重要信息的時(shí)候非常地不可靠,這些信息現(xiàn)在你可能會(huì)交給計(jì)算機(jī)來(lái)存儲(chǔ)或者處理。

自二進(jìn)制代碼以后,幾乎每種的語(yǔ)言都是為了讓人們可以簡(jiǎn)易可靠地讀寫機(jī)器指令而存在的。如果要人用冗長(zhǎng)的二進(jìn)制來(lái)寫這些指令的話,他們會(huì)無(wú)聊到自摳雙目的。(譬如大寫字母A,用二進(jìn)制代碼表示的話,是01000001。小寫字母a是01100001。因此,這樣寫一個(gè)單詞就得花不少時(shí)間,更不用說(shuō)一般的程序都得有成千上萬(wàn)行的代碼了。)

如果某種語(yǔ)言使用了大量的通俗英語(yǔ)單詞而簡(jiǎn)單易讀的話,那么它是“冗長(zhǎng)”的。Objective-C,Apple的編程語(yǔ)言,其荒謬的冗長(zhǎng)程度臭名昭著,而這也為Apple贏得了“對(duì)用戶友好”的名聲。簡(jiǎn)單易用的并不僅僅是計(jì)算機(jī),還包括語(yǔ)言本身。以下是一段虛擬代碼,Objective-C中的函數(shù)就是這個(gè)樣子的。即使你從來(lái)沒(méi)有編過(guò)程,你也可以一星半點(diǎn)地明白程序員是想讓計(jì)算機(jī)做什么事

  1. [someInstance doSomethingWithObject:a andAnotherParam:b]; 

實(shí)際上,使用這么多“黑客工具”的原因在于 理解編程概念最愉悅的方式就是將其轉(zhuǎn)化成現(xiàn)實(shí)中的東西。如此一來(lái),剛開始編程的人就可以很好地接受這些概念。如果以上這些你聽來(lái)覺得無(wú)聊的話,并不意味著編程不適合你,只是你可以從硬件開始編程,而不要從軟件開始。

自我復(fù)制

和其他創(chuàng)新一樣,語(yǔ)言最開始也是由一些固執(zhí)的人想用自己的方式做事而創(chuàng)造出來(lái)的,“自己的方式”也就是“***方式”。下面這個(gè)故事發(fā)生在很久以前。

1971年的時(shí)候,人們用Lisp編程。斯坦福大學(xué)的一個(gè)工程師發(fā)明了一個(gè)工具來(lái)編輯Lisp代碼,今天的話我們會(huì)將其稱為原始的文件編輯器–就和Mac上的TextEdit應(yīng)用一樣。但它用起來(lái)相當(dāng)不直觀。

要替換字符的話,人們無(wú)法直接將其鍵入到文檔中,而得將一個(gè)字符先寫到TECO命令語(yǔ)言中,讓其切換到輸入模式,然后鍵入要替換的字符,在此期間被編輯的文檔并不會(huì)顯示在屏幕上。

然后你得敲擊ESC鍵來(lái)查看更改的地方,就和“保存并預(yù)覽”博文的草稿一樣??傊?,這事讓人挺痛苦的。

另一個(gè)來(lái)自于麻省理工的工程師,在訪問(wèn)帕羅奧多(斯坦福大學(xué)所在地)時(shí)看到了這項(xiàng)發(fā)明,回到劍橋市(麻省理工所在地)之后決定自己重做一個(gè)改進(jìn)版。他的同行們***開始為這種新的接口編寫“宏”–重用部分代碼來(lái)節(jié)省時(shí)間。當(dāng)他們將這些宏規(guī)范化到系統(tǒng)中之后,他們將其稱為 EMACS,“Editing MACroS”的縮寫。

你也許會(huì)說(shuō):“可這根本不算一個(gè)新語(yǔ)言啊。”的確如此,但和人類語(yǔ)言一樣,編程語(yǔ)言經(jīng)常也是從一個(gè)相近的語(yǔ)言發(fā)展而來(lái),當(dāng)發(fā)展到和原語(yǔ)言相當(dāng)不一樣的時(shí)候,就會(huì)被它的支持者們冠以“新語(yǔ)言”的名頭。EMACS的故事說(shuō)明了新語(yǔ)言被發(fā)明的另外一個(gè)原因:它們省事。

抽象

如果你是一個(gè)自由主義藝術(shù)家,不要被抽象這個(gè)術(shù)語(yǔ)嚇到–它在編程中的意思和生活中的意思其實(shí)是一樣的。試著這樣想下:在寫作的時(shí)候,我們將一段文字稱為“段落”。這是對(duì)一種想法,或者一些語(yǔ)句的概念作出的抽象。我們采用“段落”這個(gè)詞,于是我們向別人說(shuō)起這段文字時(shí)不用將整個(gè)段落的文字背誦出來(lái)。

同樣的道理,程序員總是在創(chuàng)建可重用的代碼,因?yàn)楹推渌祟愐粯?,他們很懶,不想做重?fù)勞動(dòng)。大約30年之前,產(chǎn)生了一項(xiàng)重大的開發(fā)運(yùn)動(dòng),計(jì)算機(jī)程序幾乎都可以用可重用部件組裝而成,程序員們將這些部件成為“類”。(這和建筑、汽車或家具設(shè)計(jì)中的模塊化運(yùn)動(dòng)相似。)這個(gè)設(shè)計(jì)模式就是人們熟知的“面向?qū)ο缶幊?rdquo;。NeXT,也就是喬布斯在Apple之后創(chuàng)立的公司,將這個(gè)創(chuàng)意無(wú)限的模式稱為編程的未來(lái)。他們對(duì)對(duì)“面向?qū)ο缶幊?rdquo;興趣十足,決定將其用來(lái)命名他們自己版本的C語(yǔ)言,于是Objective-C誕生了。Apple在收購(gòu)NeXT之后也繼承了Objective-C,并將OS變成了Mac OS X。

Swift,Apple編程語(yǔ)言的新生兒,就是基于Objective-C的另一個(gè)抽象層,Web開發(fā)人員因此可以用更合適他們風(fēng)格來(lái)寫代碼。但是當(dāng)程序運(yùn)行時(shí),Swift還是將其編譯成舊風(fēng)格的C語(yǔ)言代碼。很多語(yǔ)言都是這樣–僅僅是為了適應(yīng)開發(fā)者的風(fēng)格。另一個(gè)例子是CoffeeScript,它是另一種風(fēng)格的JavaScript,但是當(dāng)計(jì)算機(jī)編譯運(yùn)行程序時(shí),還是將CoffeeScript代碼轉(zhuǎn)換成JavaScript。(Swift和Objective-C的不同之處

#p#

新的基礎(chǔ)結(jié)構(gòu)

有時(shí)你會(huì)為了適應(yīng)構(gòu)造上的改變而需要一種新的語(yǔ)言。在“云”的概念出來(lái)之后,這種情況一直在發(fā)生。

傳統(tǒng)上程序是運(yùn)行在本地計(jì)算機(jī)上的。這些程序就是你下載并安裝在計(jì)算機(jī)上的那些“應(yīng)用”。有時(shí),被稱為“網(wǎng)絡(luò)”的東西可以將一臺(tái)計(jì)算機(jī)上的應(yīng)用運(yùn)行到遠(yuǎn)程的其它計(jì)算機(jī)上。這些被稱為網(wǎng)頁(yè)應(yīng)用,譬如Facebook.com或者Twitter.com。它們被稱為應(yīng)用程序,因?yàn)樗麄儾⒉粌H僅是靜態(tài)的信息頁(yè)面。在網(wǎng)頁(yè)應(yīng)用中,你可以做出動(dòng)作,并立即看到隨之產(chǎn)生的改變,雖然真正的Facebook.com應(yīng)用是運(yùn)行在某處的服務(wù)器上的,而不是在你自己的計(jì)算機(jī)上面。

創(chuàng)建這樣的應(yīng)用實(shí)際上代價(jià)是很高的:你耗費(fèi)大量的計(jì)算力和帶寬來(lái)將分發(fā)“作為服務(wù)的軟件”,也就是“運(yùn)行于云端”。運(yùn)行這些云要耗費(fèi)大量的金錢,尤其是用于冷卻服務(wù)器的空調(diào)。因此最近一群天才聚集到一起創(chuàng)造了一個(gè)被稱為Node.js的開源平臺(tái),它可以大幅度地降低網(wǎng)頁(yè)中運(yùn)行應(yīng)用的成本,至于原因,在此我不會(huì)有所涉及。

許多開發(fā)者更愿意他們的應(yīng)用能作為服務(wù)來(lái)運(yùn)行,因?yàn)榫W(wǎng)頁(yè)與可下載的應(yīng)用相比有更多優(yōu)點(diǎn),譬如:沒(méi)有東西可下載!Node.js可以讓網(wǎng)頁(yè)應(yīng)用大規(guī)模地降低運(yùn)行成本,因此參與到此項(xiàng)目中的人數(shù)有爆炸性地增長(zhǎng)。Node.js平臺(tái)使用JavaScript寫的。Node(以及其他的一些流行的庫(kù),譬如Meteor.js和Angular.js)解釋了為何JavaScript的使用人數(shù)最近呈爆炸性增長(zhǎng)。。

這并不是說(shuō)***的語(yǔ)言就獨(dú)領(lǐng)風(fēng)騷。其它語(yǔ)言譬如Erlang重新激起了人們的興趣,因?yàn)閼?yīng)用正在趨向于運(yùn)行在云端。實(shí)際上,正是這款并不怎么流行的語(yǔ)言 Erlang給WhatsApp提供了強(qiáng)勁的動(dòng)力。

文化

編程語(yǔ)言是由一些人為另外一些人創(chuàng)造的。因此,它們承載著創(chuàng)造者的文化印記,有些文化印記不為其他群體的工程師們喜愛,因此他們轉(zhuǎn)而創(chuàng)造出了自己的版本。這在計(jì)算機(jī)科學(xué)歷史中無(wú)數(shù)次上演,導(dǎo)致產(chǎn)生了許多流行語(yǔ)言的方言。最明顯例子就是***阿拉伯語(yǔ)編程語(yǔ)言。去年有篇關(guān)于Ramsey Nasser的文章,他創(chuàng)造了***個(gè)表情文字編程語(yǔ)言:

Nasser評(píng)論到:“我們使用的工具承載著它們創(chuàng)造者的文化設(shè)想。”當(dāng)Nasser創(chuàng)造قلب的時(shí)候,他在將true和false翻譯成阿拉伯語(yǔ)時(shí)遇到了困難。最終他使用了correct和incorrect這兩個(gè)詞,雖然兩者的概念并不完全吻合,但是他說(shuō)這最終演變成了一場(chǎng)他不得不和他父母以及朋友進(jìn)行的奇妙對(duì)話。Nasser旨在創(chuàng)造編碼的通用性:“Emojinal意在甩掉文化包袱。”

這是一個(gè)古老格言的另一種版本:你說(shuō)的語(yǔ)言改變了你思考的方式。有些語(yǔ)言有助于某些類型的思考;而有些有助于其他類型的。正如我們?cè)谒脑路輰懴碌奈淖炙f(shuō)

“語(yǔ)言不僅是針對(duì)不同工作的不同工具,它們還是可以描繪你思考編程的技術(shù)。”Richard Pattis說(shuō)。他是加州大學(xué)的信息學(xué)高級(jí)講師,他于1981年發(fā)明了Karel教育編程語(yǔ)言。Pattis建議多才多藝的程序員要擴(kuò)展思維的話,***學(xué)習(xí)不同編程范式的語(yǔ)言,從面向?qū)ο笳Z(yǔ)言(譬如C++/JAVA),到函數(shù)式語(yǔ)言(譬如ML和Haskell),到腳本語(yǔ)言(譬如Lisp和Python),到邏輯基礎(chǔ)語(yǔ)言(譬如Prolog),到低級(jí)語(yǔ)言(譬如C,Java虛擬機(jī)或者機(jī)器語(yǔ)言)。目標(biāo)不是為了熟練運(yùn)用這些語(yǔ)言,而是能從不同的角度來(lái)思考解決問(wèn)題。好的程序員不僅僅學(xué)習(xí)如何編程,還要學(xué)習(xí)核心概念,用其武裝自己的大腦,從而寫出高效的代碼來(lái)解決問(wèn)題。

程序員們,如果你對(duì)為何編程語(yǔ)言會(huì)興起(或衰落)有任何見解,請(qǐng)?jiān)赥witter上告訴我,請(qǐng)@chrisdannen

更新:在”抽象”部分提到的編程中設(shè)計(jì)模式的重要性是不可以低估的。在我發(fā)布這篇推文時(shí),開發(fā)人員Matt Drance回答了這個(gè)問(wèn)題。如果要我挑出一句話來(lái)回答的話,這句話也許是最精準(zhǔn)的了:新語(yǔ)言之所以興起,是因?yàn)槟壳暗脑O(shè)計(jì)模式(也就是目前的開發(fā)語(yǔ)言)可能無(wú)法滿足我們?cè)谖磥?lái)的需求了。

原文鏈接: Chris Dannen   翻譯: 伯樂(lè)在線 - 伯樂(lè)在線讀者

譯文鏈接: http://blog.jobbole.com/72508/

責(zé)任編輯:林師授 來(lái)源: 伯樂(lè)在線
相關(guān)推薦

2018-05-30 14:49:51

編程語(yǔ)言API語(yǔ)法

2022-12-12 07:30:59

編程語(yǔ)言架構(gòu)

2021-02-23 10:19:46

編程技能開發(fā)

2012-11-28 10:05:46

信息大數(shù)據(jù)

2017-11-14 11:12:50

Go語(yǔ)言編譯器

2015-04-08 10:46:11

2024-04-11 13:18:44

AIGCAGI技術(shù)

2012-04-05 09:49:10

Windows 8編程語(yǔ)言

2019-04-03 15:46:55

中國(guó)編程語(yǔ)言

2014-11-19 10:05:26

編程

2025-06-23 07:12:00

AI代碼助手AI模型人工智能

2012-04-11 09:19:08

Haskell編程

2023-08-28 09:05:46

LinuxJVM開源

2013-01-15 09:41:45

編程語(yǔ)言

2023-05-04 07:44:13

編程界小語(yǔ)言Java

2021-04-06 15:20:05

編程語(yǔ)言JavaIT

2014-12-23 09:34:47

動(dòng)態(tài)語(yǔ)言

2020-09-18 15:22:31

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

2023-08-30 10:20:34

編程語(yǔ)言Python

2022-07-26 23:43:29

編程語(yǔ)言開發(fā)Java
點(diǎn)贊
收藏

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