汽车行业的困局:软件决定了生死
文章来源:侯哥工作感悟
发布时间:2021-06-10
软件定义汽车,将传统汽车的配置和性能的竞争转变为软件功能的竞争,包括智能化和自动驾驶技术等。
最近这一年,SDV(Software Defined Vehicle,软件定义)这个词越来越火了,大家都在兴高采烈的谈着软件如何改变汽车行业,好像有了SDV之后,一切就都彻底变了。比如OEM可以靠软件来赚钱了,整个产业链也要彻底洗牌了。咱们先不评论这些观点的正确与否,毕竟尚未有结论的事情,所有人都可以发表自己的观点,只有当未来已来的时候,大家才能知道哪种观念才是最接近事实的。只是那个时候再回首已经没有什么意义了。
在谈到SDV的时候,很多人都喜欢拿特斯拉和苹果做比较,基本的观点就是特斯拉创造了一种新的模式:软件定义汽车,将传统汽车的配置和性能的竞争转变为软件功能的竞争,包括智能化和自动驾驶技术等。这个的确是特斯拉的一个优势,可是如果特斯拉连基本的汽车的属性都做不好的话,软件再好也是徒劳。
曾经看到一个数据:特斯拉的安全性已经超越了很多的传统豪华车。而且,在网络上看到了很多用户的评论,特斯拉的驾驶感是非常好的。这些是车辆的基本属性,是一定要做好的。现在看到很多OEM,为了智能而去智能,为了先进而去先进,就有些舍本逐末了。车辆的基本属性都做不好,质量问题一大堆,再智能化也是徒劳。
让我们先回顾一下Nokia当年的情况,在苹果大行其道前,Nokia的Symbian系统是当时的智能手机的王者,所谓的大屏手机也是Nokia率先推出的,大家可以看一下下面的这个Nokia N8的图片,谁能说它不是智能机呢?而且Nokia也有自己的Nokia Store,可以下载各种APP。苹果的APP Store应该也是模仿Nokia吧。
而现在很多人这样来描述Nokia倒下的过程:苹果推出了智能手机,这是Nokia所没有的,而Nokia却固执己见,不愿意早做转变,到了后来当趋势明确的时候已经来不及了,从而导致了Nokia帝国的崩塌。
(我一直是Nokia的铁粉,一个原因是因为Nokia的手机足够结实,而不像苹果的手机,如果你不好好保护它,就只能持续的卖肾了。)
关于Nokia手机业务的崩溃,有很多种评论,我观点是Nokia输在了操作系统。Symbian系统虽然足够强大了,但是却太复杂了,维护、扩展和集成都成了大问题。Symbian有2000万行(也有人说是4000万)代码,基本上等同于Windows XP的水平。下面引用一下我在网络上找到的评论:
专家表示, 新的核心功能在Symbian上很难实现。诺基亚在应对iPhone威胁时行动缓慢,Symbian改造费时费力是原因之一。
在纵观塞班系统的整个发展轨迹时,我们可以发现这些发展轨迹,基本上只为功能机做出的操作系统,所以把塞班系统移植到智能手机上就有些水土不服的意思了。除此之外,在智能的手机时代里,塞班系统也不过是做了小幅度的修改,和洗心革面的改变完全不挂钩,在如今的智能时代,作为科技行业如果不随应时代的潮流和发展,最终也只能在行业的强大竞争压力下被无情地淘汰。
结合我找到的其它信息,简单的说,Symbian曾经是不错的,但是时代变革了,Nokia一直在试图改进Symbian系统,但是它太复杂了,复杂到已经难以大幅度修改去适应新时代的要求了,而苹果胜出的利器只有一个:IOS操作系统。IOS当初的代码量据说只有Symbian的十分之一左右。而性能和功能却有过之而不及。
在一个简洁的系统上进行拓展的效率是很高的,就像一个轻装前进的人和一个背着100斤重物的人一样,速度是肯定不一样的,Nokia和苹果的竞争是输在速度上:苹果作为一个后来者,可以根据最新的需求去设计一个更符合现代需求的操作系统,而Nokia企图用改造既有资产的方式来去面对新的挑战。这就像一个汽车行业的人企图通过在现有的车上添加翅膀来将其变成飞机,另外一个没有负担的人直接从零开始设计飞机一样,结果一定是全新设计的架构更好,潜力更大。
为什么会有这么大差距呢?写过代码的人一定有这样的经验:一个好的架构能够让可以大幅度减少代码行数。不好的架构,通常会让你写很多重复的代码。举个例子,当年我曾做过一个嵌入式系统,实现一些简单的功能,最初想偷懒,所以就试图移植一个别人已经写好的操作系统放进去,结果研究了一个星期,还是没有跑起来。
因为那个系统虽然强大,但是太复杂了,最后我失去了耐心,自己设计了一个只有几百行的小系统,可是却好用的很,那个程序一直被用了十几年,后来接手的人基本上都可以快速进行功能的拓展。举这个例子只是为了说明一个问题:不论一个系统多么好,看上去多么完美,如果不合适现在的情况,就只能废弃。没有最好的系统,只有最合适的系统。
再来看一个数据:华为拥有1100亿行源代码,谷歌只有22亿行。
看到这个数据应该明白了为什么华为的人那么辛苦,而谷歌的人可以活的那么洒脱了吧。虽然,他们处在两个不同的行业,可是谷歌创造了那么多的东西,仅仅一个Android系统就是无数国人艰苦努力而无法企及的,如果不是有极其高明的架构设计,谷歌的代码量绝对要上一个数量级的。
代码量绝对不是越多越好。人类的脑子是有极限的,代码过多只会让他们思维混乱、效率降低。所以很多老代码(英文俗称Legacy Code)最后的下场都是被删掉重写,就是因为管理、维护它们的代价,甚至要高于重新实现。这些Legacy Code对公司其实是负资产:虽然部分还在使用,但是没人敢改,没人去改,没人能改。当一个系统复杂到无人能够理解其全部内容的时候,就是应该去推倒重来的时候了。
让我们回到汽车行业,据说新的宝马X5里面有3亿行的代码。而特斯拉只有一千万行的代码。这个数字可能不够准确,但是应该差的不多。
现在的BCM的代码一般在50万行左右,宝马X5车上的类似的控制器一般可以达到5、60个左右,也就是要有3千万行的代码,再加上自动驾驶(几千万行???)和多媒体主机(一亿行左右?)等,有个两亿行左右肯定没有问题的。为什么会有这么多的代码呢?先看一下下面的AUTOSAR的软件架构。其实,真正对控制有作用的只有Application Layer。
其他的RTE及以下层都是其辅助作用的,不论你要实现多少Application层的功能,下面的那些基础设施都是差不多的。这就造成了一个问题,控制器数量越多,软件行数也越多。而软件行业里面人工费用是主要的,行数越多,成本也就越高。设想一下,如果车上只有几个控制器的话,是不是软件成本就大幅度降低了呢?这也就是为什么现在有了域控制器的原因——集中将Application放到一起,降低软件的开发工作量。可是,如果下面的ECU和执行器还是要遵循AUTOSAR这个标准的时候,其实是无法大幅度减少代码量的。
这就是特斯拉不用AUTOSAR的原因:他们的操作系统都是自己设计的。
我一直对AUTOSAR持有保留意见:对于大众这样体量的OEM来说,AUTOSAR的确可以减少开发工作量,但是对于大多数的小OEM来说,成本上未必划算。
软件行业绝对不是一个看苦劳的行业,无论你写了多少代码,如果这些代码的效率不高,那就是对这个系统的伤害,而且你可能越勤奋对整个组织的伤害越大。这也是我不同意996做法的原因,如果没有好的上层架构设计,底层的程序员越勤奋,系统中无效的代码就越多,你的整个系统的效率与可扩展性就会越差。上层架构直接决定了整体实力。与其让程序员们每天加班,还不如让他们多一些时间思考带来的收益更大!
1. 靠从供应商那里采购控制器来拼凑出电子电气架构的时代已经过去了,因为现在的系统已经复杂到无法通过简单的叠加和整合来实现了。叠加的结果就是成本高,维护难,更新速度慢。与其努力改善城中村的设施,不如推倒重建。
2. 主机厂不懂软件的话,就只能继续维持着很低的利润率,跟着别人的屁股后面喝汤了,亦或彻底出局。
3. SDV的目的不是为了通过软件赚钱,而是决定了生死:Software determine who lives and who dies.
获取更多评论