Go语言学习路线 - 2.方向篇:如何成为一名优秀的Go语言工程师

简介: 如何成为一名优秀的Go语言工程师,这是很多人都长期疑惑的问题。我这边抛出自己的观点,希望能引起大家的思考:掌握基础,熟悉生态,集百家长,深耕领域接下来,我将围绕这四个词展开今天的分享。

核心成长方向

如何成为一名优秀的Go语言工程师,这是很多人都长期疑惑的问题。

我这边抛出自己的观点,希望能引起大家的思考:

掌握基础,熟悉生态,集百家长,深耕领域

接下来,我将围绕这四个词展开今天的分享。

1. 掌握基础

首先,我们来聊聊这个老生常谈的话题 - 掌握基础。关于基础的学习路线我会在后面细讲,今天我们先来谈点别的。

所谓基础,会根据工作的不同阶段而不断变化。 也就是要用 发展 的眼光来看问题。

举个例子,就以 编程语言 的作为切入点:

  • 一名合格的业务开发者,会熟练地应用编程语言去实现功能需求,熟练掌握常见的开源工具库
  • 进一步,如果作为一名模块的负责人,那就需要考虑设计模式来抽象复杂业务,熟悉编程语言底层的运行原理
  • 再进一步,作为一名架构师,就得思考如何用 工程化 来控制复杂度和约束规范性;
  • 而如果是更高一层的角色,如CTO,就需要从编程语言或框架的 成熟度、前瞻性 的角度来决定路线。

2. 熟悉生态

生态 这个词很微妙,社区里有不同的见解,我也无法抛出一个准确的定义,这块需要大家自行摸索。不过,我倒是可以分享几个踩坑经历:

  1. 语言生态 :编程语言都是有对应的应用领域的,我在上一讲已经说过,这里不再细谈;
  2. 框架生态 :编程语言往往提供多种框架,不同框架的设计理念和使用场景不同,甚至会有一定的矛盾。例如有的框架提供了重量级的解决方案,可以快速生成一套代码,但对应的灵活性就大大降低;对应的,另一个框架能提供轻量级的插件化解决方案,需要你自行挑选、组装、调试,以提升复杂度的代价换来了灵活性;
  3. 社区生态 :除了极少的探索性的工作,绝大部分的开发工作都能在社区中找到同路人,经常能发现很有价值的建议。但社区里的声音很杂,筛选信息是最大障碍,这一点很容易反复踩坑。

比起一些告诉你 该怎么做 的建议,我更倾向于那些 不该怎么做 的建议。

一次成功往往有大量的偶然因素,而从失败中分析出原因更有长期价值。

3.集百家长

接下来的这点,是本章的重点,希望大家看完之后能重点思考。

Go 语言是一个以简单著称的编程语言,又被号称是 云时代的编程语言。这背后蕴含了两层含义。

简单

第一点,也就是 简单 带来的副作用。一种编程语言如果被冠以 简单 的头衔,那么它的设计核心就是 可读性

但是,无论是模板、元编程、泛型这些语法上的高端特性,还是继承、多态、函数式等编程范式上的特性,虽然很复杂(或者说是学习曲线很陡峭),但不得不承认它们在特定的场景中,达到了很好的抽象效果,大幅度地提升了程序的效率。

所以,Go 语言决定了在单个程序中支持的复杂度有限,进一步则需要 JAVA、C++为代表的工业级编程语言 的一些特性。

云时代的编程语言

从上一点来看,Go 语言支持的单个程序复杂度有限,那就非常依赖 微服务 的核心理念 - 拆。通过拆解,可以将单个程序的复杂度转移到架构层面,也更好地契合了服务内聚的理念。

但是,即便进行了很好的设计与拆分,微服务 依然有两个比较重要的前置要求:服务间通信微服务治理。前者相对容易解决,统一采用 RESTful 风格或 gRPC 等框架进行通信,就能满足基本要求;而微服务的治理问题就非常复杂了,很长一段时间都没有一套成熟的解决方案。近几年,随着 Docker容器化 + Kubernetes调度平台 的出现与推广,已经成为了 微服务的Best Practice

K8s为核心的云原生生态,涵盖了监控、日志采集、链路追踪、Service Mesh等各类子领域的解决方案,均得到了快速迭代。其中,各种核心组件均是通过 Go 语言开发而成,像 Kubernetes、Prometheus、Etcd 等。

至此,我们开发的服务不再需要过分关注基础组件,而是更聚焦于业务领域。

CNCF

再回到这一个话题的核心 - 集百家长

云原生的社区CNCF提供了大量的组件,大家可以通过这个链接看到对应的全景图。它提供了是一整套插件化的组合方案,需要开发人员按需组合(后面我也会给出一些建议)。

我非常不建议大家去自己从头开发一个模块,主要有两点(巨型互联网的基础团队除外):

  1. 自建轮子跟不上社区迭代,投入产出比价值低;
  2. 很多时候某些功能已经在某个组件中实现,或者正在实现,只是没正确使用。

如果真要新增某个重要功能,优先去找个现有CNCF项目的负责人聊聊,提交PR合入,或者自行fork开发。

相信我,在一个成熟产品中新增特性,比你重写一个轮子更有价值!无论是对技术的提升、还是投递简历时的效果,都更有意义。

举一个场景,当我们发现需要在程序中用map保存大量结果时,用默认的数据结构效率很低:

  • 如果在JAVA生态里,那么内部就有丰富的容器库可供选择,放在一个服务中即可;
  • 而在Go中,自然也可以借用github上面搜索的三方库来解决,但更建议根据场景选用开源的K-V组件,通过RPC调用来解决问题,也就是拆成了 业务功能map数据存储 两个服务
  • 专业的事交给专业的组件

4. 深耕领域

在工作三年以上,我越来越感受到 领域 是一个很重要的概念,也是各公司考验高端人才的重要素质。

举几个例子:

  • 作为一名 电商支付领域 的开发专家,需要在编程语言的 如何保证数据一致性 的相关特性有深入研究;

  • 如果是 物流订单领域 的专家,则要考虑 如何合理抽象各类物流类型 的问题,来支持复杂的场景;

  • 当你负责的是一个 秒杀系统,那么需要对 高并发场景与异常兜底 有足够的经验。

每一块 领域 都需要有大量的 专业技能行业经验 沉淀,这是高端人才的核心竞争力。

虽说两者缺一不可,但还是具有一定的倾向性

  • 偏技术的领域更需要 专业技能 ,瓶颈往往是某一个垂直领域的技术深度;
  • 偏业务的领域更要求 行业经验 ,要求负责人能 带领团队避开坑,走对路

总结

回顾一下这四个点: 掌握基础,熟悉生态,集百家长,深耕领域 。这一整个过程,也可以说是:修炼内功,学习并合理使用外部资源,沉淀于特定领域

纵观周围环境,我发现大部分的开发者都热衷于 修炼内功和领域沉淀,而过于轻视了 外部资源 的作用,就错失了一个快速提升个人能力的手段,技术视野也非常有限。这一块,将是我后续分享的重点,也是区别于其余教程的一大特点。

目录
相关文章
|
16天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
60 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
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
|
14天前
|
监控 算法 安全
解锁企业计算机监控的关键:基于 Go 语言的精准洞察算法
企业计算机监控在数字化浪潮下至关重要,旨在保障信息资产安全与高效运营。利用Go语言的并发编程和系统交互能力,通过进程监控、网络行为分析及应用程序使用记录等手段,实时掌握计算机运行状态。具体实现包括获取进程信息、解析网络数据包、记录应用使用时长等,确保企业信息安全合规,提升工作效率。本文转载自:[VIPShare](https://www.vipshare.com)。
22 0
|
28天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数
|
Java 编译器 Go
一起学Golang系列(五)初次接触Go语言可能遇到的各种坑!
前面介绍了Go语言的基础语法,所谓磨刀不误砍柴工,希望大家还是能熟悉掌握这些基础知识,这样后面真正学起Go来才会得心应手。 作为初学者。Go语言的语法有些和java类似,但也有很多不一样的地方。刚开始都会遇到各种各样的坑。下面就来总结下学习go语言的过程中,遇到的各种坑。
一起学Golang系列(五)初次接触Go语言可能遇到的各种坑!
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
42 7
|
1月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
105 71