2006年6月13日
年度"反"IT人物-准LP
典型事件:电脑无用论,她想买个电脑,结果捧回个DVD,并且说一样可以看电影噢。
新年寄语:哪里都可以上无线,我就给她买个笔记本。

年度进步最快的IT人物-父亲
典型事件:现在很习惯用电饭煲做饭,省力啊,电脑就是好啊。
新年寄语:要会发手机短消息,我就给你买个智能手机。

年度最佳IT搜索人物-弟弟
典型事件:喜欢在BaiDu里搜Google,令我汗颜啊!
新年寄语:能尽快搜索到你的女朋友。 

年度最佳IT硬件之王-我
典型事件:使得我和我弟弟平均每人2.5个电脑。
新年寄语:要这么多电脑干嘛?答:为了浪费!嗨,争取今年不浪费了.

IT终身成就奖:妈妈
典型事件-感谢妈妈10年前为我攒了第一台电脑。
新年寄语:大恩不言谢.
以上纯属真实,如有雷同,不胜荣幸。
posted @ 2008-01-15 15:18 MasterCai 阅读(296) | 评论 (1)编辑
       做了无数的项目,追求编程的艺术,担心自己的钱途,一度稀里的糊涂。
       作为一个程序员,工作
6年,在现在的厂里(用我妈妈的原话是厂里)也已经快4年了,从小工干起,再到架构师,草长草短,几度春秋,沧桑巨变啊,唯一不变的是我们那幢大楼和楼墙上那个Logo
      这么久了,自己想要一些变化,于是有机会进入
R&D Team(Research and Develop)工作。却是一度度徘徊迷茫,R&D是给你一个抽象的任务,要你具体地完成。这和以前做项目做产品有很大的不同,没有具体的目标和任务,没有人告诉你该怎么做,该用什么工具,不规定流程,一切要靠自己去做。
      很多东西要学,三思而后行,努力中
…,希望自己很快进入状态。园子里有做R&D的吗,谈谈经验啊!
posted @ 2007-06-29 17:30 MasterCai 阅读(2246) | 评论 (12)编辑
     摘要: 问题:用按钮来控制图的显示 一个按钮一张图privatevoidButton1_Click(objectsender,EventArgse){this.pic1.Visible=true;} ..... 四个按钮四张图privatevoidButton1_Click(objectsender,EventArgse){this.pic1.Visible=true;this.pic2.Visible...  阅读全文
posted @ 2007-06-22 12:04 MasterCai 阅读(1057) | 评论 (9)编辑

理解专业程序员,给您带来大师的tips
*"什么东西是绿的,有轮子,而且长在房子的周围"?*
*"猜不出来,答案呢"?*
*“是草,轮子是我瞎说的”!*
*--狎弄规则*

     1. 要点并不在于有那么多看似专业的程序员的人在到处丢人现眼,而是在于没有几个管理者知道,正在和自己打交道的到底是“他们”中的一员,还是我们中的一员。
   2. 如果你离开一个地方,那么这个地方会因为你的离开而更加恶化(因为一个很积极的批评者走了)。如果你留下,抱怨、叫喊、批评、建议、劝告,那么你最终会有收获,你会让别人也意识到这里存在问题,而且有可能(当然也只是有可能而已)你能给环境带来些许改观。
   3. 第一惯性定律:环境变化迫使人们改变。唯有此时人们才会改变。
   4. 第二惯性定律:如果被迫变化时,人们总要挣扎着保住他们最重要的东西,牺牲不那么重要的东西。
   5. 我们总是把效率最高的人从编程岗位上挪走或轰走。
   6. 程序员的岗位大大膨胀,于是即使尚有一些高水平的人才留在这一岗位上,他们带来的生产力提升也被大批涌入的新人中和了。
   7. 有一次,一个程序员对我说:为什么我的生产力每年提高5%,可我的经理还不满意呢?他(她)自己的生产力10年都没有任何提高。
   8. 一个经理的生产力是靠另一种方式衡量的--按照她管理的那些人的生产力衡量。
   9. 那么程序员的生产力为什么不能通过他(她)写的程序的生产力来衡量呢?
   10. 下面两个人哪个更好:Dorothy,她从前用来写100行代码的时间现在可以用来写110行,不过她的程序质量和以前一模一样;Herbert,他还是用同样的时间写100行代码,但是他的程序现在能帮助1000个使用它的职员,让他们提高1%的生产力。
   11. 不但要让程序员多产出,而且要让程序员决定这个产出的“多”是指什么。
   12. 在今天发达的社会里,空气食物和水都算不上能鼓动人心的动力,计算机能力的巨大提升,并没有真的威胁任何程序员的饭碗,而且法律也不允许经理们作出这样的威胁:你要不快点编码的话,我就憋死你。
   13. 获得了一种相对安稳、相对舒适的生活之后,普通的程序员会去寻求更高的需求,心理学家把需求列出如下:归属感-成为某个团队的成员;尊重,被他人高度评价;自我实现,被自身高度评价。
   14. 金钱作为衡量的一种尺度:Manuel编程已有五年了,现在他感到自己的编程能力确有提高。当一个学员来问他问题的时候,他发现要是他来编写那个程序,只要该学员所花时间的1/3。所以他对归属感很满意,学员也很尊敬他的技术。他也知道自己擅长这个。有一天他碰巧得知,那个学员挣30000美元,他自己的薪水是40000美元,这40000美元满足他的物质需要已经足够,而且他的职位也足够安全,但他觉得不太自在,“为什么,”他想,“我的生产力是别人的3倍,确只多挣了1/3?也许我的经理对我的技术不够赏识。”他的尊重受到了威胁,所以他有动力来对此做点什么了。他看了看报纸,他得知没有人会因为仅仅产出是别人的3倍就拿3倍的报酬,这个信息补偿了他的尊严。他明白了,工资的差异与其说时直接反映人的价值,不如说是一种象征。但是他也看到了人才中介广告说,招聘一个有他这样有经验的人,薪水远远超过40000美元,所以他的焦虑没有完全打消。他倒是不想辞职,因为他所有的朋友都在这儿工作,但他决定年终考评的时候提出工资问题,但是公司为了提高生产力控制人力成本,只计划给Manuell略微提一次薪。Manuel为了自己的工作状况,他会选择以下出路中的一个:离职,找一个新工作;尽可能避开他的经理的眼镜;为了弥补自己的低报酬,减少工作量。    而且如果Manuel真的感到需要更多的金钱时,他也不大可能通过提升生产力来赚取,相反,可能尝试以下途径:力争一个管理层的职位;晚上干点私活,给本地的某个会计师事务所的计算机写点程序。  这两种方式都会降低公司的生产力,第一种会损失一个有经验的人手,第二种则会损失这个人的时间和投入精力。
   15. 如果让程序员玩一个游戏,却不让他们知道全部规则,他们总会非常困惑,如果告诉他们这里的确有规则,但其中一些未经言明,很多程序员就会去努力,努力去发现那些潜在的规则,但是一旦他们感到这里根本没有规则,或者规则能够任意改变,程序员们就会对此产生敌意,并退出这个游戏。
   16. 让一心求产量的人去理解一心求质量的人近乎不可能,反之亦然。
   17. 把思考留给必须思考的东西!
   18. 头脑好,身体好.
   19. 要提高程序员的打字水平。
   20. 知道什么时候让事情水到渠成,这是最高的智慧。
   21.专业人士最终的安置应该是体面的退休。

posted @ 2007-05-31 11:24 MasterCai 阅读(2790) | 评论 (9)编辑
     摘要: 余过古刹,于残经败纸中拾得《VB2005-菜根谭》一录,似某一人或某一群人琐事记载,又似一些观点零散发布。翻视之,虽断断续续,然于身心性命之学,实有隐隐相发明者。亟携归,重加校雠,缮写成帙。 旧有序,文不雅驯,且于是书无关涉语,故芟之。著是书者为大师,究不知其为何许人也。  阅读全文
posted @ 2007-05-10 15:43 MasterCai 阅读(3360) | 评论 (5)编辑
    余过古刹,于残经败纸中拾得《VB2005-菜根》一录,似某一人或某一群人琐事记载,又似一些观点零散发布。翻视之,虽断断续续,然于身心性命之学,实有隐隐相发明者。亟携归,重加校雠,缮写成帙。 旧有序,文不雅驯,且于是书无关涉语,故芟之。 著是书者为大师,究不知其为何许人也。
1.partial
2.未使用的引用如何快速去掉
3.Global
4.多特性多尖括号
5.未分配、未使用变量编译警告
6.Unsigned Integer
7.尽量用Double不用Single
8.LIKE 运算符
9.IsNot运算符
10.TryCast
11.数组允许指定To关键字
12.Continue
13.参数是引用类型时Byval和Byref的区别,你真的知道吗?
14.重新引发异常Throw ex or throw
15.Save Project When Created OR not Save
16.剪贴板循环Ctrl+Shift+V
17.长方形模式选择Alt+鼠标
18.参数复制与粘贴Ctrl+Shift+Alt+P
19.BookMark Window
20.插入代码段 ? Tab  管理代码段Ctrl+K、Ctrl+B
21.停靠拖动更有效
22.导出导入设置
23.项目模板
24.单步执行  逐语句(F11)、逐过程(F10)、跳出(Shift+F11)、运行到光标处(Ctrl+F10)、当前断点置于视图中(Alt+小键盘上的*)
25.编辑并继续执行
26.调试窗口:局部变量、自动变量、监视、调用堆栈
27.单元测试
28.Get、Set定义不同作用域
29.运算符重载
30.事件选项卡
31.自定义事件
32.Overrides自动生成代码
33.Using关键字
34.接口重新实现
35.泛型
36.泛型约束-接口约束、继承约束、引用类型约束、值类型约束、无参构造函数约束
37.foreach 比For Next慢
38.SecureString
39.强类型泛型抽象类型
40.StopWatch
41.DeflateStream/GZipStream
42.Array.Sort/Array.Resize/Array.Find/Array.FindLast/Array.FindIndex/Array.ConvertAll/Array.Foreach好又多泛型方法
43.My.Application My.Computer My.Forms My.Resources  My.Settings   My.User   My.WebServices
44. Delegate的协变和逆变(C#,VB.net)
45.BackGroundWorker
...
posted @ 2007-02-28 10:53 MasterCai 阅读(5134) | 评论 (5)编辑
 Try
        Catch ex As Exception
            Throw ex
        End Try
 
这么写原来是一种"愚蠢"的写法啊!
正确的写法
        Try
        Catch ex As Exception
            Throw
        End Try
除非你想抛出你自己封的错误!
 
以下是一些解释:
The Throw statement without an argument rethrows the current exception object and must appear in a Catch clause to be valid. The only other significant difference from the version that takes an argument is that the latter also resets the StackTrace property of the exception object (as if a brand-new exception were created), so the version without an argument is preferable for rethrowing the same exception when you want to let the caller routine determine exactly where the exception occurred.
大意就是Throw XX多了一层ErrorStack,影响性能!
posted @ 2006-11-08 10:51 MasterCai 阅读(500) | 评论 (1)编辑
NET Framework 2.0 版中新增GZipStream 类,对了就是它了!
啥也不说了,咣咣的,别整那些没用的,代码说明一切!

 
 1 ''' <summary>
 2     ''' 
 3     ''' </summary>
 4     ''' <param name="data"></param>
 5     ''' <returns></returns>
 6     ''' <remarks></remarks>
 7     Public Shared Function CompressDataSet(ByVal data As DataSet) As Byte()
 8 
 9 
10         Try
11 
12             Dim bf As New BinaryFormatter
13             Using ms As MemoryStream = New MemoryStream
14 
15                 bf.Serialize(ms, data)
16                 Dim b() As Byte = ms.GetBuffer()
17 
18                 Dim output As New MemoryStream
19                 Dim gzip As New GZipStream(output, CompressionMode.Compress, True)
20 
21                 gzip.Write(b, 0, b.Length)
22                 gzip.Close()
23 
24                 Return output.ToArray
25 
26 
27             End Using
28 
29 
30 
31         Catch ex As ApplicationException
32             MessageBox.Show(ex.Message, "An Error occured during compression", MessageBoxButtons.OK, MessageBoxIcon.Error)
33         Finally
34 
35         End Try
36 
37     End Function
38 
39     ''' <summary>
40     ''' 
41     ''' </summary>
42     ''' <param name="data"></param>
43     ''' <returns></returns>
44     ''' <remarks></remarks>
45     Public Shared Function DecompressDataSet(ByVal data As Byte()) As DataSet
46 
47 
48         Try
49 
50             Dim input As New MemoryStream
51             input.Write(data, 0, data.Length)
52             input.Position = 0
53             Dim gzip As New GZipStream(input0True)
54             Dim output As New MemoryStream
55             Dim buff As Byte() = New Byte(4096) {}
56             Dim read As Integer = -1
57             read = gzip.Read(buff, 0, buff.Length)
58             Do While (read > 0)
59                 output.Write(buff, 0, read)
60                 read = gzip.Read(buff, 0, buff.Length)
61             Loop
62             gzip.Close()
63             Dim result() As Byte = output.ToArray
64 
65 
66             Dim bf As New BinaryFormatter
67             Using ms As MemoryStream = New MemoryStream(result)
68                 Return DirectCast(bf.Deserialize(ms), DataSet)
69             End Using
70 
71 
72         Catch ex As ApplicationException
73             MessageBox.Show(ex.Message, "An Error occured during decompression", MessageBoxButtons.OK, MessageBoxIcon.Error)
74         Finally
75 
76         End Try
77 
78     End Function


Sample


posted @ 2006-11-01 11:40 MasterCai 阅读(1304) | 评论 (10)编辑

以下场景是否在你的影像里出现过!

天下大事和久必分,分久必合!

很多情况下当一个项目结束,项目的成员都会分散到其他项目中,继续谋生。
比如原先的一个成熟项目(假设代号为A)有富有经验的架构师、系统设计师等等,当这个成熟项目结束的时候,除了一部分留守外,很多可能被安排到其它的项目(假设代号为B)作程序员,怎么,人的角色变了,对。
这个B项目已经进展到编码阶段,时间紧迫,而且很不幸,B项目的系统设计和架构出之新手,很多原先超简单的功能被极大的复杂化。所以当这两个系统架构师和系统设计师进入这个B项目Coding的时候,总是抱怨连连,感觉身心疲惫,靠巧合编程,看不到项目的尽头,感觉一群聪明人在一起做蠢事!

继续:现有的设计和架构可能导致程序员筋疲力尽,很努力了也看不到终点,维护极困难。
停止:重新设计和架构,时间上不允许,有令人发狂的最后期限呢?还有奖金。

继续还是停止,这是一个问题?
如果公司里有专家组成的架构设计评审团,这个问题根本不存在!可是没有!
问题又摆在眼前,很多人可能会离职!


何去何从?

posted @ 2006-10-19 14:05 MasterCai 阅读(1335) | 评论 (13)编辑
好久没来这里更新了!糊乱讲点啥吧!

       .net的最强势就是使得数据在Internet上自由传输。
和远程数据库打交道,很多.net的项目都用到了WebService,WebService除了可以传输一些基本的类型:int、Byte、string等等,还可以传输那些可以XML序列化的对象,比如DataSet!
Dataset定义如下:

1[Visual Basic]
2<Serializable>
3Public Class DataSet
4   Inherits MarshalByValueComponent
5   Implements IListSource, ISupportInitialize, ISerializable

当然你也可以定义自己的实体,只要它可以XML序列化都可以在Internet上传输。通过一段时间用下来,发现通过WebService传输Dataset,或自己定义的实体,如果Client用户很多,往往会使IIS占用大量内存,而且速度也很慢。这时,我们潜意识中会想到压缩,既然问题出来了,为什么不压缩呢?压缩在中国可是有悠久的历史了,由于带宽太窄,所以下载的文件都是经过压缩的。

一般的思路就是压缩成二进制。谷歌一下,发现黎波兄的文章。
  http://www.cnblogs.com/upto/archive/2006/04/10/compresswebservice.html
把他的代码编译成了DLL,抽象出两个方法

 1
 2    ''' 压缩Dataset
 3   Public Shared Function Compress(ByVal data As DataSet) As Byte()
 4
 5        Dim dss As New DataSetSurrogate(data)
 6        Dim ser As New BinaryFormatter
 7        Dim ms As New MemoryStream
 8        ser.Serialize(ms, dss)
 9        Dim buffer As Byte() = ms.ToArray()
10
11        Dim zipBuffer As Byte() = New CompressionHelper(CompressionLevel.BestSpeed).CompressToBytes(buffer)
12
13        Return zipBuffer
14
15    End Function
16
17    '解压缩Dataset
18    Public Shared Function DeCompress(ByVal data As Byte()) As DataSet
19
20        Dim buffer As Byte() = New CompressionHelper(CompressionLevel.BestSpeed).DecompressToBytes(data)
21        Dim ser As New BinaryFormatter
22        Dim ms As New MemoryStream(buffer)
23
24        'Return ser.Deserialize(ms)
25        Return CType(ser.Deserialize(ms), DataSetSurrogate).ConvertToDataSet
26
27    End Function

Demo 结构如下,请把CompresDataWithDotNet1.1WebService工程搞成Webservice


Demo是从Wevservice中取100000条数据,未压缩数据可压缩数据的比较!
压缩效果图:


大功告成!!

我原先对黎波兄的DataSetSurrogate这个类感到奇怪,直接Dataset序列化不就完了吗?为什么还要用DataSetSurrogate这个中间"层"?
我试了一下把DataSetSurrogate去掉,直接DataSet序列化,结果是发现速度超慢,把时间都用在序列化上面了!


源码下载


后继:

压缩并不局限于Dataset,把程序稍微改一改,可以压缩你定义的序列化实体!
你也可以加入一些数据加密解密的算法!
最近在学习.net 2.0,发现.net 2.0自带一些类,实现压缩,比如GZipStream压缩类,压缩比更高,数据更快,我会继续<<compress DataSet with .net 2.0>>,还有数据加密RSACryptoServiceProvider!


posted @ 2006-09-29 15:10 MasterCai 阅读(1763) | 评论 (3)编辑
http://www.microsoft.com/china/hr/10.mspx

1.对自己所在公司或部门的产品具有起码的好奇心是极为重要的一点。你必须亲自使用该产品。对于身处计算机行业的人来说,这一点怎么强调都不为过。当然,这一点同样适用于其他知识密集型领域,因为在这些领域内技术与应用发展更新极快,对其技术的掌握很难做到一劳永逸。如果你对这些产品没什么兴趣,你将很快落伍,并被淘汰出局。
  
2.客户交谈如何使用产品时,需要以极大的兴趣和传道士般的热情和执着打动客户,了解他们欣赏什么,不喜欢什么。同时必须清醒地知道本公司的产品有哪些不足,或哪里可以改进。
  
3.了客户的需求后,必须乐于思考如何让产品更贴近并帮助客户。
  
4.一个独立的员工,必须与公司制定的长期计划保持步调一致。员工需要关注其终身的努力方向,如提高自身及同事的能力。
  
5.于周遭事物具有高度洞察力的同时,必须掌握某种专业知识和技能。特别是一些大公司,他们要求员工迅速掌握专业技术。没有人能保证他目前拥有的技能仍适用于将来的工作,所以,好学精神是非常关键的。
  
6.灵活地利用那些有利于发展的机会。在微软,我们通过一系列方法为每一个人提供许多不同的工作机会。任何热衷参与微软管理的员工,都将被鼓励在不同客户服务部门工作。
 
 7.好的员工会尽量去学习了解公司业务运作的经济原理,为什么公司的业务会这样运作?公司的业务模式是什么?如何才能盈利?员工必须了解导致本行业中企业盈利或亏损的原因,才能对自己所从事的工作的价值有更深入的理解。
  
8.竞争对手的动态。我非常欣赏那些随时注意整个市场动态的员工,他们会分析我们的竞争对手的可借鉴之处,并注意总结,避免重返竞争对手的错误。
  
9.员工善于动脑子。分析问题,但并不局限于分析。他们知道如何寻找潜在的平衡点,如何寻找最佳的行动时机。思考还要与实践相结合。好的员工会合理、高效地利用时间,并会为其他部门清楚地提出建议。
  
10.略了一些必须具备的美德,如诚实、有道德和刻苦,这些都是很重要的,在此无需赘言。

posted @ 2006-07-07 16:34 MasterCai 阅读(232) | 评论 (1)编辑
[一.奠定基础]
1. 任何不能改善产品的工作,都是浪费时间或是偏离方向。
2. 领导者的任务是努力消除程序设计师工作上的一切障碍,让程序设计师全力专注在真正重要的工作─改善产品。
3. 千万不要把程序设计师的时间浪费在改善产品以外的工作上。
4. 永远记得自己真正的目标,然后让团队用最有效又最愉快的方法把它完成。
5. 理清详细的项目目标,可以避免在不必要的工作上浪费时间。
6. 不要因为制定目标需要花很多时间,或是别人都没有做,就省略了目标的制定。制定明确详尽的目标所花的时间,绝对会让团队得到更大的好处。
7. 事前决定最合适的优先考虑顺序,以及各考虑点的质量规范,能够指引开发团队的工作。
 
[二.策略性的作业方式]
8. 错虫愈晚清除,时间花得愈多。毕竟,您得知道程序是怎么写的,才能判断那里出了错虫;刚写完的程序记忆犹新,一年前写的程序可能早就忘了
9. 在开发的过程就立即除虫,可以让您早些学到经验,然后就不会再犯同样的错误;相反地,如果到了项目后期才发现,您可能已经犯过多次同样的错误而不自知。
10. 发现错虫而立即除错是一种缓冲器,提醒那些讲求快速而不够谨慎的程序设计师,以后多加小心。如果您坚持错虫全都清除了才能开发新的功能,就可以防止所有的程序处于半完成状态,因为错虫太多而使项目延误乃至无法推出;相反地,如果您允许错虫的存在,等于是埋下了项目失控的地雷,最后看似完成的项目,其实已经失控。
11. 若能保持没有任何错虫,您就能比较准确估出项目的完成时间。不必猜测3 2项功能和1 742个错虫共要花费多少时间,只要估算3 2项功能的工作时间就行了。更重要的时,万一到时候有些功能做不完,您可以做多少算多少,因为软件一直保持在无错误状态。
12. 不要把策略性工作方式当作训练的教条,应该向组员解释这些工作方式的内涵与用意。
13. 提出精确详尽的问题,可以引导出真正有效的策略性工作方式,帮助项目目标顺利完成。
14. 策略不是死的定律,要把它当作指导原则来活用。大部分的时候都应该遵循,但也有例外的时候。
 
[三.保持进度]
15. 定期暂停手边的工作,然后往前思考,随时做必要的修正,以避免未来的大障碍。
16. 有什么事情是我今天能做,而且可以帮助项目在未来几个月内顺利进行的?
17. 不要浪费时间在错误的问题上,一定要先确定真正的问题在哪里,然后才去改正它。
18. 人们开口要求的东西未必是他真正想要的。处理他的要求之前,请务必确定他究竟想要做什么。
19. 绝对不要答应别人自己做不到的事情,这样对双方都有益无害。
20. 不要为了讨好别人而伤害双方的工作进程,您永远要根据自己的目标,做适当的决策。
21. 是您在为项目负责。不要让任何人的建议阻碍项目的进行,包括上级的建议。
22. 天下没有真正免费的软件
23. 应该开发策略上具有重要性的功能,而不是把媒体的评比项目都做齐全。
24. 软件产品的开发,不能只为了有趣、挑战性,或是够有个性够令人眩目。
25. 不要把时间浪费在无法改善产品的工作上,即使这么做在将来会有潜在的利益,也要与现在投入的时间成本做个衡量。
 
[四.走向极端的狂热]
26. 确定您所要求的报告真的值得属下暂停工作,花那么多时间去写。
27. 利用项目检查报告来改进软件开发的工作程序。为了使报告发生作用,报告中必须确实描述我们这次解决问题的每一个详细步骤,以及将来应该如何运用这项新发现。
28. 请注意定期会议的价值,确定它值得每个人放下手上的工作。
29. 召开任何会议之前,请确定本次会议的目的是什么,达成这个目的的条件是什么,然后,务必达到开会的目的。
30. 试着排除不必要的后续工作。
 
[五.进度狂]
31. 不要利用进程表来驱使项目的进行,这对小组的士气伤害太大了。
32. 让日程表维持适度的紧迫,但又是可以做到的,好让组员振奋、不松懈,专心致力于项目的推进。
33. 绝对不要草率定出不可能的期限,导致组员为了赶进度而损害产品的质量。
34. 把长期的大项目,分成几个完整而独立的小项目,各小项目必须有一个主题。
35. 为了保持创意的活力和团队士气,必须让每一个小项目都有令人兴奋的结果。
36. 产品的质量远比遵守期限重要.
 
[六.学无止境]
37. 不要让程序设计师的学习停滞不前,要让程序设计师有机会磨练不同领域的技术,培养十八般武艺样样精通的组员。
38. 训练新进程序设计师时,先培养他对整个公司所有项目都有价值的技术,然后才培养本项目独有的技术。
39. 不要舍不得放您最优秀的程序设计师到别的项目去。如果他在您的项目已经没有新的东西可学,为了公司和他个人的前途,您应该把他推荐到别的项目,让他的成长永不间断。
40. 确定每位组员、每两个月都有一项技术上进步。
41. 一发现某处需要改进,就立即采取更正的行动。
42.不要用年终考评来订立学习目标,要利用年终考评来记录个人的成长。
43. 绝对不要让组员一直做同样的工作,这样是限制了他的学习,使他停滞在原来的领
域。一旦程序设计师精通了某一个领域,就让他换别的领域做做看,永远让他们学习新的技术。
44. 各种技术的用途范围有所不同,有的技术在一般的项目都用得上,有的技术只有在特定性质的项目才用得上。当您训练您的组员时,必须让他们的技术能在公司发挥最大的用处,最好的办法就是,把应用范围最广的技术放在训练的最前期,应用范围最小的技术放在最后训练。
45. 优秀的程序设计师是项目经理最需要的,所以经理们通常舍不得让自己手下功力最强的人到别组去,但是如果这位第一高手在本组内再也没有新东西可学时,经理就应该让他到别的项目去,一方面他个人可以重新开始另一次的成长,一方面让接替他的人学着承担重要的工作,最后公司的平均程序技术水准因而提升,对大家都很有好处。
46. 为了确保每位程序设计师的技术都在稳定地进步,一定要让每个人有个努力的目标,最好的方法是把个人的成长和项目每两个月的阶段性目标相结合,这样一年就有至少六次的进步了。假定一位组员在公司待了五年,那么他就学了3 0种新技术、或是读了3 0本好书、或是1 5项技术加1 5本书,对他的工作能力影响多大啊。
47. 最好的成长目标是出于当时的需要。如果您发现有位组员工作缺乏效率,或总是在犯同样的错误,最好抓住机会立即为他立一个目标,并且要求他立刻开始改进。这种当时设立的目标让人印象深刻,又是马上寻求改善,效果通常会非常好。比起年终考评那种模模糊糊的建议,更能引起程序设计师的重视。
 
[七.态度问题]
48. 要让每一位程序设计师都明白,写出零错误程序是很不容易的,所以应该多花功夫用各种方法做最彻底的测试。
49. 纠正程序设计师以为加除错码会花太多时间的观念,应该训练程序设计师第一个反应是考虑加上除错码是否有道理,第二是考虑加除错码是否符合项目的目标与工作的优先级。
50. 当某人说“某件事不可能做到”时,他往往是错的
51. 不要让凡事不能的态度阻碍了创新。
52. 使用者和程序的撰写者一样关心速度和品质的问题。
53. 不要让程序设计师以为使用者并不在乎软件的质量。
54. 不要给使用者次品,宁愿延期交货,务必追求质量完美。
55. 程序设计师必须经常以使用者的观点来看自己写的程序,程序设计师必须能体会使用者的感受。
56. 在包装盒里的每一件东西,都是产品的一部分。
57. 将程序的重用性当作优先考虑的目标之一,否则程序设计师将经常做重复的工作。
58. 充分利用现有资源或创造新资源,以便从每一项工作中获得更大的价值。程序代码的再利用,就是很好的例子,当然,还有其他的地方可以运用“杠杆原理”。
59. 如果您创造了一项资源,并且让别人知道,那么总有一天会派上用场。
60. 从您的每件工作中创造最大的资源,不管是利用现有的杠杆,或是创造新的杠杆。
61. 小心那种“太难了”、“太花时间”或是“太麻烦”的反射性反应。当您遇到别人有这种反应,请先问自己他有没有认真思考过这件事的重要性、以及是否符合项目目标,如果您认为他其实未经深思熟虑,只是直觉的反应,那您就应该把您的想法告诉他,请他重新评估,也许就会有公平的答案。
62. 人们遇到经验范围之外的事情,多少有恐惧感,就会认为“这完全不可能”而强烈反对。试着消除这种习惯性的反应,设法给组员灌输“只要花时间想想看,大部分的事情都做得到”的观念。您不妨以这个问题来对付那种“凡事不能”的态度:“我了解这是做不到的,但是‘如果’做得到,那你会怎么做?”然后您就会发现惊人的转变,您马上就会听到组员七嘴八舌地说应该这样做、那样做,说的是他们刚刚坚持做不到的事情。这个“如果”把他们带离直觉的反应,带到全新的思考模式,这才是他们应该做的。
63. 把使用者当作什么都不懂的外行人,是非常不好的观念。每当您发现有人表露出这种心理,一定要立即纠正,提醒他们使用者才是真正受产品好坏影响最深的人,他们和程序设计师一样关心软件的执行速度和质量。
64. 杠杆原理是您最有用的观念,找到您工作中的杠杆,您可以为小组、项目、公司、甚至软件业创造无可限量的价值。无论如何,尽量利用资源并创造资源,这个原则是绝对错不了的。在您写程序的时候注意程序代码的共享性、训练组员的时候注意到他对公司的价值,即使是像函数命名这种小事,都有杠杆的存在。不管做任何事,都要想到“善用资源”,为未来做好准备。
 
[八.沉船的感觉]
65. 如果进度发生落后,那表示有个地方出错了。您应该找出问题,并加以解决,不要一味要求组员加班,在问题没有解决之前,加班是没有用的。
66. 别误信加班等于增加生产能力,长期的加班只会伤害生产能力,对项目没有帮助。
67. 周末是属于组员私人的时间,不是公司的。公司不应该以打败竞争对手为理由,要求员工周末加班。
68. 强调思考的重要性,而不是长时间工作。
69. 训练开发小组懂得在正常工作时间内掌握好工作的效率,不要让他们超时工作,因为超时工作只是浪费时间的假面具。
70. 与程序设计师共同研拟出一份每日活动的时间表,把无法预期的临时公务变成固定时间处理的事情,并且把程序开发的工作放在最优先的地位,不要让其他次要的事情干扰到写程序。
71. 经常加班就是项目出问题的明显信号,也许是因为主管的观念错误或是目标不够清楚,不论是什么原因,项目经理绝对不能忽视这种现象,要对这个问题正确处理,项目经理必须协助组员在每周4 0小时的工作时间里,把事情做得更有效率。
72. 我经常听到高层主管称赞组员每天为公司工作很长的时间:“您对公司的贡献值得嘉奖,做得很好!”这绝对是错误的信息,员工应该是因为工作做得好而受到称赞,而不是因为在办公室待得久,管理者不该把“生产效率”和“工作时间”混为一谈,有的人也许可以用更少的时间,完成两倍的工作呢。
73. 为了让组员把办公时间用在正确的地方,并提高部门的工作效率,项目经理不但要为他们排除任何不必要的会议、报告和杂事,还要协助他们好好运用宝贵的上班时间。您应该协助组员安排适当的每日活动表,用一些小技巧,让组员有长段又不受干扰的时间,适合进行开发工作。
74. 如果您关心组员的生活,就不要让他们把全部的时间都投入在工作。每天只要确定他们卖力工作了八小时,就可以把他们赶出办公室了,当然这样做也许会有老板看不顺眼,但是如果您像我一样相信均衡、健康的生活是一切创意的原动力,就坚持这份理念吧!
75. 每周工作4 0小时并不是金科玉律,只不过是美国的传统,而软件开发项目大都以此为前提编定日程表。所以如果一个项目需要程序设计师每周工作40 小时以上才能赶上进度,就表示有问题,也许是日程表定得太乐观,也许是程序设计师需要再训练。不管怎么说,这个问题一定要认真解决,绝对不应该让程序设计师加班来弥补这个漏洞。
posted @ 2006-06-29 09:20 MasterCai 阅读(760) | 评论 (7)编辑

别不懂装懂
      软件开发过程中,太多东西是大家不知道的,因此,管理者或开发人员就很容易有这种不懂装懂的倾向。好的开发团队应该有一张清单,上面列着我们目前不知道的事情,这样才比较容易掌握到底什么事情会不确定。
 
      人们会觉得对于重要的事情,我如果不知道就很丢脸,这是天性。作为在Reecho(化名)和Echo(化名)呆过的开发人员,我就暴露一下天性,在这里丢一次脸吧:)
 
1."E-C (化名) Framework,你对我态度好一点行不行,我回去把档案删了,你一辈子做古惑仔,我也不用烦了。"
天天编程天天在用,我却对其知之甚少,一旦他(她)们闲谈一些关于Framework的问题,我却云里雾里,可能从未参加过关于Framework的会议,我现在连Framework版本是几都不知道。不了解就无法拥有,至理名言啊!
 
2."每次Release,都要超烦、复杂配置(从头开始),模拟环境等,发布几个EXE和DLL真的需要这么复杂吗?"
如果这个过程中每件事情都要做,有没有更简单更好的办法。如果是简单的机械重复的劳动,是否可以让计算机去做?还有就是重用,每件事是否可以在下一版本的Release重用的,这是软件开发的基本素质。我对这个发布的过程还是不了解,因为从来不曾接触过,没有叫我做过。他们闲谈的时候我云里雾里,还是不了解就无法拥有。
 
3."Bayer&Reecho联动,拿什么拯救我?"
摆在开发人员面前的两座大山,业务问题,技术问题。业务问题是根本性问题,技术问题是次要问题。Bayer&Reecho联动,我由于对业务不熟,几次讨论下来,我的感觉主要集中在XXXX以及XXX那里,我从未接触过,所以对此很不了解,我只知道XXXX、XX、XXXXXX、XXXXXX、XXXX,当然还有最近的XXXXXXX。所以你要我把整个Reecho的流程走一遍,告诉你我现在不行(把Echo整个流程走一遍,告诉你,我也不行)。保持低调,所以我把我自己当作新人,回顾这两年总是感觉空空的!
 
4."责任,到底有什么样的权利和义务,我的职责是什么?"
在Echo和Reecho都有这样的感觉,好像样样都要做,但是当你提出建议、批评的时候,却没有人理你,'你是谁啊,凭什么听你的',这是多么悲哀啊。因为我只是一个开发人员,我当然可以选择KISS(Keep In Silent And Stupid!)。大部分的人都不愿意思考,他们认为自己乐于思考,但事实上并非如此。保持脑袋空空很容易,在微软把这种人叫作bozo,意思是笨蛋。永远没有人会注意笨蛋的所作所为,即使他真的有贡献,他也不会有任何份量。笨蛋当然是不可信任的,你对笨蛋惟一的期望是但愿他不要搞砸事情,我是一个笨蛋吗?
     
 
      软件开发项目的目标并不是事前做好正确的规划,而是每天都得在事情从未知到已知的时候,做出正确的抉择。如果你明明不知道某件事却假装知道,你就无法在事情从未知到已知的时候得到正确的信息,也就可能会做出错误的决策。当信息证明你错了,你一定觉得非常难过。于是你会更加害怕信息,而别人就以为你在抗拒事实,最后你将陷入恶性循环。
      只有当你知道不确定性在那里时,你才有可能解决它;那些没有被发现的确定事情,会把你绊倒。相形之下,承认你不知道是比被击倒要好得多了。
 
      同学们,你们有不知道的事情吗?

posted @ 2006-06-28 10:37 MasterCai 阅读(889) | 评论 (2)编辑
强者为尊应让我,英雄只此敢争先。一腔热血一身胆,不知退后总向前。(哈…) ------刚毕业
蹉跎了岁月,激荡着情怀,为什么?偏有这样的安排。------为什么程序员总要加班?
人生贵在有追求,哪怕脚下路悠悠。走啊走,走啊走。------为了养家糊口。
爱恋伊,爱恋伊,愿今生常相随。------恋爱、找到一个好公司。
远去矣,远去矣,从今后梦萦魂牵。------失恋、转行、失业。
星儿摇摇,云儿飘飘,何必西天万里遥,欢乐就在今朝,欢乐就在今宵。------聚会、结婚
驱散妖雾乾坤净,换来晴空月儿明。------还是要工作,否则怎么活。
面对大千世界,功过从何数,愿此身化作菩提,护众生光照千古。------IT行业的特点:技术共享。
自度度人,自觉觉他。------成为大师
敢问路在何方,路在脚下。------脚踏实地
posted @ 2006-06-14 14:52 MasterCai 阅读(236) | 评论 (0)编辑

1.吸引蜜蜂的果树绽开花朵;遭到袭击的乌贼放出烟雾;正在启动的程序显示Splash屏,自然界就是这样呵。

2. 较长时间的运算:使用进度条(progress bar).

3. 不要阻塞界面(UI)线程;使用多线程进行长时间的运算.

4. 状态栏(status bar).

5. 操作开始之后,用户应当能够通过界面操作取消或终止较长时间的运算.

6. 增强用户体验:使用户可以通过界面来控制程序的运行.

7. 在适当的时候提供必要的程序开关.

8. 验证用户的输入.

9. 使用界面友好的MessageBox,注意要在提示对话框中使用适当的按钮和图标.

10. 如果有些操作必须是阻塞的,而且很难计算出这些操作的进度,这时一定需要使用等待指针(wait cursor).

11.使用向导能够让用户很容易就知道应该如何使用应用程序.

12.任何地方键盘都能访问到.

13.注意快捷键的设置.

14.注意tab键的循环.

posted @ 2006-06-14 14:35 MasterCai 阅读(1234) | 评论 (7)编辑


滚滚长江东逝水,浪花淘尽英雄。是非成败转头空,青山依旧在,几度夕阳红。
白发渔樵江渚上,惯看秋月春风。一壶浊酒喜相逢,古今多少事,都付笑谈中。

公元二零零六年六月十七日,不在别处,在现在的公司整整1000天。

发帖纪念。

古代最优秀的团队:

大圣歌
孙悟空跳出炼丹炉时的插曲。
(咦…)哈…腾云驾雾(哈…),追风逐电(哈…),一个跟头(哈…),十万八千。火眼金睛(哈…),铜头铁肩(哈…),威风凛凛(哈…),大圣齐天。说什么,艰险磨难,怕什么,鬼怪神仙,扯开如意金箍棒,打它个地覆天也翻!强者为尊应让我,英雄只此敢争先。一腔热血一身胆,不知退后总向前。(哈…)
 
五百年桑田沧海
孙悟空压在五行山下的插曲。
五百年桑田沧海,顽石也长满青苔,长满青苔。只一颗心儿未死,向往着逍遥自在。哪怕是野火焚烧,哪怕是冰雪覆盖,依然是志向不改,依然是信念不衰。蹉跎了岁月,激荡着情怀,为什么?偏有这样的安排。
 
走啊走
唐僧踏上取经路时的插曲。
走啊走,走啊走,依依离别家乡柳,走啊走,走啊走,依依离别家乡柳。披星戴月食风饮露,苦海无边甘承受,人生贵在有追求,哪怕脚下路悠悠。走啊走,走啊走。
 
吹不散这点点愁
《三打白骨精》中孙悟空被唐僧赶走时的插曲。
就这样蓦然分手,就这样一去不回头。临行方知情深厚,多少往事在心头。啊,山悠悠,水悠悠,一路上风吹不散这点点愁。
 
女儿情
《趣经女儿国》女王带唐僧游园时的插曲。
鸳鸯双栖蝶双飞,满园春色惹人醉。悄悄问圣僧,女儿美不美,女儿美不美。说什么王权富贵,怕什么戒律清规。只愿天长地久,与我意中人儿紧相随。爱恋伊,爱恋伊,愿今生常相随。
 
相见难别亦难
《趣经女儿国》女王与唐僧师徒话别时的插曲。
相见难别亦难,怎诉这胸中语万千。我柔情万种,他去志更坚,只怨今生无缘。道不尽声声珍重,默默地祝福平安。人间事常难遂人愿,且看明月又有几回圆。远去矣,远去矣,从今后梦萦魂牵。
 
何必西天万里遥
小雷音寺前在树林里杏仙歌舞曲。
桃李芳菲梨花笑,怎比我枝头春意闹。芍药婀娜李花俏,怎比我雨润红姿娇,雨润红姿娇。香茶一盏迎君到,星儿摇摇,云儿飘飘,何必西天万里遥,欢乐就在今朝,欢乐就在今宵
 
晴空月儿明
唐僧扫塔时的插曲。
乌云压顶夜森森,塔铃响声声。月色昏暗灯不明,知是宝塔第几层。一片禅心悲众僧,师徒扫塔情殷殷。驱散妖雾乾坤净,换来晴空月儿明。
 
天竺少女
玉兔精与唐僧婚礼上的插曲。
噢……沙里瓦,噢……嗬!……是谁送你来到我身边,是那圆圆的明月,明月,是那潺潺的山泉。我像那戴着露珠的花瓣,甜甜地把你依恋。噢……沙里瓦,噢……嗬!……是谁送你来到我身边,是那璀璨的星光,星光,是那明媚的蓝天。我愿用那充满着纯情的心愿,深深地把你爱恋。噢……沙里瓦……
 
青青菩提树
唐僧师徒静坐菩提树下的插曲。
青青菩提树,宝象庄严处,经过多少岁月,依然苍翠如故。仰参菩提树,遥望故乡路,几多朝朝暮暮,漫漫云烟无数。历经坎坷终无悔,未教年华虚度。咦…噢…面对大千世界,功过从何数,愿此身化作菩提,护众生光照千古。
 
取经歌
大结局时回忆取经路的插曲。
一年年含辛茹苦经冬夏,几万里风霜雨雪处处家。取来了真经,回返我华夏。鬓添白发,减损韶华,战胜了八十一难心不老,赢得了世代传颂是酬答。人生总有限,功业总无涯。休夸说妖魔鬼怪全打怕,莫提起险山恶水都平踏。又一条征程,正摆在脚下。自度度人,自觉觉他,要把这真理妙谛播天下,要让我九州处处披锦霞。人生总有限,功业总无涯。
 
敢问路在何方
片尾曲。
你挑着担,我牵着马,迎来日出送走晚霞。踏平坎坷成大道,斗罢艰险又出发,又出发。你挑着担,我牵着马,翻山涉水两肩霜花。风云雷电任叱咤,一路豪歌向天涯,向天涯。啦……啦……一番番春秋冬夏,一场场酸甜苦辣。敢问路在何方,路在脚下。

让浮躁远去,1000以后重生!我是新人,请多多关照!

posted @ 2006-06-13 14:51 MasterCai 阅读(328) | 评论 (2)编辑