Source

translations / misc / the_cli_book / GUI.txt

Full commit
图形用户界面

如今的程序员在编写软件时第一件要做的事情,是决定如何让程序接受需要处理的信息,(比如图像软件以图片为处理对象,制表软件以表格为处理对象)然后将其转换为线性的字节串。这些字节串通常被称为“文件”或者(某种程度上更酷的叫法)“流”。它们和电报相比,与现代人和克罗马农人相比没什么不同,都是同一样东西,只不过有着不同的名字。你在电脑屏幕上看到的所有的东西——你的《古墓丽影》,你的数字语音邮件,传真,用37种不同字体的富文本文档——从计算机的角度来看,和电报码没什么区别,只不过更长,而且需要更多运算而已。

要体味一下这些玩意,最简单的办法是点开一个网页浏览器,访问一个网站,然后在菜单中选择“查看源文件”,这时你会看到一堆和下面类似的计算机代码:

<HTML> 
<HEAD> 
<TITLE>Welcome to the Avon Books Homepage</TITLE> 
</HEAD> 
<MAP NAME="left0199"> 
<AREA SHAPE="rect" COORDS="16,56,111,67" HREF="/bard/"> <AREA SHAPE="rect" COORDS="14,77,111,89" HREF="/eos/"> <AREA SHAPE="rect" COORDS="17,98,112,110" HREF="/twilight/"> <AREA SHAPE="rect" COORDS="18,119,112,131" HREF="/avon_user/category.html?category_id=271"> <AREA SHAPE="rect" COORDS="19,140,112,152" HREF="http://www.goners.com/"> <AREA SHAPE="rect" COORDS="18,161,111,173" HREF="http://www.spikebooks.com/"> <AREA SHAPE="rect" COORDS="2,181,112,195" HREF="/avon_user/category.html?category_id=277"> <AREA SHAPE="rect" COORDS="9,203,112,216" HREF="/chathamisland/"> <AREA SHAPE="rect" COORDS="7,223,112,236" HREF="/avon_user/search.html"> </MAP> 
<BODY TEXT="#478CFF" LINK="#FFFFFF" VLINK="#000000" ALINK="#478CFF" BGCOLOR="#003399"> 
<TABLE BORDER="0" WIDTH="600" CELLPADDING="0" CELLSPACING="0"> 
<TR VALIGN=TOP> 
<TD ROWSPAN="3"> 
<A HREF="/cgi-bin/imagemap/maps/left.gif.map"><IMG SRC="/avon/images/home/nav/left0199.gif" WIDTH="113" HEIGHT="280" BORDER="0" USEMAP="#left0199"></A></TD><TD ROWSPAN="3"><IMG SRC="/avon/images/home/homepagejan98/2ndleft.gif" WIDTH="144" HEIGHT="280" BORDER="0"></TD><TD><A HREF="/avon/about.html"><IMG SRC="/avon/images/home/homepagejan98/aboutavon.gif" ALT="About Avon Books" WIDTH="199" HEIGHT="44" BORDER="0"></A></TD><TD ROWSPAN="3"><A HREF="/avon/fiction/guides.html"><IMG SRC="/avon/images/home/feb98/right1.gif" ALT="Reading Groups" WIDTH="165" HEIGHT="121" BORDER="0"></A><BR><A HREF="/avon/feature/feb99/crook.html"><IMG SRC="/avon/images/home/feb99/crook_text.gif" ALT="The Crook Factory" WIDTH="165" HEIGHT="96" BORDER="0"></A><BR><A HREF="http://apps.hearstnewmedia.com/cgi-bin/gx.cgi/AppLogic+APPSSURVEYS Questionnaire?domain_id=182&survey_id=541"><IMG SRC="/avon/images/home/feb99/env_text.gif" ALT="The Envelope Please" WIDTH="165" HEIGHT="63" BORDER="0"></A></TD> </TR> 
<TR VALIGN=TOP><TD><IMG SRC="/avon/images/home/feb98/main.gif" WIDTH="199" HEIGHT="182" BORDER="0"></TD></TR><TR VALIGN=TOP><TD><A HREF="/avon/feature/jan99/sitchin.html"><IMG SRC="/avon/images/home/jan99/sitchin_text.gif" WIDTH="199" HEIGHT="54" BORDER="0"></A></TD></TR><TR VALIGN=TOP><TD COLSPAN="4"><IMG SRC="/avon/images/home/jan99/avon_bottom_beau.gif" WIDTH="622" HEIGHT="179" BORDER="0" USEMAP="#bottom"></TD></TR><TR><TD ALIGN=CENTER VALIGN=TOP COLSPAN="4"><FONT SIZE="2" FACE="ARIAL,COURIER"><PRE> 
</PRE><A HREF="/avon/ordering.html">How to order</A> | <A HREF="/avon/faq.html#manu">How to submit a Manuscript</A> | <A HREF="mailto:avonweb@hearst.com">Contact us</A> | <A HREF="/avon/policy.html">Privacy Policy</A></FONT> 
<P> 
</FONT></TD> 
</TR> 
</TABLE> 
</BODY> 
</HTML> 

这堆东西被称作HTML(HyperText Markup Language),本质上说,它是一种非常简单的编程语言,用来告诉网页浏览器如何将网站的内容显示出来。任何人都可以学会HTML,而且很多人在用HTML,重要的一点是:不论网页包含多花哨的多媒体内容,HTML文件只是相当于电报码而已。

罗纳德里根曾经当过广播员,他解说棒球比赛时,他会一个人坐在一件放着话筒的拥挤的小房间里,写满比赛描述的纸条从电报机里边不断打出来,一直蔓延到他的手掌中,上面印满了密码一般的缩略词。如果计分为3&2时,里根会像亲临其境般地解说道:“身材粗壮的左投手离开击球员区擦去额头的汗水。裁判走到前面,清掉了击球区的尘土。”诸如此类,当传出来的纸带传来“本垒打”的消息时,他会用铅笔猛敲桌子的边沿,创造一点声音效果,同时像亲自看到一般讲解球的飞行路线。他的听众会根据他的描述,在头脑中构建比赛的场景。很多听众会以为里根是在现场一边观看一边解说的。

这就是国际互联网的工作方式:HTML文件就像写满缩略语的纸带,而你的网页浏览器就像罗纳德里根。大体上,所有的图形用户界面都适用于这样的类比。

如此说来,操作系统就是介于你和电报机之间的一些形象化和抽象化的东西的堆栈,里边包含着处理信息的各种精妙功能。不管是图像也好,email也好,电影也好,文本文档也好,都会被转换为计算机唯一会处理的东西——长串的字节。当我们使用实际的电报设备(电传打字机),或者它们的高科技替代物(“玻璃电传机”或者MS-DOS命令行)与计算机协同工作时,我们很接近堆栈的底部。然而当我们使用大部分现代操作系统时,我们和机器很大程度上都是在中层打交道。我们做的每件事情,都被一次又一次地转换翻译