软件研发的过程中存在两种思考的方法“自顶向下”和“自底向上”,自底向上的分析,是从具体到抽象;自顶向下的分析,是从抽象到具体。两种分析思路恰恰又是哲学思考问题的两大方向。
随着互联网的发展,“敏捷”,“小步快跑”,这个自底向上软件研发思想几乎发挥到了极限,不知道用户的需求,那就“投石问路”,“抛砖引玉”,这种探索适的研发方法,靠程序员大量的反复劳动,在用户的反馈中实现软件的功能,积小胜为大胜,开拓了一片软件的天空。
自顶向下的设计方法,就是传统的“瀑布模型”,把所有的主要框架的事情想清楚,再进行软件的研发。适合于成熟的需求,或是模仿客观世界。
其实这两方法都是非常常用的设计方法,在软件的研发过程中不存在只一种方法,都是混着使用,但是软件研发活动,是在社会这个大系统中进行的,并不是在一个理想条件的真空中,往往受到客观现限,如何灵活应用就是艺术了。
先说一个最经典这两种方法论的例子,那就是 邓公的"猫论“-不管黑猫白猫,能抓老鼠的猫就好猫,为代表的”三个有利用”的顶层设计下开展的改革开放,经济特区创新,取得小胜后,就全国推广,最后取得了改革开放的具大成就。
互联网面对客户-社会这一复杂的系统的时候,采用的是“小步快跑”的方法,先做出一版来给部分客户试用,效果好,推给全部客户;效果不好,退回,根据意见改进,持续迭代,积小胜为大胜,也取得了不错的结果。但是由于没有顶层设计,互联网应用积累的巨大流量,在变现的过程中却出了大问题,在广告收入乏力的情况下,资本为了逐利,几乎个个大的互联的网公司都搞起了“网贷”,利用金融产品去收割老百姓,结果得到国家的强力监管。 你说这是谁的问题?
在一个成熟稳定的系统,采用“自顶向下”的思路进行软件设计时,顶层设计就尤为重要,设计好了就能取得巨大的成就,没设计好对整个组织就是灾烂,甚至是灭顶之灾。特别是在复杂系统中没有一个单一的目标,俗话说“治大国如烹小鲜”,“即要又要”的矛盾目标特多,管理层没法给出一个简单的架构,或是单一的目标,系统的发展,往往是博弈的结果。因此管理层就在进行设计的时候,往往会采用,鼓励“底层创新”,然后对这种创新产生的结果进行评估,好的推广,效果不佳的舍弃。
这种设计方法在实行过程中,就会给一线的开发人员带来很大的困难,你说创新,成功了好说,失败了要不要追责,不追责,为了追求“成绩”,下面人跟你乱来一气;追责,伤了干事的人心,你说啥也没人信,躺平来应对。出现了个困局,那就是, “一管就乱,一放就死”。
所以一款好的软件,必定有顶层设计,对大方向进行把握,同时也有一线的程序员发挥主观能动性,解决一个又一个的具体问题。上下一心犹为重要,但是屁股决定脑袋。难!
网友评论