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语言技巧系列 里,欢迎大家持续关注。

目录
相关文章
|
16天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
60 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
42 7
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
1月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
105 71
|
1月前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
109 67
|
1天前
|
监控 安全 算法
深度剖析核心科技:Go 语言赋能局域网管理监控软件进阶之旅
在局域网管理监控中,跳表作为一种高效的数据结构,能显著提升流量索引和查询效率。基于Go语言的跳表实现,通过随机化索引层生成、插入和搜索功能,在高并发场景下展现卓越性能。跳表将查询时间复杂度优化至O(log n),助力实时监控异常流量,保障网络安全与稳定。示例代码展示了其在实际应用中的精妙之处。
24 9
|
11天前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
46 12
|
1月前
|
存储 Go
go语言中映射
go语言中映射
42 11
|
14天前
|
监控 算法 安全
解锁企业计算机监控的关键:基于 Go 语言的精准洞察算法
企业计算机监控在数字化浪潮下至关重要,旨在保障信息资产安全与高效运营。利用Go语言的并发编程和系统交互能力,通过进程监控、网络行为分析及应用程序使用记录等手段,实时掌握计算机运行状态。具体实现包括获取进程信息、解析网络数据包、记录应用使用时长等,确保企业信息安全合规,提升工作效率。本文转载自:[VIPShare](https://www.vipshare.com)。
22 0
|
28天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数