抽象到不行 如果你是念文法商的,别被这样的名词吓到,它代表着一个程序的生命。 换个角度想像,在写作时,我们会把字句的结合叫做段落,这是就写文章的观点来看,它也是一个抽象的概念,当我们要告诉其他人正在讨论文章的哪部份时,我们不需要再重新引述整个段落的文字内容,而是告诉他们第几段就好;说到底它也是抽象的。 同样地,写程序的工程师经常会试着要创造可重复使用的编码字元,因为就像其他人一样,会懒惰,会不想做重复的事情。 大约 30 年前有个大改变,对于藉由可重复使用的部分来建立电脑程序,将它称作为物件(若是在建筑、车子或是家具设计,就很像是模组化),这样的设计模式称作为物件导向的程序编写,在 NeXT(Steve Jobs 在创立苹果后所成立的公司)的那段期间,这可是相当创新的,当时还将它视为未来程序发展的领航者。所以他们就将这样物件导向的程序拿去卖,并且决定将它取为在 C 语言架构下属于他们自己版本的名称,于是 Objective-C 就这样诞生了。 当 Apple 买下 NeXT 后继承了 Objective-C,并把他们公司的 OS 变成 Mac OSX。 云端时代,语言也需要新架构 当本质上发生改变的时候,你必须要去适应它,因此有时候你会需要一个新的语言。伴随着云端时代的来临,更是如此。 传统上来说,程序会依下载位置在你的电脑(装置)上跑,就像你所下载的 Apps 和安装到你电脑内的软体。然而有时候,某个叫作网络的东西,它有无限神奇的功能,能够把在某一台电脑运作的 App 传送到另一台电脑上,这些是网络 App,比如说像是 Facebook.com 或是 Twitter.com 等等。 在网络 App 你能够做很多事情并且看到即时的变化,Facebook.com 的 App 是在某处的伺服器运作,而不是你实际的电脑上。 要创一个 App 其实是需要花好一番功夫的,你需要不只是电脑能力和频宽传输,软体是一种服务,从云端来的服务,这些云端是需要花一大笔成本来操作的,所以最近一群聪明的人聚集在一起,然后创造叫作 Node.js 的开源平台,透过网络跑 App 以大幅降低成本。 许多开发商偏好将他们的 App 视为一种服务,因为一个网站有非常多的下载 App 的优势,像是免费下载,使 App 更便宜且在一定规模下运作,已经造成了 Node.js 一阵轰动,而 Node.js 是由 JavaScript 写出来的,Node 解释了为什么身为一个语言的 JavaScript 最近可以如此受欢迎。 并不是要说上图这几个受欢迎的语言已经霸佔了大部分的市场,其他的语言像是 Erlang,自从 App 开始移往云端后,它又重新的引起大家的兴趣。事实上,相较于图上这几个语言来说,受欢迎程度相当低的 Erlang 是创造 WhatsApp 的最大功臣。 一个程序语言,乘载了一群自造者的文化 一部份人创造的程序语言是为了其他人,因此他们承载着所有自造者的文化产物,部份文化产物又和其他的工程师群不同,他们各自走着属于自身文化产物下的版本,在电脑科学的歷史上这已经发生过无数次,也形成着最受欢迎语言的运算子重载(对已有的运算符号重新定义,赋予它另一种功能以适应不同的数据类型)。 有些语言对于逻辑思考的类型是有一定帮助的,一个你所用的语言会改变你的思考模式。就像是 Richard Pattis(一个加州大学尔湾分校资讯学的资深讲师)所说,「不只是为了不同的任务而有不同的语言工具,同时它们也形塑着你如何看待写程序的科技」。 这也是为什么会有这么多程序语言存在着,不同的语言代表着一群工程师脑中的思考逻辑模式,当然如果身为语言的使用者而非语言的创造者,太多的选择中要选择一个对工作最有帮助的,最能达成目标的那个。 |