随想录(我们应该编写什么样的软件)

时间:2021-06-29 15:29:53

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】


    最近,我一直在思考,我们应该编写什么样的软件。或者可以换一种问法,客户自己需要什么样的软件。如果编写软件只是为了自娱自乐,类似于大学作业那种,那么软件编成什么样其实不是那么重要。但是如果软件是需要销售出去的,或者是作为硬件的一部分销售给客户使用,那么我们关注的点就多了。就我自己个人经验而言,编写软件最重要的就是关注三点,分别是稳定性、高效性和友好型。


    好多同学可能认为功能也是软件必不可少的一部分。这一点我承认,但是我觉得那是软件最基础的特性。比如说,你写的office软件没有打印功能,你编写的脑图无法输出jpeg图像,你编写的聊天工具没有办法群聊,这些都是说不过去的。这里之所以没有点出来,主要是认为他们只是服务客户的基本条件,但远远没有达到充分的程度。


    1、稳定性。关于稳定性,有很多度量的指标。一种方法是7*24方式,也就是一个星期7天,每天24小时无故障运行。要100%做到这一点其实是很难得,这其中有很多因素是你自己没有办法控制的。所以,为了修改这种评估方式,后面人们又提出了90%、99%、99.9%、99.99%代码稳定性评估方式。这些数字看上去十分无聊的,我们可以换一种表达方式,按照一年作为度量方式,如果是90%稳定性来说,那么你的软件有36天是不能运行的;如果是99%的话,那么一年中有3天是不能运行的;继续类推,99.9%的话,则说明你的软件一年中8个小时是没有办法运行;最后一个99.99%,这个就很厉害了,它说明你的软件一年中只有50多分钟是没有办法运行的。事实上,达到99%和99.9还是可以达到的,真正99.99%的话,你所付出的代价就很高了。这只是一种方式,另外一种度量方式就是软件发生问题后第一次发现问题的时间,以及两次问题之间的平均时间。这种方式是我从汽车测试中学来的,因为汽车本身就是这样测试的。如果你编写的软件很快就不能用了,或者频繁发生问题,那么基本上处于不能用的水平;反之则说明软件本身已经达到了很高的水平。稳定性,是坏产品和合格产品的分水岭,一个不稳定的产品,即使功能再多,本身的价值都是有限的。大家要牢记这一点。


    2、高效性。解决了稳定性之后,剩下来的就是速度的问题。一个稳定的软件,如果响应速度很慢,即使客户能够忍受一会,也是没有办法长时间坚持下去的。大家使用ios和安卓之后,会发现ios似乎响应速度很快,这当中并不是ios的硬件功能要比安卓快很多,而是ios花了很大的力气来做软件的优化工作。稳定性让软件有了销售的可能,而高效性才会让软件的开发者慢慢积累自己的优势。另外一个例子就是linux kernel,其实从稳定性来说,kernel本身已经达到了一个相当的高度。但是我们看到,kernel本身还在不停的推进和优化。这当中,除了新硬件驱动的添加、新算法的添加,另外一个很大改动就是流程的优化。单从中断的发展来说,就有中断、软中断、强占、多核、均衡调度、实时调度、空闲任务处理等很多情况。总之,kernel为了榨取cpu的性能,真是无所不用其极,几乎已经到了变态的程度。


    3、友好型。有了稳定性和高效性之后,后面就该说说友好型了。前面两个特点满足后,充其量只能说这个软件还行、凑合,但是离优秀还差一点距离。什么是友好型,就是说本身软件的界面很友好,使用起来非常方便和简单,即使没有太多使用经验的人也可以快速上手。除了常规的界面布局很清晰之外,几乎所有的功能都是水到渠成的,没有多余的堆砌。这方面做得比较好的就是微信了。事实上,目前我们手机上微信的功能已经很多了,除了常规的聊天之外,它还有支付、游戏、视频、音频、红包、群聊、扫码等很多功能。但是大家使用的时候还是觉得很方便,这就要我们自己思考一下微信是如何做到这一点的。其实只要细心一点,微信还提供了很多暖心的功能,比如点赞、发送图片提醒、好友推荐、摇一摇、发红包、gif图片发送、公众号等等,思考深一点的话,朋友们可以考虑一下开发这些功能一般是基于用户哪些心里来设计的,它解决了用户什么需求等等。模仿微信本身没有对与错,但是了解微信后面的设计哲学,或许对我们来说更加有益和重要。


    上面三点只是我自己最近的一些体会,欢迎大家参与讨论,或者与我联系。