打开网易新闻 查看精彩图片

摘要:作为一名优秀的程序员,紧跟技术潮流发展来学习新技术是提升职业生涯的一大途径。其中,编程语言是程序员的必备技能,各个语言的使用和适用性不尽相同。那么,在见识并尝试过众多编程语言后,哪种编程语言最深得人心呢?本文作者 Adam Berg 给出了他的答案:C 语言。

原文链接:https://devtails.xyz/@adam/switching-to-c-over-modern-programming-languages

声明:本文为 CSDN 翻译,未经授权,禁止转载。

作者 | Adam Berg

译者 | 弯月

出品 | CSDN(ID:CSDNnews)

尝试新的编程语言

大约一年前,我决定了解一下Rust。我阅读了相关书籍,学习了一些教程,还阅读了一些文章。后来,我决定用Rust编写我的第一个命令行应用程序。

学习一门新语言的感觉有点像尝试RPG游戏中的一个新角色。刚开始的时候,一切都令人兴奋。随着学习的不断加深,你会意识到以前在编程工作中遇到的挫败感又一次出现了。我认为,这些“挫败感”大多是因为无聊引起的。如果在玩电子游戏的时候感到无聊,完全可以重新开始。毕竟游戏的目的就是享受乐趣。然而,在软件开发中,重头开始是一件大事。我想通过本文,探讨一下我决定暂时放弃Rust(以及其他语言),并集中精力(重新)学习C的一些原因。

打开网易新闻 查看精彩图片

“原生”语言

在计算机编程中,“原生”语言指的是计算机可以理解的语言。然而,最近我在思考一个问题:我个人的“原生”编程语言是什么。

我从十几岁开始接触Java,但大多数时候都是围绕着教程打转。后来,进入大学,我的专业是工程学,大一的时候我选修了C语言。这门课的成绩呈两极分化:要么是学霸,要么是学渣。我觉得这很正常,因为你编写的程序要么能正常工作,要么就跑不通。在这门课中,我学习了编程的所有基础知识,并大致了解了计算机的工作原理。这门课的学习坚定了我的想法:我想学习编程,而且从那时起C语言就在我心里扎了根。

现如今,我掌握了(至少可以正常使用)多门编程语言:C、C#、C++、Assembly、Php、Java、Golang、Rust、Swift、ActionScript 3、JavaScript、TypeScript、Haxe 和 Python。我经常拿人类语言与计算机语言作类比。“原生语言”就好像我们的母语,母语与其他语言最大的不同在于,在说话或写作的时候,母语会自然而然地涌现。而其他语言,则需要在脑海中翻译,而且在说出来之前也需要先在脑海中打草稿。虽然我的其他语言也可以说的很流利,但终究比不上母语。

在提到C语言时,人们的第一反应是“C语言太难了”。回顾以往的经历,我却觉得JavaScript、Swift 和 Rust才是最难理解的语言。这些语言拥有很多神奇的“魔法”,因此很难搞清楚究竟怎么回事。我发现在用这些语言编写代码时,我的大脑会编写伪 C 代码,然后转译为正在使用的语言。

于是,我开始思考为什么我还要学习这些新语言。我开始使用 JavaScript 是因为它是编写Web交互式应用程序的唯一方法。后来,我开始使用 Swift,因为它是苹果提供的编写 iOS 应用程序的唯一方式。最后,我又开始学习Rust,主要是因为它很流行……

每种语言都让我学习到了很多新知识,但每种语言都让我略感酸涩。我受够了慢吞吞的JavaScript(尤其是在 Web 开发领域,我们想方设法进行各种微优化,实际上换一种语言也许立即可以将速度提升2倍)。Swift就像是一副戴着苹果logo的手铐。我不认为自己会在苹果围墙花园之外使用这门语言,而且我无法接受只能在一个平台上开发的编程语言。我原本希望Rust能够给我带来一丝欣喜。虽然我至今认为它有这种潜质,但不幸的是,我发现Rust的语法很笨拙,而且学习的时间甚至超过了实际编写代码的时间。诚然,随着经验的增加,这种情况会慢慢改善。考虑到很有可能Rust不会大火,所以我不打算花太多时间在上面。我还没有真正体验过Rust声称要解决的C/C++中的问题。这可能是因为我也没有花太多时间学习C/C++,但我认为在寻求解决方案之前,我们应该首先正确理解问题。

C 语言的编程核心

最近,我突然想起可以使用emscripten编译C语言在Web上使用。过去,我曾尝试过,但这次我想花一些时间结合C语言和SDL库,编写一个游戏《乓》的概念验证。

在成为 Web 开发人员之前,我是一名游戏开发人员,我一直认为游戏引擎的运行方式比网站更直观。我已经开始尝试使用 SDL 编写非游戏应用程序。第一次是记笔记的类似 GUI 终端的应用程序。我花了一些时间来整理想法,目前我有了一个能用的应用程序。我希望尽快编写完该应用程序。

此外,我还尝试在 iPhone 6手机上运行了相同的代码。苹果不支持在iPhone 6上编译 Swift 应用程序。在检查了SDL的兼容性后,我注意到它能够在 iOS 6 及更高版本上运行,这意味着它实际上能支持从iPhone 3GS之后所有iOS设备。经过此次尝试,我发现我完全可以不使用Swift 和 Objective-C,同时我比大多数现代“iOS 开发人员”具有更好的 iOS 兼容性。

在 Web 开发方面,我很不喜欢需要“安装”的Web 应用程序。Web应用程序实际上并不能与本地文件系统,而将服务节点、IndexedDB等组合起来,确保在离线状态下正常工作太复杂了。使用C以我熟悉和喜爱的方式读取和写入文件非常简单。C语言的应用程序本来就只能离线,在线才是后来添加的功能。

在我看来,Web 应用程序应该作为正确安装的应用程序的补充。我很有兴趣探索一下相反方向的工作是否有意义。例如用 C 语言编写桌面版的应用程序,然后确保相同的代码也能够在浏览器中运行。

我厌倦了没有互联网就无法访问应用程序。我厌倦了总是需要打开一堆浏览器的标签页。我厌倦了需要很长时间才能打开应用程序。如今,处理器的速度越来越快,但我们却找了各种理由编写更糟糕的应用程序。

总结

我感觉自己目前的状态就像是开始了一个新角色。也许将来我对C语言的看法也会和其他语言一样。但值得庆幸的是,我坚信更进一步掌握C语言更加有价值。C语言是构建其他一切的基础。也许我会发现 Rust 复杂的语法和规则是值得的。但我必须亲自尝试得出结论,而不是盲目地跟风,人云亦云。