您的位置:首页 > 其它

从协议VersionedProtocol开始1

2015-01-03 20:07 204 查看
Phase 0: Make a plan

You must first decide what steps you’re going to have in your process. It sounds simple (in fact, all of this sounds simple), and yet people often don’t make this decision before they start coding. If your plan is “let’s jump in and start coding,” fine. (Sometimes that’s appropriate when you have a well-understood problem.) At least agree that this is the plan.

You might also decide at this phase that some additional process structure is necessary, but not the whole nine yards. Understandably, some programmers like to work in “vacation mode,” in which no structure is imposed on the process of developing their work; “It will be done when it’s done.” This can be appealing for a while, but I’ve found that having a few milestones along the way helps to focus and galvanize your efforts around those milestones instead of being stuck with the single goal of“finish the project.” In addition, it divides the project into more bite-sized pieces and makes it seem less threatening (plus the milestones offer more opportunities for celebration).

When I began to study story structure (so that I will someday write a novel) I was initially resistant to the idea of structure, feeling that I wrote best when I simply let it flow onto the page. But I later realized that when I write about computers the structure is clear enough to me that I don’t have to think about it very much. I still structure my work, albeit only
semi-consciously in my head. Even if you think that your plan is to just start coding, you still somehow go through the subsequent phases while asking and answering certain questions.

Linux是由Unix产生的,最终他的实现及他基础上很多应用软件都是基于一个哲学理念“把任务分解成一小块一小块完成”,可能现在你觉得这是件很简单的道理。但他不简单就在于所有有关
Unix的东西都是基于这一理念的,看看我们常用的那些小工具吧,find,grep,gzip,tar,bash...等等,这个道理无不贯穿始终。现在IBM/MS等公司经常提到的WEB Service,实际上细想也是这样的,无非是把很多服务分散开来,然后有个总的业务逻辑来进行迅速的组合成一个新的服务,满足市场的迅速变化的需求。


fēn
【动】
(会意。从八,从刀。“八”就是分;从“刀”,是以刀剖物,使之分开的意思。本义:一分为二)
分而治之(divide and conquer) 减而治之 Decrease and conquer 思想"

分而治之是中国汉语里的成语,意思是①分别治理。②利用手段使国家、民族或宗教等产生分裂,然后对其进行控制和统治。

分而治之,根据不同的成因,来选择不同的解决方案。

分而治之是一种很古老但很实用的策略,或者说战略,本意即使将一个较大的力量打碎分成小的力量,这样每个小的力量都不足以对抗大的力量.在现实应用中,分而治之往往是阻止小力量联合起来.
秦时,破坏合纵的连横即使一种分而治之的手段. 连横是战国时期的外交策略。与“合纵”对应。出自“诸子百家”中的纵横家。《韩非子》说:“纵者,合众弱以攻一强也;横者,事一强以攻众弱也。” “以能合纵,又善连衡“ 连衡即采用离间之计,使各国同盟国联合,从而逐个击破的策略。 是合纵成为六国合力抵抗强秦,连横则是六国分别与秦国联盟,以求苟安。秦国的连横活动,目的是为了破坏六国间的合纵,以便孤立各国,各个击破。 以史为鉴,合纵需要团结,连横需要发展。即:合纵的各方,必须要懂得放弃,运用“舍得”这种精神,大舍才有大得,不舍永远不得。而连横的一方,必须要知道在与别人合作的同时,不断深度发掘自身的潜能,强大自我。秦国,就是在与六国连横的过程中,一方面击破了合纵,另一方面不断深挖本国的潜能,使国家不断的富强,最终取得了统一霸业的伟大胜利。 分而治之谋略就是领导者在用人行为中,通过各种灵活巧妙的方式方法,将下属分别划归若干个互相连结,又互相制约的子系统,从而对他们实行更有效的治理和控制的一种用人谋略。 当某个领导面对着一个庞大而无序的人群组织时,即使他能力再强,也难以让这群人高效率地按照自己的意愿行事,然而,他只须将这群人划分成若干个精干而又有序的细胞(零件),分别让这些细胞(零件)去从事一定的工作任务,那么,这个庞大的人群立即就会变成一台走时准确的时钟,一刻不停地正常运转。有一个很有说服力的实际例子。 当时她的回答很简单:把人分了,就好管了。 管理的道理其实就这样简单:管理就是分而治之。我们通常都不害怕管10个人。因为10个人我们能够看得见,管得住。但是管理100人,1000人,10000人,1000000人?我们越来越恐惧和不知所措。但管理100个人和1万个人的差别并不大,关键是我们学会分而治之。

分其枝,离其势

比如我把2块东西一块做,那么一旦出问题,我需要去查找的范围是一个问题的2倍,而且是2个问题,所以工作量大概是4倍。 而且人不是机器,疲劳和厌倦速度也不是线性的,不是说难度上一倍,我就多一倍时间可以做完,难度上去了就更容易疲倦,疲倦和挫折感让人更加缓慢,而且缺乏快乐的工作简直是对人生的巨大破坏。 这么算下来,合理的分而治之可以获得指数级以上的效率提高,工作单纯看一次解决一个问题,但是每次都比较轻松,成就感伴随着快乐像吸血光环一样,让人越战越猛。 分治法是得益于“大禹治水”的思想研究得来的算法。本质为“分而治之”。俗一点就是“大事化小,小事化了”。

“分而治之”是一种艺术

分而治之,根据不同的成因,来选择不同的解决方案。 案例: 最近有幸参与到某个公司的筹备阶段,这个集团公司下面有几个完全功能不同的子公司,大家都在讨论人员,部门应该如何分配;公司的规章制度如何建立,公司下一步工作应该如何推进,是不是需要招聘哪些哪些人员,等等.. 但是一个奇怪的问题就是,大家讨论到最后,会发现问题没有解决几个,倒是搞得一团乱。 中间有个牛人,让我学习到不少东西。其实细细想来,他就是把分而治之的艺术运用的淋漓尽致。 首先他讲的是,一个企业公司规章制度不要搞的那么多,首先要做的是,建立公司核心价值观,不要整很多页,几个字就好。然后各个部门和各个行业的属性不同,来按照这个企业文化来制定相应的制度。这样我们要做的事情随着市场的变动总是要发生改变的,但是我们做企业的,永远都是要有底线和核心价值观的。 然后,其中一个领导层开始谈论某个工作要怎么样怎么样进行; 这个时候这位牛人又开始打断他,这些事情以后肯定是要做,但是不是要现在讨论和思考的。公司的核心价值观建立后,应该是要考虑“战略目标”了,而且要考虑这个“战略目标”的可持续性。假设我们某个部门的短期战略目标是“将我们的珠宝品牌打响全国市场”那么按照这个思路,下一步就可以想一下部门如何分配,“珠宝销售部”“电子商务部”“财务部”等等。 下一步是按照各个部门的需求来制定“战略方案”,依照这个“方案”来进行人员配备和权利指责的分配。 下一步是各个部门来进行自己“战术目标”和“战术小组”的分配以及职责和工作讨论。 不要把所有的和这个部门有关没关的都拿来讨论,最后只能一团糟。公司要稳定,那么部门不可能来回变动,所以要有一个可持续的“战略目标”做支撑,进行部门分配。为了达到这个“战略目标”每个部门要制定自己的“战术目标”可能是一个月或者半年,按照这个“战术目标”来制定小组进行工作,如果发现“战术目标”达不到或者向错误方向偏移,那么就需要重新制定“目标”和“战术”以及对应的“小组”“成员”。这样以来问题就可以清晰的解决,该是谁的问题,谁去解决去思考就好了。 细想其实生活中,或者软件项目中,我也是有意无意的犯下了这样的糊涂错误 没有分清主次,没有分清职能,最后就会导致很多决策错误,或事情乱成一团但也不清楚哪一块出了问题 虽然看到了,现在还是不能运用自如,还是要细细去品味,只是暂时记下了,相信以后的我一定比现在聪明,更能理解其中的奥妙。 冰山在水面下的部分,远比其水面上的部分要巨大得多。要想探究水面下的冰山,其中之一的方法就是分而治之深入研究, 分而治之的两种方式 为什么要分而治之?简单说,就是问题太复杂了,超出了人们能够“一蹴而就”的范围。 面对一个复杂的问题,我们如何进行分而治之呢?策略有二: 一、先不把问题研究得那么深,那么细,浅尝辄止,见好就收。这种分而治之的方式称为“按问题深度分而治之”。 二、先不研究整个问题,而是研究问题的一部分,分割问题,各个击破。这种分而治之的方式称为“按问题广度分而治之”。 我发现,一旦遇到貌似难以逾越的挑战时,分而治之是行之有效的做法。即将复杂问题层层分解,分解到尽可能小的子任务就能够让问题慢慢变简单。 以 Justin.tv 为例,我们的待办事宜清单经过了多次的层层分解。第一项任务让我们找到了 Kyle—第一台流媒体设备(将模拟摄像机的视频数据进行编码的计算机)的创造者和联合创始人。我们了解到旧金山正在开通 EVDO Rev A,这可以让我们以合理的速度将数据发送给移动网络(#2)。第三步让我们掌握了流媒体服务器有哪些选项,并最终选择#4(付钱给别人帮我们传输流媒体)   我们从零知识起步做 Justin.tv,经过 6 个月的全职工作,我们已经做出了一款可向多位观看者同时发送视频的移动流媒体硬件设备,并且有了我们自己的节目。   这个过程很简单,可以运用到任何类型的挑战上,无论是怪诞的还是平常的。   制定你自己的待办事宜,然后仔细检查该清单。比方说,如果你需要从大学毕业找到一份工作好照顾家庭的话,这可能就包含一大堆更小的、可管理的事情:赚够各门功课的学分,拿到一份过得去的毕业成绩,写简历、应聘,准备面试等等。   接下来,每一件事情还可以继续细化为更小更容易实现的任务:拿到好成绩可以转化为一组任务,包括学习、写学期论文、准备考试等。通常实现你目标的第一步往往简单如购买指定用书一般。   我回想起多年前跟朋友的一场争论。我的看法是有志者事竟成;而他则认为这种想法是荒谬的。比方说,他认为像由个人筹划的私人宇宙飞行是不可能实现的。事实上,他错了。   有志者事竟成;只是你需要一个分而治之的过程。 其实持续集成蕴含有哲学思想:分而治之。即我们通常说的 “滴水穿石,硅步千里”。 程序员经常会面对复杂的问题,而降低复杂性的最简单的方法就是分而治之。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: