日本的软件开发行业大致分为系统集成(SIer)和自主产品开发两种开发模式。SIer是英语"System Integrator"的缩写,指为客户企业开发和集成定制软件系统的公司。而自主产品开发公司则是策划、设计和开发自己的产品或服务,并直接提供给最终用户。自主产品开发可能更接近西方的软件开发文化。
作为软件工程师在日本建立职业生涯时,理解这两种模式的差异至关重要。各自的开发文化、技术栈和职业路径存在巨大差异,将影响你作为工程师的成长方向。
本文详细比较系统集成与自主产品开发在软件开发方面的文化差异,为软件工程师判断哪种环境更适合自己提供指南。
1. 系统集成(SIer):以客户为中心的软件开发文化
据说日本IT企业的70%都是系统集成(SIer)型企业。这是日本软件产业的一大特征。 在日本从事软件开发职业,理解系统集成公司与自主产品开发公司的差异非常重要。
软件开发中的角色与特点
系统集成企业(SIer)在日本发音为"es-ai-er"或"es-ai-ya",是专门承接客户企业软件开发的专业公司。作为软件工程师的主要工作包括:
- 实现客户需求:为金融机构、制造业、公共机构等客户所需的业务系统,从需求定义到设计、实现、测试、运维维护,全程负责。
- 大型企业系统:主要是银行核心系统、地方政府行政系统等需要高可靠性的大规模软件项目。
- 多层次开发体制:从主承包商SIer到多家分包商的软件开发任务分层分配的结构很常见。
- 技术选择的限制:由于需要适应客户现有系统或基础设施,最新技术的采用受到限制。Java、.NET、Oracle、COBOL等面向企业的成熟技术栈为主流。
软件工程的文化背景
日本的系统集成文化深受制造业质量管理方法的影响。软件开发也具有以下特点:
- 瀑布式开发为主流:需求定义→设计→实现→测试→交付的阶段性流程,每个阶段的质量保证都很彻底。
- 重视文档:设计文档、规格说明书、测试计划书等详细文档是软件开发流程的核心。
- 严格的质量管理:以零缺陷为目标的严格测试流程,优先保证生产环境的稳定运行。
- 客户沟通的重要性:即使是软件工程师,与客户的沟通和项目管理能力也会被重视评价。
系统集成软件工程师的优缺点
视角 | 优点 | 缺点 |
---|---|---|
技术栈 | 可深入掌握企业级技术知识 | 接触现代开发方法和最新框架的机会有限 |
软件开发流程 | 可积累大型系统设计和架构经验 | 相比实现或编码,文档编写占用更多时间 |
职业路径 | 上游工序技能(需求定义、设计、PM)清晰,管理职业路径明确 | 难以构建深化软件工程师技术专业性的职业生涯 |
开发环境 | 稳定的就业和系统化的培训项目 | 开发工具和流程往往陈旧,不重视开发者体验 |
系统集成是磨练"统观整个系统能力"和"与客户协调能力"的环境,但对于热衷于编写代码和创造产品的软件工程师来说,可能会感到技术上不够满足。
2. 自主产品开发:以产品为中心的软件工程
软件开发中的角色与特点
在自主产品开发公司,软件工程师从策划阶段就深度参与,成为技术决策的核心。
- 产品思维的开发:构建解决最终用户问题的软件产品,而非客户需求。代表性的有SaaS、移动应用、Web服务等。
- 快速的开发周期:采用敏捷、Scrum、持续集成/交付(CI/CD)等现代开发方法,通过快速迭代改进功能。
- 技术选择的自由度:可以自主选择最适合产品成长的技术栈。积极引入React、Vue.js、Python、Go、Rust、Kubernetes等最新技术。
- 全栈导向:有机会涉及前端、后端、基础设施、数据库设计等广泛的技术领域。
- 直接的用户反馈:能够直接通过用户反应感受到自己编写的代码的影响,作为软件工程师容易获得成就感。
软件工程的文化背景
近年来,日本的初创公司和科技企业不断增加,全球标准的软件开发文化正在渗透。
- 敏捷开发实践:在短周期冲刺中重复功能开发和发布,快速将用户反馈反映到产品中。
- 代码质量与评审文化:使用GitHub或GitLab进行代码评审、结对编程、测试驱动开发(TDD)等工程师主导的质量管理。
- DevOps/SRE实践:消除开发与运维的界限,软件工程师自己参与基础设施的构建、监控和改进。
- 与技术社区的交流:鼓励参加公司外的学习会和会议、为开源软件贡献等与技术社区的交流。
自主产品开发软件工程师的优缺点
视角 | 优点 | 缺点 |
---|---|---|
技术栈 | 可在实际工作中学习最新语言、框架和工具 | 由于专注于特定产品领域,难以获得广泛的行业知识 |
软件开发流程 | 实践现代开发方法,有更多编码时间 | 直接对用户数和业务指标负责,压力较大 |
职业路径 | 技术专家、技术负责人、软件架构师的道路敞开 | 如果组织规模小,职位选择有限 |
开发环境 | 重视开发者体验(DX)的环境建设,远程工作和弹性制度完善 | 初创公司的福利和就业稳定性可能不如大企业 |
自主产品开发是"作为软件工程师追求技术极致"的环境,有直接为产品成长做贡献的满足感,但由于专注于单一产品领域,需要努力拓宽视野。
3. 软件开发风格对比:系统集成 vs 自主产品
开发流程与工程师角色
-
系统集成:以瀑布式流程为中心,软件工程师根据既定规格实现。规格变更涉及合同变更,灵活性有限。上游工序(需求定义·设计)与下游工序(实现·测试)明确分离,工程师专注于自己负责的阶段。
-
自主产品开发:采用敏捷开发,在约2周的冲刺中重复计划→实现→评审→发布。软件工程师也参与规格决定,提出技术可行性和最佳实现方法。产品经理、设计师、工程师协作创造产品。
产品所有权的差异
-
系统集成:在系统集成中,由于必须遵从客户意向,往往难以对产品拥有所有权。而且在日本SIer企业常见的多层分包结构中,甚至很难提出"为什么需要这个功能"这样的问题。在系统集成中,无论该功能对客户是否真正必要,都要求在责任范围内按期交付成果物,大多数情况下难以对产品拥有所有权。此外,当发包方缺乏软件开发素养时,还可能被迫进行看似不合理的开发。
-
自主产品开发:自主产品开发相比系统集成,自然需要更强的产品所有权。
业务稳定性
- 系统集成:一般来说,相比自主产品开发,系统集成作为业务更加稳定。无论项目成功与否,都会根据有多少软件工程师工作了多少小时来产生收入。相比自主产品开发,未来收入更容易预估,即使项目失败收入本身也有保障,因此业务风险较小。
系统集成的这一特性也可能成为阻碍新技术引入的原因。引入新技术将生产力提高一倍也不会影响自己的收入——实际上甚至可能因为工作时间减少而导致收入下降。
- 自主产品开发:无论开发多么优秀的产品,如果不被市场接受就无法实现销售。从业务角度看,相比系统集成风险更高。
技术栈与工具选择
-
系统集成:需要根据客户现有系统选择技术。Java + Spring、.NET、Oracle Database、SAP、Salesforce等经过验证的企业级技术为主流。在遗留系统维护中,有时还需要COBOL或大型机知识。开发工具也由组织标准决定,个人裁量权有限。
-
自主产品开发:可以自由选择最适合产品需求的技术。积极引入Python、Go、Rust、TypeScript、React、Vue.js、Docker、Kubernetes、AWS、GCP等现代技术栈。软件工程师可以自主主导新框架和工具的验证和采用。
代码质量管理与评审文化
-
系统集成:以质量保证部门的严格测试为中心。分阶段进行单元测试、集成测试、系统测试、验收测试,基于测试规格书进行确认。会进行代码评审,但多倾向于基于检查清单的形式化评审。
-
自主产品开发:工程师间的代码评审是开发流程的核心。通过Pull Request/Merge Request进行互评、结对编程、测试驱动开发(TDD)等工程师主导的质量管理。通过自动化测试和CI/CD流水线实现持续质量改进。
4. 软件工程师职业路径对比
系统集成中的职业发展
在系统集成中,以下职业路径较为典型:
- 程序员/初级工程师(1-3年):根据详细设计文档负责编码和测试
- 系统工程师(SE)(3-7年):负责基本设计或详细设计,也向程序员下达指示
- 项目负责人(PL)(7-10年):带领团队,负责进度管理和技术决策
- 项目经理(PM)(10年以上):作为项目整体负责人,管理预算、进度、质量
相比技术,管理和客户沟通技能更受重视,难以构建纯技术人员的职业生涯。
自主产品开发中的职业发展
在自主产品开发中,技术人员的职业路径多样:
- 初级工程师(1-3年):通过功能实现和代码评审夯实基础
- 中级工程师(3-5年):主导复杂功能的设计和实现,做出技术判断
- 高级工程师(5-8年):负责架构设计、技术选型、指导新人
- 技术负责人/资深工程师(8年以上):制定多个团队的技术方针,发挥产品整体的技术领导力
或者也有作为工程管理经理专注于团队管理的道路。既有追求技术极致也有追求管理极致的职业路径。
5. 选择适合自己的环境:软件工程师的自我诊断
使用以下检查清单,判断适合自己的开发环境。
适合系统集成(SIer)的软件工程师
- ✓ 希望接触广泛的行业和业务流程积累经验
- ✓ 想学习大型系统的架构和设计技能
- ✓ 对与客户沟通和项目管理感兴趣
- ✓ 希望在稳定的就业环境中稳步积累职业生涯
- ✓ 想在面向企业的成熟技术栈中积累开发经验
- ✓ 将来希望作为PM或顾问构建职业生涯
适合自主产品开发的软件工程师
- ✓ 希望感受到自己编写的代码传递给用户
- ✓ 想实践最新的技术栈和现代开发方法
- ✓ 想从产品策划阶段开始提出技术建议
- ✓ 重视通过代码评审和结对编程等工程师间的协作
- ✓ 想作为技术专家构建深厚的专业知识
- ✓ 重视远程工作和灵活的工作方式
6. 日本特有软件开发文化的影响
日本的软件开发文化有着与全球标准不同的独特特征。
对质量的彻底追求
在日本的软件开发中,无论系统集成还是自主产品开发,都有极度厌恶生产环境中出现缺陷或故障的文化。这反映了制造业的"质量第一"思想,在测试和评审上花费大量时间。
团队合作与共识形成
相比个人突出的成果,更重视团队整体的协作和共识形成。即使是技术上优秀的判断,如果未经团队同意而单独推进,也倾向于被避免。
文档化文化
相比口头传达,更重视文档化的信息共享。编写设计文档、会议记录、操作手册等详细文档作为软件工程师工作的一部分被要求。
日语沟通的重要性
在系统集成中,与客户的日语沟通必不可少。即使在自主产品开发中,以英语为官方语言的公司也有限,具备商务级日语能力会大大拓宽职业选择。
7. 对于海外出身的软件工程师,SIer是合适的选择吗?
这包含笔者的个人意见,但在许多情况下答案是"否"。(JapanTechCareers也几乎不刊登SIer职位) 如前所述,SIer具有浓厚的日本特有制造业文化色彩,与一般想象的软件工程师职位性质不同。 另一方面,对于对更稳定的企业文化或日本式定制工作感兴趣的人可能合适。但是,SIer公司的文化差异很大,事前的企业调查应该更加谨慎。
特别是以分包业务为主的SIer企业,单纯作业的比例往往更高。你可能不相信,但确实存在主要工作是每5分钟将仪表板上更新的数值抄写到白板上的软件工程师。(不需要知道那些数字是什么意思,为什么需要那个操作。如果客户要求这样做,就应该这样做。即使这样也能拿到不错的薪水)
8. 总结:软件工程师的职业选择
日本的系统集成(SIer)与自主产品开发在软件工程师的工作方式、技术栈、职业路径方面存在巨大差异。
- 如果要积累广泛的行业知识和上游工序技能,目标是PM或顾问,在系统集成(SIer)积累经验是有效的。
- 如果想运用最新技术创造产品,作为技术专家成长,在自主产品开发中深入实践软件工程更为合适。
重要的是,企业的开发文化、技术栈、团队氛围是否与自己的价值观相符。不仅要看招聘信息,还要通过技术博客、GitHub、员工访谈等确认实际的开发环境。
理解作为软件工程师的自己的优势和方向,选择与之匹配的环境,是构建充实职业生涯的第一步。
致希望在日本作为软件工程师构建职业生涯的你
JapanTechCareers为来自海外的软件工程师提供日本IT企业的招聘信息和职业信息。详细刊登技术栈、开发环境、薪资信息等工程师想了解的信息。通过电子邮件简报发送最新招聘信息和职业建议,请务必注册。