| 振宇's profileJUST FOR FUNPhotosBlogLists | Help |
|
|
TIOBE Programming Community Index for July 2006July Headline: Both C++ and Perl score all time lowsThe TIOBE Programming Community index gives an indication of the popularity of programming languages. The index is updated once a month. The ratings are based on the world-wide availability of skilled engineers, courses and third party vendors. The popular search engines Google, MSN, and Yahoo! are used to calculate the ratings. Observe that the TPC index is not about the best programming language or the language in which most lines of code have been written. The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system. The definition of the TPC index can be found here.
Long term trendsThe long term trends for the first 10 programming languages are depicted in the line diagram below.
|
| Position | Programming Language | Ratings |
|---|---|---|
| 21 | D | 0.454% |
| 22 | dBASE | 0.408% |
| 23 | IDL | 0.384% |
| 24 | ColdFusion | 0.380% |
| 25 | ABAP | 0.377% |
| 26 | Fortran | 0.370% |
| 27 | Awk | 0.321% |
| 28 | MATLAB | 0.319% |
| 29 | Prolog | 0.278% |
| 30 | T-SQL | 0.268% |
| 31 | Logo | 0.249% |
| 32 | Bash | 0.239% |
| 33 | RPG | 0.188% |
| 34 | LabView | 0.159% |
| 35 | S-Lang | 0.144% |
| 36 | CL | 0.135% |
| 37 | REXX | 0.133% |
| 38 | Forth | 0.123% |
| 39 | Smalltalk | 0.122% |
| 40 | Icon | 0.111% |
| 41 | Tcl/Tk | 0.110% |
| 42 | Lingo | 0.090% |
| 43 | Objective-C | 0.090% |
| 44 | VBScript | 0.085% |
| 45 | Postscript | 0.083% |
| 46 | Maple | 0.076% |
| 47 | OCaml | 0.074% |
| 48 | Bourne Shell | 0.074% |
| 49 | csh | 0.073% |
| 50 | ML | 0.070% |
The following list of languages denotes #51 till #100. Since the differences are relatively small between these languages, they are only listed (in alphabetical order).
From this month on we also measure the hits of Google Blogs. The languages that benefit from this are Java, Visual Basic, Ruby, and VB.NET. On the other hand, Ada, D, dBase, and Fortran have a lower rating now because they are not popular in blogs.
There was a funny mail from Marcelo Barros de Almeida. He suggested to search for the query "<language> sucks" (sorry for this term) to get a feeling about languages that are unpopular. The top 5 is 1. Java, 2. PHP, 3. C++, 4. C, and 5. Ruby.
In the tables below some long term trends are listed about categories of languages. The tables show that the object-oriented paradigm is gaining popularity very slowly, and compiled, statically typed languages are getting back in the spotlight.
| Category | Ratings July 2006 | Delta July 2005 |
| Procedural Languages | 50% | -2% |
| Object-Oriented Languages | 48% | +4% |
| Logical Languages | 1% | -1% |
| Functional Languages | 1% | +0% |
| Category | Ratings July 2006 | Delta July 2005 |
| Typed Languages | 65% | +3% |
| Untyped Languages | 35% | -3% |
A: Some languages are grouped together because they are very similar to each other. An example is the language entry Basic which covers Visual Basic, QBasic, Microsoft Basic, etc. VB.NET is an exception to this rule because it differs too much from classic Visual Basic versions. The ratings for a collection of languages is calculated by taking the maximum of all individual entries. BTW, assembly languages are not grouped in the index because they differ so much from each other in our opinion that they should be treated separately.
A: This is OK provided that the original source is referred to: www.tiobe.com.
A: No, we did not change our methodology at that time. Google changed its methodology. They performed a general sweep action to get rid of all kinds of web sites that had been pushed up. As a consequence, there was a huge drop for languages such as Java and C++. In order to minimize such fluctuations in the future, we added two more search engines (MSN and Yahoo) a few months after this incident.
讨论Web开发技术的历史,当然要先说说Web的起源。众所周知,Web这个Internet上最热门的应用架构是由Tim Berners-Lee发明的。Web的前身是1980年Tim Berners-Lee负责的Enquire(Enquire Within Upon Everything的简称)项目。1990年11月,第一个Web服务器nxoc01.cern.ch开始运行,Tim Berners-Lee在自己编写的图形化Web浏览器"WorldWideWeb"上看到了最早的Web页面。1991年,CERN(European Particle Physics Laboratory)正式发布了Web技术标准。目前,与Web相关的各种技术标准都由著名的W3C组织(World Wide Web Consortium)管理和维护。
从技术层面看,Web架构的精华有三处:用超文本技术(HTML)实现信息与信息的连接;用统一资源定位技术(URI)实现全球信息的精确定位;用新的应用层协议(HTTP)实现分布式的信息共享。这三个特点无一不与信息的分发、获取和利用有关。其实,Tim Berners-Lee早就明确无误地告诉我们:"Web是一个抽象的(假想的)信息空间。"也就是说,作为Internet上的一种应用架构,Web的首要任务就是向人们提供信息和信息服务。
很可惜,在Web应用日新月异的今天,许多搞技术的人似乎已经忘记了Web架构的设计初衷。他们在自己开发的网站或Web应用中大肆堆砌各种所谓的"先进"技术,但最终用户能够在这些网站或应用中获得的有价值信息却寥寥无几。这个问题绝不像评论者常说的"有路无车"或"信息匮乏"那么简单。一个Web开发者倘若忘记了Web技术的最终目标是提供信息和信息服务,他的愚蠢程度就丝毫不亚于一个在足球场上只知道卖弄技巧,却忘记了射门得分的大牌球星。从这个角度来说,评价一种Web开发技术优劣的标准只有一个,那就是看这种技术能否在最恰当的时间和最恰当的地点,以最恰当的方式,为最需要信息的人提供最恰当的信息服务。
Web是一种典型的分布式应用架构。Web应用中的每一次信息交换都要涉及到客户端和服务端两个层面。因此,Web开发技术大体上也可以被分为客户端技术和服务端技术两大类。我们先来谈谈客户端技术的萌芽和演进过程。
Web客户端的主要任务是展现信息内容,而HTML语言则是信息展现的最有效载体之一。作为一种实用的超文本语言,HTML的历史最早可以追溯到上世纪四十年代。1945年,Vannevar Bush在一篇文章中阐述了文本和文本之间通过超级链接相互关联的思想,并在文中给出了一种能实现信息关联的计算机Memex的设计方案。Doug Engelbart等人则在1960年前后,对信息关联技术做了最早的实验。与此同时,Ted Nelson正式将这种信息关联技术命名为超文本(Hypertext)技术。1969年,IBM的Charles Goldfarb发明了可用于描述超文本信息的GML(Generalized Markup Language)语言。1978到1986年间,在ANSI等组织的努力下,GML语言进一步发展成为著名的SGML语言标准。当Tim Berners-Lee和他的同事们在1989年试图创建一个基于超文本的分布式应用系统时,Tim Berners-Lee意识到,SGML是描述超文本信息的一个上佳方案,但美中不足的是,SGML过于复杂,不利于信息的传递和解析。于是,Tim Berners-Lee对SGML语言做了大刀阔斧的简化和完善。1990年,第一个图形化的Web浏览器"WorldWideWeb"终于可以使用一种为Web度身定制的语言--HTML来展现超文本信息了。
最初的HTML语言只能在浏览器中展现静态的文本或图像信息,这满足不了人们对信息丰富性和多样性的强烈需求--这件事情最终的结果是,由静态技术向动态技术的转变成为了Web客户端技术演进的永恒定律。
能存储、展现二维动画的GIF图像格式早在1989年就已发展成熟。Web出现后,GIF第一次为HTML页面引入了动感元素。但更大的变革来源于1995年Java语言的问世。Java语言天生就具备的平台无关的特点,让人们一下子找到了在浏览器中开发动态应用的捷径。1996年,著名的Netscape浏览器在其2.0版中增加了对JavaApplets和JavaScript的支持。Netscape的冤家对头,Microsoft的IE 3.0也在这一年开始支持Java技术。现在,喜欢动画、喜欢交互操作、喜欢客户端应用的开发人员可以用Java或JavaScript语言随心所欲地丰富HTML页面的功能了。顺便说一句,JavaScript语言在所有客户端开发技术中占有非常独特的地位:它是一种以脚本方式运行的,简化了的Java语言,这也是脚本技术第一次在Web世界里崭露头角。为了用纯Microsoft的技术与JavaScript抗衡,Microsoft还为1996年的IE 3.0设计了另一种后来也声名显赫的脚本语言--VBScript语言。
真正让HTML页面又酷又炫、动感无限的是CSS(Cascading Style Sheets)和DHTML(Dynamic HTML)技术。1996年底,W3C提出了CSS的建议标准,同年,IE 3.0引入了对CSS的支持。CSS大大提高了开发者对信息展现格式的控制能力。1997年的Netscape 4.0不但支持CSS,而且增加了许多Netscape公司自定义的动态HTML标记,这些标记在CSS的基础上,让HTML页面中的各种要素"活动"了起来。1997年,Microsoft发布了IE 4.0,并将动态HTML标记、CSS和动态对象模型(DHTML Object Model)发展成了一套完整、实用、高效的客户端开发技术体系,Microsoft称其为DHTML。同样是实现HTML页面的动态效果,DHTML技术无需启动Java虚拟机或其他脚本环境,可以在浏览器的支持下,获得更好的展现效果和更高的执行效率。今天,已经很少有哪个HTML页面的开发者还会对CSS和DHTML技术视而不见了。
为了在HTML页面中实现音频、视频等更为复杂的多媒体应用,1996年的Netscape 2.0成功地引入了对QuickTime插件的支持,插件这种开发方式也迅速风靡了浏览器的世界。在Windows平台上,Microsoft将客户端应用集成的赌注押到了1990年代中期刚刚问世的COM和ActiveX身上。1996年,IE 3.0正式支持在HTML页面中插入ActiveX控件的功能,这为其他厂商扩展Web客户端的信息展现方式开辟了一条自由之路。1999年,Realplayer插件先后在Netscape和IE浏览器中取得了成功,与此同时,Microsoft自己的媒体播放插件Media Player也被预装到了各种Windows版本之中。同样值得纪念的还有Flash插件的横空出世:1990年代初期,Jonathan Gay在FutureWave公司开发了一种名为Future Splash Animator的二维矢量动画展示工具,1996年,Macromedia公司收购了FutureWave,并将Jonathan Gay的发明改名为我们熟悉的Flash。从此,Flash动画成了Web开发者表现自我、展示个性的最佳方式。
除了编写HTML页面之外,客户端应用的开发者还可以利用一些成熟的技术将浏览器的功能添加到自己的应用程序中。从1992年开始,W3C就免费向开发者提供libwww开发库。借助libwww,我们可以自己编写Web浏览器和Web搜索工具,也可以分析、编辑或显示HTML页面。1999年,Microsoft在IE 5.0中引入的HTAs(HTML Applications)技术则允许我们直接将HTML页面转换为一个真正的应用程序。从1997年的IE 4.0开始,Microsoft为开发者提供了WebBrowser控件和其他相关的COM接口,允许程序员在自己的程序中直接嵌入浏览器窗口,或调用各种浏览器的功能,如分析或编辑HTML页面等。Windows 98及其后的Windows操作系统甚至还利用WSH(Windows Script Host)技术将原本只在浏览器中运行的JavaScript、VBScript变成了可以在WIN32环境下使用的通用脚本语言,这大概也可算作我们对Web客户端开发技术的一种巧妙利用吧。
与客户端技术从静态向动态的演进过程类似,Web服务端的开发技术也是由静态向动态逐渐发展、完善起来的。
最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器。一种名为SSI(Server Side Includes)的技术可以让Web服务器在返回HTML文件前,更新HTML文件的某些内容,但其功能非常有限。第一种真正使服务器能根据运行时的具体情况,动态生成HTML页面的技术是大名鼎鼎的CGI(Common Gateway Interface)技术。1993年,CGI 1.0的标准草案由NCSA(National Center for Supercomputing Applications)提出,1995年,NCSA开始制定CGI 1.1标准,1997年,CGI 1.2也被纳入了议事日程。CGI技术允许服务端的应用程序根据客户端的请求,动态生成HTML页面,这使客户端和服务端的动态信息交换成为了可能。随着CGI技术的普及,聊天室、论坛、电子商务、信息查询、全文检索等各式各样的Web应用蓬勃兴起,人们终于可以享受到信息检索、信息交换、信息处理等更为便捷的信息服务了。
早期的CGI程序大多是编译后的可执行程序,其编程语言可以是C、C++、Pascal等任何通用的程序设计语言。为了简化CGI程序的修改、编译和发布过程,人们开始探寻用脚本语言实现CGI应用的可行方式。在此方面,不能不提的是Larry Wall于1987年发明的Perl语言。Perl结合了C语言的高效以及sh、awk等脚本语言的便捷,似乎天生就适用于CGI程序的编写。1995年,第一个用Perl写成的CGI程序问世。很快,Perl在CGI编程领域的风头就盖过了它的前辈C语言。随后,Python等著名的脚本语言也陆续加入了CGI编程语言的行列。
1994年,Rasmus Lerdorf发明了专用于Web服务端编程的PHP(Personal Home Page Tools)语言。与以往的CGI程序不同,PHP语言将HTML代码和PHP指令合成为完整的服务端动态页面,Web应用的开发者可以用一种更加简便、快捷的方式实现动态Web功能。1996年,Microsoft借鉴PHP的思想,在其Web服务器IIS 3.0中引入了ASP技术。ASP使用的脚本语言是我们熟悉的VBScript和JavaScript。借助Microsoft Visual Studio等开发工具在市场上的成功,ASP迅速成为了Windows系统下Web服务端的主流开发技术。当然,以Sun公司为首的Java阵营也不会示弱。1997年,Servlet技术问世,1998年,JSP技术诞生。Servlet和JSP的组合(还可以加上JavaBean技术)让Java开发者同时拥有了类似CGI程序的集中处理功能和类似PHP的HTML嵌入功能,此外,Java的运行时编译技术也大大提高了Servlet和JSP的执行效率--这也正是Servlet和JSP被后来的J2EE平台吸纳为核心技术的原因之一。
Web服务端开发技术的完善使开发复杂的Web应用成为了可能。在此起彼伏的电子商务大潮中,为了适应企业级应用开发的各种复杂需求,为了给最终用户提供更可靠、更完善的信息服务,两个最重要的企业级开发平台--J2EE和.NET在2000年前后分别诞生于Java和Windows阵营,它们随即就在企业级Web开发领域展开了你死我活的拼争。平台之争让整个Web世界在最近的几年里不得安宁,但从某种意义上说,也正是这种针锋相对的竞争关系促使了Web开发技术以前所未有的速度提高和跃进。
J2EE是纯粹基于Java的解决方案。1998年,Sun发布了EJB 1.0标准。EJB为企业级应用中必不可少的数据封装、事务处理、交易控制等功能提供了良好的技术基础。至此,J2EE平台的三大核心技术Servlet、JSP和EJB都已先后问世。1999年,Sun正式发布了J2EE的第一个版本。紧接着,遵循J2EE标准,为企业级应用提供支撑平台的各类应用服务软件争先恐后地涌现了出来。IBM的WebSphere、BEA的WebLogic都是这一领域里最为成功的商业软件平台。随着开源运动的兴起,JBoss等开源世界里的应用服务新秀也吸引了许多用户的注意力。到2003年时,Sun的J2EE版本已经升级到了1.4版,其中三个关键组件的版本也演进到了Servlet 2.4、JSP 2.0和EJB 2.1。至此,J2EE体系及相关的软件产品已经成为了Web服务端开发的一个强有力的支撑环境。
和J2EE不同的是,Microsoft的.NET平台是一个强调多语言间交互的通用运行环境。尽管.NET的设计者试图以.NET平台作为绝大多数Windows应用的首选运行环境,但.NET首先吸引的却是Web开发者的目光。2001年,ECMA通过了Microsoft提交的C#语言和CLI标准,这两个技术标准构成了.NET平台的基石,它们也于2003年成为了ISO的国际标准。2002年,Microsoft正式发布.NET Framework和Visual Studio .NET开发环境。早在.NET发布之前,就已经有许多Windows平台的Web开发者迫不及待地利用Beta版本开发Web应用了。这大概是因为,.NET平台及相关的开发环境不但为Web服务端应用提供了一个支持多种语言的、通用的运行平台,而且还引入了ASP.NET这样一种全新的Web开发技术。ASP.NET超越了ASP的局限,可以使用VB.NET、C#等编译型语言,支持Web Form、.NET Server Control、ADO.NET等高级特性。客观地讲,.NET平台,尤其是.NET平台中的ASP.NET的确不失为Web开发技术在Windows平台上的一个集大成者。
如果说HTML语言给Web世界赋予了无限生机的话,那么,XML语言的出现大概就可以算成是Web的一次新生了。按照Tim Berners-Lee的说法,Web是一个"信息空间"。HTML语言具有较强的表现力,但也存在结构过于灵活、语法不规范的弱点。当信息都以HTML语言的面貌出现时,Web这个信息空间是杂乱无章、没有秩序的。为了让Web世界里的所有信息都有章可循、有法可依,我们需要一种更为规范、更能够体现信息特点的语言。
1996年,W3C在SGML语言的基础上,提出了XML(Extensible Markup Language)语言草案。1998年,W3C正式发布了XML 1.0标准。XML语言对信息的格式和表达方法做了最大程度的规范,应用软件可以按照统一的方式处理所有XML信息。这样一来,信息在整个Web世界里的共享和交换就有了技术上的保障。HTML语言关心的是信息的表现形式,而XML语言关心的是信息本身的格式和数据内容。从这个意义上说,XML语言不但可以将客户端的信息展现技术提高到一个新的层次,而且可以显著提高服务端的信息获取、生成、发布和共享能力。为了将XML信息转换为HTML等不同的信息展现形式,1999年,W3C制定出了XSLT标准。同一年,IE 5.0增加了对XML和XSLT的支持。
现在,网站的开发者可以直接使用XML语言发布信息了。针对不同的应用领域,人们还制定了许多专门的XML规范。例如,2001年W3C发布的SVG(Scalable Vector Graphics)1.0标准就是一种用XML语言表达的、全新的二维矢量图形格式。开发者可以用SVG格式描述大多数已有的Flash动画。与Flash格式相比,符合XML标准的SVG格式显然更有利于信息交换和共享。
Web本身就是一个最大的分布式应用系统。对于分布式开发而言,XML技术也大有用武之地。一个明显的事实是,如果能让分布式应用借助XML格式交换信息,那么,以往横亘在分布式架构上的信息交换难题也就迎刃而解了。1999年,W3C和相关的企业开始讨论设计基于XML的通信协议,2000年,W3C发布SOAP(Simple Object Access Protocol)协议的1.1版。人们把利用SOAP协议传递XML信息的分布式应用模型称为Web Service。2001年,W3C发布了WSDL(Web Services Description Language)协议的1.1版。SOAP协议和WSDL协议共同构成了Web Service的基础。随后,J2EE和.NET这两大企业级开发平台先后实现了Web Service,并将其视为平台的一项核心功能。
Web Service对于Web开发者的重要意义在于,当我们需要在不同的服务端、不同的客户端乃至不同的应用类型、不同的计算设备之间传递信息的时候,以往的分布式开发技术或者因为适应性不强,或者因为扩展能力不足,都难以满足现代Web开发的需要,而Web Service正好填补了这一空白。
2000年以后,随着Web应用的日益复杂,人们逐渐意识到,单纯依靠某种技术多半无法达到快速开发、快速验证和快速部署的最佳境界。研究者开始尝试着将已有的Web开发技术综合起来,形成完整的开发框架或应用模型,并以此来满足各种复杂的应用需求。
Microsoft在客户端的技术集成方面走在了最前面。1998年时Microsoft推出的Windows 98就可以在桌面上集成Web页面,这实际上是将资源管理器和Web浏览器的功能有效地结合了起来。2000年后,Microsoft陆续推出了MSN Explorer和与之相关的MSN在线服务。这一应用模型将Web浏览、视频点播、邮件处理、网上游戏、在线聊天等许多种用户常用的Web功能集成在了一个统一的界面中。从信息利用的角度看,MSN试图让用户在一个最舒适的环境中获取足够的信息,这种努力的确值得人们称道。另一个与客户端技术集成相关的例子是搜索引擎Google在2003年展示给大家的Google工具栏功能。虽然Google工具栏有炒作和广告的嫌疑,但安装Google工具栏之后的IE浏览器将信息浏览和信息检索有机地结合了起来,这种小小的功能改进确实是对用户的体贴和帮助。
在Web服务端,2000年以后出现了几种主要的技术融合方式。首先,越来越多的Web开发环境开始支持MVC(Model-View-Contorller)的设计模型,为开发者提供了全套的开发框架。实际上,J2EE和.NET平台本身就是这种开发框架的典型代表。其次,门户服务(Portal Server)和Web内容管理(Web Content Management)在最近几年里成为了应用集成的重点模型。这两种应用模型可以直接为开发者或最终用户提供构建Web应用的高级平台,可以让Web开发和信息发布工作大为简化。在商业软件领域,这一类应用的例子包括Microsoft的SharePoint、IBM的WebSphere Portal、FileNet的Web Content Manager等等。开源项目在Web开发框架和应用模型方面表现得非常积极,Struts、Jetspeed、jPortlet、Cocoon、Lenya、XOOPS等都是开源世界里与MVC开发框架、门户服务和Web内容管理相关的优秀解决方案。
当然,技术集成绝不等于技术堆砌。一些Web站点和Web应用的开发者把XML语言、MVC框架等时髦技术拼凑起来,却不管它们是否能适应具体的应用环境,结果,他们的系统要么运行效率低下,要么功能残缺不全。反之,一个值得注意的事实是,像新浪、搜狐或网易这样的门户网站,在他们的信息发布页面(如新闻页面)里,尽管信息内容时刻都在刷新,但Web服务器上存放的始终都是静态的HTML页面。这种"落后技术"的优点是,在大量并发访问的情况下,门户网站的响应速度仍然很快。深入到技术层面,我们通常会惊讶地发现,这些网站使用的大多是自行研发的Web内容管理系统。当网站的内容编辑提交新的信息时,系统会自动将信息转换为HTML格式,发布到Web服务器集群的每一个结点上。在新浪网的一个角落里,我们可以找到"新浪网站发布系统"的研发历程:
V 1.0(1997):基于文件的版本,实现新闻首页、正文和专题的发布。 V 1.1(1998/12):采用数据库后台、实现跨服务器发布,自动化程度高。 V 2.0(1999/3):创立模版和域的全新概念,奠定了该系列的基本设计思路。 V 2.1(1999/9):增加周边模块,如搜索、自动采集。 V 3.0(2000/1):优化传输方式,增加相关新闻和评论。 V 3C(2000/6):V3.0的编译版,也是商业版的原型。 V 3.1(2000/7):优化数据库结构,采用内存CACHE大幅提速,增加了集中监控功能。 V 3.1C(2000/8):商业用测试版本。 V 3.2(正在制作中):重点解决备份系统的自动化切换,在机制上实现永不宕机。
这一份有趣的历史记录再一次印证了我关于Web开发技术的基本观点:一种技术只要能为用户提供高水平的信息服务,它就是最好、最先进的技术。
所有人都在关心Web的发展前景,所有人都想知道十年以后的Web会长成什么样子。要回答这些问题,没有谁比W3C更有权威了。W3C明确地告诉我们,Web的未来是语义化的Web(Semantic Web)。今天的Web可以自如地生成、传递和展现各式各样的信息,但它还只是一个信息的"容器",很难揭示出信息本身的内容和特性。与此相对的是,未来的语义化Web是一种懂得信息内容的Web,是真正的"信息管理员"。
从技术角度看,XML语言统一了信息的表达方式,但这离揭示信息内容的目标还相距甚远。1998年,W3C和一些研究机构开始对元数据(Metadata)进行研究。元数据是描述数据的数据,可以揭示信息的内容特性。1999年,NetScape提出的RSS(Rich Site Summary)建议标准是用元数据技术描述新闻等信息内容的第一次尝试。1999年,W3C的研究小组提出了RDF(Resource Description Framework)标准草案。RDF在XML语法的基础上,规定了元数据的存储结构和相关的技术标准。使用RDF语言,我们可以用统一的、可交换的格式揭示出信息本身的各种特性。2001年,W3C又开始着手制定OWL(OWL Web Ontology Language)标准。OWL语言也是一种符合XML标准的语言,它比RDF又前进了一步,可以更加深入、细致地描述信息内容。在RDF和OWL语言的帮助下,我们能让Web上的信息内容变得更容易理解、更便于交换和共享。2003年,W3C成立了语义化Web Service研究小组(Semantic Web Services Interest Group),研究在Web Service中加入语义技术的相关问题。2004年2月,W3C宣布RDF和OWL标准正式成为W3C的建议方案,这标志着语义化Web的大厦已经破土动工。
随着语义化Web的诞生和发展,Web开发技术也必将经历更为重大的变革。可以预见的是,在未来的几年里,还会有许多新的开发技术或开发平台出现。从静态技术到动态技术,从开发平台到应用模型,从传统Web到语义化Web……为了让更多的人获得更有价值的信息服务,Web开发者们也许还会经历一次又一次的技术浪潮,还会面临更为严峻的技术挑战,但这和信息共享的最高目标相比,又算得了什么呢?
P对NP(多项式对非确定多项式)是指1971年Leonid Levin和Stephen Cook提出的一个关于容易被解答的问题(p型)以及相反的难以解答的问题(NP型)的数学理论问题。任何P型问题都能够按照“多项式时代”解答(一个多项式包含许多项,每个项又包括了一个变量或者是乘以一个系数的变量的幂。)一个P型的问题是位的数字的多项式,它用以描述问题的情况,一个P型问题的具体例子就如在map(link工具生成的一种文本文件,其中包含有被连接的程序的某些信息,例如程序中的组信息和公共符号信息等。)上找到从点A到点B的路径。一个NP型的问题需要花费大量的时间去解决,所花的时间甚至比它表述一个问题花的时间要多得多,其具体的实例如破解一个128位的数字密码。P对NP型问题在通讯中是非常重要的,因为它可以最终决定数字加密方法的有效性(或者是无效性)。 NP问题否认了在解决方法上的任何强力途径,因为找到正确的解决办法将需要亿万年或者更长的时间,即使世界上所有的超型计算机都用于完成这个任务。一些数学家们认为可以通过提高计算机同时尝试一个问题的每种可能性能力而克服这个障碍。这个假设称之为P等于NP。而其他人则认为如此的计算机没有可能发展(因为P并不等于NP)。如果它变成了P等于NP,那么不管数字密码有多复杂,它都将可能破解,因此也就是说所有的数字加密方法将都是没有价值的。
Suppose that you are organizing housing accommodations for a group of four hundred university students. Space is limited and only one hundred of the students will receive places in the dormitory. To complicate matters, the Dean has provided you with a list of pairs of incompatible students, and requested that no pair from this list appear in your final choice. This is an example of what computer scientists call an NP-problem, since it is easy to check if a given choice of one hundred students proposed by a coworker is satisfactory (i.e., no pair from taken from your coworker's list also appears on the list from the Dean's office), however the task of generating such a list from scratch seems to be so hard as to be completely impractical. Indeed, the total number of ways of choosing one hundred students from the four hundred applicants is greater than the number of atoms in the known universe! Thus no future civilization could ever hope to build a supercomputer capable of solving the problem by brute force; that is, by checking every possible combination of 100 students. However, this apparent difficulty may only reflect the lack of ingenuity of your programmer. In fact, one of the outstanding problems in computer science is determining whether questions exist whose answer can be quickly checked, but which require an impossibly long time to solve by any direct procedure. Problems like the one listed above certainly seem to be of this kind, but so far no one has managed to prove that any of them really are so hard as they appear, i.e., that there really is no feasible way to generate an answer with the help of a computer. Stephen Cook and Leonid Levin formulated the P (i.e., easy to find) versus NP (i.e., easy to check) problem independently in 1971.
对于产品的发布者来说,符号化是一个相当有效的营销手段。但对于接纳产品的个人来说,符号化就不一定是一种有益的东西了。未经审慎的判断,就简单接受他人营造的符号化概念,这往往意味着我们自己的浅薄或无知。比如说,在十几岁的小孩子里,“哈韩”、“哈日”的很多,但他们所“哈”的对象,往往是韩国人、日本人为了获得某种商业或国家利益所刻意营造的符号,比如某个明星、某种装束、某部电视剧等等,对于韩国、日本真正有内涵和有深度的文化或技术积淀,他们既没兴趣也没时间去追捧。再比如说,如果你是军事迷,那你千万不能凭借“军事题材”这个符号就去追捧央视在八一前后播放的电视剧,因为当那些电视剧在本质上都是“军事背景烘托爱情伦理主题”,其编导的主要用意是,无论军事迷们如何口诛笔伐,只要家庭主妇们深陷其中不能自拔就算完成任务。
所以,相信符号不如不相信符号,相信他人创造的符号不如相信自己的判断。即便在一个崇尚符号化的社会中,有独立思辨能力的个人仍然可以享受到最大的幸福——这种幸福可能来自我们在深入辨析后对某一符号的认可(如Scheme的“λ”),可能来自我们对他人创造、经营符号的意图的正确认识,也可能来自我们超脱了浮躁的符号社会后自然会得到的那一份纯真和宁静。
编程给人带来的最初兴奋的原因有部分是显而易见的,那就是:通过编程你可以支配一台计算机,你叫计算机做什么,它就做什么,永远准确无误,而且毫无怨言。这本身就很有意思。
真正使编程令人欲罢不能的是:你能让电脑做你想做的事,但是你还必须想出怎样做到的办法。我个人认为,计算机科学和物理科学有很多相似之处。两门学科都是在一个相当基础的层面上探讨一个体系是怎样运行的。当然,区别在于,在物理学中,你探究的是一个已经存在的客观世界的构成。而在计算机科学中,你却是在创造一个前所未有的体系。
在电脑世界中,你就是创世者,你对所发生的一切拥有最终的控制。如果你功力深厚,你可以是上帝——在一个较小的层面上。我这么说恐怕要得罪地球上近一半的人口了。
但是的确如此。你开始创造自己的世界,而唯一限制你的就是机器的性能,以及——在今天尤其如此——你自己的能力了。
人们对电脑如此着迷的原因之一,就是能从中获得自己创造一个新世界的体验,并领略到它到底能够成为什么样子。通过编程和电脑,你能够构筑一个新世界,有时其设计会是非常美妙的。但是在大部分时间中你却不能欣赏自己创造的美妙世界。我只不过是在编写执行某一任务的程序。这时你就不是在创造一个新世界,而是在电脑世界中解决一个具体的问题。问题通过将思考结果应用的问题中而得到解决。而能够坐下来,盯着电脑屏幕,将一个问题彻头彻尾地贯穿思考,就需要某种特定的人。比如,需要像我这种书呆子气十足的人。
操作系统是计算机的所有功能的基础。而创造一个操作系统则是最终的挑战。创造操作系统就像在为你创造的这片土地制订宪法,而其他在电脑上运行的程序则是为宪法所允许的普通法律。有时,这些法律根本讲不通,但这正是你要面对的问题。你需要找到解决办法,并能够意识到自己以正确的方法找到了正确的答案。
在电脑上也是这样。你可以鲁莽、生硬地行事,愚蠢地死死揪住问题不放,直到问题不再成为问题。也可以通过找到正确的方法,使问题突然消失。你可以从不同的角度看问题,直到灵光突现地认识到:问题之所以成为问题只在于你的方法错了。一个伟大的编程者能凭借其聪明的头脑就知道答案是什么。他知道怎样写出漂亮的程序,知道怎样采用一种全新的但最终会被证明是正确的方法。
不过还是很难说清楚,闭门冥思苦想地要找到解决某个问题的漂亮答案,为什么竟然有如此巨大的魅力?但是,你要是曾经有过找到更好方法的经历,你就会明白,这简直是无以伦比的感觉。
上面提到的那位Timothy Leary有一个朋友叫Douglas Rushkoff,他写了一本书叫做Cyberia.书中有这样一个观点:如果用网络将每一个人类连接在一起,那么地球的意识就会觉醒.网络扩张得非常快,它变得类似于大脑内部的神经网络.于是,地球本身就变成了一个神经系统.这个观点在第9话快结束的时候在说明舒曼共振的时候提到了.这直接暗示Lain就是所有联网的人类共同构成的地球的神经系统产生的意识...
剧中出现了好几个Lain,按出现顺序有现实世界的,Wired中的,Cyberia里气质狂野的,天空中出现的,对猥琐高手说バカ的,偷窥他人的,外星人样子的,绿衣能说会道的...
现实世界中的Lain具有两面,一面是内向,略有点迟钝的,另一面则精明且极具效率,并且还挺辣XD.
我猜想具备大量生物学知识,可以利用最尖端生物学成果的桥总研前雇员英利政美与Lain的"父亲"岩倉康男一起,将地球的意识,或者说灵魂放入自己以生物科技制造的没有灵魂的肉体中而创造,或者唤醒了Lain,就像SEELE取出17使徒的灵魂放入没有灵魂的肉体而造出了渚薰一样...(无责任猜想ED中就是Lain刚被创造的时候).此时的Lain是内向,有点迟钝的乖乖女的形象,因为这样比较容易控制嘛~
四方田千纱自杀后给Lain发来电子邮件,此后Lain开始上网."父亲"很爽快的给她买了最新式的NAVI,从她将自己登录为新NAVI的用户那一刻开始,她就具备了另一面:精明且极具效率,并且还挺辣的Lain.之后在Cyberia遇到的枪击事件,对着持枪的少年说"everyone is connected"的,就是她的另一面第一次亮相.
但是,Lain的这一面决不是凭空出现的,我认为这一面就是Wired中的Lain,我是这么想的:现实世界的Lain是以"Protocol 7"为基础的由全人类组成的网络产生的意识.而Wired网络是全人类组成的网络的子集,所以Wired中的Lain就是真实世界中的Lain的一面,当现实世界的Lain上网的时候,她就表现为Wired中的Lain.随着剧情的发展,"Protocol 7"使真实世界与Wired的界限渐渐被打破,Lain的这两面渐渐也融合在一起.
再说Cyberia中气质狂野的Lain~根据Layer:09 "PROTOCOL"中在Lain的房间里做的实验,Lain播放音轨44后,Taro即看到幻觉,所以Cyberia中那个气质狂野的Lain是Knights利用JJ那里的设备接收并在Cyberia的中投入的幻影.我觉得这个气质狂野的Lain的存在目的就是为了测试影响人的意识从而控制人的行为.那个持枪的少年就是个不幸被选中的家伙...正好他吃了Accela正在最High的状态,在他身上做实验成功可能性比较高罢~Knights通过Lain的幻象对他意识的影响使他举枪乱射,但他发觉这个影响并反抗它,所以他对当时正在Cyberia里的Lain大喊你为什么要让我这样做你有什么权力让我这样做......至于为什么是这样一种造型和气质,我认为是为了切合Cyberia的气氛~
天空中出现的Lain嘛~应该又是一次幻觉投射,Knights干的好事,真八卦,这对一个女生而言实在太过分了!但是我觉得这也暗示了Lain是"神",...之后Lain与Hudgson教授对话完毕后,同样站在十字的正中央.
那个将电脑穿在身上的龅牙猥琐高手看到的Lain,应该是Knights的标记上那"第14人",我认为她是Knights创造的真实世界的Lain的模拟程序,作用是对他人的意识施加影响或加以控制,Cyberia中的气质狂野的Lain就是这个Lain在真实世界的投射.这个Lain与Wired中的Lain都存在于Wired上,也很容易混淆...但是如果借用EVA中Dummy Plug的概念,就容易理解一些.
偷窥他人的Lain我想出自现实世界的Lain的潜意识,是Lain的能力和力量增长的副产物,是人类潜意识中窥私欲望的体现..."Protocol 7"的存在目的就是为了无阻碍的分享所有数据,包括记忆,哪怕是隐私.
出现在Alice房门前的外星人Lain最有意思,为什么会是外星人的身体呢?我觉得这是她为了向Alice解释偷窥她的Lain不是自己,而将自己的形象投射到Alice脑中,但是为了强调自己与那个偷窥的Lain不同,所以用了外星人的形象.另一方面我觉得这是制作者又一次暗示,如果知道著名神棍丰丹尼肯的"众神之车",就可以知道他的"上帝是外星人"的说法,我觉得这里又是一次对"Lain是神"的暗示.
13话中,Lain Reset了整个世界后出现了绿衣能说会道的Lain,这个Lain前面说的都是废话,重点在最后几句,她先把Lain定义为女神,然后又劝她再Reset一次.因为神没有信者的话就不能称为神,所以她的意思其实就是将世界Reset为所有人均以Lain为信仰的状态.但是Lain本就因为重写记忆和Reset世界吃了大亏,让Alice受伤害,让自己不得不放弃在现实世界中的存在,所以她不肯再Reset世界.我认为这个能说会道的Lain同样出自Lain的潜意识,是人类潜意识中控制欲的体现,而Lain不肯去通过自己的能力控制他人,这个能说会道的Lain自然也就消灭了.
之后,她在她的"父亲"的指点下明白自己是爱所有人的,接受自己是神的事实.地球的意识,地球的神祇,Lain的"神格"相当于Gaea.
Knights的全称是东方算法骑士团(Knights of the Eastern Calculus).在剧中是个在网络世界里技术和力量都很强大的组织,他们的头子就是衰男英利政美.Knights的成员将英利政美奉为神,并为他服务.
Knights这个组织名可能来自历史上的圣殿骑士团(The Knights Templar Of The Templars).Wikipedia上是这样描述圣殿骑士团的:
圣殿骑士团(The Knights Templar Of The Templars)正式名称是"基督和所罗门圣殿贫苦骑士团"(The Poor Knights Of CHRIST),历史上著名的三大骑士团之一.第一次十字军东侵(1096-1099)之后,为保卫地中海东岸的十字军国家,约于1118年在耶路撒冷建立的宗教性封建军事组织.法国香槟区的贵族雨果·德·帕英(Hugh De Payens)和其他八名骑士于1119年创立了该组织.主要由法国骑士组成.骑士团最初驻扎在毗邻救世主教堂的耶路撒冷圣殿山上的阿克萨清真寺的一角,而这个清真寺正是建在传说中所罗门王的神殿(The Temple Of Solomen)上.据说因骑士团首领最早驻地在耶路撒冷圣殿附近而得名.
如果仔细看Knights的标记,在中央的圆规上方,有一个红色十字形的人形居于中央,两边则共有14个白色较小的人形.,红色代表血,十字形代表十字架,那么中间的十字形人形可能就代表自杀抛弃肉体的英利政美,这也可能说明英利政美以神自居,旁边的14个白色较小的人形可能说明除英利政美外,Knights的正式成员有14人.不过耶稣的门徒应该是13位,这多出来的1位我无责任猜想是Knights创造的模拟Lain.至于其他13人里哪个是犹大,我也无责任猜想是Taro,虽然他自己说他不是Knights的核心成员~
圆规可以象征计算方法,圆规上方的月牙形状仿佛在盛接滴下来的血(圣杯?),月亮本身又有神秘的意象.中央的金字塔本身也包含高超的数学原理,如果仔细数数金字塔最上面那些浅颜色的"石块",同样是14块.难道这是Knights在强调自己的技术高超又神秘神圣兼而有之? =v=
除了圣殿骑士团之外,Knights与"Knights of the Lambda Calculus"也有关系~虽然被称为"骑士团",但是兰姆达算法骑士团(Knights of the Lambda Calculus)其实只是大学里研究员间互相开玩笑的结果,并没有实际的组织,所以,在玲音第8话(RUMOR)中就有一个女声提到Knights其实是美国大学生的玩笑.Wikipedia上是这样描述兰姆达算法的:
Lambda演算是一套用于研究函数定义、函数应用和递归的形式系统.它由 Alonzo Church 和 Stephen Cole Kleene 在 20 世纪三十年代引入,Church 运用 lambda 演算在 1936 年给出 判定性问题 (Entscheidungsproblem) 的一个否定的答案.这种演算可以用来清晰地定义什么是一个可计算函数.关于两个 lambda 演算表达式是否等价的命题无法通过一个通用的算法来解决,这是不可判定性能够证明的头一个问题,甚至还在停机问题之先.Lambda 演算对函数式编程有巨大的影响,特别是Lisp 语言.
Lambda演算可以被称为最小的通用程序设计语言.它包括一条变换规则 (变量替换) 和一条函数定义方式,Lambda 演算之通用在于,任何一个可计算函数都能用这种形式来表达和求值.因而,它是等价于图灵机的.尽管如此,Lambda 演算强调的是变换规则的运用,而非实现它们的具体机器.可以认为这是一种更接近软件而非硬件的方式.
Knights在Wired出现之前就已经在研究利用人的集体无意识,相信英利政美正因为这个才与他们合作.他们所参与的有Psyche芯片,Cyberia的枪击案件,PHANTOMa游戏无法退出事件,Lain家的散热系统爆炸事件,天空中的Lain事件,谋杀龅牙猥琐电脑高手事件.
所有的这些,都让人觉得Knights的目的是一个阴谋.
在Lain的世界里,Wired就相当于我们现在正使用的Internet,一个世界性的电脑互联网络.这个网络曾使用的第6代网络协议即将到达它的性能上限,于是新一代的网络协议"Protocol 7"就被提上了前台.跟我们的世界类似,协议,标准总是掌握在大公司手中.在Lain的世界,"Protocol 7"由桥总研(Tachibana General Lab)雇员英利政美(Masami Eiri)主持开发.但是此君私自在"Protocol 7"中加入了利用舒曼共振,无需任何设备就可以使人完全连接到Wired以及与他人互相连接的功能,这个举动被其东家发现后立刻被解雇.英利政美被解雇后一星期在山手线自杀.
根据所有出现的描述"Protocol 7"的开发者英利政美的资料,可以总结出"Protocol 7"主要的功能:
1.无需设备连接到网络.
设备就是用来实现某种功能的东西.电脑的CPU/内存/硬盘/键盘/鼠标/显示器都是设备,人类的功能器官同样是设备,比如眼/耳/鼻/皮肤是输入设备,口/手/脸是输出设备.所以,无需设备连接到网络不仅是指不需要电脑等终端设备,还指不需要肉体参与.在实现方式上我的理解是利用舒曼共振与人的脑波产生的相互作用(波的干涉?)来达到这个目的.
2.完全连接到网络.
跟Matrix有点像,意识(干脆说灵魂还容易懂些)完全进入网络世界中.实现方式无疑是Lain的故事发生的15年前的"Kensington Experiment",接受实验的孩子们的意识全部都无法回到现实世界,他们都"死"了,也就是完全地"接入"了,但是"Protocol 7"还更进了一步,不用设备帮助就能完全接入基于"Protocol 7"的网络.
3.信息的完全共享.
英利政美认为信息如果不共享,就毫无意义,仅仅是数据而已.实际上,人类的集体无意识包含了人类在进化过程中得到的经验本能,就是一个很好的信息完全共享的例子,人本来也就与集体无意识联系在一起."Protocol 7"将所有人连接在一起,并完全共享每个人所持有的信息比如记忆.
人与集体无意识本就有着网络般的联系(我可以说连接吗?),按照Timothy Leary的理论,集体无意识中的资料是存放在DNA中的,所以,要利用人与集体无意识的联系,就需要分子生物学的知识...Lain剧中还特别有个新闻桥段说桥总研解读了人的DNA序列...恩恩,然后英利政美桑马上就利用上了~这样,Wired与人的集体无意识网络就可以融合在一起.
"Protocol 7"跨越物理学,生物学,以及心理学等学科,将Wired/真实世界/集体无意识连接在一起...也只有在桥总研这样的大公司工作,才有可能搞的出来...
"Protocol 7"最不厚道的地方,就是它虽然叫"协议",但是实际上是强制性的...除非你不在地球上~
1952年舒曼(Schumann)指出,地球和电离层可以构成一个谐振腔体,腔体中存在一个特殊的谐振频率,这一频率主要由地球的尺寸决定,并由全球的闪电放电激发.这个谐振频率被称为舒曼共振(Schumann Resonance).舒曼共振的频谱在ELF波段,频率为8Hz左右(这个值的说法很多,7.83/7.5/7.2等),恰好人类大脑的α波与θ波也近于8Hz,于是有人将舒曼共振称为"地球的脑波",目前舒曼共振对人类起什么作用尚不明,不过很多气功师和江湖术士倒是大吹这个概念.
集体无意识(Collective Unconsciousnes)出自卡尔·古斯塔夫·荣格(Carl Gustav Jung)的分析心理学理论.集体无意识理论认为在人类心灵最深处,拥有一个超越所有文化和意识的共同基底,这个基底就是集体无意识,集体无意识是人格结构最底层的无意识,包括祖先在内的世世代代的活动方式和经验库存在人脑中的遗传痕迹.所有意识和无意识现象都从集体无意识中生发出来.在Lain的情节中,集体无意识起了很大作用.
John C. Lilly利用迷幻药与"隔离箱"来人工阻断人的感觉以研究人的意识,他认为他连接到了某种实体上.随后,他开始研究海豚的超声波交流.
1977年Timothy Leary提出人的8个意识回路理论,其中第7个意识回路为神经-基因回路.它可以连接到存储在DNA中的集体无意识.第8个意识回路为神经-原子回路,它连接宇宙中早于生命产生的意识,或者说外星人,或者说上帝.
一件事物如果可以被回忆起来,就说明有一个记录存在,如果一件事不能被回忆起来,它就从来没有发生过.
Wired世界:也就是网络世界,所有上网的人们对Wired这个网络系统及其上的信息的认识的集合.
真实世界:所有真实世界中的人们对自己存在的世界的认识的集合.
|
|