工程素养小结、10x程序员、-10x工程师札记

AI 摘要: 本文总结了工程素养的重要能力,包括硬实力和软技能。在硬实力方面,需要具备项目管理能力、技术能力、创新能力和质量意识。而在软技能方面,需要具备合作能力、产品意识、运营能力和自信能力。同时,文章提到了提高程序员效率的方法和特点。

1. 背景

最近负责一个 0~1 的封闭后台专项开发,结合自己过往项目的经验,简要总结下自己对“工程素养”这个名词的重新理解,在往后工作\生活中,不断提升自己,更高效的达成目标和完成任务!

2. 工程素养(Owner能力)

工程素养简要概括起来包含硬实力和软技能两块,这里划分依据一部分是结合项目开发流程“需求->分析->开发->测试->部署->运营”自身所处视角概括,一部分从团队和Owner视角概括,分得不是完全匹配MECE法则:

硬实力

  1. 项管能力: 合理任务拆解、分工、优先级,合理安排人力\时间资源,定期同步进度风险,有组织按预期的达成预期目标
  2. 技术能力: 扎实专业知识和技能,包括对工程原理、设计方法、制造过程等方面的理解和应用,熟练运用工具、技术解决实际问题
  3. 创新能力: 提出新方法优化改进现有工程设计和流程,提高效率和质量
  4. 质量意识: 注重细节和精确性,结合项目特性(金融\结算等)采用合适的设计和工具,解决潜在问题,确保符合项目质量

软技能

  1. 合作能力:个人(沟通协作\团队合作\问题解决\开放适应),团队(信任尊重\组织规划(目标\时间\进度跟踪)\领导力)
  2. 产品意识:对市场需求\产品功能\竞对情况的认知和理解,帮助企业开发和设计符合用户的产品(SWOT 分析)
  3. 运营能力:指个人在管理和运营业务方面的能力,如战略规划\市场营销拓展\供应链管理\财务管理\人力资源管理等,对业务的 ROI 有清晰感知
  4. 自信能力:认识自己、设定目标、积极思考、接受挑战、学习和成长、积极身体形象

3. 硬实力

3.1. 项管能力

合理任务拆解、分工、优先级,合理安排人力\时间资源,定期同步进度风险,有组织按预期的达成预期目标;

项目管理算是Owner\PM项管非常重要一个技能,在项目紧急或赶工期间非常容易忽视其中的一些内容点,这里罗列出一些项目前中后期要关注的关键项

  • 项目前:
    • 项目目标和里程碑:基于业务目标对齐,规划项目的重要事项和里程碑节点
    • 需求分析:
      • 项目前期需求分析+方案设计,包括 Mindnode 脑图分模块、Draw.io、Wiki 文档、PlantUml 时序图
      • 领域、子领域拆分和设计(后台 Admin、店铺 Shop、商品 Goods、交易 Trade、交易网关 Gateway、资源 Resource、退款 Refund、结算 Settle、授权 License)
    • 任务拆解:针对大的复杂任务项,拆解成小的简单原子任务项,便于管理
    • 资源安排:人力、时间对齐,让合适的人做合适的事情(人尽其用)
  • 项目中:
    • 风险管理:及时同步风险和解决方案,拉问题干系人快速会议解决(小会)
    • 会议管理:提前准备议题、会中控制节奏、会后输出结论跟进
    • 项目跟进:每日晨会过项目核心进展,基于会议\例会形式定期沟通,对齐目标\进度\问题
    • 进度同步:关键事项进展、阻塞点、方案决策评估,及时同步
    • 冲突管理:寻求共赢点,多换位思考,理性沟通,向上寻求决策帮助
  • 项目后:
    • 发布收尾:项目发布后,做好项目收尾工作(代码合流、日志观测等)
    • 项目运营:关注应用\系统监控质量数据(比如慢响应\查询),定义产品运营BI数据(登录\下单数等)
    • 项目总结:相关文档和知识库的沉淀

palnt-uml时序图

3.2. 创新能力

提出新方法优化改进现有工程设计和流程,提高效率和质量

通过脚本自动化提效

  • 项目 Layout 的初始化,一键快速创建出符合 DDD 目录结构
  • PB 协议更新借助MakefileShell能够快速更新 PB+提交公共 PB 库,项目通过make pb-update快速更新
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
# -e: 错误立马停止 -u: 未定义变量立即停止 -x: 打印命令
set -eux

# 初始化项目/.
trpc create -p ./proto/backend_trade_gateway.proto --protocol=http --alias -f -o .
go mod tidy

# 创建app 应用目录
mkdir -p app/{api,application,domain/{entity,repos,service},infra/{config,dbs}}
mkdir -p {deployment/sql,internal/shim,test/testdata}

# 创建conf 配置目录
mkdir -p conf/{mainland,intl}
touch conf/{mainland,intl}/trpc_go_test.yaml

# 七彩石配置
cfg_file_path="app/infra/config/config.go"
if [ ! -f "$cfg_file_path" ]; then
  touch $cfg_file_path
  echo "package config" >$cfg_file_path
fi

# .gitignore
echo .idea >> .gitignore

GitOps 和 DevOps 结合

  • Git 通过Git Hook配置 git push 后出发自动 CI 构建打包镜像流程
  • 智研 DevOps 工具的 CI、CD 的快速集成,通过Pipeline项目支持MakefileDockerfile等环境变量的初始化,实现快速镜像打包

OpenAI 结队编程

ChatGPT4o-mini,包括 DB 设计、命名问题、疑难问题解决、代码编写等,OpenAI+NextChat提供了非常大的帮助(目前工作离不开 AI 了)

  • 接口协议命名:可以让 ChatGPT 的多命名帮助
  • 问题 Debug、排障
  • 缺省代码实现
  • DB 结构、Go 结构定义、方法实现等
  • 借助工蜂 AI 帮忙 CR

AI结对编程

Notion 计划+Flow 番茄钟

  • Notion 提前规划一天的工作计划,结束时候做过简单总结
  • 设计一个 Flow 番茄钟,完成一个具体的任务项(比如协议设计、一个小任务完成)

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. 沟通合作

  1. 对交付负责、对代码质量负责,不断提升自己在团队中的份量,赢取团队成员信任(赢取信任)
  2. 与人沟通,控制情绪,真诚帮助他人,不高高在上(帮助他人)
  3. 学会拒绝,可以告诉他人你目前的情况,让他人先自己尝试一些问题解决办法(学会拒绝)
  4. 项目任务情况还是应该正常同步,这个是职业素养(进度、问题、风险)
  5. 没有必要和他人争得面红耳赤,技术问题也是如此,你争论不休并不会带来多少收益(情绪控制)
  6. 如果你理解错了,我可以再说一遍,或者和对方确认,如果目前不认可这个观点可以再抛出来讨论(确认达成共识)
  7. 先完成再完美,不用想着什么组件、轮子都必须十全十美(简单、合适、演化原则)

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 等资源

人应该保有自信心,它是一种积极的心理状态,使人们相信自己有能力应对各种挑战和困难,并取得成功。自信能力对个人的心理健康、情绪稳定、人际关系和职业发展都有积极的影响。

面对问题

  1. 动态结构体动态扩展 sv 信息,通过map[string]interface{}解决、以及 MarshalJSON()接口实现结构体 Json 序列化时候动态扩展字段
  2. Gorm 在结构体存储前后的 before、after 处理

5. 程序员效率

5.1. 10x程序员

一部分来至之前极客时间《10x程序员》,一部分来至《高效能人士习惯》,温故知新:

  • 特点:
    • 扎实技术能力:系统且深厚扎实的技术知识和经验、快速理解和解决复杂问题
    • 很强学习能力:快速掌握新技术和工具、强烈的求知欲和学习动力
    • 解决复杂问题能力:善于分析和解决问题,寻找最佳解决方案
    • 高效工作:使用工具、自动化手段,高效组织和管理自己工作,合理安排时间和资源,提高工作效率
    • 团队合作:良好沟通和协作以及反馈,共同高效达成项目目标
  • 思考框架:现状、目标、如何抵达(解决问题能力 - 任务分解\沟通反馈\自动化)
  • 思考习惯:《高效能人士习惯》
    • 以终为始(目标)
    • 要事第一(聚焦)
    • 积极主动(知行合一)
    • 统合综效(任务分解,资源并行,效率质量ROI考虑)
    • 知彼解己(尊重、信任)
    • 合作共赢(团队合作、沟通、换位、1+1>2)
    • 不断更新

5.2. -10x程序员

之前看到的一张 -10x程序员的特征,也贴下吧

-10x程序员特征

6. 小结

《软件工程》这门课程大学计算机基础课程都有学过,回过头来看理论到实践落地,还是要不断总结复盘,才能内化成自己的知识体系以形成高效能的习惯!

借一张图记录下,共勉之!

你学到了多少