自其异者视之,肝胆楚越也;自其同者视之,万物皆一也
—庄子,《德充符》
软件是一种固化的思维,这一点决定了许多的事情。
从特质上来看,既然软件是固化的思维,那就必然同时具备思维以及思维所承载之物的特质。
●思维的特质是指思维的澄清通常是渐进的,思维自身是不可度量的,思维的主体一定是人,思维通常由概念和逻辑组成,思维的无边界化(灵活易变)这样的特质。这部分特质是共通部分,同时属于所有软件。
●思维承载之物的特质是指当思维的对象是数学的时候,思维本身也就具备了数学的特质;当思维的对象是商业逻辑的时候,思维自身也就具备了商业逻辑的特质。
既然思维自身的特质是复合的,那么作为固化思维的软件,其特质必然也是复合的:既有属于所有软件的共同特质,也有特属于某类软件,甚至同其他类软件完全相反的独有特质。也就是说,在软件这一范畴里,两种矛盾的说法同时成立,并不是什么值得惊讶的事情。
既然软件的世界如此多元,那么进行完美软件开发的讨论时,就必须忽略一些细节,才可能在限定的篇幅下,取得有价值的结论。
因此,在本书后续讨论中,将更多的基于思维的特质,而非思维承载之物的特质,来探讨软件。这样得出的结论才更有普适性。
如果说软件是一种固化的思维,那么软件开发无疑是思维固化的过程。在思维固化的过程中有两个层面的问题需要同时解决。
●思维的主体必然是人,当多个人在一起协作的时候,彼此间的关系如何处理?在这背后隐含的两个分支是管理和流程。
●在软件开发过程中,从本质来看,事实上只有两个根本步骤:一是弄清楚要做什么(需求开发);二是对思维进行固化(设计,编码)。对这两个步骤的时序进行各种安排,则产生各种开发模型。为支持这两个步骤能够平滑进行,需要预先进行估算。
上述分解总结起来如图1-2所示。
在做出上述分解后,我们可以进一步推断完美软件开发必然包含着两个根本命题:一是上述各个分解步骤自身的最优化;二是上述各个步骤彼此间搭配的最优化。
也就是说现存的大多方法论(CMMI、敏捷等),由于其过度强调某单一维度,同时漠视方法与软件本质间的关联,一定程度上讲其本质是苍白的。(www.xing528.com)
图1-3用于说明这种关联的复杂性。
图1-2 软件开发中各项活动的归类
图1-3 软件开发中各项活动的关联关系
本质与细节
这世上同时存在着两种对立的声音:本质决定成败和细节决定成败。
偏好本质的人喜欢说本质论。
偏好细节的人则喜欢说精细化管理。
但如果在较长的时间轴上考量这两种观点,就会发现它们之间并不真的对立。
本质决定大尺度时间上的走势和必然性,而细节则决定差异(包括短期成败)。
比如说:人的本质特征是能思考,有感情,会衰老,寿命有限等,但区别不同人的却不是这些,而是性格,肤色,发色等细节。
具体来看:软件本质上是只有人才能处理的东西,因此公司中程序员群体的衰落一定会导致软件的衰落,只有优秀的程序员群体,才能保证软件的持久成功,这是必然的。但优秀的程序员却不一定确保当前项目成功,任何细节上的小疏忽,都可能导致软件在市场上崩溃,死锁,进而导致灾难性后果,这就是细节决定成败。
成败自身虽然万众瞩目,对个体而言却只是一种偶然和机遇。当事人可以很努力地平衡本质上的追求(长期视点)和细节上的追求(短期视点),但变更的始终是一种成败可能性。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。