站在巨人的肩膀上(转载)

http://blog.joycode.com/saucer/archive/2007/11/28/112040.aspx

2007年11月28日 #

站在巨人的肩膀上

看到博客园在轰轰烈烈讨论程序员的基础/基本功问题,正好在devlicio.us上看到Billy McCafferty撰写的《站在巨人的肩膀上》一文,推荐一下:

Standing on the Shoulders of Giants

http://devlicio.us/blogs/billy_mccafferty/archive/2007/11/12/standing-on-the-shoulders-of-giants.aspx

文中说到,随着这个世界越来越依赖我们的实践,作为计算机行业的从业人员,对计算机行业的 science 实在有必要给与应有的尊重。行动的第一步,就是阅读一些经典的著作,掌握前人/前辈/行业大家们总结出来的知识和行之有效的实践,在日常实践中使用这些知识和实践,成为一个更好的开发人员。他将这些著作分成五大类:

基本读物(Foundational Texts) (每个开发人员都应该读的,没有例外,不管什么经验或平台。这些读物注重讨论如何编写更好,可维护的代码,向坚实的面向对象设计过渡)

学徒读物(Apprenticeship Texts)(这些读物帮你从代码的层次转移到从高的层次来看待实现,以完善项目整体为目的)

  • The Pragmatic Programmer by Andrew Hunt (【中文版】程序员修炼之道——从小工到专家,马维达译,电子工业出版社出版)
  • Patterns of Enterprise Application Architecture by Martin Fowler (【中文版】企业应用架构模式,王怀民译,机械工业出版社出版)
  • Test-Driven Development by Kent Beck (【中文版】测试驱动开发,崔凯译,中国电力出版社出版)
  • Refactoring to Patterns by Joshua Kerievsky (【中文版】重构与模式,杨光译,人民邮电出版社出版)
  • Head First Design Patterns by the Freemans (【中文版】Head First设计模式,UMLChina译,中国电力出版社出版) 以及 Design Patterns (【中文版】设计模式:可复用面向对象软件的基础,李英军译,机械工业出版社出版)

熟练技术人员读物(Journeyman Texts)(这些读物转向“把东西整合起来”,涉及软件开发过程,并深入计算机科学后面的“science”)

专家初始读物(The Beginnings of Mastery)(这些读物帮你磨练技术,帮助提高团队的效率)

专家读物(Mastery Texts)(虽然不是必读,但下面这些读物助你进入纯计算机科学的领域,最少也向你示范我们的工作有个坚实的定量科学的基础)

What is the Relationship Between Documentation and Project Success?

The answer is:There is no solid relationship between project success and writing comprehensive documentation, and in fact it is more likely that the more documentation that you write the greater the chance of project failure. 

http://www.agilemodeling.com/essays/agileDocumentation.htm

Like “Model with a purpose”,we should also document with a purpose.What is a detailed documentation for?

Developers never learn a system from documenation,They learn it from codes.If you’re documenting for a user manual, just leave a draft for tech writer.if it is to earn support,to record,to keep track of and to guide the development, be short and concise.Travel light!

 

 

SqlServer2005里的xml性能测试

做了一个简单的xml data type的update性能测试。

在自己的pc上,建了一个表create table xml_test (xcol xml,Tcol nvarchar(50),id int identity(1,1))

插入10万条数据

declare @i int
set @i =0
while(@i<100000)
begin
 insert xml_test
 values (‘”this is a test”‘,’this is a test’)
 set @i=@i+1
end

更新的两种情况:

Case 1: xml update

update
xml_test
set
 xcol.modify(‘ replace value of (//Body/text())[1]
  with     “hello world” ‘)

 

Case 2: nvarchar update

update
xml_test
set
    Tcol =’hello world ‘

同一台机器,同样的时间段,所以同样的负载,甚至是同一张表里,差别仅仅是列的数据类型的不同。

结果是Case1每次更新新的字符串时都要10秒以上,即使是重复运行Case1,第二次也总需要6秒。

而Case2则在3-4秒就完成了,重复运行则在一秒以下。

由于前述的理由,造成这个差别的就是xml data type和nvarchar data type的差别,而由于最基本操作都是字符串的更新,并且更新到的字符串也是一致的,所以有理由相信这个差别是定位所需要的时间差。

这就是xml结构的代价。应该说,这个代价还是很大的。我曾经想过的利用xml 数据类型来做动态的数据存放的方法,性能上看是不可行的。

这个想法,具体来说就是利用一个做数据字典用途的表:TableStructure(ID,TableName,TableColumns (xml type)),则可以把每个存放具体数据的表都定义为TableName(ID,Content(xml type)),然后利用xml数据的query,modify方法来操作Content里面的具体字段的内容。付出的是定位需要的时间,得到的是全动态的数据存放。由于xml的定位是动态的,即query,modify方法都可以接受参数,传入的XQuery的列名和路径都可以动态配置,那么理论上可以把一些基本的逻辑写成工具sp,实现具体功能的时候则可以调用工具sp+xpath参数。目标是:把功能的实现代码里更多的内容参数化– 比如对id=x的某记录的y字段的更新,不仅传x作为参数,甚至字段id和y也是参数。这样的话,只需要很少的sp和function就可以做很多事情,并且,它将更灵活,也可以把更多的东西可以拿来做configure。