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

目录
相关文章
|
22小时前
|
存储 编译器 Go
Go语言学习12-数据的使用
【5月更文挑战第5天】本篇 Huazie 向大家介绍 Go 语言数据的使用,包含赋值语句、常量与变量、可比性与有序性
17 6
Go语言学习12-数据的使用
|
2天前
|
Java Go
一文带你速通go语言指针
Go语言指针入门指南:简述指针用于提升效率,通过地址操作变量。文章作者sharkChili是Java/CSDN专家,维护Java Guide项目。文中介绍指针声明、取值,展示如何通过指针修改变量值及在函数中的应用。通过实例解析如何使用指针优化函数,以实现对原变量的直接修改。作者还邀请读者加入交流群深入探讨,并鼓励关注其公众号“写代码的SharkChili”。
9 0
|
2天前
|
存储 缓存 Java
来聊聊go语言的hashMap
本文介绍了Go语言中的`map`与Java的不同设计思想。作者`sharkChili`是一名Java和Go开发者,同时也是CSDN博客专家及JavaGuide项目的维护者。文章探讨了Go语言`map`的数据结构,包括`count`、`buckets指针`和`bmap`,解释了键值对的存储方式,如何利用内存对齐优化空间使用,并展示了`map`的初始化、插入键值对以及查找数据的源码过程。此外,作者还分享了如何通过汇编查看`map`操作,并鼓励读者深入研究Go的哈希冲突解决和源码。最后,作者提供了一个交流群,供读者讨论相关话题。
10 0
|
3天前
|
Java Go
Go语言学习11-数据初始化
【5月更文挑战第3天】本篇带大家通过内建函数 new 和 make 了解Go语言的数据初始化过程
17 1
Go语言学习11-数据初始化
|
3天前
|
自然语言处理 安全 Java
速通Go语言编译过程
Go语言编译过程详解:从词法分析(生成token)到句法分析(构建语法树),再到语义分析(类型检查、推断、匹配及函数内联)、生成中间码(SSA)和汇编码。最后,通过链接生成可执行文件。作者sharkchili,CSDN Java博客专家,分享技术细节,邀请读者加入交流群。
22 2
|
4天前
|
Java Linux Go
一文带你速通Go语言基础语法
本文是关于Go语言的入门介绍,作者因其简洁高效的特性对Go语言情有独钟。文章首先概述了Go语言的优势,包括快速上手、并发编程简单、设计简洁且功能强大,以及丰富的标准库。接着,文章通过示例展示了如何编写和运行Go代码,包括声明包、导入包和输出语句。此外,还介绍了Go的语法基础,如变量类型(数字、字符串、布尔和复数)、变量赋值、类型转换和默认值。文章还涉及条件分支(if和switch)和循环结构(for)。最后,简要提到了Go函数的定义和多返回值特性,以及一些常见的Go命令。作者计划在后续文章中进一步探讨Go语言的其他方面。
10 0
|
5天前
|
JavaScript 前端开发 Go
Go语言的入门学习
【4月更文挑战第7天】Go语言,通常称为Golang,是由Google设计并开发的一种编程语言,它于2009年公开发布。Go的设计团队主要包括Robert Griesemer、Rob Pike和Ken Thompson,这三位都是计算机科学和软件工程领域的杰出人物。
13 1
|
5天前
|
Go
|
6天前
|
分布式计算 Java Go
Golang深入浅出之-Go语言中的分布式计算框架Apache Beam
【5月更文挑战第6天】Apache Beam是一个统一的编程模型,适用于批处理和流处理,主要支持Java和Python,但也提供实验性的Go SDK。Go SDK的基本概念包括`PTransform`、`PCollection`和`Pipeline`。在使用中,需注意类型转换、窗口和触发器配置、资源管理和错误处理。尽管Go SDK文档有限,生态系统尚不成熟,且性能可能不高,但它仍为分布式计算提供了可移植的解决方案。通过理解和掌握Beam模型,开发者能编写高效的数据处理程序。
134 1
|
6天前
|
算法 关系型数据库 MySQL
Go语言中的分布式ID生成器设计与实现
【5月更文挑战第6天】本文探讨了Go语言在分布式系统中生成全局唯一ID的策略,包括Twitter的Snowflake算法、UUID和MySQL自增ID。Snowflake算法通过时间戳、节点ID和序列号生成ID,Go实现中需处理时间回拨问题。UUID保证全局唯一,但长度较长。MySQL自增ID依赖数据库,可能造成性能瓶颈。选择策略时需考虑业务需求和并发、时间同步等挑战,以确保系统稳定可靠。
113 0