当我的能力超出了MicroWorlds时,我开始尝试使用 Visual Basic。原因很简单:我可以使用它来解决问题,可以在 Microsoft Office 中轻松玩耍,就像游乐场一样。
Visual Basic 6 是我接触的第一门真正的编程语言。
从最早的 Web 开发开始
互联网的出现是人类伟大的创新,它流行在 90 年代后期。在那个年代, Web 开发是每个人都想学习的东西。
我很早就给自己买了一份Sierra Web Artist,用来建立自己的个人网站。虽然我做过一些 HTML 3,但实际上 HTML 4 才是我第一次能构建更复杂的网页。我很早就学会了CSS,当时一个在 LAN 聚会上的人(当时的Web是一回事)让我进入了CSS的神奇世界。
JavaScript 也总是让我兴奋不已。与其说它是一种语言,不如说是因为它为网页交互和体验提供了很多可能性。
像许多同龄人一样,我花费了不少时间让 JavaScript 代码在 Internet Explorer 4 和 Netscape Navigator 4 中能正常工作。
我个人的偏好始终是Netscape Navigator,也许这是我现在仍然坚持使用 Firefox 的原因。在我看来,Firefox首先是最好的浏览器,其次它每天都让我想起Netscape Navigator。
开始用服务器端的 ASP 和 PHP
开始使用的第一个严肃的编程语言往往需要坚持很长一段时间。
当我开始编程时,一切都是新的与未知的。至少知道一种编程语言(如 Visual Basic)的舒适感给我的心理带来了很多安慰。这就是为什么我在 Web 开发中的第一个服务器端代码是在 VB6 中使用 IIS 上的 微软 ASP 技术。
由于ASP在当时这是一种昂贵的技术,所以我挑战自学 PHP。
我自学 PHP 不仅是为了 Web 开发,另外我也喜欢的Linux SUSE 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 代码,但也没受到什么惩罚。
DOS版本的Borland C++ 2.0 让我开始接触 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 和Oracle PL/SQL,还曾在 MySQL、MSSQL、Oracle 和其他数据库管理系统上为存储过程、函数、触发器和视图编写了数千行代码。
可以说,学习应用 SQL 不仅是将 SQL 作为一种查询语言,它还涉及到关系数据库管理系统的正确设计和使用:例如不允许系统外的应用程序直接操作表的范例,存储过程、函数和触发器与外界隔离底层表的设计模式,以及许多与 SQL 本身并无太大关系的概念。
我一直认为,与其说是学习 SQL 语言,不如说是学习关系数据库。
10 年前,如果你想找一份高薪的软件工程师工作,就必须熟练掌握 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》这本书,它是Linux创始人 Linus Torvalds 的传记。除了讲述他如何创建 Linux 之外,书中还介绍了他的许多个人生活经历。了解 Linus 的经历可以让你明白,你并不孤单,我们都经历过编程的起起伏伏。
Just for fun书的封面
对我来说,Linus 是目前世界上最顶尖的软件工程师和程序员之一,他值得我们追随并向他学习。他编写了我们这个时代最流行、最主流的操作系统,甚至现在仍在负责维护它,他是我想要仰望的人。
在你最喜欢的领域进行编程
当接触了许多不同的编程语言后,你会发现自己最感兴趣的领域。对我来说,那是移动计算领域。我喜欢移动应用程序、移动端网站和可以装在口袋里的计算机,因此我不仅喜欢为掌上电脑和安卓系统编程,也喜欢为苹果生态系统编程。
我最喜欢给智能手机编写量身定制的移动网络应用,但你可能不是。每个人都有不同的兴趣爱好,我个人的建议是:跟着自己的兴奋点走,这样即使身处残酷的编程过程中,你也会乐在其中。
别太紧张,记得放松
编程语言已有 100 多年的历史,汇编语言更是将在 2049 年迎来它的百岁生日。
在 Konrad Zuse 于 1938 年发明 Zuse Z1 之后的几十年里,计算机领域发生了许多演变。了解基础知识当然有帮助,但你并不需要成为万事通,也不可能成为万事通,因为我们的大脑做不到。
我过去对自己很苛刻,认为一定要学习最热门的新事物。例如,为了能制作 Flash 应用程序,我严格要求自己必须学会 ActionScript,但实际上我根本一点都不喜欢。当年我喜欢用的是 Dreamweaverf 和 Fireworks,就像今天我喜欢用 VSCode、XCode、vim、Photoshop 和 Illustrator 一样。
所以我想说:去学你喜欢做的事情,不要对自己太苛刻;要有条理地学习,不要急于求成。你可以慢慢获取一些非常好的学习材料,比如书本和视频课程。说起来我真希望以前就有这些视频课程,因为我非常喜欢躺在沙发上看电视上的编程课程。
编程应该是一件有趣的事情,如果你觉得它不好玩,那就换个方式来学,可以尝试不同的领域(如系统应用而非Web应用)或不同的问题来解决挑战(如技术挑战而非算法挑战)。从我个人而言,相较于解决算法难题,我更喜欢解决技术难题。
当然,并不是所有程序员都一样,每个人都有不同的喜好。但是,请你记住一句话:“编写你喜欢的程序,学习做你喜欢做的事”。
作者:万能的大雄
参考:
https://medium.com/@jankammerath/i-learned-30-programming-languages-in-25-years-heres-what-to-expect-08ce2ac9d80b