@buoge
2017-12-21T15:02:45.000000Z
字数 3777
阅读 1458
程序构建
http://share.coderena.com/slides/shower/soft-eng-capability.html
要有持之以恒的耐心来不断应对变化
善于观察,思考对策
不断总结累积共性
孩子最终要从童话世界中走出,面对现实世界的厮杀
PoC / MVP,本地运行,只关注成功路径。问题:它是否可行?
从 0 到 1 的成就感
没有脏活累活(错误处理,部署,监控等),全是新鲜体验
就是写代码,没那些乌七八糟的事
开始面对真实世界,加入错误处理,关注健壮性。问题:它是否有价值?
日志,错误报告,安全,部署,更多商业逻辑。问题:它是否能为更多的客户带来价值?
性能,CI/CD,监控,报警,统计分析,自动伸缩,自动恢复。问题:它是否能持续为客户带来价值,并立足于商业竞争?
* 无穷无尽的线上问题(还要回头补充 UT,IT,和 metrics 防止 regression)
* 重压之下的问题解决能力
* 很多跟代码无关的事情(业务挂了,你要写个事后分析吧,性能降了,你要分析和解决吧,等等)
什么样的能力可以从一套系统带入到下一套系统?问对问题有时候比解决问题还重要!!!
一个项目结束后,喘口气,找个可以独处的时间,问问自己:
这个项目我学习到了哪些我没接触到的东西?我能将他们应用在下一个项目中么?
我在项目中,哪些事情或者决策能够做得更好?
如果让我从零到一开发这个项目,我还缺失哪些知识和技能?
* 和具体的功能无关 ——如何使用各种工具和资源,建立一套体系,让软件能够正常 运行 和 演进
* 收集数据的能力,以及分析数据的能力
* 快速应对问题,进行决策和解决问题的能力
* 万金油 —— 什么都「略懂」
软件工程师能力的几个核心指标
什么数据值得收集?(公司在收集些什么数据?为什么?有没有可以改进的地方?),行为收集:能收集就收集
收集到的数据流向了什么系统?数据如何存储保存?为什么?
数据是如何处理和聚合的?(是 realtime 还是 batch?为什么?有没有可以改进的地方?)
聚合后的数据怎么存储?
数据是否能够方便地查询?可视化?
如何读懂各个指标?
如何看待某个指标的增长?(同比/环比?)
例1:一个新版本导致 response time 降低
如何通过对比多个指标寻找潜在的问题?
例2:对比同一时间点上的 metrics 寻找差异
如何通过数据的异常发现问题?
例3:广告的 impression 的异常
通过数据,形成画像,反向研究用户的行为,和系统的场景,进一步提升自己的服务,各种metrics数据汇总和观测
监控力度阈值是多少
Response Time(20s)
系统报警到问题解决的时间长短
api 被恶意调用监控
服务完整性的验证?如何验证用户完整的走完了一个业务流程?还是走了一半卡住了?
如何跟踪用户的每一步操作,以及间隔,什么导致他快速完成,什么导致他等待?
如何发现这样的问题,分析下自身原因是什么导致了用户没有继续下去?
如何应对,使用什么策略,哪种方案来解决卡住的问题?完善自身的服务,更高的促进优化?
如何做 AB Test 来验证目前的服务是否被优化了,以及下一步怎么办?
反向来验证自己的业务和方法展现方式,是否有问题,可以更近一步的地方,在哪里,从哪里入手等等
软件开发的本质是:make decision
决策:将来自多方的信息汇总到一起产生一个合理的解决方案
解决问题,尤其是线上问题不一定要完美的方案
是错要有回滚的能力,一旦有问题马上回滚到稳定的版本
一个人知识面越宽广,各方面都略懂,那么解决问题的时候思路就会更加的多,考虑更全面,可以解决很多灰色地带的问题,这些问题只有融会贯通,打开了任督二脉的人才能领悟
知识的层次和知识的广度,经验技能决定自己的决策和解决问题能力,做的越多能力越强,正确和错误都会指引者自己往前进,都是学习,要勇于为先
大流量扛不住:升级硬件,和缓存策略,分流策略
请求响应慢:优化代码和数据结构,算法
用户停留时间短:优化推荐算法
总之,不怕出错,就怕什么也不做!
很多别人的知识和经验,如果多问些为什么,能够转化为你自己的
不要把自己桎梏在前端 / 后端 / devOps 这些角色,要多学习其他领域
灰色地带的知识和经验往往具有很大的价值(Only you)
市场环境
竞争对手
用户获取
花钱与赚钱
考虑公司业务,考虑公司规模
小规模没有挑战,不利于自己成长,接触到达的场景
朋友推荐,证明自己,为自己背书
研究想去的公司,对口做功课
一般2周,和scrum 的流程契合
大家工作越久越熟练,衣服穿久了贴身,人用久了贴心