Go语言学习路线 - 6.提效篇:不懈地追求提升研发效率

简介: 在入门篇与基础篇之后,我选择做了这一讲提效篇。而在提效篇的推出之前,我也开启[Go语言技巧系列](https://junedayday.github.io/tags/Go-Tip/)的更新,着重分享一些具体的工程化实例,包括错误处理、Go Module等。

为什么要追求研发效能

入门篇基础篇之后,我选择做了这一讲提效篇。而在提效篇的推出之前,我也开启Go语言技巧系列的更新,着重分享一些具体的工程化实例,包括错误处理、Go Module等。

也许有读者会好奇为什么会把提效篇放在这里,在我看来,如果工程师已经度过了入门阶段,就应该重点关注研发效能

严格意义来说,基础篇的分层思想,就是一个很有效的提升研发效能的手段。

研发效能涉及的面很广,但这里我们聚焦于讨论软件编码阶段的工作,专注于提升工程师在开发阶段的效率。

提升了研发效能后,我不太建议大家去主动接手更多的开发工作,而是投入到不断地学习和提升自己,持续提高效率,实现正反馈循环。至于投入到哪些方面更有价值,则是我今天分享的重点。

培养意识是核心

我并不想直接聊提效的各种手段与方法,因为这些都是停留在 的阶段,大概率会随着时间变化而变化。那什么是 呢?我相信是工程师的思想意识。

举四个比较关键的点:

保持一颗追求“偷懒”的心

提高效率的最大原动力是为了“偷懒”,这一点很容易理解。但难的是在重复性的日常工作下,我们如何能够抵抗住“混一天是一天”的躺平心态,想方设法地缩短现有的工作时间。

对知识的开闭原则

软件工程里有开闭原则OCP,我们对待知识也要有一定的“开闭心态”:

  • 开放 - 对待知识的初始心态要开放,海纳百川。要做到这一点很难,我们要抛开原有的观念,才能对有一个客观的认知。
  • 封闭 - 使用知识时前反复斟酌,考虑周全。要推广、实践一个技术点,不仅仅是技术本身的问题,还要考虑人员因素、团队现状、公司发展、投入产出比等现实性的问题。

原理决定选择,选择重于实现

如今,开源社区已经提供了各种现成工具,日常功能的实现已经基本没有技术瓶颈,这时更考验人的是如何适应后续的可扩展性。选择MySQL还是ES,选择 官方sql库 还是比较重量级的GORM库,都是很值得考量的点。

不同选择代表着不同的发展方向,这个与我们的职业发展一样,一旦开了头,很难改变路线。所以,在做选择之前,我们要尽可能地了解背后的原理,根据自己的应用场景进行选择。

脚踏实地,追求技术最优解

技术人在面向业务编程时,常常会做技术上的妥协。固然,我们应脚踏实地从业务出发去做技术,但如果你对业务有了自己的理解,有了更优解,哪怕需要多几天的开发周期,你也应该尝试说服周围人,这样更能体现你的技术和业务的领导力

提效1 - 编程语言

虽然这是一篇关于Go语言的学习路线,但我希望大家不要把目光局限于这一门语言。

比如,在日常开发、部署、故障排查的过程中,Shell是一个高频的工具;面对大数据处理场景时,用Go语言开发需要造大量轮子,远不如Java体系高度的成熟度;Python在做测试脚本的开发时颇具效率,也有大量的成熟的软件平台。

对普通开发人员来说,逆主流是个大忌!

提效2 - RPC框架

目前在开源社区中,最主流的RPC框架是Gin,可以通过链接进行访问。如果你是一个初学者、公司也没有一个成熟的框架,那就毫不犹豫地选择这个吧!

同时,以gRPC为核心的gRPC-Gateway方案,是我比较推荐的进阶方案,相对Gin而言学习难度会高一些,大家可以通过这个链接进行访问。它的优点是支持http1.xhttp2.0,跨语言的解决方案protobuffer,以及大量的插件化工具(尤其是自动生成接口文档)。

最后,如果你所在的公司已有一个成熟的RPC框架,那就毫不犹豫地使用它吧!同时,你也可以学习GingRPC-Gateway中优点,尝试往公司框架中贡献一些特性,提升自己的技术影响力。

关于第二个gRPC-Gateway方案,后续我会在Go语言技巧系列中花几章进行介绍。

提效3 - 工具库

Go语言在开源社区有广泛的现成工具库,但没有如Spring全家桶那般形成标准,往往需要我们自行挑选。

我们固然可以从百度中搜索出一个解决方案直接使用,也可以直接搜索一个使用率最高的库,但知其所以然更加重要。我非常建议大家在使用对应的工具库前,多花点时间学习底层原理,如使用GORM前先掌握MySQL的基础。

工具库这部分的学习是长期的工作,也是我后续分享的碎片知识点。

提效4 - IDE

我非常建议新手朋友使用IDE,也就是Goland

虽然重度依赖IDE会带来限制,但往往利大于弊,例如:

  • 在内存中缓存数据,实现快速跳转
  • go fmt/goimports等格式化代码的工具
  • 引入Golint进行静态代码扫描
  • Refactor重构等特性,在大型项目中很有价值
  • 快速生成单元测试、接口、实现等
  • 利用Live Template特性,给常用代码生成模板
  • 断点调试

如果你一上手就直接用VSCode、甚至Vim,你可能根本不清楚有这么多工具可以帮助你提升工程质量。当你熟练掌握后,就可以将这些特性作为插件引入到VSCodeVim中。

提效5 - 辅助工具

在日常研发时,有许多辅助性的工具,在特定场景带来意想不到的帮助,需要大家结合自己的场景选择:

  • 开发环境
  • git命令与工作流
  • markdown文档写作
  • 个人任务管理
  • chrome/wireshark/postman等网络相关工具
  • shell排查性能问题

结束语

提效是一个长期的工作,需要我们长期摸索前进。

提效篇只是一个开始,更多的相关内容,我会放到 Go语言技巧系列 里,欢迎大家持续关注。

目录
相关文章
|
18天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
27 7
|
18天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
18天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
93 71
|
17天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
100 67
|
18天前
|
存储 Go
go语言中映射
go语言中映射
32 11
|
20天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
30 12
|
19天前
|
Go 索引
go语言使用索引遍历
go语言使用索引遍历
27 9
|
19天前
|
Go 索引
go语言使用range关键字
go语言使用range关键字
24 7
|
19天前
|
Go 索引
go语言修改元素
go语言修改元素
26 6
|
9天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数