探寻软件的本质

从工作到现在,一直在从事电信级嵌入式软件开发工作,自己的天地里只有嵌入式软件的“规矩”:不允许出错,处处要关心性能,巨大的代码工程,超长时间的编译构建,一到两年的版本发布周期...。仿佛世界上只有这一种开发模式,仿佛这就是天经地义的,仿佛这就是软件世界的全部。

直到最近两年不断耳濡目染互联网软件开发的模式,视野渐渐开阔了一些,也开始慢慢重新思考软件的本质,在这个过程中,我反而更加认可互联网软件开发的价值观:软件并不应该天生追求零缺陷,因为软件是由人写出来的,而人的犯错是不可避免的。

而互联网软件的价值观,恰恰接受了人是会犯错的这个事实,一切软件都是基于不可靠来设计的。软件本身出问题不可怕,只要可以快速恢复就行,甚至用户感受不到你的软件刚刚出了问题。在这种开发哲学的驱动下,逐渐产生了微服务等软件架构。而一个个微服务的划分,让软件的规模得以大幅降低,一切变得的灵活而快捷,这也是为什么互联网软件的发布频率能够如此之高。我们羡慕之余唯有感叹。从互联网公司来的新同事总是会觉得有一种束缚感,这就是差异,工作方式和价值观的差异。

当然,在这里并不是说要全部生搬硬套互联网开发模式,每个行业有自己的特点,电信级嵌入式软件,没有办法完全做到跟互联网软件一样随意,它有很高的可靠性要求,很高的时延要求,这一切,都要求做到严谨。其实能够玩转几百上千万行代码的产品,这本身就是一件了不起的事情。但是对于软件爱好者来讲,总是有一种束缚感,为了性能要牺牲漂亮的代码架构,数据结构和类的设计要迁就内存,必须时刻小心翼翼,以至于达到偏执程度,因为一个宕机就可能让你失掉全部奖金,甚至丢掉工作。至于代码的扩展性、可读性,没有人关心,只有小心翼翼在原来的基础上完成自己的工作就好。至于重构,一般人是绝对不敢动的,那怕这次重构是多么的合理,因为担心会因此招致祸端,多一事不如少一事。

即便是软件的质量要求不同,但是编码价值观可以借鉴,我们不能一味盯着如何不犯错误,还可以换个角度想想如何能快速恢复错误。不能因为追求性能无条件牺牲代码的美观,至少不能太偏执(我曾经被诟病过:短小函数使用太多,会影响性能)。这一切都是价值观上的导向,而不是其它。需要一种氛围,让代码成为一件件作品,而不是码出来的一堆符号。因为编码除了是一份工作,还应该能够带给程序员愉悦的享受和成就感。

几年的嵌入式软件工作经历,对我来讲也并非一无收获,从事过嵌入式软件开发的程序员会养成严谨的好习惯,这种习惯是一份宝贵的财富,也恰恰是互联网软件开发程序员缺乏的。

怎么做软件,怎么才能做好软件,这是一个需要持续思考的问题。

你可能感兴趣的:(探寻软件的本质)