做好这个决定后,就面临一个很棘手的问题:怎么不把这样一本书写成散文,这类书很容易想到那写到那,针对各种东西,发一堆感触,而后被命名为经验分享。看到的一些书就是这个状况,这未必没意义,但这违背初衷,我是想写本讲本质,把事儿讲透的书。而上面的写法很像有把锤子就把什么都当钉子。做播放器的有益经验给做驱动很可能就是毒药。就好比说,单纯从现象来看,世界各个角落发生的事都不一样,但从牛顿定律的角度看,很多事情是一致的。好容易写个东西,怎么也得奔牛顿定律去---当时真是这想法。关键是,怎么写?
最后想了个有点诡异的方法,这个方法受刘慈欣的三体启发。我预设几个必然成立的前提,所有其他关键内容都从这几个前提用逻辑链进行推导。此外想办法建立一个纯量的公式来大致度量各个领域上的得失。
预设了四个基本前提:
- 软件是一种固化的思维
- 意识指导行动
- 项目所能耗费的资源是有限的
- 重复做同样的工作会降低效率
这里面第一点超级关键,用它可以解决总结出的规律不能普适的问题:如果你的规律是基于思维而不是基于具体的软件的,那么它就是普适的。
公式则是:
假设一个人的工程素养为E,一个人的工作意愿为W,组织所能提供的力量为O,内耗系数为M,那么对于一个拥有n个人的团队,从纯量的视角看,其在单位时间内最终可能贡献值可以表示为:
[(E1*W1 + O) + (E2*W2 + O) + ... ... + (EnWn +O)] * M
基于这种前提,可以用一种演绎的方式对软件相关各个领域进行一种解构。具体干这事儿的时候,碰到两个麻烦事:一个是商业因素一考虑近来,很多事情就说不清楚。你软件可以做的很好,但你卖不出去,那也不值钱,算不得成功。但一旦开始考虑能不能卖出去,问题的领域就又杂的一塌糊涂,软件怎么能卖出去和软件能不能做好基本上非常不同的领域,根本没法在有限篇幅里得出结论。这个时候,正翻凯恩斯的《就业、利息和货币通论》,惊讶的发现经济学中会抽象掉一些维度后来研究问题,触类旁通下产生了这样一个想法:技术因素、商业因素、(公司)政治因素都是影响项目的关键要素,但去除了商业因素和政治因素后考察到的东西就更像一种完美的东西,商业因素和政治因素可以使其表现形式发生变化,但不能改变其运作原理。这想法直接导致了最后书籍的名字《完美软件开发:方法与逻辑》,也导致了写的时候基本抽去了商业和政治因素。
到这里可以总结出一条很诡异的经验:有思考深度的其他领域的书对写这类软工书籍是很有帮助的。除了上面提到的,对我思考软工问题影响巨大的两本非IT书籍是:何新先生的《我的哲学思考:方法与逻辑》与黑格尔的《小逻辑》。其中“上帝是万物之尺度”与“在尺度自身中已经蕴含了本质”两句宛如雷电,极大的刺激了我的思维。
这样一来就写的顺畅一些了,但推导出来的结论虽然逻辑上没问题,有时候实在是离经叛道。比如,一条逻辑链是:软件是一种固化的思维 →思维的本质是概念和逻辑 → 概念和逻辑无法直接度量和精确度量 → 度量过程中需要很多的主观判断 → 以目标为导向的,以个人为中心的量化管理(相关的激励和惩罚)将崩溃 → 参照无歧义数据(函数复杂度等)的判断将成为程序员评价中的辅助手段
这让主推量化管理的人情何以堪。这时候我就理解为啥哲学家容易自杀,当你老感觉自己看到别人看不到的东西时,你要么觉的自己错了,要么就会狂妄觉得别人都是思维上的侏儒。后者再进一步就会发狂。我大致还好,属于怕自己错了,但又想坚持己见。所以就继续求证和写作。
此外,还有一个后遗症,因为这是一种比较特别的思维方式和视角(视野所见,似乎没人这么写过软件的书),最终导致某些地方很抽象---虽然我相信它是深刻的,也有价值的,看下面这段:
软件是一种固化的思维,这一点决定了许多的事情。从特质上来看,既然软件是固化的思维,那就必然同时具备思维以及思维所承载之物之特质。
- 思维的特质是指:思维的澄清通常是渐进的,思维自身是不可度量的,思维的主体一定是人,思维通常由概念和逻辑组成,思维的无边界化(灵活易变)这样的特质。这部分特质是共通部分,同时属于所有软件。
- 思维承载之物之特质是指:当思维的对象是数学的时候,思维本身也就具备了数学的特质;当思维的对象是商业逻辑的时候,思维自身也就具备了商业逻辑的特质。
既然思维自身的特质是复合的,那么作为固化思维的软件,其特质必然也是复合的:
既有属于所有软件的共同特质,也有特属于某类软件,甚至同其他类软件完全相反的独有特质。
这段文字的现实意义是基于它可以直接判定CMMI,敏捷这样的方法论是不完善的。基于某些实践,总结方法论,并试图推广这样的思路如果不明确自己这种方法的限度,那是有害的---这等于说之前甚至很有名的的软工书籍有问题。所谓的实践分享也并不像想的那么有意义。这很让人飘飘然,感觉比CMMI、敏捷这类东西看的还远,但个人骨子里还是有点不自信的。尽管如此,最终我选择相信逻辑,把这些离经叛道的分析和观点都放在书里面---只要它有清晰的逻辑支撑。
就这样,从管理写到编码,主要干的事情是让书里逻辑通畅。这又有点不知天高地厚---你想想,整这么本想论文一样的书出来,深刻可能是深刻了,可谁看啊!接下来等到要出版的时候,又回过头来考虑,怎么让它容易懂一点。但就像一个人的性格一定,八头牛也拉不回来一样,书的调子一定,除非推导重来,否则也挺难改的,作为结果,可读性略有改善,但总的来看还是抽象。
这里的经验是易读性这事最好在最初定书籍结构的时候就考虑进来。
大致是这么个过程。
至于怎么出版什么的回头在下篇里主力介绍下。
最后想说的是,虽然写来写去,自己是满意了,也感觉基本达成了自己的目的:独立视角,逻辑严谨。但很多地方真是有点抽象,不是很容易看懂,有想捧场的兄弟,如果毕业不到3年,还是慎重考虑下,免得买了看不懂,骂我一顿。
--------------------------------------------------------------
理想流 + 软件 =
理想流 + 人生 = ??理想流 + 管理 = ??理想流 = 以概念和逻辑推演本质,追求真理。