Google
 

2007年9月12日星期三

The cranky user:网络工程曾经发生了什么?(上)

前言:翻译同时也学习学习什么是CSS, PHP……这样更能加深理解,对于网页设计有更多的了解。篇幅很长,故分成2部分。事实上,这篇文章中好多东西都是专业性很强的东西,累人的说~呵呵。


软件工程——网络开发者的最优方法 原文
等级:介绍性

Peter Seebach (crankyuser@seebs.plethora.net) 自由作家 2007年6月24日

你有曾想到过今天的网络开发者们能学一两样传统的电脑程序吗?The cranky user 谈论了软件工程的基础并询问网络上那些最有方法都跑到哪里去了。
我 将成为首个承认这次自己犯错的人。互联网有些错误,而我恐怕是我引起的。回顾网络首次成为重要事物来,我和几乎所有其他的电脑程序员都取笑那些声明自己可 以“在HTML中编程”的人。在那时我们不只是唯一的流行:许多交易在“开发”和“设计”间强加直接分开——现在仍然如此。

问题是,直接从开发者里面分出设计师已经导致出一个由完全不懂网络运作的标准和技术的人建设的网络。今天绝大部分网页超出HTML有限范围很好的扩展延 伸,他们中很多是由像Java或者C++(你知道,是用来控制构造、变量和素材资料的真正的代码)这样的基于大块安全的JavaScript、PHP、 HTML、CSS还有别忘了XML等“纯”程序设计语言组建的。

被教导不要把自己看作是程序员的设计师对理解怎样把他们的设计转译成代码负有少量责任——这意味着有更多的工作去执行指控。更糟的是,网络开发者们花费时 间弄懂了使设计看上去像Ajax一样运行却有胜于大宗买进Adobe Flex革新,他们不把他们自己看作是网络工程师。最终结果是一代一直在尝试不通过参考软件工程最优方法而架设日趋完善网站的网络设计师和开发者们:看上 去像必备条件的聚集,DRY原理 ,还有怎样重整逃出程序之“小岛惊魂”的方法。这个月,我将只讨论少数软件工程中看上去在充斥里消失的最佳方法(一般艰难学习在十年期限以上的)去构建一个勇敢全新的互联网。

当然你听过必备条件了吧?

必备条件的聚集是 软件工程的一个本质方面,他一贯在网络开发中被忽视。像“用户能通过手机浏览器接入这个站点吗?”或者“URL能非常直觉的为网站导航所用吗?”这类问题 极少以构建的方式被回答。取而代之的是决定在闲混中决定而用户们忍受着这些结果。比如,最近当一个我喜欢的在线漫画网被收购重新命名后它变得让我很难像前 几年做的那样,通过日期来导航漫画的存档,我很失望。

然而之前精疲力尽的几年一直在学习必备条件聚集理论和学习前面这么做的重要性的软件 开发者,今天似乎太经常而不能在几乎忽略透视图和用户需求的真空中工作。我并不是反对网站创建者仔细衡量过那个补丁的价值后觉得它是值得网站去更新的。我 很反对的是当观众的问题可以解决而且对最终用户毫无疑问是有价值的补丁却从未出现。

当你在新的网站或者新的特性上工作时,之前先询问需求 问题。谁是你的观众?怎样假设能够安全的让浏览器、操作系统还有硬件习惯的接入你的网站?怎样假设你所希望从用户那里得到的动力、视觉、听觉还有演说能 力?假设每个用户接入了e-mail程序这合理吗?也许不是,如果你还记得许多用户通过公共终端或者手机接入互联网的话。

带宽经常是被了解网络的开发者和设计师看作是理所当然的另一个问题,但是他仍然是许多用户的问题。多花些时间测量你的服务器在各个不同的浏览器和系统下生成一个网页所需要的时间,包括可接入的浏览器和公共图书馆系统网络。



不要自我重复


不要自我重复原理也以DRY闻名,它被看作是好的工程的基础。令人惊讶的是它很少在网络开发中被遵循。重点是不要复制材料、构成或者效果。实际上给出2个版本的导航条你将最终更新1个而不是2个,复制不可避免。不是仅仅这样做会导致用户混淆,它对你来说还意味着某处完全的更加有效。答案——作为祖父可能会说——不要重复你自己!


一个出现在浏览器战争时期的有关网络开发者忽视DRY的最惊人的例子是在网页为特殊浏览器一般优化过后。许多人对他们网页使用宽范围字体种类的显示标签、控制外观还有下至网页最佳细节感觉的构架材料不以为然。(在网页上每一个段落中小心使用渴望的字体做标签再普通不过!)当然,这些网站的改进会引发问题。当公司的logo重新设计后怎样,网页字体必须要为了更配合新logo而改变吗?花费数小时打开站点上的每一个文件,搜索替换字体标签,然后期望不要漏掉什么或者出错(就像改变正文中的“Times”字体为“Verdana”然后仅仅是字体标签)。当CSS(层叠式样式表)出现,它改变了一切。这些天的版面信息都汇总在一个单独的中心样式表中。更新一个CSS中的元素就对任何被指定的样式表起效。有时仍然有网络开发者在写样式表的时忘记执行DRY原理,结果导致复制的效果仍属于不必要的时间耗费。

想象一下,如果你将声称用Helvetica字体做样式表的标题,只以大小区别。喔,很容易写,不是吗?


列表1、重复的CSS




               

h1 { font-family: Helvetica, sans-serif; font-size 250% }

h2 { font-family: Helvetica, sans-serif; font-size 200% }

h3 { font-family: Helvetica, sans-serif; font-size 150% }

h4 { font-family: Helvetica, sans-serif; font-size 100% }



但是当你因为某些原因需要转换网页为一个新的网页时发生了什么?CSS列表1将不得不更新4次——为这样一点小小的代码块真不值,但是给出一个更复杂样式表时就令人不快了。我内心的程序员不禁想到一次性写一个更好的代码,下面是列表2。


列表2、不太重复的CSS


 

h1, h2, h3, h4 { font-family: Helvetica, sans-serif; }

h1 { font-size 250% }

h2 { font-size 200% }

h3 { font-size 150% }

h4 { font-size 100% }



现在,你也许知道为什么我这么做很值了。列表2里面的代码不是比列表1里面的更短吗?而且可能会说对非程序员来说不易读。如果样式表过去从未有过4行,我可能会同意。发生的趋势是样式表变长了。

最终一点点的CSS在列表2中可能扩展成几百行代码。谁会说有一天你不必完全改变Helvetica到Times——还有谁会说你不会搞砸,会改变大多数情况下的问题而不是全部。更糟的是你可能仅仅为了查找要做一个全球搜索和替换,3页CSS后,有人指定Helvetica不作为标题头字体,而且不想改变。

这里的问题是,互联网是一个大的场所,大多数网络开发发生在极其危险的速度下。不想软件工程师们有DRY这样的原理训练掌控他们的大脑超过10年之久,网络开发者们现在趋于更加快速的工作和按照节约时间效率区分优先次序。那节省你一会儿时间,尽管最后也可能不节省你的时间。如果你为一个有大量共享数据的项目在做多重样式表,节省你自己无尽的痛苦使用@输入的规则收集所有重复的元素为一个单一的样式表。你以后会感谢你自己的。


没有评论: