Thinking Everyday

来源:互联网 发布:淘宝刷层级有用吗 编辑:程序博客网 时间:2024/04/30 08:00

1,编程语言的发展趋势

  1. 语法更倾向说明性,声明性,而不是“实现性”
  2. 元数据无处不在,xml,template,java bytecode,.net il, 不久出现基于XML或类似XML的编程语言(那个 X# 莫非就是?)
  3. 抽象层次越来越高,虚拟机中间层越叠越多,每一次语言、工具之争基本都围绕着新出现的中间层之争

2,测试驱动开发

目标驱动生活,每天早上运行一遍测试用例:assert(有房);assert(有车),测试失败,就努力让它早日通过

3,Matrix vs. Internet

现在人们把机器连在一起,叫internet;未来机器把人连在一起,叫matrix

4,测试 vs. 验证

测试一词是个错误的用法,表达了一种实现,手段,过程,而不是目标、结果;一个副作用就是令测试人员不被重视;代码复审和系统测试目的都是找出编码中的错误,但一种叫评审员,一种叫测试人员;建议在目前出现测试一词的地方,都替换为“验证”,如系统验证,验证人员,“xxx,那个bug我改了,你再帮我验证一下”,呵呵,颠覆一把话语体系

5,设计 vs. 编程语言

设计只在很高的层次上是语言无关的,能方便的用C++实现一个基于AOP,基于反射的设计吗?能方便的用Java实现一个基于泛型,偏特化的设计吗?当设计在比较具体的层次上时,它就是语言相关的

6,他们 vs. 他们

他们迫于生活压力,很早就进入社会,心智比他们成熟;他们中间高水平的人大都离开了他们加入了他们,他们有自由充分的成长空间,很早就肩负起重要责任,而他们由于他们的到来,很多人失去了机会,缓慢成长;这就是南美,非洲在这个年龄段横扫欧洲的原因;小公司和大公司也是这样吗?

7,近似真相

编码--传输--解码,同步,异步,扩展--BUS车站

8,你的灯亮着吗?

失败更多的来自对要做的事情的误解,把软件的失败归咎于需求的不断变化,只是对缺少真正架构的一种委婉说法

9,扩展

每一个车站都是对(列车,公车)的扩展,放下到目的地的,装入另一部分需要运行的,保留没到目的地的,直达列车是个特例,但可以提供更好的效率;我们需要做的,就是为我们的软件定义车站

10,解释执行

软件的唯一模式,CPU解释机器指令然后执行,操作系统对原生代码解释执行,虚拟机对字节码解释执行,框架对配置文件解释执行,当你觉得灵活性不够了,你就需要写个解释器了

11,More IoC

工厂模式已经被整合进框架,其它的模式是不是也应该逐步整合进框架?就像Loki那样

12,音乐与接口

音乐的交流、流传方式基本是面向接口的,一套简单的接口语言,多种乐器各自的实现,数不清的音乐会上,小提琴和二胡,就这样和谐的同时演奏着同一首曲子;目前软件中比较接近的是XML和基于XML的各种协议

13,模式与原则

模式如此相似,背后一定有一些更基本的原则,不是指那几条面向对象的基本原则

14,极限过程

将合作进行到底
将开放兼容到底
将综合广泛到底
将专业深入到底
将信息共享到底
将实现隐藏到底
将增值附加到底
将工具使用到底

15,技术专家与业务专家

缺一不可,我辈既为IT人,可努力成为技术专家先,知可为不可为,与业务专家通力合作,知该为不该为

16,系统并不等同与IT

系统是需求,概念,模型,IT是实现

17,平台

如果你位于末端,请将平台使用到底
如果你位于顶端,请将平台提供到底
如果你位于中间,请将平台使用并提供到底

18,标签混入类

在不支持多重继承的语言中,使用标记完成混入类的功能,如果标记也不支持,算了

     [AttributeUsage(AttributeTargets.Class, Inherited = true, AllowMultiple = false)]

     public class IDNeededAttribute : Attribute {

         private string m_id;

         public IDNeededAttribute(string id) {

              m_id = id;

         }

         public IDNeededAttribute(){

              m_id = "" + System.DateTime.Now.Ticks;

         }

         public string ID{

              get{

                   return m_id;

              }

         }

     }

 

     [IDNeeded()]

     public class NormalClass1 {

     }

     public class NormalClass2 {

     }

     public class ServiceClass{

         private ServiceClass(){

         }

         public static string GetObjectID(object obj){

              object[] ids = obj.GetType().GetCustomAttributes(typeof(IDNeededAttribute), true);

              if(ids.Length == 0){

                   throw new ApplicationException("the type " + obj.GetType().FullName + " does not has a IDNeeded attribute.");

              }

              return ((IDNeededAttribute)ids[0]).ID;

         }

     }

     [TestFixture]

     public class Test {

         [Test]

         public void TestClassWithAttribute(){

              Console.WriteLine(ServiceClass.GetObjectID(new NormalClass1()));

         }

         [Test]

         [ExpectedException(typeof(ApplicationException))]

         public void TestClassWithoutAttribute(){

              Console.WriteLine(ServiceClass.GetObjectID(new NormalClass2()));

         }

     }

19,倒置

总是招个应用熟的来编程,找个编程牛的来管理,做业务,殆也

20,应该的?

软件应该是可扩展的,但是不可修改的

组件应该是可替换而不会引起其它部分变化的

框架应该是不知道它所调用的组件的

框架应该是封装不变的部分的,变化封装在同一接口的不同组件中,每个组件对应一种变化

21,自行车

我的自行车修修补补三年了,依然在骑,终于明白了什么是体系结构和组件

22,函数

要不要把某个功能写成函数,不在于该功能的代码行数,而在于你能在1,单一位置2,对其进行控制,因此3,能够适应变化

23,研究、开发、应用

时常觉得不知该干啥,其实研究、开发、应用是不同的事情,先把这个想清楚

24,流行

歌曲能够流行起来的最主要原因是易学、旋律简单,其次才是宣传包装和歌曲本身好听,超级口水歌无一不是旋律简单的;因此,软件流行的最主要因素是易学易用,使用方便,其次才是功能强大

25,测试驱动开发

在没有无法通过的测试前,不能开始编码
正交的、相互独立的测试
收集参数模式

26,成败

期望与现实之间的距离

27,完成之道

简单、片面、深刻

28,Context

切换总是要尽量避免,否则会分裂

29,技术能力与责任心

“至少分为项目经理和程序经理或者产品经理和技术经理”绝对是对的;自我培养方式不同,面对一大柜技术书籍,技术能力的高低与责任心毫无关系,传统学而优则仕,比武夺帅,都是错误的不知道什么时候正确观念才能像现在的错误观念一样流行

30,角度

在讲述一个问题时,首先弄清楚是从哪个角度讲述的

31,业务流程再造

生活中有很多流程,过一段时间就再造一下

32,迭代和增量

垂直切片优先

33,网格与人格

网格将闲置的计算资源利用起来,怎样将闲置的人力资源利用起来?

34,接口

目前成功的接口都不是基于调用的,即编程语言的,都是基于数据格式的

35,集成

不缺单独技术,缺少集成技术,最起码掌握某种脚本语言

36,分工

软件开发分工会越来越细,已经早就出现专门制作安装程序的人员等;只有细致的分工,才能每一环节都取得专业品质

37,念头

一些来势汹汹的念头,去也匆匆;似有若无的想法,最终往往不可遏制

38,公交车

有时候真想在车上就这么坐下去,永远都不停

39,Facade + Aspect

或许Matrix这个名字是无意为之,但正面(Facade)加方面(Aspect)组成的Matrix,或许会真的很强大

40,错位

理论无法实践

41,XML与Library

w3c定义了一套数据结构,不同的语言中都有各自的映射,语言独自提供的,是将xml文本解析成这套数据结构的工具

42,不能形成节奏、不能生长的原因

没有一个成熟稳定的架构

43,AOP vs. 现实

本质上是现实世界的反映,如已经有专门的人力资源Advisor(Fesco等),安全Advisor(各保安公司),清洁Advisor(如果你住公寓的话),但不可能全部使用Advisor

44,两个模式

Item vs. Item Manager

Item vs. Item Descriptor

45,servlet的name,pattern,class为什么不能合并?

<servlet>
<servlet-name>HttpClusterServlet</servlet-name>
<servlet-class> weblogic.servlet.proxy.HttpClusterServlet </servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>

为什么不合并为:

<servlet>
<servlet-name>HttpClusterServlet</servlet-name>
<servlet-class> weblogic.servlet.proxy.HttpClusterServlet </servlet-class>
<url-pattern>*.jsp</url-pattern>
</servlet>
 

46,实践驱动学习

学习新技术时,总希望有实际的应用能够实践一下;可手头的项目可能不合适,示例程序又太简单,怎么办?可以在自己的业余时间,维护一个具体的应用,在这个应用里,你可以实践学到的各种新技术;开始时这个应用可能很小,你可以逐渐的给它增加新功能,不需担心它的质量,因为它只是你的试验田,不会有交付的压力;假设凑巧你逐渐把它做的很完美,那么是开源是共享是商业,你可以choose for fun,呵呵


(to be continue...)