我叫张恒,山东济南人,2011年本科毕业,而后直接考入云南师范大学,2014年硕士毕业后参加工作,同年成为中共正式党员。工作经历较为普通,是从程序员做起,一步步慢慢进入到架构设计和技术管理岗位。
2014年毕业后,直接前往上海从事软件开发工作,在中芯国际工作3年,主要从事数据仓库和Web开发,当时技术栈比较老,SSH,jdk1.6,但数据库很全面Oracle,TeraData,Mysql,SqlServer,给我打下了一个非常好的Java技术和丰富的sql优化经验。
2017年我母亲患病,从上海返回济南,2017年至2019年,分别在浪潮和亚信进行工作,从事了通信行业,主要是联通方面的业务,这3年,让我学习到了当时主流并前沿的众多技术栈。
2020年朋友推荐,开始架构师方面的工作,自己的事业开始一段新的征程,截止到现在从事了3年的架构师和技术管理工作。先后在能源集团和浪潮通信担任技术经理,并开始逐步接触并参与开源社区,与朋友一起打造了MPE快开组件(MybatisPlus进一步的轻度封装,增强内容:多数据源自动建表(目前仅支持mysql,人大金仓)、数据自动填充、轻度自动关联查询、冗余数据自动更新、动态查询条件等。)同时,也在打造自己认为最完美的基础项目框架(同类产品有若依,JeecgBoot)。
经过这几年的历练与沉淀,渐渐的也对技术管理方面有了一些自己的认识,当前济南的软件环境并不算好,简单来说,就算有钱也未必能招聘到搞素质的开发人员,因此,承认开发工作必然出现问题作为一个前提入参,形成一个课题,根据公司项目实际情况,构建一套快速开发,高效迭代的研发体系变得尤为重要,其中架构设计和基础设施成为了2个关键要素。以上2要素缺一不可,否则无法构建出一套高容错的演进式的架构设计。在架构设计方面,我比较认同奥卡姆的剃刀理论,在满足需求的前提下,最简单的系统就是最好的系统。同时,我信仰架构平等,所有的架构设计没有高下好坏之分,只有程序员写的代码有区别,微服务不一定比单体设计更好,她们只是适用于不同的领域。另外我本人高度认可康威定律,因此很多好的架构设计,很可能会涉及变更组织架构一些超越边界的问题。
所做过的项目中,有部分是从0到1的架构设计,有些是购买商业源码后更新迭代功能,还有一些是老系统的升级迭代。从0到1的的产品,列举一个有特点项目,20年的精益市场化项目,虽历经坎坷,但保质保量的完成了客户要求的各里程碑节点版本发布,获得了客户和领导的一致好评,其中的亮点设计有2个。
1国企的组织架构较为特殊,与西方差异较大,一个人可以在多个生态公司任职,同时还可以在一个公司担任两个职位,或者2个角色,对应于此问题,本人牵头设计了一套多单位多角色多权限的系统功能模块,通过前后端会话的session Head中强制加入少量必传信息,完成系统的基础模块设计,大大降低了对其他业务模块的侵入性,同时,还能保证其他业务模块能在此基础之上,完成其复杂的业务处理;
2传统的开源审批流activity,不能适应中国化的审批方式,尤其是党组织内部的审批,列举一个比较鲜明的场景,某业务需要组长审批,主管审批,部门经理审批,副总审批,但实际中组长审批完,主管不在,此时申请人会直接找到副总,副总审批通过,直接意味着审批完成,之前的节点全部默认审批通过。因此,模仿activity的设计理念,再加入部分中国化的业务形式,自行设计研发了一套工作流引擎,特点:1可以自行选择走固定流程,还是只指定下一步审批人/角色/职位审批形式;2增加部分特殊人员可以直接强制驳回或通过整个审批流的功能;3增加了流水账式审批日志,4 增加了审批到达通知接口埋点,具体实现可以在业务中自行按照业务实现。其他active功能基本原样开发,如管理员切换审批人,强制关闭等等。
在这些工作中总结一下的话,可以大致归纳一下工作职责:
1、架构设计:负责系统技术选型、架构设计、模块设计和模块之间的接口设计;
2、任务管理:开发工作量评估、定立开发流程、分配和追踪开发任务;
3、高级研发:负责核心模块代码的编写,以及部分前后端研发力量不足点的支撑;
4、质量管理:代码指导、代码review、开发风险判断/报告/协调解决;
5、效率提升:代码底层研发和培训、最佳代码实践规范总结与推广、自动化生产工具、自动化部署工具;
6、技术能力提升:技术分享会议、绩效考核、招聘面试、新人指导、项目复盘与改进;
反思:
上线发版职责,应该由技术负责人处理,后期有足够优秀的程序员可以兼任。
不得减少测试人员这个角色,盲目的将测试工作交给研发人员自测是一种非常危险的行为,它会将系统的真实情况直接暴露给客户,做得好还好,做的不好,就是在考验领导的关系硬不硬。
及时的发现开发人员的不满和不足之处,并对这些地方,通过技术和业务手段进行优化升级,技术手段若能根本解决最好,若是不能根治则必须建立一套针对此问题的,快速迭代和升级,回退的业务处理办法,最好是能通过基础设施完成自动化处理。