我在传统软件开发领域工作了8年,从一线开发到项目技术经理,再到产品研发技术负责人。一路走来,我感受到互联网行业的软件离日常生活越来越近了。我一直有一个疑问,那就是互联网行业的软件开发到底是什么样的?两年前我决定转行到互联网行业去体验一下。经过两年的观察总结和实际的亲身体验,我想我找到了答案,解决了心中的疑惑。这篇文章就是为那些和我有同样疑问的朋友写的。
相信很多从事传统软件开发的朋友,对于互联网公司的软件开发,或多或少都会有这样一些疑问:开发流程是怎样的?人员构成是怎样的?系统架构是怎样的?成长路径是怎样的?加班多吗?薪酬福利是否像传言中那么诱人?
在互联网行业工作压力大的同学也会问:去传统软件开发公司工作是不是会比较轻松?会比较稳定吗?传统软件开发领域对年龄不是那么敏感吗?
本文将逐一解答上述问题
介绍
首先我们来介绍一下什么是传统软件行业,什么是互联网软件行业,有以下几个明显的区别。
传统行业
传统软件开发行业又称企业软件开发行业,具有以下明显特征:
互联网行业项目流程
作为一名程序员,不管是在传统行业还是互联网行业,都是做软件开发的,而软件开发一般都是以项目为单位的。首先我们从项目流程的角度讲一下传统软件行业和互联网软件行业的区别。
传统行业
结合上图,我们从以下几点来谈谈传统软件项目的项目流程:
需求来源
需求的来源通常是甲方客户。当一个公司成长起来时,往往需要软件来提高公司的管理和运营效率。比如所有的公司无一例外都需要人事管理系统、财务管理系统、OA系统、考勤系统;一些制造业还需要ERP系统来进行生产管理,医院需要病例管理系统,学校需要学生管理系统,政府需要文档管理系统等等。这些甲方客户一般没有专门的软件开发团队,大多数只有一个部门叫技术中心专门负责网络和各种系统的管理。因此,这些软件的实施,需要专业的软件公司来实施。
需求收集
有实际需求,要么是客户主动找软件公司,要么是软件公司找客户;最先切入市场的通常是销售人员(负责商务方面的事情,比如报价、签订合同、维护客户关系、挖掘需求,从而签下二期、三期项目……)。有时候也会有售前顾问支持(负责技术方面的事情,比如给客户提供技术方案、初步分析项目实施范围、促成合理报价);需要注意的是,售前顾问通常都是技术出身,有丰富的项目经验,不仅是技术专家,更是业务专家,对某个行业有很深的理解,可以告诉客户如何做行业内最好的方案,用行业经验帮助客户提高效率,而不是简单地把客户线下的流程搬到线上。
需求实施
项目签下来之后,项目实施团队就会进来,项目团队包括这几个人:项目经理,需求分析师,技术经理,技术开发,UI,QA。项目实施有时候是在现场,有时候是等公司开发出来之后再在客户公司部署上线。
需求交付
需求部署通过QA测试后,通常会有一个试运行阶段,客户可以在此阶段提出问题和优化点。当所有功能都OK后,交付完成,技术团队撤出,投入下一个项目,收取尾款。偶尔,客户也会购买系统运维服务,支持系统运行过程中的问题处理和小规模的需求迭代。
互联网行业
结合上图,我们从以下几点来谈谈互联网软件项目的项目流程:
需求来源
需求来源主要来自这三个方面
产品需求:PM发起的需求,比如做个视频采访的新产品,优化下单流程等 营销需求:这类需求一般由公司运营、市场人员发起,PM将需求整理成产品文档,交给技术团队去实现 内部需求:这类需求可以理解为内部系统建设需求;前两者一般叫To C,这个叫To B
最后还有一种工作源头,就是技术本身发起的需求,比如系统重构、技术基础设施的建设,比如系统性能、异常监控系统、持续集成系统等。
需求收集
在互联网公司,所有的需求都是由产品经理(PM)来收集的,技术团队原则上只接受产品经理提出的需求。
PM会把各种需求整理成一份需求文档,同时附上一份需求原型,通常会提前寻求技术评审,确认哪些功能无法实现,然后再对需求文档进行调整。
需求实施
需求确认后,最先进入的C端需求就是UE和UI,也就是交互设计和视觉设计。之后前端FE会拿到设计稿,开始开发。这期间可以并行进行后端开发,最后进行接口联调和测试。
需求交付
以下是从前端角度来看的粗略项目流程:
最明显的感受就是传统行业软件开发是为客户做的,而互联网行业软件开发是为自己做的!
项目相关人员
上面介绍了项目的整体流程,接下来我们来谈谈项目团队的构成,也就是实际参与实施项目的人员以及他们之间的分工。
传统软件项目 互联网软件项目
下面是我曾经担任项目经理负责的一个项目的图片,因为项目很大,涉及的人很多,所以可以很清楚的看到项目人员的完整分工和构成。
传统软件项目开发通常会在公司产品基础上进行二次开发,以提高开发效率。互联网软件大部分是现有线上业务的迭代。为了提高开发效率,后端也有中台组和架构组的支持,前端和UI也会抽取业务组件,方便开发。
传统软件开发项目都是由项目经理牵头,从项目开始到系统上线验收全程跟进。互联网公司项目组织比较分散,详细需求评审进入开发之后,PM基本没什么事可做。这时候通常会从FE、RD、QA中提名一个项目负责人,推动项目实施,把控项目进度。敏捷项目一般都是由Master牵头。
项目技术架构传统行业
核心诉求:在满足功能需求的前提下,如何方便维护,如何降低开发成本。机器都是客户提供的,能用堆垛机解决的问题都不是问题(但项目整体成本需要客户考虑)
常见的架构是这样的:
传统行业内部系统技术架构80%只做到读写分离、应用拆分、分布式缓存、查询服务分离,并没有再进一步,因为再进一步开发成本会成倍增加,少数会把大表拆分,把负载放到LVS或者F5上。
对于这样的技术架构,只要机器足够多,性能足够强,就足以支撑一个几万人的公司日常的正常运转。
对于千万级的项目,更多时候的做法是分别部署在多个地点,并集中进行数据上报和汇总,避免架构复杂导致开发成本的增加。
互联网行业
核心诉求:支持快速迭代、稳定、高并发。另外机器都是我们自己生产的,多一台机器就是成本。。。
为了实现上述诉求,大部分基础配置都是这样的,没有上限。
可以看出,对于传统行业软件技术架构来说,与互联网软件架构相比吉祥物设计,最明显的区别就是微服务。
成长历程
大型互联网公司大多有清晰明确的职位等级制度;传统行业软件公司大多有较为模糊的职位等级制度。
传统行业
一般分为两种:技术路线、商业路线
技术路线
职位级别从初级开发人员、中级开发人员、高级开发人员、经验丰富的开发人员一直到系统架构师;
在实际工作中,如果你成为整个项目的技术负责人,或者公司产品研发的负责人,技术路线就基本结束了。
项目技术Leader要求更全面的能力;产品研发Leader则要求有更高的技术深度和从项目业务中提取产品的能力。
商务航线
他们大多会先做一两年的技术员,然后成为项目需求分析师,进而成为项目经理、成为业务专家;比如金融领域的专家、制造领域的业务专家、金融领域的业务专家等等。
商业经验越多,价值越高。这条路需要通过实际项目积累经验,没有捷径。
互联网行业
大型互联网公司大多有系统的推广路线图
以下是从网上找到的一些清晰的图片。
以阿里巴巴为例,分为技术线和管理线
技术线岗位要求如下
能力要求 行业焦点 关于加班 传统软件行业
大多数情况下,工作时间是早上9点到下午6点,中午有午休,基本没有加班。
由于传统软件项目每个开发周期较长,大多以月度计算,在紧急情况下有足够的消化空间,很少需要加班。
特例,我在这个行业工作了8年,甲方是日企,这是我唯一一次连续一个月996。
其他:有出差的需要,有时需要到客户所在地进行现场开发。
互联网软件行业
加班工作非常艰苦软件开发是什么行业,这是众所周知的事实,996(早上9点到晚上9点,每周工作6天)、大小周(每隔一周休息两天)的先驱都出身于这个行业。
能做到早上十点工作到晚上七点的公司很少,但是一上线基本就得加班(有时候上线工作还挺频繁的,一周至少有一半的时间都需要上线)
其他:基本不需要出差
一般而言,传统软件行业加班是少数,非工作时间较多;而在互联网软件开发行业,加班才是常态,不加班或者少加班的公司简直就是一股清流。
关于薪酬福利 传统软件行业
从我曾经工作过的两家A股上市公司,以及我所了解的其他领先的传统软件公司来看,薪资涨幅基本取决于你的直接主管是否认为你应该加薪。
虽然系统可以告诉你是助理开发还是高级架构师,但是公司对每个职位级别的薪资范围并没有比较明确的,也没有正式的岗位报告和职位晋升。我的感觉是薪资越高,职位级别越高。整体来说,同职位级别的薪资比互联网行业低一个级别,月薪3万是一个比较难跨过的坎。
股票和期权激励不太常见。
互联网软件行业
互联网公司薪资涨幅基本取决于以下几个方面
薪资基本与职位级别挂钩,每个职位级别对应一个薪资范围,达到薪资范围上限后,只能通过升职来提升薪资范围,薪资范围可在成长路径部分的图表中找到。
股票和期权激励更为常见。
关于稳定性传统软件行业
传统行业相对稳定,原因如下:
在传统软件领域,很多软件系统都是用户的核心业务系统,比如ERP、财务系统等,都是刚需。因此,只要有稳定的客源,哪怕是运维需求,就有活路。因为稳定,收入很难像互联网公司那么快增长。
互联网软件行业
如果生意不赚钱,不管你有多努力,不管你个人能力有多强,你都得离开。
我见过有人今天努力工作,但第二天却被n+1解雇。
在互联网行业能真切感受到个人的渺小,选择比努力更重要。
还有一句很形象的诠释是“只要风向对,猪都能飞”。
在互联网软件开发领域,两三年跳槽是常态,员工流动率较高。
关于传统软件行业时代
传统软件开发行业中,由于加班强度不大,也不需要太多体力消耗,所以年龄并不是那么敏感。
我以前的许多同事都是经验丰富的程序员,他们在这个行业工作了 20 多年,并且仍然做得很好。
因为传统软件开发领域的特殊性,需要跟甲方客户有更多沟通,对行业业务需求有深刻理解,人年纪越大,跟客户打交道的经验越丰富,业务行业经验越丰富,竞争力也就越大。
我曾经遇到过客户明确规定项目实施团队必须有一个10+年经验的Leader,或者比例不能低于一定水平,并且直接写在合同里。
互联网软件行业
对于这个行业,我们提倡一个词:“快”
需要快速的业务发展和个人成长
在网上或者工作中经常可以听到有人说XXX这么年轻就晋升到XXX职位了。
网上甚至流传着一个谣言:在xxx大公司,如果一个人到35岁还没有晋升到xxx级别,就很有可能被裁员。
这种氛围对于那些想在生活上花更多时间的人来说是极其不友好的。
难道就不能保住低级职位,拿到应有的薪水,保持工作平衡吗?
不,不,不;随着年龄的增长,那些对工作现状感到满意的人会显得与整个团队格格不入,并且很容易因表现不佳而受到指责。
针对这一类员工,xxx公司发明了一个标签,叫“老白兔”
由此可见互联网行业是多么的老少皆宜啊!
所以如果你想要更努力,挑战自己,建议你去互联网行业,机会和空间更大。如果你对技术要求不是那么高,想要工作和生活相对平衡,可以考虑传统软件行业,只要你靠谱,年龄不是问题。
关于职业转变
首先要注意的是,这取决于你在哪个团队、处于什么位置以及你做什么。
传统软件到互联网
在传统行业公司,我们可能会做类似互联网公司的事情软件开发是什么行业,比如为互联网用户开发系统。
互联网公司在工作和沟通方面相对开放,竞争激烈,优胜劣汰。如果业务发展不好,无论你有多大能力,多努力,都会面临被裁员的命运。所以跳槽互联网公司一定要选择好行业和部门,可以考虑选择冷门行业或者边缘部门。
优势:技术广度、软实力、综合能力
互联网到传统软件
也有可能你在互联网公司做的事情和在传统软件公司做的事情类似,比如,做各种内部系统。
传统软件公司比较稳定吉祥物,企业业务系统属于刚需,收入稳定,因此公司业务很难成倍增长,薪资也很难成倍增长,可以考虑走业务专家路线。
优点:技术深度强,自我激励性好,技术创新能力强
终于
如果让我用一句话来概括传统软件开发和互联网软件开发的话,我想可以概括为一个更加“稳定”,一个更加“快速”。
行业的商业模式决定了需求的不同,从而导致工作方式、能力要求等方面的差异。
如果你问从事传统软件开发好还是从事互联网软件开发好?
我想说的是:“这个问题对于不同的人有不同的答案,没有好与坏,只有适合与不适合。”
- 本文固定链接: https://wen.nuanque.com/maya/25105.html
- 转载请注明: nuanquewen 于 吉祥物设计/卡通ip设计/卡通人物设计/卡通形象设计/表情包设计 发表
- 文章或作品为作者独立观点不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。本文之内容为用户主动投稿和用户分享产生,如发现内容涉嫌抄袭侵权,请联系在线客服举报,一经查实,本站将立刻删除。本站转载之内容为资源共享、学习交流之目的,请勿使用于商业用途。