标签 Java 下的文章

从零开始编程:Go语言真的适合新手吗?

本文永久链接 – https://tonybai.com/2024/08/22/go-as-first-language

Go语言自诞生以来,一直以其简洁、高效和面向工程的特性受到开发者的青睐,尤其是在后端开发和并发编程方面,Go表现出了独特的优势。然而,作为一门以简单著称的语言,它是否适合作为编程初学者的第一门语言呢?笔者今天在Reddit上看到有人提出此类问题,也做了一些思考,这里就通过本文从多个角度来和大家一起探讨下这一问题。

我们先从Go适合作为第一门语言的特质说起。

1. Go语言的简洁性

在我的《Go语言精进之路第一卷》第3节“理解Go语言的设计哲学”中我就提到过:Go语言的设计哲学是“做减法”,拒绝走语言特性融合的道路,提供简单的用户界面,将复杂性留给语言自身的设计和实现者

这种简洁性让初学者能够更快地上手,将精力聚焦在理解编程的基本概念和程序的逻辑结构上,而不是被复杂的语法规则所困扰。例如,Go的语法简洁明了,没有太多冗余的语法糖(一个事情大多只有一种写法),使得代码更容易阅读、理解和维护。

此外,Go的静态类型系统提供了清晰的类型检查机制,这有助于初学者理解变量和类型的概念。与动态类型语言相比,Go的类型系统减少了初学者在学习过程中可能遇到的困惑。此外,Go仍保留了指针等底层概念,让学生在学习过程中还能够接触到内存管理和效率优化的基础知识,也便于学习数据结构与算法,为后续的进阶学习做好铺垫。

2. 并发编程的天然优势

随着多核处理器的普及,并发编程已经成为现代编程的重要技能。Go语言将并发编程作为核心特性,通过goroutines和channels提供了一种简洁直观的并发模型。相比于传统的线程管理,Go的并发模型更加易于理解和使用,这为初学者在学习并发编程时提供了极大的便利。

通过学习Go的并发编程模型,初学者能够及早掌握现代编程中的关键概念,为后续在各种领域的发展打下坚实的基础。

3. 学习曲线与实践应用

经过Go团队不懈的努力,Go语言的安装与使用过程已经非常简单明了了,可以说开箱即用,初学者只需几步即可搭建开发环境。这种低门槛的特性让初学者可以专注于编程本身,而不必花费过多时间在环境配置上。同时,Go强大的标准库也为初学者提供了丰富的资源,使他们可以在不依赖第三方库的情况下完成许多实际项目,无需与繁芜的第三方依赖“作斗争”。此外,Go程序编译速度极快,可以快速让学员获得反馈。

注:我的极客时间专栏《Go语言第一课》专栏的“03|配好环境:选择一种最适合你的Go安装方法”有对Go环境搭建的系统全面的讲解,欢迎订阅阅读。

4. 面向未来的选择

选择第一门编程语言不仅关乎当下的学习体验,更应该着眼于未来的发展。Go在保持简洁性的同时,涵盖了现代编程的核心概念,从并发编程到网络服务,从系统编程到云原生应用,Go都能胜任。这种全面的能力使得Go成为初学者为未来编程生涯奠定基础的理想选择。

此外,Go在业界的广泛应用也为学习者提供了良好的职业前景。掌握Go的初学者可能会在未来的就业市场中占据优势,特别是在后端开发和云计算等领域。

尽管Go有许多优势,但我们也需要正视其作为第一门编程语言所面临的挑战。接下来,我们就来看看这些挑战!

5. 现实中的挑战

虽然Go语言简单易学,但现实中,无论中外,以Go为第一门编程语言的初学者数量依然不多,这是为什么呢?笔者认为主要有如下几点原因:

首先,Go虽然简单,简化了许多编程概念,但与Python、Scratch等传统的编程入门语言相比,学习曲线依旧“陡峭”,对于完全没有编程经验的初学者而言,理解指针、并发等特性仍然需要一定的努力。此外,Go主要面向后端开发,在前端开发和图形界面支持方面较为有限,对于一些喜欢更直观地通过图形化的方式看到反馈的初学者来说,Go的满足度有欠缺,这可能会影响一些初学者的学习兴趣。

其次,与Python等语言相比,Go主要面对后端开发,在数据科学和机器学习等热门领域的应用相对有限(虽然目前已经在向AI应用开发领域大踏步前进),这可能会影响一些对这些领域感兴趣的初学者的选择。对于许多初学者来说,这些看似更“酷”的应用领域可能比Go所擅长的系统编程和网络服务更具吸引力。

再次,Go在编程教育中的应用仍然相对有限。传统的计算机科学课程多年来已经确立并一直依赖于Java、Python或C++等成熟的编程语言。更新课程设置、编写新的教材、培训教师都需要时间和资源,这种惯性使得Go难以迅速进入教育体系。

最后,相比其他语言(如Java、C++等),Go团队在教育领域的推广较少,缺乏针对教育机构的专门资源和支持(这让我想起了当年Sun在校园推广Java,微软在校园推广C#等,没有对比,就没有伤害),同时由于Go语言的设计更倾向于“实战派”,并不受“学院派”青睐,因此学术界对Go语言研究也相对较少,导致在高等教育机构的推广受限。

6. 小结:平衡与选择

尽管面临这些挑战,Go语言作为第一门编程语言的潜力仍不容忽视。Go语言以其简洁性、并发特性和面向工程的实用型设计,无疑是一个极具吸引力的选择。虽然它可能不是最容易上手的语言,但它提供了一个平衡的学习体验,既不会掩盖重要的编程概念,也不会像Rust那样陡峭得令人望而却步。

同时,我们也需要认识到,没有一种编程语言能够完美满足所有学习者的需求。Go的优势在某些领域可能是无可替代的,但在其他方面可能需要补充。因此,一个更平衡的方法可能是将Go作为编程教育的重要组成部分,而不是唯一选择。比如,对于今天的初学者来说,理想的方案可能是将Go作为主要学习对象,同时辅以其他语言(如Python)来弥补在特定领域的不足。无论选择哪种语言,保持好奇心和学习的热情才是成为优秀程序员的关键。

最后,Go要实现在编程教育中扮演更重要的角色,还需要多方面的努力。Go团队和Go社区还需加强在教育领域的推广,开发更多面向初学者的资源和工具,以激励教育机构将Go纳入课程体系,特别是在教授并发编程等概念时。

如果你对Go语言感兴趣,并且希望系统地学习如何从零开始编写Go代码,我在两年多之前在极客时间开设了“Go语言第一课”的专栏。 这个专栏专为Go语言新手设计,从基础概念到实战案例,逐步带你掌握Go语言的核心知识点。无论你是编程初学者,还是希望掌握一门新语言的开发者,这个专栏都能为你提供有价值的学习资源和实践指导。

img{512x368}


Gopher部落知识星球在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时,我们也会加强代码质量和最佳实践的分享,包括如何编写简洁、可读、可测试的Go代码。此外,我们还会加强星友之间的交流和互动。欢迎大家踊跃提问,分享心得,讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落,享受coding的快乐! 欢迎大家踊跃加入!

img{512x368}
img{512x368}

Gopher Daily(Gopher每日新闻) – https://gopherdaily.tonybai.com

我的联系方式:

  • 微博(暂不可用):https://weibo.com/bigwhite20xx
  • 微博2:https://weibo.com/u/6484441286
  • 博客:https://tonybai.com
  • Gopher Daily归档 – https://github.com/bigwhite/gopherdaily
  • Gopher Daily Feed订阅 – https://gopherdaily.tonybai.com/feed

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

都2024年了,当初那个“Go,互联网时代的C语言”的预言成真了吗?

本文永久链接 – https://tonybai.com/2024/08/17/go-the-c-language-of-the-internet-era-come-true

本文最初发表于我个人的微信公众号(iamtonybai),但鉴于图片消息的篇幅受限(<=1000字),一些内容没能如愿展开,这里在博客上重新发布一下,也顺道丰富一下文章的内容。


2012年,七牛云创始人、goplus语言之父许式伟在一次演讲中给出一个大胆的预言:“Go,互联网时代的C语言”。

十余年过去了,我们不禁要问:当初的那个预言是否已经成真?

在讨论这个预言之前,我们先来看在同一份演讲稿中,老许给出的另外三个预判:

它们是:

  • Java语言份额继续下滑,最终被C和Go语言超越;
  • C语言将长居编程榜第二的位置,有望在Go取代Java前重获第一的宝座;
  • Go语言最终会取代Java位居编程榜榜首。

编程语言排行榜有很多,我们就以名气最大的TIOBE刚刚发布的2024年8月排行榜为例,看看这些预判是否成真。

很遗憾,一个也没命中

在这份最新榜单中,C位列第三、Java位列第四,Go位列第九,相对于前两个月的第七还下降了两位。不过不得不说,老许对C语言的预判还是相对准确的。

那这是否意味着老许最初的那个预言也Miss了呢?个人觉得:并没有。因为这要看从哪个角度来审视。

传统观点认为,C语言被视为系统编程语言的杰出代表,因其卓越的底层操作能力和极致性能而广受推崇。它允许开发者直接与硬件交互,提供了高效的资源管理和快速的执行速度。如果从这样的视角去看待那则预言,那显然Go与“互联网时代C语言”这个评价和地位是不相称的。虽然Go最初的定位也是一门系统编程语言

但如果我们跳出以“低级操作和性能”为中心的比较框架,而是从不同时代软件技术栈的层次与构建来看,Go与C语言的地位又极其的相似

在互联网时代到来之前,C语言已经是整个软件技术栈的基石:从操作系统内核、设备驱动程序、中间件到应用程序,C语言凭借卓越的性能、无以伦比的生态,在技术栈的各个层次都有着广泛且核心的应用。

当时针指向云原生时代时,Go语言在云原生技术栈的构建中,发挥了与C语言相似的作用

我们用一张示意图来横向对比一下:

听我讲到这里,你是不是觉得老许的那个预言好像命中了呢!

当然,从狭义的角度来看,Go与C还有一些地方是很像的,比如:语法简单、跨平台可移植性好等。并且两者还“沾亲带故”:Unix之父Ken Thompson当年和Dennis Ritchie一起发明了C语言,又和Rob Pike等一起设计了Go语言!

最后,回顾许式伟2012年的预言,我们不得不惊叹于其洞察力。Go语言确实在很大程度上成为了”互联网时代的C语言”,但不是通过传统的性能优势,而是通过重新构建了云原生技术栈,从这个角度看,Go语言也不失为云原生时代的”系统语言” —— 它不仅能够优雅地处理分布式系统的复杂性,它还使得构建和维护大规模、高可靠性的分布式系统变得更为简单,是云原生时代的思维方式和解决方案的集大成者,某种程度上还可以说定义了云原生时代的软件开发范式。


Gopher部落知识星球在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时,我们也会加强代码质量和最佳实践的分享,包括如何编写简洁、可读、可测试的Go代码。此外,我们还会加强星友之间的交流和互动。欢迎大家踊跃提问,分享心得,讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落,享受coding的快乐! 欢迎大家踊跃加入!

img{512x368}
img{512x368}

img{512x368}
img{512x368}

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻) – https://gopherdaily.tonybai.com

我的联系方式:

  • 微博(暂不可用):https://weibo.com/bigwhite20xx
  • 微博2:https://weibo.com/u/6484441286
  • 博客:tonybai.com
  • github: https://github.com/bigwhite
  • Gopher Daily归档 – https://github.com/bigwhite/gopherdaily
  • Gopher Daily Feed订阅 – https://gopherdaily.tonybai.com/feed

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats