从 12 岁开始,他用 25 年时间掌握了 30 门编程语言……

点击上方“图灵人工智能”,选择“星标”公众号

您想知道的人工智能干货,第一时间送达

【导读】身为程序员的你,掌握一门编程语言需要多久?踏入编程世界后,你又学过了多少种编程语言?本文作者从 12 岁接触编码,之后 25 年间共掌握了 30 门编程语言。看看他是如何做到的,以及有什么建议可以给到更多程序员。

作者 | Jan Kammerath 译者 | 郑丽媛

我的编程之旅始于 1997 年,至今已超过 25 年,甚至我制作的第一个程序都是在 Windows 95 和 Windows 98 上运行的——要知道,当时我才 12 岁。在那个年代,很多孩子都是从这个年龄开始学编程的,而我学的第一门编程语言,是父母送给我的礼物:来自 LCSI 的 MicroWorlds 中的 LOGO 语言(美国麻省理工学院 AI 实验室专为孩子设计的,一种易学、易懂、易于掌握的结构化程序设计语言)。

当我熟练掌握了 Logo 和小型 MicroWorlds 环境后,我就开始学习 Visual Basic 了,原因很简单:我有能力学它,并且可以在 Microsoft Office 中轻松将其用作游乐场。因此某种程度上来说,Visual Basic 6 是我接触的第一门真正的编程语言。

早期 Web 开发

在上世纪 90 年代末,互联网是最前沿的技术,因此 Web 开发是每个人都想学习的东西,所以我很早就买了一本《Sierra Web Artist》来建立自己的网站。虽然我以前学过一些 HTML 3,但实际上接触 HTML 4 后才是我第一次构建复杂的网页。通过一个局域网派对上认识的朋友,我很早就接触到了 CSS,JavaScript 我也很喜欢,与其说它是一种语言,不如说它为网页带来了无限可能。

跟很多同龄人一样,我花了很多时间让我写的 JavaScript 代码在 Internet Explorer 4 和 Netscape Navigator 4 上运行。就个人偏好而言,我一直都选择 Navigator,这也许是我坚持使用 Firefox 的原因:首先在我看来,Firefox 是最好的浏览器;其次,它总会让我想起 Netscape Navigator。

Dreamweaver 是构建 Web 应用程序的首选解决方案,专业人士使用 UltraDev

服务器端使用 ASP 和 PHP

一般而言,你开始学习第一门编程语言后往往会坚持很长一段时间。当我开始编程时,一切都是全新和未知的,掌握至少一门编程语言(如 Visual Basic)会让我感到些许安慰。我在 Web 开发中使用的第一套服务器端代码,是在 IIS 上用 VB6 和 Microsoft ASP 编写的。由于在当时这是一种昂贵的技术,所以我挑战自学 PHP。

我自学 PHP 不仅是为了 Web 开发,也为了我非常喜欢的 SUSE Linux 7.2——大约在 2001 年,我开始深入研究 Linux 后,SUSE 成了我的日常驱动程序。有经验的人应该能知道,当你刚从 Visual Basic 世界出来的时候,学习 PHP 就相对容易。虽然第二门语言不像第一门语言那么难学,因为你已经知道了数据类型和编程的基础知识,但它的学习曲线还是很陡峭的——尤其是,当时我只有 17 岁。

你可能会问:我之前不是提到过 JavaScript 吗?别忘了,JavaScript 早期的功能极其有限,速度慢得令人痛苦,而且只能在浏览器中运行。当时在我看来,它只是一种脚本语言,可以让网站更具交互性或更花哨,所以那时我并没有把 JavaScript 当作一门正经的编程语言。

在 Visual Studio 中构建 Web 应用程序、桌面和服务器端代码

教育让我接触到了 C、C++ 和 C#

17 岁时,我通过德国的双轨制职业教育开始了我的第一份工作。那是 2002 年,发生了两件大事:微软发布了 .NET 框架,并建议从 Visual Basic 迁移到 C#。其次,我的专业教育课程包括 C 和 C++——不是现代的 C,而是经典的 C,没有任何字符串库和其他有用的东西。

我没有办法绕过这条学习曲线,它很陡峭,因此一开始我很讨厌 C 和 C++。.NET 框架、C#、C 和 C++ 让我感觉自己完全不懂编程,在刚开始接触时,我觉得自己就像个白痴。不过,如果你像我一样年轻,你就不会像长大后那样质疑自己。我刚开始学 C#、C 和 C++ 时,确实写过一些很烂的 C 代码,但也没受到什么惩罚。

Borland C++ 2.0 on DOS 让我开始接触 C 语言编程

让我真正喜欢上 C 语言的是 Linux。在 Windows 上使用 C 语言感觉有些无用,因为 C# 往往是更好的选择。然而,在 Linux 上,C 和 C++ 有自己的主场。为了能够正确应用 C 和 C++ 解决任何问题,我花了 5 年多的时间学习和应用这门语言。

学习 C 语言后,感觉一切都一样

当我熟练掌握 C 语言后,一切都开始变得千篇一律,主要是因为所有的东西都是用 C 或 C++ 编写的:PHP 本身是用 C 编写的,Windows 和 Linux 系统的大部分库是用 C 编写的,.NET 框架也是用 C 编写的。

学会 C 语言后,我很快就学会了大量编程语言,包括 Flash 的 ActionScript、Mac 的 AppleScript 以及一些 Delphi(当时我需要维护一个 Delphi 项目)。后来当 WAP 在诺基亚 7110 上大行其道时,我还学习了 WML 和 WMLScript。

随着第一个 Xcode 版本的到来,我开始学习 Objective C,这是第一门我在学习时感觉非常困难的语言。老实说,我从未与 Objective C 成为朋友,后来当苹果发布 Swift 和 SwiftUI 时,我超级兴奋,毕竟我从未理解过 Storyboard 这种 UI 开发方法。

如今,我个人最喜欢的 10 种编程语言是 Swift、Go、C、JavaScript、C++、CMake、SQL、Java、C# 和 Scratch,其中 Scratch 非常适合儿童来学习编程。

我认为一个有序排列的个人编程书库非常有用

我是如何学习编程语言的?

在早期学习编程的过程中,我有过很多尝试,但事后看来,我试错太多了。有两件事对我来说是行不通的:一是全身心扎进去,比如边走边学,二是一开始就只读理论书籍。我从过去到现在都是一个自学者,对我个人来说,最好的做法是将实际应用和理论相结合。我喜欢通过书本学习,因为书本可以给我提供一个结构化的学习方法,但它们无法取代实际应用。

尽管我只用了 2-3 天就学会了 Go,但我还是买了两本关于这门语言的书,这两本书帮我理解了并发性以及该语言的基本原理和设计决策。至于 JavaScript,到目前为止我还没看过任何一本书,主要是使用在线参考手册和网站教程——这是因为,我和 JavaScript 是一起成长的。

对于像我这样的自学者来说,动手实践和照着书本学习是掌握一门语言最快的方法。不过需要强调的是,学习的过程具体还是取决于作为软件工程师的经验。

对编程有益的知识

编程语言只是为计算机及其操作系统构建应用程序的工具。了解计算机体系结构、计算机的工作原理、网络工作原理(主要是 TCP/IP、IPv4、IPv6、HTTP)以及用 Wireshark 在数据包层面跟踪 HTTP 请求的能力,将有助于你了解自己在做什么。

阅读文档和参考手册也有很大帮助,我为 Linux、Windows、BSD、Macintosh System 6-9、macOS、Pocket PC、Windows Mobile、PalmOS、iOS、iPadOS、tvOS、watchOS、Android、Tizen TV、OpenWRT、Arduino、ARM Mbed 等平台写过软件,了解操作系统的工作原理,有助于你理解它们的范式和代码的实际作用。

在 Linux 上用 C、Rust 或 Go 编写一个具有网络功能的系统守护进程,会让你对计算机和网络有更多的了解。对我来说,这些知识是我学到的最有用的东西,原因很简单:如今几乎所有的东西都在 Linux 或 BSD 上联网,你的 iPhone 是,你的三星电视是,你的网络路由器也是。

Arduino 对于学习与计算相关的电子学非常有用

SQL 本身就是一个奇妙的存在

SQL 则完全不同,知道如何编写嵌套 SELECT 语句并不意味着你就了解 SQL。我学过我非常喜欢的 MySQL、微软的 T-SQL 和 PL/SQL,还曾在 MySQL、MSSQL、Oracle 和大量其他数据库管理系统上为存储过程、函数、触发器和视图编写了数千行代码。

可以说,学习应用 SQL 不仅仅是将 SQL 作为一种查询语言,它还涉及到关系数据库管理系统的正确设计和使用:例如不允许系统外的应用程序直接操作表的范例,存储过程、函数和触发器与外界隔离底层表的设计模式,以及许多与 SQL 本身并无太大关系的其他概念。我一直认为,与其说是学习 SQL 语言,不如说是学习关系数据库。

10 到 20 年前,如果你想找一份高薪的软件工程师工作,就必须熟练掌握 SQL,并对其充满信心。后来随着许多替代方案的兴起,情况可能不再是这样了。不过,我也看到了很多人由于专注于关系数据库和 SQL,从而获得了很好的职业发展。

SQL 不仅仅涉及编程查询

我有 10 多年没有用过的编程语言

当一个人学习那么多种编程语言时,总有会忘记一些,这很正常。以下是我已经 10 多年来没用过的编程语言:Objective C、Visual Basic、Delphi、Perl、ActionScript、Logo、OpenScript、WMLScript。

随着时间的流逝,这些语言会逐渐消失在你的日常编程中,因为你不再需要它们了。当我 10 年没写过 Delphi 再重新接触它时,我虽然还能记得它的很多方面,但老实说,感觉就像要重新学一遍。至于 WMLScript 和 ActionScript 这种已经一去不复返的语言,我就把它们忘得一干二净了:如果我看到 WMLScript,我可能还记得它,但如果手头没有参考资料和书籍,我根本就写不出来。

我不再使用的开发环境

我日常用的驱动是 VSCode、Xcode 和 vim,其中我非常喜欢 Xcode,感觉它就是我想要的编程方式。对于一个多语言程序员来说,VSCode 在我看来就是一个魔法的存在,因为我可以有一个舒适的世界来完成我需要和想要做的大部分编程工作。另外还有一些集成开发环境我已经不再使用,但也曾在其中度过了大半生。

  • Microsoft Visual Studio 6
  • Microsoft Visual C++
  • Borland C++ Builder 5
  • Borland C++ 2.0
  • Borland Delphi
  • ThinkC 和 MPW
  • CodeWarrior
  • Dreamweaver UltraDev

这些集成开发环境都很有趣,我也花了很多时间使用它们。不过,当新的编程语言和运行时出现时,新的工具也会随之出现。每种工具都有适合使用的时候,也有需要更换的时候。例如随着 Mac OSX 的到来,所有 System 9 工具都在一夜之间消亡了。

不要迷恋这些集成开发环境,因为你永远不知道它们还能存活多久。但是,学习 vim 的基础知识永远不会错。

你说 30 种编程语言?

文章标题提到我已经学会了 30 种语言,而我所说的学会,是指我用它们编写了一定数量的代码,发布并部署了应用程序。

以下是这些语言的完整列表,按字母顺序排列:ActionScript、Arduino、Assembly、Bash、C、C#、C++、CMake、COBOL、ColdFusion、Dart、Delphi、Go、Java、JavaScript、Logo、Objective-C、OpenScript、Perl、PHP、PL/SQL、PowerShell、Scratch、SQL、Swift、T-SQL、TypeScript、Visual Basic .NET、Visual Basic Classic 和 WMLScript。

可能还有一些语言我忘记了,因为我还学过很多小脚本语言,用了几周就忘了,所以可能不止 30 种。但是,这个数字并不重要——会多少种语言并不重要,重要的是你能用它们来做什么。

学习编程中,一定要重视的心理因素

对于多数程序员来说,错误和失误是日常经历,因此我们可能经常感觉自己很笨。然而计算机世界如此广阔,你不可能无所不知。在 20 世纪 80 年代中期,那时的计算机相对简单,但即使在那个时期,从芯片设计到应用用户界面设计,也不可能有人能全面掌握。人脑根本不可能存储所有这些信息,不要对自己太苛刻。

你需要享受计算机带来的乐趣

我强烈推荐《Just For Fun》这本书,它是 Linus Torvalds 的传记。除了讲述他如何创建 Linux 之外,书中还介绍了他的许多个人生活经历——了解 Linus 的经历可以让你明白,你并不孤单,我们都经历过编程的起起伏伏。

对我来说,Linus 是目前世界上最顶尖的软件工程师和程序员之一,他值得我们追随并向他学习。他编写了我们这个时代最流行、最主流的操作系统,甚至现在仍在负责维护它,是我想要仰望的人。

在你最喜欢的领域进行编程

当接触了许多不同的编程语言后,你会发现自己最感兴趣的领域。对我来说,那是移动计算领域。我喜欢移动应用程序、移动网站和可以装在口袋里的计算机,因此我不仅喜欢为掌上电脑和安卓系统编程,也喜欢为苹果生态系统编程。

我最喜欢给智能手机编写量身定制的移动网络应用,但你可能不是。每个人都有不同的兴趣爱好,我个人的建议是:跟着自己的兴奋点走,这样即使身处残酷的编程过程中,你也会乐在其中。

别太紧张,记得放轻松

编程语言已有 100 多年的历史,汇编语言更是将在 2049 年迎来它的百岁生日。在 Konrad Zuse 于 1938 年发明 Zuse Z1 之后的几十年里,计算机领域发生了许多演变。了解基础知识当然有帮助,但你不需要成为万事通,也不可能成为万事通,因为我们的大脑做不到。

我过去对自己很苛刻,认为一定要学习最热门的新事物。例如,为了能制作 Flash 应用程序,我严格要求自己必须学会 ActionScript,但实际上我根本一点都不喜欢。当年我喜欢用的是 Dreamweaverf 和 Fireworks,就像今天我喜欢用 VSCode、XCode、vim、Photoshop 和 Illustrator 一样。

所以我想说:去学你喜欢做的事情,不要对自己太苛刻;要有条理地学习,不要急于求成。你可以慢慢获取一些非常好的学习材料,比如书本和视频课程。说起来我真希望以前就有这些视频课程,因为我非常喜欢躺在沙发上看电视上的编程课程。

编程应该是一件有趣的事情,如果你觉得它不好玩,那就换个方式来学,可以尝试不同的领域(如系统应用而非网络应用)或不同的问题来解决挑战(如技术挑战而非算法挑战)。个人而言,相较于解决算法难题,我更喜欢解决技术难题。

当然,并不是所有程序员都一样,每个人都有不同的喜好。只要记住一句话:编写你喜欢的程序,去学习你喜欢做的事。

原文链接:https://medium.com/@jankammerath/i-learned-30-programming-languages-in-25-years-heres-what-to-expect-08ce2ac9d80b

版权声明

转自CSDN,版权属于原作者,仅用于学术分享

文章精选:

  1. 图灵和冯·诺依曼的遗产:生命计算机的架构
  2. 开源语言大模型演进史:高质量基础模型竞赛
  3. Open AI首席科学家:ChatGPT可能已经有了意识,AI将万世不朽
  4. 大语言模型真能“理解”语言吗?
  5. 李航:关于大模型的思考及研究热点
  6. OpenAI首席科学家:通向无监督学习之路
  7. Nature 封面:AI 改变科学的多种方式,无论是好是坏
  8. 智能计算领域10个重大科学问题
  9. 中国发表第一篇计算机顶会的人都怎么样了?中国ACL、AAAI、CVPR第一人是谁
  10. AI智能超越人类终破解!李飞飞高徒新作破圈,5万个合成数据碾压人类示例,备咖啡动作超丝滑