什么叫水平,不是看懂了叫水平,也不是会用了就叫水平,更不是懂得更多才叫有水平,而是知道如何做才能做得更好才叫真正有水平?
2009-12-19 13:00 通用C#系统架构 阅读(2095) 评论(20) 编辑 收藏 举报其实有很多同事、朋友、同行,水平个个都很强的,写程序也很快,但是他们有一个共同的缺点,就是懂得太多、想法太多、想做得太多但是仔细认真做得太少、做得精的太少、经得起考验的更少、真正可以实际应用可以广泛推广的就更少。
很多人都喜欢大谈SOA、IOC、ORM等等,但是对手上的眼前的程序代码却没有多少兴趣爱好,也懒得深入研究优化自己的程序,这几年深刻的意识到,眼前的才是真,真正在用的程序才是真,其他都是虚假飘渺的,把给客户用的实实在在的程序写得最好、性能最好,用起来好用,符合客户的实际需求才是真理。
打个比方,曾经我写了一个函数,一直用得蛮好的,自己认为已经写得非常好了,同事们也没在其中找出来过多少Bug,我们在日常开发中天天也在用,所以我想把这个类发布给大家用用,提高一下大家的品质,发布到网络上后,很多人有下载,也有人在用,也有人反馈过错误,但是其中我很佩服一个人“卢骐征”,这个人应该是仔细看了我的代码,然后给我指出:“吉日,你的代码还可以优化,有一个地方你可以这么改进一下......”。
我太佩服这样的人了,我不是想跟别人大谈什么这个牛B技术、那个牛B技术,我就想实实在在知道,我的程序还有什么问题,哪里还可以怎么改进?如何写代码才更好用,更好读,别人用起来更方便?
例如我写的一个获得参数的函数:
2 /// <summary>
3 /// 获取参数
4 /// </summary>
5 /// <param name="targetFiled">目标字段</param>
6 /// <param name="targetValue">值</param>
7 /// <returns>参数</returns>
8 public DbParameter MakeInParam(String targetFiled, Object targetValue)
9 {
10 SqlParameter dbParameter = null;
11 // dbParameter = new SqlParameter("@" + targetFiled, targetValue);
12 if (targetValue == null)
13 {
14 return dbParameter;
15 }
16 if (targetValue is String)
17 {
18 dbParameter = new SqlParameter("@" + targetFiled, SqlDbType.VarChar);
19 }
20 else
21 {
22 if (targetValue is Boolean)
23 {
24 dbParameter = new SqlParameter("@" + targetFiled, SqlDbType.Bit);
25 }
26 else
27 {
28 if (targetValue is DateTime)
29 {
30 dbParameter = new SqlParameter("@" + targetFiled, SqlDbType.DateTime);
31 }
32 else
33 {
34 if (targetValue is int)
35 {
36 dbParameter = new SqlParameter("@" + targetFiled, SqlDbType.Int);
37 }
38 else
39 {
40 if (targetValue is Int64)
41 {
42 dbParameter = new SqlParameter("@" + targetFiled, SqlDbType.BigInt);
43 }
44 else
45 {
46 if (targetValue is Double)
47 {
48 dbParameter = new SqlParameter("@" + targetFiled, SqlDbType.Decimal);
49 }
50 else
51 {
52 if (targetValue is Byte[])
53 {
54 dbParameter = new SqlParameter("@" + targetFiled, SqlDbType.Binary);
55 }
56 else
57 {
58 dbParameter = new SqlParameter("@" + targetFiled, SqlDbType.VarChar);
59 }
60 }
61 }
62 }
63 }
64 }
65 }
66 dbParameter.Value = targetValue;
67 return dbParameter;
68 }
69 #endregion
当时也费了不少周折,把这个函数写好,大家用用也很好用,但是我发布到网上后,人家(“卢骐征”)有水平的人就说了,这个可以改进优化,没必要写这么长,这就叫做水平,牛X啊,我佩服。
不是把程序写出来了,就叫厉害了,更厉害的是如何写才是最好、性能更高,更好用、更简洁,我按他的指导意思改进了程序的写法,变成了如下几行代码。
2 /// <summary>
3 /// 获取参数
4 /// </summary>
5 /// <param name="targetFiled">目标字段</param>
6 /// <param name="targetValue">值</param>
7 /// <returns>参数</returns>
8 public DbParameter MakeInParam(String targetFiled, Object targetValue)
9 {
10 SqlParameter dbParameter = new SqlParameter("@" + targetFiled, targetValue);
11 dbParameter.Value = targetValue;
12 return dbParameter;
13 }
14 #endregion
以前写的几十行代码,只变成了3行代码就可以了,过了一夜,我再想想很有可能,其中的两行代码也是多余的,应该是写一行代码就可以了,先做一个测试,改进后的代码是:
2 /// <summary>
3 /// 获取参数
4 /// </summary>
5 /// <param name="targetFiled">目标字段</param>
6 /// <param name="targetValue">值</param>
7 /// <returns>参数</returns>
8 public DbParameter MakeInParam(String targetFiled, Object targetValue)
9 {
10 return new SqlParameter("@" + targetFiled, targetValue);
11 }
12 #endregion
哎呀,几十行的代码,用得也很稳定的代码,其实就写一行代码就可以了,这就叫真水平,让别人也看看自己的代码,检查检查,不是自己觉得好了就是真好,别人都说好才是好,心理舒坦了很多,优化了代码,也感谢卢骐征的指点。
虽然他半年前就告诉我问题在哪里了,我也没马上修改,因为还需要考虑稳定性,自己是否有空有精力去修改,这几天正好心情好,把半年前人家提供的改进好了,心理也好舒坦。
很多改进未必是当场就改进,但是觉得应该这么改是对的,那就早晚会修正好,问题毕竟还需要按轻重缓急的顺序来一个个解决。
实实在在的水平就在于:“请告诉我,我应该怎么做才能做得更好,我的程序哪里有问题?如何改进?怎么写才是更好的?”,不要告诉我,去看RBAC吧,CMMI吧,请给我明确的指点,我不是神,你说个ISO、PMP什么的,我是根本不懂的我自己也学不了,没那个水平。