为什么要追求研发效能
在入门篇与基础篇之后,我选择做了这一讲提效篇。而在提效篇的推出之前,我也开启Go语言技巧系列的更新,着重分享一些具体的工程化实例,包括错误处理、Go Module等。
也许有读者会好奇为什么会把提效篇放在这里,在我看来,如果工程师已经度过了入门阶段,就应该重点关注研发效能。
严格意义来说,基础篇的分层思想,就是一个很有效的提升研发效能的手段。
研发效能涉及的面很广,但这里我们聚焦于讨论软件编码阶段的工作,专注于提升工程师在开发阶段的效率。
提升了研发效能后,我不太建议大家去主动接手更多的开发工作,而是投入到不断地学习和提升自己,持续提高效率,实现正反馈循环。至于投入到哪些方面更有价值,则是我今天分享的重点。
培养意识是核心
我并不想直接聊提效的各种手段与方法,因为这些都是停留在 术 的阶段,大概率会随着时间变化而变化。那什么是 道 呢?我相信是工程师的思想意识。
举四个比较关键的点:
保持一颗追求“偷懒”的心
提高效率的最大原动力是为了“偷懒”,这一点很容易理解。但难的是在重复性的日常工作下,我们如何能够抵抗住“混一天是一天”的躺平心态,想方设法地缩短现有的工作时间。
对知识的开闭原则
软件工程里有开闭原则OCP,我们对待知识也要有一定的“开闭心态”:
- 开放 - 对待知识的初始心态要开放,海纳百川。要做到这一点很难,我们要抛开原有的观念,才能对有一个客观的认知。
- 封闭 - 使用知识时前反复斟酌,考虑周全。要推广、实践一个技术点,不仅仅是技术本身的问题,还要考虑人员因素、团队现状、公司发展、投入产出比等现实性的问题。
原理决定选择,选择重于实现
如今,开源社区已经提供了各种现成工具,日常功能的实现已经基本没有技术瓶颈,这时更考验人的是如何适应后续的可扩展性。选择MySQL
还是ES
,选择 官方sql库
还是比较重量级的GORM
库,都是很值得考量的点。
不同选择代表着不同的发展方向,这个与我们的职业发展一样,一旦开了头,很难改变路线。所以,在做选择之前,我们要尽可能地了解背后的原理,根据自己的应用场景进行选择。
脚踏实地,追求技术最优解
技术人在面向业务编程时,常常会做技术上的妥协。固然,我们应脚踏实地从业务出发去做技术,但如果你对业务有了自己的理解,有了更优解,哪怕需要多几天的开发周期,你也应该尝试说服周围人,这样更能体现你的技术和业务的领导力。
提效1 - 编程语言
虽然这是一篇关于Go
语言的学习路线,但我希望大家不要把目光局限于这一门语言。
比如,在日常开发、部署、故障排查的过程中,Shell
是一个高频的工具;面对大数据处理场景时,用Go
语言开发需要造大量轮子,远不如Java
体系高度的成熟度;Python
在做测试脚本的开发时颇具效率,也有大量的成熟的软件平台。
对普通开发人员来说,逆主流是个大忌!
提效2 - RPC框架
目前在开源社区中,最主流的RPC框架是Gin
,可以通过链接进行访问。如果你是一个初学者、公司也没有一个成熟的框架,那就毫不犹豫地选择这个吧!
同时,以gRPC
为核心的gRPC-Gateway
方案,是我比较推荐的进阶方案,相对Gin
而言学习难度会高一些,大家可以通过这个链接进行访问。它的优点是支持http1.x
和http2.0
,跨语言的解决方案protobuffer
,以及大量的插件化工具(尤其是自动生成接口文档)。
最后,如果你所在的公司已有一个成熟的RPC框架,那就毫不犹豫地使用它吧!同时,你也可以学习Gin
和gRPC-Gateway
中优点,尝试往公司框架中贡献一些特性,提升自己的技术影响力。
关于第二个gRPC-Gateway方案,后续我会在Go语言技巧系列中花几章进行介绍。
提效3 - 工具库
Go
语言在开源社区有广泛的现成工具库,但没有如Spring
全家桶那般形成标准,往往需要我们自行挑选。
我们固然可以从百度中搜索出一个解决方案直接使用,也可以直接搜索一个使用率最高的库,但知其所以然更加重要。我非常建议大家在使用对应的工具库前,多花点时间学习底层原理,如使用GORM
前先掌握MySQL
的基础。
工具库这部分的学习是长期的工作,也是我后续分享的碎片知识点。
提效4 - IDE
我非常建议新手朋友使用IDE
,也就是Goland
。
虽然重度依赖IDE会带来限制,但往往利大于弊,例如:
- 在内存中缓存数据,实现快速跳转
go fmt/goimports
等格式化代码的工具- 引入
Golint
进行静态代码扫描 Refactor
重构等特性,在大型项目中很有价值- 快速生成单元测试、接口、实现等
- 利用
Live Template
特性,给常用代码生成模板 - 断点调试
如果你一上手就直接用VSCode
、甚至Vim
,你可能根本不清楚有这么多工具可以帮助你提升工程质量。当你熟练掌握后,就可以将这些特性作为插件引入到VSCode
与Vim
中。
提效5 - 辅助工具
在日常研发时,有许多辅助性的工具,在特定场景带来意想不到的帮助,需要大家结合自己的场景选择:
- 开发环境
git
命令与工作流markdown
文档写作- 个人任务管理
chrome/wireshark/postman
等网络相关工具shell
排查性能问题
结束语
提效是一个长期的工作,需要我们长期摸索前进。
提效篇只是一个开始,更多的相关内容,我会放到 Go语言技巧系列 里,欢迎大家持续关注。