因为在日本,软件不是一个独立的行业。
而是依附于大型机、计算机、工业设备、消费电子、游戏机以及大型企业系统而存在的。
大致有两条路线。
一条是企业系统:银行、保险、电力、制造业需要系统,但没有开发能力,就交给富士通、日立、NEC这样的厂商。
客户提出需求,厂商定制开发,部署以后继续维护十年、二十年。
这套模式重要的是「长期客户关系和稳定交付」。
简单来讲就是:别出错,别给大家惹麻烦。
另一条是软硬一体。
索尼、任天堂等企业自己有硬件,所以需要操作系统、驱动、游戏、嵌入式软件和各种配套软件。
你想玩我的游戏(使用我的服务),你就需要买我的设备。
日本过去这两条路线都非常强。
相对缺少的是第三种:
在互联网时代,软件本身就是产品。
不依附某个客户,也不依附自己生产的硬件,直接做一套标准化的软件或服务,卖给所有人。
Microsoft、Oracle,后来 Google、Salesforce、AWS,走的都是这条路:
软脱离具体硬件和具体客户,标准化以后复制给全世界,而软件公司本身成为产业中心。
但为什么日本没有呢?
因为日本在前两条路线的基础之上,形成了一个特色现象:
业务知识在甲方,软件知识在乙方。
最懂银行的人不会写软件。
写软件的人又不知道发金融系统为什么要这样运转。
中间再隔着层层分包。
最后真正写代码的人甚至见不到真正用系统的人。
而在这种产业结构下,企业真正需要的也未必是特别喜欢计算机的人。
需要的是懂客户、懂业务、会写设计书、会协调、能按照仕様把项目交付的人。
对技术钻研的反而不重要。
所以日本 IT 里存在着相当一批很有意思的人:
学历很高,脑子也很好,工作认真负责,甚至已经在这个行业干了十几年,但入行之前可能几乎没有接触过计算机,对计算机本身也谈不上有什么兴趣。
之前学的是文学、法学、经济、环境,甚至音乐。
找工作的时候,没找到满意的工作,就去干IT。
企业也愿意从零开始培养。
用什么就教什么,这个不会就去干那个,那个不会就去干这个,反正总有能干的事儿。
于是一个程序员完全可能写了很多年代码,却从来却从来没用过 Git;
版本管理,就是复制出一排文件夹 bak20260903_1、bak20260903_2、bak20260903_2_fix。
而这个人(甚至整个团队)都不觉得有什么奇怪。
但这换一个行业就会显得非常荒诞。
一个东京大学法学部的高材生,学历很高、脑子很好、工作也很认真。
但他能不能培训几个月以后就去本田设计发动机?
大概率不行。
因为机械、电气这些传统工程领域,专业能力边界非常清楚,你不会就是不会。
否则硬件轻了出事故,重了要出人命的。
软件不一样啊。
今天写下的一段烂代码,能跑、测试能过、项目能验收。
毕竟验收的人又不懂(可能写代码的人也是不知道从哪复制粘贴的)。
但时间一长就会变成一坨屎山。
而维护他的人又完全不在乎。
这就能解释很多日本 IT 里看起来互不相关的现象。
几十年前的祖传 COBOL 继续修修补补。
系统之间继续全传 CSV。
关键业务最后长成一个巨大的、谁都不敢动的 xlsm 文件。
各种结算系统一到到某个时间段,就停止服务,开始批量运行夜間バッチ。
乐天商家后台还要靠写 HTML 标签去维护内容。
各种票务网站,同时几个人一起打开,就会提示限制访问。
所以日本缺的可能从来都不是会写代码的人。
毕竟往后写代码也越来越不值钱了。
它缺的是一个真正把技术能力本身当作价值、让工程师对软件本身负责的产业结构。
因为如果软件永远只是业务的附属品,那么技术永远只需要做到「够用不出错」就行了。
而互联网(乃至未来的AI时代)真正改变的,恰恰是这一点:
软件不再只是用来支撑其它业务的东西。
软件本身就可以是赚钱的业务。
显示更多
据我的职场观察,日本人普遍对软件、数据和系统本身缺乏客观的认识,很难认可软件应有的价值。
我倒不认为日本公司是舍不得为软件花钱,很可能是大多数企业根本都不知道自己要买什么服务。
因此从结果上看,个人感觉日本企业普遍没有SaaS文化,尤其是在传统制造业里,这点和美国非常不同。
而且我当初作为外国人入职时明显感到,同样作为是工程师,只要不是IT专业,很多人对现代软件开发的基本概念都不懂。
身边的日本同事可能非常了解机械、电气、材料、生产工艺或者设备设计,但可能甚至连python是什么都不知道,更谈不上数据结构化。
这就导致大部分人可能甚至听都没听说过class、instance、library、API、database、backend,更加不知道软件系统能够把多少重复性的工程工作自动化。
结果就是公司可能并不是不愿意花钱开发软件,而是自己连软件需求都没有能力准确描述。
比如一个电气工程师如果不知道python可以批量处理Excel,不知道数据库可以管理设备参数,不知道API可以让不同系统交换数据,不知道后台程序可以自动检查设计条件、追踪revision,甚至不知道很多规则性的判断本身就可以抽象成程序,那在面对低效率重复工作时,这个电气工程师想到的只可能是继续增加Excel、增加人工确认步骤,或者要求别人做一个看起来像软件的表单。(所以大手企业里有很多xlsm的macro,这就又增加了维护成本)
做工程的不懂软件,无法准确提出需求,于是把开发外包给SIer或者外部软件公司。
外面的软件工程师虽然懂程序,又不懂发电厂、电力系统、机械设计这些专业知识以及实际的workflow。
公司员工说不清楚自己真正需要什么,外边的软件公司也不知道为什么这个工程流程必须要这样设计。最后做出来的系统四不像,根本没有符合实际的workflow,这就导致软件不好用。
这又反过来强化传统行业对软件无用的刻板印象,于是企业更加不愿意为软件和内部开发能力投资。这是个恶性循环。
日本肯定有很优秀的软件公司和工程师,但在我看来,在日本既懂工程,又能把工程数据抽象成数据结构、算法、数据库和软件系统的人太少了。
这也是我到日本之后感受很强烈的地方。
而且我的本科并不是计算机专业,而是机械工程。
我不知道其他的大学怎么样,但至少在华科,即便是机械工程,python也是作为必修课计入学分的。
当年我也不懂为什么要学这个,我以为只是为了让我们学习Numpy这些数学工具当研究室工具人。
但我现在知道了,其实从这一点上来看,中国的本科教育可能是非常成功的。python课程的设计目的可能只是至少让工程师理解计算机可以做什么,能够自己写一些程序解决工程问题。
我认为这种基础教育非常重要。所以我之前有质疑过日本的本科基础教育。。
工程师并不需要会开发大型软件,但至少应该知道什么事情可以自动化、什么问题适合用数据库解决、什么工作可以写脚本处理、什么时候应该调用API,以及一个软件系统大致是怎样组成的。
只有具备这些基本认知,才有可能提出好的软件需求。否则就跟现在日本一样,天天喊DX,结果就只是买几个极其难用的系统、增加几个网页界面、把Excel上传到云端,然后继续用和二十年前几乎相同的方法。
这并不是真正的软件化,纯粹浪费时间罢了。
日本更需要解决的问题可能是把python等纳入本科基础教育。(但我没在日本读本科,不是很懂日本本科教育到底学不学这些)
显示更多