1. 背景
最近负责一个 0~1 的封闭后台专项开发,结合自己过往项目的经验,简要总结下自己对“工程素养”这个名词的重新理解,在往后工作\生活中,不断提升自己,更高效的达成目标和完成任务!
2. 工程素养(Owner能力)
工程素养简要概括起来包含硬实力和软技能两块,这里划分依据一部分是结合项目开发流程“需求->分析->开发->测试->部署->运营”自身所处视角概括,一部分从团队和Owner视角概括,分得不是完全匹配MECE法则:
硬实力
- 项管能力: 合理任务拆解、分工、优先级,合理安排人力\时间资源,定期同步进度风险,有组织按预期的达成预期目标
- 技术能力: 扎实专业知识和技能,包括对工程原理、设计方法、制造过程等方面的理解和应用,熟练运用工具、技术解决实际问题
- 创新能力: 提出新方法优化改进现有工程设计和流程,提高效率和质量
- 质量意识: 注重细节和精确性,结合项目特性(金融\结算等)采用合适的设计和工具,解决潜在问题,确保符合项目质量
软技能
- 合作能力:个人(沟通协作\团队合作\问题解决\开放适应),团队(信任尊重\组织规划(目标\时间\进度跟踪)\领导力)
- 产品意识:对市场需求\产品功能\竞对情况的认知和理解,帮助企业开发和设计符合用户的产品(SWOT 分析)
- 运营能力:指个人在管理和运营业务方面的能力,如战略规划\市场营销拓展\供应链管理\财务管理\人力资源管理等,对业务的 ROI 有清晰感知
- 自信能力:认识自己、设定目标、积极思考、接受挑战、学习和成长、积极身体形象
3. 硬实力
3.1. 项管能力
合理任务拆解、分工、优先级,合理安排人力\时间资源,定期同步进度风险,有组织按预期的达成预期目标;
项目管理算是Owner\PM项管非常重要一个技能,在项目紧急或赶工期间非常容易忽视其中的一些内容点,这里罗列出一些项目前中后期要关注的关键项
- 项目前:
- 项目目标和里程碑:基于业务目标对齐,规划项目的重要事项和里程碑节点
- 需求分析:
- 项目前期需求分析+方案设计,包括 Mindnode 脑图分模块、Draw.io、Wiki 文档、PlantUml 时序图
- 领域、子领域拆分和设计(后台 Admin、店铺 Shop、商品 Goods、交易 Trade、交易网关 Gateway、资源 Resource、退款 Refund、结算 Settle、授权 License)
- 任务拆解:针对大的复杂任务项,拆解成小的简单原子任务项,便于管理
- 资源安排:人力、时间对齐,让合适的人做合适的事情(人尽其用)
- 项目中:
- 风险管理:及时同步风险和解决方案,拉问题干系人快速会议解决(小会)
- 会议管理:提前准备议题、会中控制节奏、会后输出结论跟进
- 项目跟进:每日晨会过项目核心进展,基于会议\例会形式定期沟通,对齐目标\进度\问题
- 进度同步:关键事项进展、阻塞点、方案决策评估,及时同步
- 冲突管理:寻求共赢点,多换位思考,理性沟通,向上寻求决策帮助
- 项目后:
- 发布收尾:项目发布后,做好项目收尾工作(代码合流、日志观测等)
- 项目运营:关注应用\系统监控质量数据(比如慢响应\查询),定义产品运营BI数据(登录\下单数等)
- 项目总结:相关文档和知识库的沉淀
3.2. 创新能力
提出新方法优化改进现有工程设计和流程,提高效率和质量
通过脚本自动化提效
- 项目 Layout 的初始化,一键快速创建出符合 DDD 目录结构
- PB 协议更新借助
Makefile
、Shell
能够快速更新 PB+提交公共 PB 库,项目通过make pb-update
快速更新
|
|
GitOps 和 DevOps 结合
- Git 通过
Git Hook
配置 git push 后出发自动 CI 构建打包镜像流程 - 智研 DevOps 工具的 CI、CD 的快速集成,通过
Pipeline项目
支持Makefile
、Dockerfile
等环境变量的初始化,实现快速镜像打包
OpenAI 结队编程
ChatGPT4o-mini,包括 DB 设计、命名问题、疑难问题解决、代码编写等,
OpenAI+NextChat
提供了非常大的帮助(目前工作离不开 AI 了)
- 接口协议命名:可以让 ChatGPT 的多命名帮助
- 问题 Debug、排障
- 缺省代码实现
- DB 结构、Go 结构定义、方法实现等
- 借助工蜂 AI 帮忙 CR
Notion 计划+Flow 番茄钟
- Notion 提前规划一天的工作计划,结束时候做过简单总结
- 设计一个 Flow 番茄钟,完成一个具体的任务项(比如协议设计、一个小任务完成)
3.3. 技术能力
- 工程规范
- 服务命名:北极星名字根据协议映射不同端口(CAPI、CBilling、TRPC 协议对应不同名字),协议部分考虑使用 Codec 解析 - todo
- 代码分层:多层 vs 三层取舍,具体什么放 Application 编排,什么放 Domain/Services 服务需要更多思考,如何分层是一个比较难处理问题
- 模块化设计:不同 entity 负责对应内容,api/app/domain/infra 四层
- 单元测试:针对一些 DTO 转化、签名验证、反序列化函数做基本校验
- 代码提交
- 分支命名:使用 feat/{branch-name}-{datetime} 格式
- 提交注释:
--feat
、--bugfix
描述清楚问题,Commit Message言简意赅
的描述更改内容,每个 Commit 是一个具体的修改/特性点,快速验证
- 编码规范
- 架构和代码实现遵循简单、合适、演化原则
- 小批量重构:通过 Goland 的快捷键、重命名、函数抽象等,结合 ChatGPT 的命名帮助实现更优雅一些代码
- DTO 问题:售卖商品 → 订单商品 → 计费下单商品
- 可观测规范
- 良好的日志规范:加速问题发现和解决(出入口函数
fn[]模式
、wrap
日志包裹、LogInfoContenxtf()
的traceId
关联) → todo 这里考虑通过日志插件 qlog 升级实现 - 全链路跟踪:开发的 qclog 插件,请求过来 → 日志 Filter → 重新注入 tradeId 实现 ,同时支持 CAPI 和智研链路 TradeID 串起来,方便问题快速 Debug
- APM:Trpc 框架的 yaml 配置+智研的 OpenTelemetry+APM+日志打通
- 良好的日志规范:加速问题发现和解决(出入口函数
- 非功能性设计
- 高可用\扩展\维护\性能\易用\质量\安全\一致性设计,结合项目特性侧重项目要点
3.4. 研发质量意识
代码 CR
- commit 前,自己对提交的代码进行 CR
- 借助 AI 帮忙 CR、组织帮忙 CR
联调测试
- 网关支持七彩石动态的 Mock 数据完成接口调试,通过配置调整、开关支持动态灵活的下游配置,在和第三方联调时候,加速链路的调通验证
- Goland 的 test 模块,编写一定的 curl、http 测试用例,方便快速模拟请求
- 通过 tcpdump 协议抓 HTTP 请求响应包
部署发布
- 发布计划和步骤(CICD)
- 灰度计划以及验证方案
- 相关问题预案,吃自己狗粮
4. 软技能
包含对业务\产品的意识,业务\产品运营的能力,以及沟通合作、自信等方面的能力
4.1. 沟通合作
- 对交付负责、对代码质量负责,不断提升自己在团队中的份量,赢取团队成员信任(赢取信任)
- 与人沟通,控制情绪,真诚帮助他人,不高高在上(帮助他人)
- 学会拒绝,可以告诉他人你目前的情况,让他人先自己尝试一些问题解决办法(学会拒绝)
- 项目任务情况还是应该正常同步,这个是职业素养(进度、问题、风险)
- 没有必要和他人争得面红耳赤,技术问题也是如此,你争论不休并不会带来多少收益(情绪控制)
- 如果你理解错了,我可以再说一遍,或者和对方确认,如果目前不认可这个观点可以再抛出来讨论(确认达成共识)
- 先完成再完美,不用想着什么组件、轮子都必须十全十美(简单、合适、演化原则)
4.2. 产品意识
现有产品流程、痛点,同时 SWOT 方式更好地理解市场需求,设计和开发出符合用户需求的产品,并在市场竞争中取得优势
4.3. 运营能力
帮助组织实现战略目标,提高竞争力,提供优质的产品和服务。一个具有强大运营能力的组织或个人通常能够适应变化的市场环境,并取得持续的发展。
4.4. 自信的力量
通过阅读\写作\正念冥想,持续不断了解自己兴趣,认识自己能力\优势\潜能,清楚价值观\世界观\人生观,不断加深对自己认识。结合《认知觉醒》、《人性弱点》、《原则》书籍清楚自己想成为什么样的人!其次就是设定目标、积极思考、不断学习和成长,不断接受挑战,积极锻炼,达到“见自己、见天地、见众生”,实现“知行合一”!
自己有很多不自信的地方,比如牙齿、比如皮囊、比如写字、比如唱歌、比如体育,同时自己也有很多优势地方,比如对感兴趣事情抱有耐心、细心、好奇心,懂得不断学习、总结和成长,喜欢折腾拥抱新知识,喜欢知识付费、同时系统化的解决问题;
- 喜欢折腾:例如自己对 OpenAI 感兴趣,会先从产品视角了解、学习应用,比如 Nobepay、OpenAI、Varay、Wrap、NextChat、PopClip、Bob、部署 LLMs MaaS 化,会不断应用 AI 改善自己的工作\学习环境
- 阅读学习总结:例如投入在极客时间、得到 1000+小时,10 年 Blog300+,4 年 Notion 笔记等,学习 typscrip\webpack、python 等,定期折腾一些开源项目;阅读《认知觉醒》、《人性弱点》、《原则》,结合冥想、正念等课程,希望弄清楚自己人生目标
- 软件付费:每年在 OpenAI、Notion、Jetbrain、云资源付费、软件产品、极客时间,以及各类软件(Alfred、PopClip 等)
- 主要找食:RSS、GithubTrend、InfoQ、YouTube、V2EX 等资源
人应该保有自信心,它是一种积极的心理状态,使人们相信自己有能力应对各种挑战和困难,并取得成功。自信能力对个人的心理健康、情绪稳定、人际关系和职业发展都有积极的影响。
面对问题
- 动态结构体动态扩展 sv 信息,通过
map[string]interface{}
解决、以及 MarshalJSON()接口实现结构体 Json 序列化时候动态扩展字段 - Gorm 在结构体存储前后的 before、after 处理
5. 程序员效率
5.1. 10x程序员
一部分来至之前极客时间《10x程序员》,一部分来至《高效能人士习惯》,温故知新:
- 特点:
- 扎实技术能力:系统且深厚扎实的技术知识和经验、快速理解和解决复杂问题
- 很强学习能力:快速掌握新技术和工具、强烈的求知欲和学习动力
- 解决复杂问题能力:善于分析和解决问题,寻找最佳解决方案
- 高效工作:使用工具、自动化手段,高效组织和管理自己工作,合理安排时间和资源,提高工作效率
- 团队合作:良好沟通和协作以及反馈,共同高效达成项目目标
- 思考框架:现状、目标、如何抵达(解决问题能力 - 任务分解\沟通反馈\自动化)
- 思考习惯:《高效能人士习惯》
- 以终为始(目标)
- 要事第一(聚焦)
- 积极主动(知行合一)
- 统合综效(任务分解,资源并行,效率质量ROI考虑)
- 知彼解己(尊重、信任)
- 合作共赢(团队合作、沟通、换位、1+1>2)
- 不断更新
5.2. -10x程序员
之前看到的一张 -10x程序员
的特征,也贴下吧
6. 小结
《软件工程》这门课程大学计算机基础课程都有学过,回过头来看理论到实践落地,还是要不断总结复盘,才能内化成自己的知识体系以形成高效能的习惯!
借一张图记录下,共勉之!