Go语言学习路线 - 8.高级篇:从五个问题来畅想Go工程师的未来发展

简介: 有人常说,编程语言对软件工程师来说并不重要,更重要的是软件工程思想、架构设计能力等更高层面的内容。这个观点本身没有问题,但它更多的是针对有相当工作经验的程序员。对于绝大多数的人,编程语言依然是最重要、最核心的技能,也是通往更高层面的敲门砖。所以,精通一门编程语言,不仅仅要熟悉其语法与原理,更要了解其周边的生态,包括框架、开源库、中间件等,以及掌握它适用的业务场景。

编程语言对软件工程师的意义

有人常说,编程语言对软件工程师来说并不重要,更重要的是软件工程思想架构设计能力等更高层面的内容。

这个观点本身没有问题,但它更多的是针对有相当工作经验的程序员。对于绝大多数的人,编程语言依然是最重要、最核心的技能,也是通往更高层面的敲门砖。所以,精通一门编程语言,不仅仅要熟悉其语法与原理,更要了解其周边的生态,包括框架、开源库、中间件等,以及掌握它适用的业务场景

所以,作为一名将Go语言作为主要开发语言的工程师,如果你能合理地利用好这个敲门砖,你的职业发展必将更加通畅。下面,我会从几个常见问题谈起,分享我的经验与见解,希望能给各位带来启发。

问题1:需要关注编程语言之争吗?

需要,而且非常有意义。但是,我们的精力毕竟有限,更应该关注哪些内容呢?我推荐三点:

  1. 编程语言常见特性的设计理念,能解决什么样的问题,如try-catch
  2. 编程范式所包含的思想,如面向对象编程函数式编程依赖注入
  3. 特定领域中语言的现状,如Julia在大数据体系中对Java的冲击

上面这些例子是一些很发散的内容,但能证明你的视野足够广阔。不过,在关注编程语言之争的同时,我们仍应把主要精力聚焦于一门语言的深入学习,这才是我们的核心竞争力。

问题2:Go语言工程师有什么其余语言无法替代的呢?

说到一门语言的不可替代性,核心关注两点:

  1. 现状:即一门语言在特定的领域中已沉淀的积累,包括开源软件、SDK库、文档、社区、用户等
  2. 未来:各公司或组织对这门语言的投入,如建立基金会、形成规范、招聘人才趋势等

上面这两点,也间接地回答了一个很常见的问题:Go能替代Java成为主流业务开发语言吗?我个人短期内并不看好。

回到问题,那么Go最擅长的领域是什么呢?答案也是大家耳熟能详的云原生技术

  1. 现状:云原生的核心技术Kubernetes与大量相关套件都是用Go语言开发的,短期内无法被替换
  2. 未来:云原生在CNCF的推动下,已经在各类云厂商中形成事实标准

问题3:Go语法简洁,做业务开发很方便,可以用吗?

当然可以使用!Go语法简洁的特性能让代码更容易阅读,但我们要清楚地认识到其弊端,才能长期地坚持走这条路:

  1. 由于不存在类似Spring的编程框架做强限制,不同人的代码风格差异还是很大,最好前期有个资深专家 做好前期框架规划,才能更好地体现Go的优势
  2. 对接部分技术体系的开源库缺失或不够成熟,尤其是对接HiveFlink等大数据体系时,Java仍是第一选择
  3. Go的标准库中往往为了通用性而牺牲了定制化,例如排序函数采用的是一个工业级混合多种排序的方法,而无法灵活地按需选择冒泡、快排等,这就需要一定的二次开发

也许你看完这三个问题,会觉得自己学Go语言的热情被劝退了,但其实换个角度来看问题,其实答案也很有意思:

  1. Go语言官方只做最基础的底层,而上层的业务框架由各家在实践中探索,发展空间很大
  2. Google推出Go之后又推出的gRPC、云原生理念,就是希望编程语言百家齐鸣,各自有各自擅长的领域
  3. 一方面,通用性能降低编程语言学习的复杂度;另一方面,我们也是希望把一部分的复杂度从编程语言转移到各类中间件中,可以减少很多重复建设

问题4:从目前来看,Go业务开发工程师的前途不行吗?

综合上面讨论的问题来看,现有阶段用Go语言做业务开发并不是最快的。

但是,从目前云原生理念被越来越多的人接受,我相信Go语言做业务开发也是一个很棒的选择。这里,我强调一个点:借势。怎么理解这个词呢?

  1. 承认短板:既然需要"借",那就先得承认自己有不足。如果幻想毕其功于一役,那这条路很容易走到尽头。
  2. 善假于物:对于Go语言来说,借势的关键对象是两个:云原生其余编程语言的生态
    1. 云原生:有大量优秀的基础组件与中间件,尽可能地复用这部分的能力(基本上覆盖了所有的基础设施)
    2. 其余编程语言:根据业务需要自行使用,建议在非熟悉的领域尽可能地做到简单,把复杂的业务逻辑放到最熟悉的编程语言中

上面聊的比较抽象,我再举两个具体的例子:

  1. 对某个服务做网络的限流,更推荐放在Istio上,而不需要在应用程序中加上一堆计算流量的代码
  2. 某个Go服务想对接Flink计算业务数据,那就用利用JAVA的SDK开发一个对接的小服务,通过HTTP或MQ对外输出结果,而复杂的业务逻辑放在Go服务中

问题5:Go开发工程师的长期发展目标怎么定,才更有竞争力?

从能力层面来说,我认为Go语言工程师的核心技能点分为四层:

  1. 基础层:计算机基础、网络、操作系统、算法
  2. 语言层:Go语言原理与实践,其它语言的优秀特性
  3. 应用层:中间件、软件工程、架构设计
  4. 业务层:业务逻辑、云原生生态与解决方案

加粗的为Go语言特别关注

这四层的内容极多,我建议围绕着两个重点进行学习:

  1. 系统性的学习Go语言原理与实践,向下即阅读源码,掌握操作系统、网络等基础原理;向上则结合项目,对接各类中间件,学习软件架构设计
  2. 利用碎片时间了解云原生,云原生是一个日新月异的研发生态,对于非资深的开发者没必要前期就投入大量精力、导致基础不扎实,关注发展趋势、了解大致原理即可(技术的底层往往互通)

结束语

整个Go语言学习路线到此已经更新完毕,很高兴有朋友陪我走到最后。后续我也会持续更新这个系列的文章,保证内容的实时性。

学习技术是一个长期的过程,敝帚自珍很容易中途失去信心而放弃,大家一起鼓励、探讨,就能走得更远。

欢迎大家私聊我探讨问题,也可以通过公众号加入到Go学习小组中交流更多日常问题。

目录
相关文章
|
9天前
|
程序员 Go PHP
为什么大部分的 PHP 程序员转不了 Go 语言?
【9月更文挑战第8天】大部分 PHP 程序员难以转向 Go 语言,主要因为:一、编程习惯与思维方式差异,如语法风格和编程范式;二、学习成本高,需掌握新知识体系且面临项目压力;三、职业发展考量,现有技能价值及市场需求不确定性。学习新语言虽有挑战,但对拓宽职业道路至关重要。
39 10
|
8天前
|
Go API 开发者
深入探讨:使用Go语言构建高性能RESTful API服务
在本文中,我们将探索Go语言在构建高效、可靠的RESTful API服务中的独特优势。通过实际案例分析,我们将展示Go如何通过其并发模型、简洁的语法和内置的http包,成为现代后端服务开发的有力工具。
|
10天前
|
算法 程序员 Go
PHP 程序员学会了 Go 语言就能唬住面试官吗?
【9月更文挑战第8天】学会Go语言可提升PHP程序员的面试印象,但不足以 solely “唬住” 面试官。学习新语言能展现学习能力、拓宽技术视野,并增加就业机会。然而,实际项目经验、深入理解语言特性和综合能力更为关键。全面展示这些方面才能真正提升面试成功率。
33 10
|
9天前
|
编译器 Go
go语言学习记录(关于一些奇怪的疑问)有别于其他编程语言
本文探讨了Go语言中的常量概念,特别是特殊常量iota的使用方法及其自动递增特性。同时,文中还提到了在声明常量时,后续常量可沿用前一个值的特点,以及在遍历map时可能遇到的非顺序打印问题。
|
7天前
|
存储 监控 数据可视化
Go 语言打造公司监控电脑的思路
在现代企业管理中,监控公司电脑系统对保障信息安全和提升工作效率至关重要。Go 语言凭借其高效性和简洁性,成为构建监控系统的理想选择。本文介绍了使用 Go 语言监控系统资源(如 CPU、内存)和网络活动的方法,并探讨了整合监控数据、设置告警机制及构建可视化界面的策略,以满足企业需求。
24 1
|
14天前
|
安全 大数据 Go
深入探索Go语言并发编程:Goroutines与Channels的实战应用
在当今高性能、高并发的应用需求下,Go语言以其独特的并发模型——Goroutines和Channels,成为了众多开发者眼中的璀璨明星。本文不仅阐述了Goroutines作为轻量级线程的优势,还深入剖析了Channels作为Goroutines间通信的桥梁,如何优雅地解决并发编程中的复杂问题。通过实战案例,我们将展示如何利用这些特性构建高效、可扩展的并发系统,同时探讨并发编程中常见的陷阱与最佳实践,为读者打开Go语言并发编程的广阔视野。
|
11天前
|
存储 Shell Go
Go语言结构体和元组全面解析
Go语言结构体和元组全面解析
|
Java 编译器 Go
一起学Golang系列(五)初次接触Go语言可能遇到的各种坑!
前面介绍了Go语言的基础语法,所谓磨刀不误砍柴工,希望大家还是能熟悉掌握这些基础知识,这样后面真正学起Go来才会得心应手。 作为初学者。Go语言的语法有些和java类似,但也有很多不一样的地方。刚开始都会遇到各种各样的坑。下面就来总结下学习go语言的过程中,遇到的各种坑。
一起学Golang系列(五)初次接触Go语言可能遇到的各种坑!
|
16天前
|
Go
golang语言之go常用命令
这篇文章列出了常用的Go语言命令,如`go run`、`go install`、`go build`、`go help`、`go get`、`go mod`、`go test`、`go tool`、`go vet`、`go fmt`、`go doc`、`go version`和`go env`,以及它们的基本用法和功能。
25 6
|
16天前
|
存储 Go
Golang语言基于go module方式管理包(package)
这篇文章详细介绍了Golang语言中基于go module方式管理包(package)的方法,包括Go Modules的发展历史、go module的介绍、常用命令和操作步骤,并通过代码示例展示了如何初始化项目、引入第三方包、组织代码结构以及运行测试。
18 3