博文

国际观点:有助于你编程而立即要做的10件事(2008-09-19 12:56:00)

摘要:我们一直努力又努力去掌握那些对于我们来说是全新的东西。那么,我们做什么来帮助学习?下面是一个关于如何使你编程更迅速合理的10件事情的列表。我更习惯与使用Ruby on Rails,但下面的观点也适用于其他环境。

1.升级单元测试

你的编程没有测试?你应当随时进行测试,即TATFT ( testing all the fucking time )。当然你应当选择比仅是单元测试更好的方式。RSpec和Shoulda是两个可以选来使用的工具。

2.试用TDD

既然你在测试,那你就应当记录下这些测试。不要记录代码并用后来的测试覆盖它,而应当是方法的记录。TDD ( Test Drive Development ) 可以使你编出更好的代码,TATFT最重要的基础就是 TDD。进行TATFT并不难,首先你写下你所能做的最简单的测试并运行,观察测试的失败,然后写出执行语句以便使测试通过,不停地重复这样的过程就可以了。

3.自动化部署

自动化是你最好的朋友,想要实现自动Capistrano是相当好用的工具。在你配置部署好你的项目后,第一个要装的东西就应当是Capistrano。从第一天起就可以自动化部署将会节约你大量的时间。
 
4.安装 SCM

安装 SCM并学习使用它,这样做的好处是可以使那些超重的库中的代码不再那么冗繁,目前有大量的工具可以选择,我每天使用的是Git。Git是一款很特别的分布式SCM,即DSCM。DSCM是很有前景的,它可以同有其他库的用户们协同工作。

5.审查持续集成

现在我们已经测试了代码并将其安全的存放在库内。比起不停地测试,什么是更好的方式?自动测试是个不错的选择。很感激有cruisecontrol.rb的存在,这个应用工具自动运行了那些琐碎的测试。

6.了解你的代码

写代码是一回事,但是更重要的事情是了解代码。可以用四种自动化工具来帮助你了解代码:flog、 tarantula、rcov 和saikuro。这些工具分别有其独到之处,我很乐意向你介绍它们。
Flog,可以按字母排列的顺序来记录复杂的结果。

Tarantula,根据相关性原则和一些灵活的创意设计......

阅读全文(1325) | 评论:0

影响世界的100个管理定律(2007-11-29 19:41:00)

摘要:影响世界的100个管理定律
第一章:管人用人育人留人之道
  1. 奥格尔维定律 :善用比我们自己更优秀的人
  2. 光环效应:全面正确地认识人才
  3. 不值得定律:让员工选择自己喜欢做的工作
  4. 蘑菇管理定律 :尊重人才的成长规律
  5. 贝尔效应:为有才干的下属创造脱颖而出的机会
  6. 酒与污水定律:及时清除烂苹果
  7. 首因效应:避免凭印象用人
  8. 格雷欣法则:避免一般人才驱逐优秀人才
  9. 雷尼尔效应:以亲和的文化氛围吸引和留住人才
  10.适才适所法则:将恰当的人放在最恰当的位置上
  11.特雷默定律:企业里没有无用的人才
  12.乔布斯法则:网罗一流人才
  13.大荣法则:企业生存的最大课题就是培养人才
  14.海潮效应 :以待遇吸引人,以事业激励人

第二章:以人为本的人性化管理
  古语云:得人心者得天下!在企业管理中多点人情味,有助于赢得员工对企业的认同感和忠诚度。只有真正俘获了员工心灵的企业,才能在竞争中无往而不胜。
  15.南风法则:真诚温暖员工
  16.同仁法则:把员工当合伙人
  17.互惠关系定律:爱你的员工,他会百倍地爱你的企业
  18.蓝斯登定律:给员工快乐的工作环境
  19.柔性管理法则:“以人为中心”的人性化管理
  20.坎特法则:管理从尊重开始
  21.波特定律:不要总盯着下属的错误
  22.刺猬法则:与员工保持“适度距离”
  23.热炉法则:规章制度面前人人平等
  24.金鱼缸效应:增加管理的透明度

第三章:灵活有效的激励手段
  有效的激励会点燃员工的激情,促使他们的工作动机更加强烈,让他们产生超越自我和他人的欲望,并将潜在的巨大的内驱力释放出来,为企业的远景目标奉献自己的热情。
  25.鲶鱼效应:激活员工队伍
  26.马蝇效应:激起员工的竞争意识
  27. 罗森塔尔效应:满怀期望的激励
  28. 彼得原理:晋升是最糟糕的激励措施
  29.“保龄球”效应:赞赏与批评的差异
  30.末位淘汰法则:通过竞争淘汰来发挥人的极限能力
......

阅读全文(1551) | 评论:0

你知道菩萨为什么灵验,香火不绝吗?----CEO必读(2007-11-29 19:13:00)

摘要:你知道菩萨为什么灵验,香火不绝吗?

我刚升上总经理职位的时候,很不习惯没有直接指挥的单位,
也很不习惯没有直接负责的工作,因此,没事就召集各个运营单位开会,
直接参与各个单位的运作,彷佛我就是部门主管一般。

直到有一天,一个部门主管告诉我:「何先生,你知道菩萨为什么灵验,香火不绝吗?
因为他们宝相庄严,高高在上,不会下凡过问凡间事物。

而当凡夫俗子有困难来求神问卜时,菩萨才会显灵指点,有求必应。
因此凡人皆感念菩萨之德,香火不断。」
这位主管说得文雅,意在言外,一时我还听不懂。
最后他才直截了当告诉我:「何先生,你高高在上当你的总经理就好了,管管大事,制定决策,不要直接降临各单位,指东说西,这样各单位主管要怎么工作啊?
更何况,以总经理之尊,离开执行面很远,很多事已在状况外,很多决定可能是错的。
喜欢下凡的菩萨,多数只会显现自己的无能,不会赢得尊敬的。」

听完这段话,我一身冷汗,原来我完全不会当总经理、不会当主管。
制定决策、分工设职,让所有的主管层层负责,发挥所长,是上位主管该做的事,
千万不要亲力亲为,和部属抢事做,这样只会让下属难为,让部属愚民化。
许多刚升任主管的人,还是习惯扮演执行者的角色,不知道运用团队的力量,结果是自己忙死、部属哀怨(因为没有发挥的空间),而且无所适从。
我就曾经是这样令人讨厌的主管。

另一种类似的状况,也会出现在创业者身上。
一般而言,创业主都是能干的老板,尤其在创业阶段,人力、财力都不足时,
通常要靠创业主亲力亲为,才能突破困境,因此创业主习惯自己动手做。

可是当组织变大、规模变大时,如果创业主不了解「宝相庄严」才能香火不绝的道理,
通常会出现组织规模变大的不适应症。

我也曾听创业主抱怨,部属能力不足、团队不佳,其实真正的原因是老板能力强,
无法忍受部属的不足,以至于老是自己动手做,结果当然无法培养出好的团队、好的部属。

我甚至曾经要求一位主管,禁止他自己下手执行工作。
因为他嫌部属动作慢,做事不到位,于是老是自己做。
我告诉他,就算失手,也要让部属独力完成,他的协助,只会让团队继续无力、无能。

想大事......

阅读全文(1655) | 评论:0

程序点滴--开放性思维(2)(2007-11-27 22:39:00)

摘要:保证程序可预测性       设计程序的时候,如何保证可预测性呢?答案就是我们上面所说的,所有的代码必须是经过测试的,必须是一步一步调试过的。只有经过你调试过的代码,你才能知道这个代码做某种运算的时候,它是怎样的执行方法。如果你不知道它的执行方法,你没进行过调试,则你就没有任何预测性。要达到可预测性,代码在汇编级是怎么执行的,你都得非常清楚。代码对哪个部分进行了什么操作,你都得知道。如果达不到这点,你的可预测性就很差。 比如,有些程序,你看它的C或者C++的源代码时,都看不出任何的问题。你看静态的程序时看不出任何问题,动态的程序调试你也看不出任何问题,这时,你必须把它的汇编打开,看一看它具体的操作,才能知道。所以说,开放性思维非常重要,你必须从最低层到最上层都要清楚。VC本身提供了一个汇编的调试环境,但是打开汇编后,如果你都看不懂,那你说怎么调呢?调什么?如果一个程序经过调试出来,则它会出错的地方你马上就会知道,只要看一些表现,就知道它有些什么问题。 比如说,我们做“大眼睛”的时候有个这样的现象。当要显示一个很大的图的时候,屏幕上只能显示其中的一小块,这样就可能需要拖动整个图像,但是拖的时候,如果在Windows 2000或Windows XP系统下就会发现,一旦我将图像拖到右下角时,图像就一下到左上角去了。该图像在右下角没有到底的时候还是显示正确的,但一旦到底,就把右下角转到左上角去了,如图1.2所示。 这是怎么回事?在Windows 98和Windows 95下,从来没有这个问题,而且如果图像不到右下角这一行,只差一点,它也不会出现这样的问题。为什么在Windows 98下没有这样的问题,在Windows 2000下会有呢?难道是我的程序有问题? 图1.2  图像显示问题示意图 这时,我就做了一个区域的比较,即看这个区域和整个这个图像的区域,是否中间运算有错误。但程序是调用Windows本身的API,我就怀疑是不是这个API出问题了。于是又重新写了一个区域相交部分,一步一步去查它,也没有任何问题,在任何情况下都是好的,但是到达右下角时,图像就会翻过来。经过以上两个步骤后,我就能确定,这是Windows操作系统的问题,Windows 98下没有这个问题,Windows 2000有,Wind......

阅读全文(1864) | 评论:0

程序点滴--开放性思维(1)(2007-11-27 22:38:00)

摘要:要具备开放性思维,就必须了解包括从CPU的执行方法,到Windows平台的运转,到你的程序的调试,最后到你要实现的功能这一整套的内容,只有做到这样,才能真正提高。如果你的知识范围很窄,什么也不了解,纯粹只了解语言,那你的思维就会很狭隘,就会只想到这个语言有这个函数,那个语言没有那个函数,这个C++有这个类,那个语言没有这个类等。而真正要做一个系统,思维一定要是全面的,游离于平台之上的系统和实际的应用软件是不现实的。 这种所谓理想化,已经有很多人提出是不现实的。所以,任何一个软件一定都是跟一个平台相关联的,脱离平台之上的软件几乎都是不能用的。这就必须对平台的本身非常了解。如果你有平台这些方面的知识,这样在思考一个问题的时候,能马上想到操作系统能提供些什么功能,我再需要做些什么,然后就能达到这个目标。这就是一种开放的思维。 在开放的思维下,我要做这个程序的时候,就会考虑怎么把它拆成几个独立的、分开的模块,最简单的,怎么把这个模块尽量能单独调用,而不是我要做个很大的EXE程序。一个很普通的程序员,如果他能够考虑到将程序分成好几个动态库,那么它的思维就已经有点开放性了,就已经不是MFC那些思维方式了。思考问题的时候能把它拆开,就是说,任何一个问题,如果你能把它拆开来思考,这就是简单的开放性思维。 但光会拆还是不够的,尽管有很多人连拆都不会。很多教科书中的程序,要解决问题的时候,就一个main,以后就是一个非常长的函数。这个main函数把所有的事情都解决了。如果连函数都不会分的话,则就是典型的封闭式思维。 这样的人不是没有,我是碰见过的。一些毕业生做的程序就有这种情况。所有的问题都由一个函数来解决。他就不会把它拆成几个模块。我问他,把一件工作拆成几件模块不是更清晰吗?他说,拆出来后的模块执行会更慢些。这就是很明显的封闭式思维和非封闭式思维的区别。 你看MFC的思路,那就是一层套一层的,要把所有的类都实现了,然后继承。它从CWnd以后,把所有的东西都包括进去了,组成一个巨型的类。这个巨型的类连界面到实现统统包括在里面。这时你怎么拆?根本就没有拆的方法,这就是封闭式思维。 如果一个系统、一个程序不能拆的话,则它基本上是做不好的。因为任何一个程序,如果它本身的复杂度越大,它可能出错的几率就越大。比如最简单的,哪个函数越大,则该函数的出错几率就越大。但如果把该函数分成很多......

阅读全文(2092) | 评论:0

高手是怎样练成的(3)(2007-11-19 22:36:00)

摘要: .ui_top{color:#000000;font-size:12px;line-height:18px;} .ui_top a:link{color:#000000;text-decoration:none;} .ui_top a:visited{color:#000000;text-decoration:none;} .ui_top a:hover {color:#000000;text-decoration:underline;}   高手是怎样练成的(3)
     因为计算机技术没有任何时候是突变的。它的今年和去年相差不会很大,但是回过头来看三年以前的情况,和现在的距离就很大。所以说,如果你每年都跟着技术进步的话,你的压力就很小,因为你时刻都能掌握最新的技术。但是,如果你落下来,别说十年,就是三年,你就赶不上了。 如果你一旦赶不上,就会觉得非常吃力;如果你赶不上,你就会迷失方向;如果你迷失了方向,你就觉得计算机没有味道,越做越没劲。当你还只是有个思路的时候,别人的产品都做出来了,因为你的水平跟别人相差太远,人家早就想到的问题,你现在才开始认识。水平越高,他就看得越远,那么他的思维就越开阔;水平越低,想的问题就越窄。 64位CPU是这个十年和下个十年最重要的技术之一,谁抓住这个机会,谁就能抓住未来赚钱的商机。CPU是英特尔设计的,对这一点他肯定清楚。举例来说,如果从64位的角度来看现在的32位,就像从现在的角度去看DOS。你说DOS很复杂吗?当你在DOS年代的时候,你会觉得DOS很复杂。你说现在的Windows不够复杂吗?Windows太复杂了,但是你到了64位的时候再去看Windows,就如同现在看DOS一样。 整个64位系统的平台和思维方式、思路都比现在更开阔,打个比方说,现在的Windows里面能开n个DOS窗口,每个DOS窗都能运行一个程序。到达64位的时候,操作系统事实上能做到开n个X86,开n个Windows 98,然后再开n个Windows 95都没有问题,系统能做到这一步,甚至你的系统内开n个Windows NT都没有关系。这就是64位和32位的差别。所以,微软的那些“老头”,四、五十岁的那几个做核心的人,现在正在玩这些东西。你......

阅读全文(1609) | 评论:0

高手是怎样练成的(2)(2007-11-19 22:34:00)

摘要:高手是怎样练成的(2)
     初级程序员和高级程序员的区别 一般对于一个问题,初级程序员和高级程序员考虑这个问题的方法绝对是不同的。比如,在初级程序员阶段时,他会觉得VB也能做出应用来,且看起来也不错。 但到了中级程序员时,他可能就不会选择VB了,可能会用MFC,这时,也能做出效果不错的程序。 到高级程序员时,他绝对不是首先选择以上工具,VB也好,VC也好,这些都不是他考虑的问题。这时考虑的绝对是什么才是具有最快效率、最稳定性能的解决问题的方法。 软件和别的产品不同。比如,在软件中要达到某个目标,有n种方法,但是在n种方法中,只有一种方法或两种方法是最好的,其他的都很次。所以,要做一个好的系统,是很需要耐心的。如果没有耐心,就不会有细活,有细活的东西才是好东西。我觉得做软件是这样,做任何事情也是这样的,一定要投入。   程序员到达最高境界的时候,想的就是“我就是程序,程序就是我”。这时候我要做一个软件,不会有自己主观的思路,而是以机器的思路来考虑问题,也就是说,就是以程序的思考方式来思考程序,而不是以我去设计程序的方式去思考程序。这一点如果不到比较高的层次是不能明白的。 你设计程序不就是你思考问题,然后按自己的思路去做程序吗? 其实不是的。在我设计这个程序的时候,相当于我“钻”入这个程序里面去了。这时候没有我自己的任何思维,我的所有思维都是这个程序,它这步该怎么走,下步该怎么走,它可能会出现什么情况。我动这个部分的时候,别的部分是否要干扰,也许会动一发而牵全身,它们之间是怎么相互影响的? 也只有到达这个境界,你的程序才能真正地写好,绝对不是做个什么可视化。可视化本身就是“我去设计这个程序”,而真正的程序高手是“我就是程序”,这两种方法绝对是不同的。比如,我要用VB去设计一个程序,和我本身就是一个程序的思维方式,是不一样的。别人也许觉得操作系统很深奥,很复杂,其实,如果你到达高手状态,你就是操作系统,你就能做任何程序。 对待软件要有一个全面的分析方法,光说理论是没有用的。如果你没有经过第一、第二、第三、第四这四个阶段,则永远到达不了高境界。因为空中楼阁的理论没有用,而这些必须是一步一步地去做出来。 一个高级程序员应该具备开放性思维,从里到外的所有的知识都能了解。然后,看到世界......

阅读全文(1649) | 评论:0

高手是怎样练成的(1)(2007-11-19 22:30:00)

摘要:
高手是怎样练成的(1)
          高手成长的六个阶段 程序员怎样才能达到编程的最高境界?最高境界绝对不是你去编两行代码,或者是几分钟能写几行代码,或者是用什么所谓的可视化工具产生最少的代码这些工作,这都不是真正的高手境界。即使是这样的高手,那也都是无知者的自封。 我认为,一个程序员的成长可分为如下六个阶段。 Ø         第一阶段 此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。 Ø         第二阶段 此阶段能精通基于某种平台的接口(例如我们现在常用的Win 32的API函数)以及所对应语言的自身的库函数。到达这个阶段后,也就相当于可以进行真实散打对练了,可以真正地在实践中做些应用。 Ø         第三阶段 此阶段能深入地了解某个平台系统的底层,已经具有了初级的内功的能力,也就是“手中有剑,心中无剑”。 Ø         第四阶级 此阶段能直接在平台上进行比较深层次的开发。基本上,能达到这个层次就可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。 这时已经不再有语言的束缚,语言只是一种工具,即使要用自己不会的语言进行开发,也只是简单地熟悉一下,就手到擒来,完全不像是第一阶段的时候学习语言的那种情况。一般来说,从第三阶段过渡到第四阶段是比较困难的。为什么会难呢?这就是因为很多人的思想转变不过来。 Ø         第五阶级 此阶段就已经不再局限于简单的技术上的问题了,而是能从全局上把握和设计一个比较大的系统体系结构,从内核到外层界面。可以说是“手中无剑,心中有剑”。到了这个阶段......

阅读全文(1610) | 评论:0

.NET3.0:Windows表现层基础类库WPF揭密{转}(2007-08-23 11:01:00)

摘要:一 WPF会带来什么? 
  Windows表现层基础类库(WPF) ,曾以Avalon为代号,是.Net 框架3.0(曾使用代号WinFX)的图形子系统,与XAML密切相关。在微软下一代WINDOWS操作系统 VISTA 中会预装WPF。WPF也可安装在Windows XP SP2 和 Windows Server 2003操作系统。WPF为构建应用系统提供了一致的编程模型,对用户界面和商业逻辑给予清晰地划分。基于WPF的应用程序可以部署在本地系统或者浏览器平台。WPF为windows应用程序的视觉效果提供了更丰富的控制、设计和开发等方面支持。WPF整合了一系列的应用服务:用户界面、二维和三维绘图、固定和适应性文档、矢量图形、光栅图形、动画、数据绑定、音频和视频。
  WPF/E是WPF的子集,代表“Windows表现层基础类库无处不在的意思”。WPF/E基于XAML和Javascript技术,构成了WPF移动版本的核心。WPF/E不提供3D特性,但是包括了XPS(XML文档规范)、矢量绘图和硬件加速等功能。 二 WPF的主要特性 

  以下是WPF的主要特性: 
  图形服务 
  所有的图形(包括桌面的窗口等对象)都将通过Direct3D渲染,旨在提供统一的图形显示通道,以实现高级的图形表现效果。 
    
  凭借Direct3D渲染图形的好处是,操作系统可以将图形处理任务委托给计算机显示卡上的图形处理芯片,以减轻CPU的负担。
WPF支持任意比例无损缩放的矢量化图形,支持在2D应用程序中进行3D模型的渲染和交互操作。 
  WPF除了构建传统的独立运行桌面应用程序,也支持基于XAML技术的浏览器应用(XBAP)。两种类型应用的编程模型很相似。桌面应用程序是可信度最高,采用ClickOnce或MSI等软件安装在本地计算机的应用程序,对计算机资源拥有完全的访问权限。为了保护计算机免受恶意软件的攻击,XBAP应用只能在一块由系统专门划分的部分信任沙箱内运行,不能访问计算机的全部资源,也不能使用WPF的全部功能。 用户从网页内XBAP类型应用没有安全或安装方面的提示),反之亦然。XBAP应......

阅读全文(3249) | 评论:0

软件测试---白盒测试指南(一四)(2007-06-27 12:54:00)

摘要: 测试数据设计   测试数据表  测试类名:  方 法 名: 测试人: 所属模块: 编号: 序号 测试目的 输入数据 实际输出 期望输出 差异与否 (允许误差) 估计错误原因 1 匹配条件           2 边界测试           3 条件分支           4 循环           5 不合法数据           备注                      
代码测试报告填写说明 代码测试报告填写说明 项目编号 1 类名称及版本 2 项目名称 3 测试人员 4 测试执行日期及版本 5       方法名称 标识号 测试结果 问题描述 问题属性   问题类别 修改确认 确定修改人员 返回次数 确认修改状态 1 2 3 4 5 6 6 7 8 9 10 11   12 13 14   ......

阅读全文(2070) | 评论:0