论道WP(三):应用程序栏
作者通过具体翔实的例子介绍了Winodws Phone 7中应用程序栏的使用方式。
该内容已经被标记书签!
标记书签错误,请重试!

作者 James Coplien 译者 陈宇 发布于 2011年7月28日
本文是《敏捷宣言》10周年系列纪念文章之一,该系列文章将陆续在InfoQ上发表。
敏捷——十年发展史,这在二十世纪六十年代早期的黑客时代会是个不错的标题,那时涌现了大量的过程管理方法,但从九十年代早期开始,这些方法就为敏捷所不齿。然而返朴归真的做法在二十世纪八十年代中期就已经开始了,那时Smalltalk、Objective-C和C++已经为面向对象编程做好了准备。拟人化编程、面向对象的图形用户界面、终端用户思维模型和易于变更就是口号。在敏捷发展地够好之前,那些就是敏捷。
从二十世纪六十年代的黑客文化到八十年代的面向对象整整有二十年。快速发展二十多年后,我们有了敏捷宣言。二十年对于人类而言是一代人,而相对于互联网的发展速度而言,二十年则是无比漫长的。这对一个技术更新周期为3至7年的行业来说有点古怪。 我们稍后再考虑这一时间常数。今天,我们在又一个20年周期中,已经走过了10年——位于令人不安的20年周期的中途。这时进行回顾有点不靠谱但却很有意思。
与多数标志性出版物一样,敏捷宣言是对所在时代的通行做法的认可,而不是对未来的设想。几乎历史上的每份重要文件都是对现状的认可,而不是孕育革命。例如,英国的大宪章仅仅是记录了十二世纪浮现出的公共社会实践。仅仅是让约翰国王正式认可了新的现实。书面文化往往滞后于口头文化(正如我们从敏捷需求中所了解的)。至于敏捷宣言,它记录了八至十年间Scrum的实践、 Borland公司QPW十年的实践和世界范围内许多领先的软件项目中长期实践的方法。事实上,这十七人的“男童唱诗班”为社区提供了良好服务。而他们甚至还未获得任何许可。那样的发展情形并不是他们的错。
也许敏捷宣言的关键价值不在于它的洞察力、独创性,当然也不是它的预见性,而是它与编程平民主义间的联系。敏捷成了应用广泛的主要工具和主流变化。它用库恩式的范式转变击溃了不时出现的缺乏想象力的、不合理的抵制。从这个意义上说,它确实是个宣言。它是一个危险的文件。敏捷宣言的每一条都是一分为二的,提炼一下那四条宣言,它们只涉及两个原则:自组织及支持自组织的反馈。自组织确实与二十世纪六十年代流行的商业文化产生了摩擦。
敏捷是项平民运动的一个标志是没有出现多少公众的阻力。敏捷宣言很少被用于针对任何方法或是语言进行攻击。极限编程是敏捷。Scrum是敏捷。RUP是敏捷。Google在“做敏捷”,微软和IBM也在“做敏捷”。
敏捷宣言不仅是变革方向的反映,也是变革自身的需要。这使得敏捷宣言对于潜在的浮夸的诋毁者来说难以下手。而最大的顺风之助是二十世纪六十年代的进取精神。没人敢站在变革的对立面。敏捷的自组织和反馈的隐藏趋势可回溯至反体制的二十世纪六十年代——维持着黑客道与敏捷道之间对象运动反体制思考的价值观。
然而,与多数可作为标志的标签、宣言和其他记录下来的理想一样,其所鼓吹的实践通常与事实擦肩而过。“敏捷”成为了众多毫无关联的实践的标签,成了一个使人能为他们钟爱的实践辩护的收容所。结对编程——自从Lister在二十世纪六十年代谈到它后——现在成了社交礼节。1986年出现的Boehm的螺旋模型变为了sprint和episode。我们重塑了团队。把所有观点放到台面上讨论的旧的JAD观点作为共同所有权重新浮出水面。
在一些地方,敏捷原则被一群口头拥护者善意的挟持,并套上奥威尔式的枷锁。我们有测试脚本和jUnit,这胜过了个体和交互。他们所撰写的敏捷篇章,更多的关注于编写全面测试的必要性,而不是如何编写良好的可工作的代码;只有Bob大叔和后来的一些朋友赶来援救。(而在堆积如山的探讨测试的文献中,只有极少的部分与良好测试的构成有关。)至于拥抱变化,难道你还敢质疑极限编程实践,还敢在Scrum框架中找个地方提出改进建议。自由即奴役。(而另一方面,在新的CMMI实践中加入了一个过程。)
除此之外,敏捷成了思考的替代品。敏捷宣言说什么就做什么。我永远不会忘记OOPSLA周年祭上的黑纱。(如今,它们似乎变成了更单纯更漂亮的编织手环。)敏捷与其说是一个回答不如说是一个反应—— 一个对在二十世纪六十年代至七十年代间出现的过度的管理实践的反应,并再次回到八十年代的CASE工具和方法集之中。这是个暴力行为。正如Mary Poppendieck所预想的,我们的学科的运动就像是钟摆,很少会处于中间位置。因此更激进(创造个新词)的程序员尽可能地把钟摆冲击向某一端。在二十世纪八十年代的方法论全神贯注于规划,推理出思想并隐藏在其后进行规划,敏捷世界会对除实践以外的任何事表示不满。敏捷宣言中的每个条目都与实践相关。这些条目从根本上都与我们在精益中发现的思想无关。仅仅是迈出了规划-执行-核查-行动的业务循环(译注:即戴明环)的第一步。无知即力量。谚语中的婴儿和洗澡水在脑中浮现出来。(译注:谚语——别把婴儿连洗澡水一起倒掉。)
为什么我们要在20年的周期内寻找这一自由?早在2004年我的学生Julie Beata研究了几代人流行趋势中的模式。她的结论是,流行遵循20年的世代周期,因为有足够多的孩子与父母一起购物,受到怀旧影响而购物。敏捷有没有让你老板回想起二十世纪八十年代面向对象早期的崇高理想?正如上一代软件开发的岁月里面向对象的早期拥护者对软件开发准方法论的渴求。
周期的长度也值得注意。多数计算潮流跟随着技术周期:例如,从Ada到C++再到Java,或是Oracle、Sybase、DB2和MySQL。 这些周期很少与基础产业的价值或发展模式在同一层面。或许值得注意的是,敏捷预示着一个价值体系。价值体系变化缓慢:以世代更替的速度变化。
未来会怎样?很可能会有更多基于对社会历程的良好研究和推论的对话,而且还会有装模作样的争论。这就是我所担忧的命运,学科不是学科,科学不是科学,艺术不是艺术。小组辩论是有价值的,下一个宣言或许会如期出现,发动一场针对愚钝的战争:下一次钟摆猛然摆动。哦,好吧。战争即和平。
Jim ("Cope") Coplien是组织模式之父,软件模式学科的创立者之一,二十世纪九十年代早期的面向对象设计实践的先驱,软件设计和组织改进领域广受欢迎的权威、作家和培训师。作为敏捷软件开发的创立者和倡议者,Cope的关注点之一是广泛地根除机能障碍,而不是单纯地实施那些看似有益实则有害的诸如TDD和现场客户等软件实践。他也积极地领导着敏捷架构与Scrum社区的结合。
查看英文原文:Agile 10 Years On
感谢崔康对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。
在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中对于锁的性能优化,以及锁的存储结构及升级过程。
本次分享将首先介绍现代富文本编辑器的组成和实现,然后结合UEditor的开发过程,与参会者分享UEditor在设计和实现的过程中,所涉及到的核心功能的细节实现。
本次演讲视频录制于百度技术沙龙。
我们所开发的应用程序大多都需要提供一个图形用户界面(GUI)。关于GUI应用的架构设计,已经有了Form & Control、MVC,、MVP、 Passive View等多种模式。模式可以帮助我们建立优雅的架构,但前提是弄清楚模式的应用场景。弄清楚GUI应用面临的设计上的问题,有助于我们正确的挑选设计方案。
MongoDB是一种非常易用的NoSQL方案,Brian C. Dilley在这篇文章里介绍了MongoDB的优劣势,并介绍了MJORM项目。MJORM用于MongoDB,是一个没有注解的Java ORM库。
随着网络基础设施的逐步成熟,从RPC进化到Web Service,并在业界开始普遍推行SOA,再到后来的RESTful平台以及云计算中的PaaS与SaaS概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
精益软件开发方法因其对市场和交付的重视和在各种场景下体现出的适应能力正在获得广泛的关注。特别是在精益创业(Lean Startup)渐渐兴起和技术日新月异的今天,其"极端"的思想也变得越来越必要和可行。 InfoQ就此主题对他做了深入的采访。
3 条回复
关注此讨论 回复