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学习小组中交流更多日常问题。

目录
相关文章
|
3天前
|
安全 Go
用 Zap 轻松搞定 Go 语言中的结构化日志
在现代应用程序开发中,日志记录至关重要。Go 语言中有许多日志库,而 Zap 因其高性能和灵活性脱颖而出。本文详细介绍如何在 Go 项目中使用 Zap 进行结构化日志记录,并展示如何定制日志输出,满足生产环境需求。通过基础示例、SugaredLogger 的便捷使用以及自定义日志配置,帮助你在实际开发中高效管理日志。
12 1
|
2天前
|
程序员 Go
go语言中的控制结构
【11月更文挑战第3天】
75 58
|
1天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
2天前
|
存储 编译器 Go
go语言中的变量、常量、数据类型
【11月更文挑战第3天】
15 9
|
2天前
|
数据采集 监控 Java
go语言编程学习
【11月更文挑战第3天】
18 7
|
2天前
|
Go 数据处理 API
Go语言在微服务架构中的应用与优势
本文摘要采用问答形式,以期提供更直接的信息获取方式。 Q1: 为什么选择Go语言进行微服务开发? A1: Go语言的并发模型、简洁的语法和高效的编译速度使其成为微服务架构的理想选择。 Q2: Go语言在微服务架构中有哪些优势? A2: 主要优势包括高性能、高并发处理能力、简洁的代码和强大的标准库。 Q3: 文章将如何展示Go语言在微服务中的应用? A3: 通过对比其他语言和展示Go语言在实际项目中的应用案例,来说明其在微服务架构中的优势。
|
2天前
|
Go 数据处理 调度
探索Go语言的并发模型:Goroutines与Channels的协同工作
在现代编程语言中,Go语言以其独特的并发模型脱颖而出。本文将深入探讨Go语言中的Goroutines和Channels,这两种机制如何协同工作以实现高效的并发处理。我们将通过实际代码示例,展示如何在Go程序中创建和管理Goroutines,以及如何使用Channels进行Goroutines之间的通信。此外,本文还将讨论在使用这些并发工具时可能遇到的常见问题及其解决方案,旨在为Go语言开发者提供一个全面的并发编程指南。
|
4天前
|
JavaScript Java Go
探索Go语言在微服务架构中的优势
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出。本文将深入探讨Go语言在构建微服务时的性能优势,包括其在内存管理、网络编程、并发模型以及工具链支持方面的特点。通过对比其他流行语言,我们将揭示Go语言如何成为微服务架构中的一股清流。
|
3天前
|
Ubuntu 编译器 Linux
go语言中SQLite3驱动安装
【11月更文挑战第2天】
19 7
|
3天前
|
关系型数据库 Go 网络安全
go语言中PostgreSQL驱动安装
【11月更文挑战第2天】
20 5
下一篇
无影云桌面