软件开发能力
在刚开始的阶段大家对于语言的关注度往往大于系统层级,业务层级。
软件系统是个大工程,包括 separate programs, configration files ,代码或者编程语言都只是一部分。
发展阶段
idea -> mvp -> business -> real system(provide value) -> HA, more value
- 婴儿期 :poc/mvp 最简单的代码时间,是否可行
- 少年期 :加强健壮性 是否有价值
- 青春期:日志,错误监控,安全,部署,效率 能否提供更多的价值
- 成人期:性能,CI/CD,监控,分析,BI 足够的商业竞争
- 消亡期
可以积累的经验,从一个系统经验抽象出来的能力,用启发式的问题自问
系统能力
软件部署 了解数据流转,网络架构
系统架构 (
至少可以在白板中画出架构,说的清楚职责
)- 一个请求的完整 pipeline 心中有数
- Qos
- log
- 监控
数据架构
- 用户在使用系统时的行为
- 行为收集的event (地点人物事件)
- 多平台数据怎么统一
- 数据聚合,存储,分析,可视化
监控和报警
- 性能日志收集,处理
- alert
- 突发事件的快速相应
数据收集能力
- 什么数据值得收集(当前收集的数据跟核心业务符合吗,有需要改进的地方吗?)
- 收集的数据流向了什么系统?why
- 数据是怎么聚合的 (batch or realtime, how improve?)
- how store datas?
- ad-hoc or report query ? 可视化
分析数据能力
- 如何读懂各个指标?业务场景关联性
- 怎么解读数据趋势,同比,环比?(A/B testing)
- 多维度数据变化对应的业务含义
- 异常数据?
- 数据发现新知识(数据挖掘 )
快速决策和解决问题
- 软件开发的本质:
make decision
, 大到技术栈的选型,小到变量,函数的命名,也是各种最佳实践,经验积累的体现,最终呈现的是我们的系统。这里就需要有个人的Knowledge base
- 决策:需要的是经验和胆识
- 解决问题 <=> 完美的方案,所以考虑时间成本 workround 的方案可能更合适
- 软件开发的本质:
什么都略懂一些(万金油)
- 多了解其他的领域,前端,运维,运营,产品,可以更好的理解他人的工作,还有发现更多的机会,对自己的发展有利,不要
桎梏
自己的角色。 - 交叉混合地带的知识和经验往往具有很大的价值,从历史的发展来看,交叉学科是必然的趋势,知识迁移组合往往发挥
1+1>2
的功效. 举个例子,代码写的6,又会表达,在沟通中就如鱼得水。
- 多了解其他的领域,前端,运维,运营,产品,可以更好的理解他人的工作,还有发现更多的机会,对自己的发展有利,不要
责任心,担当
proud to be the owner & eat your own dog shit
- 出问题不怕,怕的的总是出一样的问题,持续改进很重要
- 不管是否自己 oncall,出了问题第一时间投入进去不解决不罢休
- 换位思考,把自己当成用户,将心比心
敢为人先:接受挑战
- 面对挑战,不要退却,推责
!当我们阅读别人的项目设计或者源码的时候,就是在还原作者当时的决策流程(mock的感觉)
! 人靠谱最重要
业务能力
要了解的逻辑:
- 公司怎么赚钱的?
- 离钱越近的职位越重要
每个人都需要了解的业务知识
- 公司如何获取用户?公司给用户提供的价值是什么?
- 如何留住用户?提高用户产生的收益?
- 公司和部门是如何花钱的?
- 用户的单价,投入产出?获客成本
- 用户的
life time value
? - 公司业务所处的市场环境?对手发展的情况?
- 公司的差异化在哪?市场优势在哪?
- 行业是怎么样的? 行业标杆,标准是怎样的?
从市场角度,财务角度,运营角度来分析公司优缺点,所处环境和未来方向。