Spiga

专业的程序员需要具备的思考能力:写一个程序需要注意多少细节问题

2011-09-27 00:07 by 道法自然, 3358 visits, 网摘, 收藏, 编辑
摘要:我曾经听过一个老师对一个做的不错的程序员的一句评论:“某某某做程序确实很快,但就是都不能用”。事实上,直到今日,我们中很多人仍然在写这样的程序。不能用的程序一般都有几个特征,比如当程序出现问题时,总是不知道该怎么处理,甚至是在正常情况下都会出现问题,但归根结底就是压根就没有认真从用户的角度来考虑用户到底怎么来使用。如果用户输入了程序接受的输入,那么必然该给出正确的结果,可悲剧的是,就是有那么多的意外,因为客户行为总是在很多程序员意料之外,因此,当用户执行了某个程序员认为是非常规的操作的话,运行结果可能是用户无法得到任何问题的解释,然后用户下定一个结论就是:“这是一个什么破软件,真没用!”。 . 阅读全文

强制执行像Facebook的代码审计

2011-09-09 13:19 by 道法自然, 1597 visits, 网摘, 收藏, 编辑
摘要:Facebook、Google这样的巨头IT公司都具备完善的代码库管理、代码审计(Code Review)制度。代码审计能够消除一些Bug,不过事实上,这不是代码审计最主要的目的,因为Reviewer很难通过审阅代码来发现深层次的Bug。代码审计更重要的是,它有助于维护代码的质量,因为Reviewer可以发现代码编写的是否规范,可以从审计过程中互相学习,也可以指出代码存在的问题。此外,开发人员也会有更多的意识来编写更高质量的代码,被别人指出太多问题或者低级问题,显示是很没有面子的,:)。因此,我认为代码审计对于产品的维护过程是非常重要的一环。Facebook采用谨慎的审计来防止代码出现一些问题 阅读全文

TDD美不美,TDD有多美,到底为什么TDD用起来不太美?

2011-08-27 14:12 by 道法自然, 1814 visits, 网摘, 收藏, 编辑
摘要:昨天晚上看了CoolShell陈皓同学对TDD的描述《TDD并不是看上去的那么美》和InfoQ上的虚拟座谈会《TDD有多美》,以及陈皓同学写的《再谈敏捷和ThoughtWorks中国咨询师》。陈皓同学首先用自己的实战经验例举了TDD的各种使用缺陷,从而来描述了TDD并不是看上去的那么美。接着InfoQ举行了一个虚拟座谈会,邀请了ThoughtWorks的熊节同学和其他几位同学,来描述什么是TDD,... 阅读全文

应用程序该如何拥抱变化

2011-08-23 17:47 by 道法自然, 1411 visits, 网摘, 收藏, 编辑
摘要:拥抱变化是极限编程非常重要的一个理念,OOP原则中的OCP原则(Open Close Principle,开放原则)也是拥抱变化的体现。不过,在写程序过程中,我们总是会遇到各种各样的变化,我们也尝过了“变化”的各种苦头,甚至都厌倦了再去迎接任何的变化,这并不是因为原则错误,而是我们一开始就没有准备好“变化”。这个文章对“拥抱变化”不再累述,我们直接来看一个使用面向服务架构的应用程序,体会一下拥抱变化。我先说一下这个实例的内容,它非常的常见,就是设计一个权限控制服务,基本在我们的每一个业务系统中存在。不过,我有必要描述一下这个实例的背景,从而展现出为什么我需要做好变化的准备。目前我们有一个“插件 阅读全文

[视频]如何构建一个插件化的Web应用程序

2011-07-25 17:41 by 道法自然, 1827 visits, 网摘, 收藏, 编辑
摘要:这个视频介绍了如何构建一个插件化的ASP.NET应用程序。该应用程序由一个主程序和3个插件构成,演示了如何基于插件化方式构建应用程序、UIOSP的模块化特性、模块间基于SOA的通讯和如何使用模块扩展特性。在这个应用程序,主程序、插件以及插件提供的服务都可以完全的重用,体现了使用UIOSP基于软件生产线方式来构建应用程序的新思维。[hjp2=600,480,true]http://www.eguanli.cn/UIOSP_Demo.wmv[/hjp2] 你可以从尤埃开放服务平台免费下载下载到UIOSP平台的安装包,从UIOSP构建插件化Web应用程序Demo视频下载该视频,从Web插件应用程序实 阅读全文

如何写健壮的代码

2011-07-24 10:58 by 道法自然, 7668 visits, 网摘, 收藏, 编辑
摘要:不管是在面向过程时代,还是在面向对象时代,任何一个功能都是由若干函数协作来实现的。一个函数由输入、处理和输出组成。实现这个函数的代码段都假定了输入的参数已经满足了若干规则,在执行这个函数时,函数的代码会拿到输入的参数然后执行代理逻辑。下面我们就来看一个函数的代码。 1privatestaticvoidParseArgs(string[]arguments)2{3if(_parsedArgs)4{5return;6}7if(arguments==null)8{9arguments=CommandLineArgs;10}11//命令行格式:12conststringusage="[-in 阅读全文

确保真正的线程安全——微软为什么不提供线程安全库

2011-07-13 10:44 by 道法自然, 2840 visits, 网摘, 收藏, 编辑
摘要:线程安全在高并发情况下是一个非常严重的问题。以下代码在多线程访问时,会出现问题。我们以List.Add为例,来说明在多线程访问下的状况。以下代码是List.Add的实现。publicvoidAdd(Titem){if(this._size==this._items.Length)this.EnsureCapacity(this._size+1);this._items[this._size++]=item;this._version++;}当两个线程同时访问一个List的Add方法时,这个方法的第一条指令就可能出现不一致性了。因为,此时两个线程访问时_size都是一样的,正确情况下List应该 阅读全文

最专业的通用.NET插件平台——SaaS应用商店开放平台构建

2011-06-13 00:46 by 道法自然, 2363 visits, 网摘, 收藏, 编辑
摘要:在上篇《最专业的通用.NET插件平台——尤埃开放服务平台介绍》中,我们初步介绍了尤埃开放服务平台(UIOSP)这个通用的.NET插件平台。在这一文章,我将介绍一下基于UIOSP的SaaS应用商店开放平台(或称为尤埃SaaS引擎,XAUI SaaS Engine)是如何构建的。 首先,我们了解一下SaaS应用商店开放平台。该平台是一个面向SaaS服务运营商的云计算PaaS平台产品。它向SaaS应用开发商开放一个SDK用于开发SaaS应用,一旦开发商开发完成便可以上传到SaaS应用商店,这样,SaaS应用消费者就可以购买使用了;此外,该平台还向SaaS应用消费者提供一个应用商店,允许消费者进入商店 阅读全文

最专业的通用.NET插件平台——尤埃开放服务平台介绍

2011-06-10 12:48 by 道法自然, 3359 visits, 网摘, 收藏, 编辑
摘要:尤埃开放服务平台(UIOSP)是基于.NET设计的插件化平台。该平台设计的初衷是:(1)为所有.NET应用环境设计一个通用的插件平台,即该平台能够以标准化的插件规范来开发基于.NET Framework的控制台应用、WinForm应用、ASP.NET应用、WPF应用、Windows服务应用及SilverLight应用和基于.NET Compact Framework的移动应用设计;(2)为基于.NET的统一开放平台提供支持,即开发人员基于该平台设计的可完全复用的插件可以通过统一开放平台开放给用户,这样开发者或者最终用户可以从该平台获取需要的模块然后组装成最终软件;(3)为企业构建一个基于插件库 阅读全文

软件体系结构:二维分层、模块化和开放平台

2011-05-22 19:06 by 道法自然, 2052 visits, 网摘, 收藏, 编辑
摘要:先引出几个问题。首先,对于分层,如何来分层?仅仅纵向分层是否够用了?什么是“二维分层”呢?一提到模块化,很多人会说“我们的系统就是基于模块化来构建”,稍微一多问,要么和分层差不多,要么就说我们是基于一个又一个的dll文件来实现模块化的,那应该怎样才算模块化呢?“开放平台”怎么回事? 关于“二维分层”软件体系结构的提法比较少见。不过,对于分层软件体系结构,估计是个傻子都知道。“模块化”也是傻子都知道的一个词,软件工程最经典之一的词莫过于“高内聚、低耦合”。 在我个人看来,软件体系结构不是套路,而是根据实际应用系统的需求来确认的,甚至有时候需要根据实际情况来组合使用经典的“三层”、“管道”等软件体 阅读全文