每次完成一件事情,做到自己满意

事件

熬夜,加班了2年,认清了一个现实:我做不完很多我想要做的东西。我想要的太多了。所以,我改变了策略:每次做一件事情,偶尔也加班很晚,但是保证每一件事情尽量做到我自己满意

分析

这个世界充满了诱惑,为了防止浮躁,对我的情况做了分析:

  • 父母是大官,富人;我不行,因为我父母是下岗工人;
  • 娶了个有钱的老婆 嫁了个有钱的老公;我不行,我老婆家里也不富裕;即使有钱,心里也不踏实,哪天岁月逝去,容貌和身体都不在,地位不平等,怎么办;
  • 祖上很厉害;我也不行,祖上全部是农民;
  • 很有钱,请人来完成;我不富裕,我的钱还要养家糊口,而且合适的人选很难找到;

结论

自己奋斗,不冒进,慢慢来,每次完成一件事情,做到自己满意,一点点做好。能吃能喝的活着工作着就行(robin的blog标题)

真正的蜕变-习惯养成

文笔比较差,也比较笨。我的所有别人眼里“快”的东西,都是一点点培养起来的。借助《如何阅读一本书》这本书里面摘录下来部分表达我对习惯养成的看法。

------《如何阅读一本书》摘录

 学习滑雪是一个成人最难堪的学习经验(这也是为什么要趁年轻时就要学会)。毕竟,一个成人习惯于走路已经很长一段时间。他知道如何落脚,如何一步一步往某个方向走。但是他一把雪橇架在脚上,就像他得重新学走路一样。他摔倒又滑倒,跌倒了还很难站起来。等好不容易站起来,雪橇又打横了,又跌倒了。他看起来—或感觉—自己就像个傻瓜。

  就算一个专业教练,对一个刚上路的新手也一筹莫展。滑雪教练滑出的优美动作是他口中所说的简单动作,而对一个新学者来说不只是天方夜谭,更近乎侮辱了。你要怎样才能记住教练所说的每一个动作?屈膝,眼睛往下面的山丘看,重心向下,保持背部挺直,还得学着身体往前倾。要求似乎没完没了—你怎能记住这么多事,同时还要滑雪呢?

  当然,滑雪的重点在不该将所有的动作分开来想,而是要连贯在一起,平滑而稳定地转动。你只要顾着往山下看,不管你会碰撞到什么,也不要理会其他同伴,享受冰凉的风吹在脸颊上,往山下滑行时身体流动的快感。换句话说,你一定要学会忘掉那些分开的步骤,才能表现出整体的动作,而每一个单一的步骤都还要确实表现得很好。但是,为了要忘掉这些单一的动作,一开始你必须先分别学会每一个单一的动作。只有这样,你才能将所有的动作连结起来,变成一个优秀的滑雪高手。

  这就踉阅读一样,或许你已经阅读了很长一段时间,现在却要一切重新开始,实在有点难堪。但是阅读就跟滑雪一样,除非你对每一个步骤都很熟练之后,你才能将所有不同的步骤连结起来,变成一个复杂却和谐的动作。你无法压缩其中不同的部分,好让不同的步骤立刻紧密连结起来。你在做这件事时,每一个分开来的步骤都需要你全神贯注地去做。在你分别练习过这些分开来的步骤后,你不但能放下你的注意力,很有效地将每个步骤做好,还能将所有的动作结合起来,表现出一个整体的顺畅行动。

  这是学习一种复杂技巧的基本知识。我们会这么说,仅仅是因为我们希望你知道学习阅读,至少跟学习滑雪、打字或打网球一样复杂。如果你能回想一下过去所学习的经验,就比较能忍受一位提出一大堆阅读规则的指导者了。

  一个人只要学习过一种复杂的技巧,就会知道要学习一项新技巧,一开始的复杂过程是不足为惧的。也知道他用不着担心这些个别的行动,因为只有当他精通这些个别的行动时,才能完成一个整体的行动。

  规则的多样化,意味着要养成一个习惯的复杂度,而非表示要形成许多个不同的习惯。在到达一个程度时,每个分开的动作自然会压缩、连结起来,变成一个完整的动作。当所有相关动作都能相当自然地做出来时,你就已经养成做这件事的习惯了。然后你就能想一下如何掌握一个专家的动作,滑出一个你从没滑过的动作,或是读一本以前你觉得对自己来说很困难的书。一开始时,学习者只会注意到自己与那些分开来的动作。等所有分开的动作不再分离,渐渐融为一体时,学习者便能将注意力转移到目标上,而他也具备了要达成目标的能力了。

C# code review checklist

C# code review checklist

My current client uses PSP extensively, so I’ve been putting together a checklist for reviewing C# code for use on our new project. Your comments or additions appreciated:

1. Are exceptions used to indicate error rather than returning status or error codes?
2. Are all classes and public methods commented with .NET style comments? Note that

comments should discuss the “what” of public methods. Discussion of “how” should be in blocks or in-line with the code in question.
3. Are method arguments validated and rejected with an exception if they are invalid?
4. Are Debug.Asserts used to verify assumptions about the functioning of the code? Comments like, “j will be positive” should be rewritten as Asserts.
5. Do classes that should not be instantiated have a private constructor?
6. Are classes declared as value types only infrequently used as method parameters, returned from methods or stored in Collections?
7. Are classes, methods and events that are specific to an assembly marked as internal?
8. Are singletons that may be accessed by multiple threads instantiated correctly? See the Enterprise Solution Patterns book, p. 263.
9. Are methods that must be overriden by derived classes marked as abstract?
10. Are classes that should not be overriden marked as sealed?
11. Is “as” used for possibly incorrect downcasts?
12. Do classes override ToString instead of defining a Dump method for outputting the object’s state?
13. Are log messages sent to the logging component instead of Console?
14. Are finally blocks used for code that must execute following a try?
15. Is foreach used in preference to the for(int i…) construct?
16. Are properties used instead of implementing getter and setter methods?
17. Are readonly variables used in preference to properties without setters?
18. Is the override keyword used on all methods that are overriden by derived classes?
19. Are interface classes used in preference to abstract classes?
20. Is code written against an interface rather than an implementing class?
21. Do all objects that represent “real-world” or expensive resources implement the IDisposable pattern?
22. Are all objects that implement IDisposable instantiated in a using block?
23. Is the lock keyword used in preference to the Monitor.Enter construct?
24. Are threads awakened from wait states by events or the Pulse construct, rather than “active” waiting such as Sleep()?
25. If equals is overridden, is it done correctly? The rules for overriding equals are complex, see Richter p153-160 for details.
26. If == and != are overridden, so they redirect to Equals?
27. Do all objects that override Equals also provide an overloaded version of GetHashCode that provides the same semantics as Equals? Note that overrides to GetHashCode should take advantage of the object’s member variables, and must return an unchanging hash code.
28. Do all exception classes have a constructor that takes a string and and another constructor that takes a string and an exception?
29. Do all exception classes derive from the base Matrix exceptions and fit correctly into the exception hierarchy?
30. Are all classes that will be marshaled or remoted marked with the Serializable attribute?
31. Do all classes marked with the Serializable attribute have a default constructor? This includes Exception and EventArgs classes.
32. Do all classes that explicitly implement ISerializable provide both the required GetObjectData and the implied constructor that takes a SerializationInfo and a StreamingContext?
33. When doing floating point calculations, are all constants doubles rather than integers?
34. Do all delegates have a void return type and avoid using output or ref parameters?
35. Do all delegates send the sender (publisher) as the first argument? This allows the subscriber to tell which publisher fired the event.
36. Are all members of derived EventArg classes read-only? This prevents one subscriber from modifying the EventArgs, which would affect the other subscribers.
37. Are delegates published as events? This prevents the subscribers from firing the event, see Lowy, p. 102 for details.
38. Is common setup and teardown nUnit code isolated in Setup and Teardown methods that are marked with the appropriate attribute?
39. Do negative nUnit tests use the ExpectedException attribute to indicate that an exception must be thrown?

References:
Juval Lowy, “Programming .NET Components”
Jeffrey Richter, “Applied Microsoft .NET Framework Programming”
“Enterprise Solution Patterns using Microsoft .NET” – available in published form or as a free pdf
Published 19 December 2003 03:56 PM by Ted_Graham
Filed under: .NET best practices, Software Process

jira工作日志花费时间填写建议

现象:

启用jira时间管理,确切的说是工作日志,不到一周,发现有人采用8小时标注法,在花费时间中,写入8小时。

原因:

  • 每天工作8小时,当然是8小时时间;
  • 根本没有时间管理意识,做到什么地方算什么
  • 思维混乱,根本不知道自己要做什么
  • 忘性比记性大

建议采用的方法:

  • 1 采取两段法,中午吃饭前留出20分钟,考虑一下早上做了什么,目前的现状是什么,下午怎么做,写进去;
  • 2 对jira中的任务继续拆分为多个子任务,细致到可以在估算2小时内完成,这样整个时间管理就达到效果了;

这样做的目标:

  • 开发人员自身能力的提高;
  • 以后同样项目的把握;
  • 项目完成进度的把握;

参考阅读:

1 海滩上的思想者On Beach) 程序员杂志 http://blog.csdn.net/gigix/archive/2006/01/14/579147.aspx   原文图片

每周的40小时,一定要在时间表上有所体现,哪怕是坐在一边发呆或者出去休息,也要明明白白地列出来。方便起见,大家一般  以一小时为单位填表,但听说澳大利亚有位同事填表的单位是一刻钟,这种时间管理的能力和执行力就令人叹为观止了。

2 《奇特的一生》 (苏)格拉宁 著 一生都在坚持时间管理的人,可以在日志上看到一生中每天的精彩;

3 《把时间当做朋友》 李笑来 培养精确感知时间。

jira工作日志中填写说明

工作日志只能修改剩余估算时间(Remaining Estimate)和花费时间(Time Spent),原估算时间(Original Estimate)不能修改

  • 剩余估算时间:以为整个时间是估算的,所以就是剩余估算时间;
  • 花费时间:工作真正花费的时间,大于0的整数,不带单位就是分钟;

开始时间(Start Date)主要用于对日志进行排序,方便阅读;

jira 3.13.4-#354 提供了四种对 剩余估算时间和花费时间的处理方法,也就是 调整估算时间:

  1. 自动调整:这个选择 剩余估算时间=(原来的剩余估算时间- 花费时间),如果剩余估算时间小于0,用0代替;花费时间=(原来花费时间+本次花费时间)
  2. Leave existing estimate of:这个选择 剩余估算时间不变,花费时间=(原来花费时间+本次花费时间)
  3. 设置剩余的估算时间 Y :这个选择,剩余估算时间=Y(输入值);花费时间=(原来花费时间+本次花费时间)
  4. Reduce estimated time remaining by Y :剩余估算时间=(原剩余估算时间-Y(输入值));花费时间=(原来花费时间+本次花费时间)

备注的写法根据 调整估算时间 的不同,建议的写法也不同

  • 选择1:第一种就是写清楚做了什么;
  • 选择2:除了写清楚做了什么,还要写清楚为什么还要保持剩余时间不变;主要适用于碰到难题,折腾了一天,没有进展;
  • 选择3:除了写清楚做了什么,还要写清楚为什么重新剩余估算时间,这是直接修改,相当于重新估算;这个主要用于项目内容的大范围变更;
  • 选择4:除了写清楚做了什么,对这个工作原来为什么估计不足;因为花费时间不等于要减掉的估算时间,这个应该是最常使用的功能,属于正常的调整;

三段论

简单学习一下三段论(syllogism)

所有的动物都是要死的;

所有的人都是动物;

因此,所有的人终有一死。

第一行是假设(大前提),必须同意第一行的假设后,才能往下进行,如果这个错误了,那么下面的所有东西都是假的;更多情况下,当讨论的双方(包括吵架)都一致同意第一行,讨论才有意义。

第二行是事实(小前提),这个是最具体的现象,参与讨论的人也不可以否认,如果任何一方不同意,讨论下去也是毫无意义的。

第三行是结果(推论,结论),能走到这里,大家意见一致,皆大欢喜。

三段论 http://zh.wikipedia.org/zh-cn/三段論

syllogism http://en.wikipedia.org/wiki/Syllogism

说明文写作方法

斯坦福大学关于说明文写作课程,备份记录一下。

在我记忆中,本科阶段从来没有人教我怎么写技术型文章,可能也是我们国家大学的一个缺失吧。自己也记不起来怎么完成本科论文的。

http://www.stanford.edu/~arnetha/expowrite/index.html

相关文章:

写说明文的能力 http://www.maming.com/2010/07/07/xieshuomingwendenengli/

jira需求模版

按照背景,需求,设计建议,实现建议来写
例子:

背景:由于老板需要单独的分区来放置少量的外贸尾单商品,我们需要设计并且实现这个新区域。外贸尾单商品量少,可能会有多个品牌,分码居多,码偏大;

需求:
根据模版文件设计外贸尾单区页面,保证框架不变,增加上部宣传图片和左侧宣传图片和广告区域图片,提供新款顺序,价格从高到底和从低到高的排序,不需要查询条件列,等等

设计建议:仅仅修改id为xxxx的和id为xxx的代码,在里面增加html,需要定义的样式放到html中

实现建议:
1 svn中的位置,在svn的webdesign中创建同jira key的目录,
2 最终结果打包为rar文件,命名为:waimao_(revision).rar,做为附件上传jira;包括:xxx,xx,xxx
3 页面名称为xxx.aspx

阅读的四个层次

第一层次:基础阅读,elementary reading。没有不认识的字,能明白每句话在说什么,读懂每句话最表层的意思;
第二层次:检视阅读,inspectional reading,skimming systematically(系统化略读)的一门艺术。快速读完这本书;或者就是翻翻;知道书的归类,大体思想和书里说了什么。
第三层次:分析阅读,analytical reading。仔细研读层次,例如教科书;
第四层次:主题阅读,syntopical reading。针对一个主题阅读多本书,并提出自己的观点。例如写论文就是这个层次的东西。

设计过程中jira和svn的配合

jira是管理任务本身的,属于流程管理范畴。svn是管理结果的,是代码。当然,严格意义上说,svn当然有过程管理。

我们在设计过程中,例如页面设计过程中,分为三个阶段,效果图,html和css代码,最终的页面,如果是.net开发,就是aspx。第一个阶段的效果图是psd文件和一些素材,属于中间过程文件,这些文件怎么处理。第二阶段主要是css和html,html属于中间过程文件,怎么管理;第三个阶段是我们需要的文件,这个问题都不大。

原则:
jira管理任务单,中间备注和设计思想,以及最终的结果;
svn管理备注,设计思想在代码中的提现,并保存整个动作流程;

具体实施:
在SVN库中建立一个design的目录(随便,反正怎么舒服怎么来),里面根据jira号码建立需要的文件夹,保存所有的设计文档。