作者 | Dave MacLeod翻译者 | Sambodhi策画 | 蔡芳芳每个开发人员都有他们的“Vill”程式设计词汇。
尽管我早在中学的这时候就笔记本电脑玩得如虎添翼,似乎或许要进入 IT 行业,但而后却历经了屡屡失败。今年,当我迈入KMH时,我终于专业委员会了程式设计。也许我的历经会让你明白:只要你想已经开始,就永远不会晚。有这时候,你只须要找到适宜他们的词汇。
1 “不想正式成为 Logo 歌星开发人员后再被派去参加赛事”我的程式设计职业生涯始自 20 世纪 80 年代时拥有的第两台笔记本电脑。那是两台叫作 ADAM 计算机系统的怪物,就是右图这种的:
这是一类个人笔记本电脑、ColecoVision 格斗游戏系统和印刷机的结合体:两个录音带机替代了磁盘驱动器 / 录音带盒、两台投影机替代了显示屏,还有两台有意思的印表机,上面有位控制器能将它变成两台完整的印刷机。许多其他 ADAM 计算机系统用户都有实际的内存模块,但这个没有,录音带会花极短时间才能读取出来。
我们刚获得它的这时候,我父亲在地窖里录了许多录音带,但我不晓得为什么会有这么多的格斗游戏。我最喜欢的这款格斗游戏叫作《Gateway to Apshai》(这款战斗电子格斗游戏),这是一类类 Rogue 的格斗游戏(地牢积极探索式电子格斗游戏)。而后他解释说,他是用 Forth 实现的。下面是他的这段话:
当他们有了 Coleco Adam 计算机系统时,它有一个 Zilog Z80 CPU,因此,布季谢过一点 Forth。不晓得你是否还记得,我从美国交付了两盘录音带(用于录音带机的),里面有几个骇客流程和两本名叫《Adam 骇客手册》(The Hackers Guide to the Adam)的书,它允许他们将 ColecoVision 的格斗游戏浏览到盲点录音带上,这种他们就获得了大量的格斗游戏。我他们并没写过任何人流程,但是录音带上的流程都附上源码,所以你能按照方法论来写。在某些情况下,我须要调整模块并重新保存,以期强化任何人须要补齐的流程。这很有意思,也很有趣。关键是他给我看了一类叫作 BASIC 的词汇,当时的我以为 BASIC 是世界上唯一的程式设计词汇。我已经开始学习尖萼程式设计词汇,并跟着读了像《绿水青山谜团》(Mystery of Silver Mountain)和《捕捉双龙象》(Hunt the Wumpus)这种的书,很快就专业委员会了如何程式设计。我已经开始根据 Steve Jackson 的《妖术!》(Sorcery!)这两本书制做我他们的小型 RPG 格斗游戏。
它们最后就像下面这段从 Wikipedia 上抄来的代码的一个较大版本,其中有许多 RAND 的掷骰子和 GOTO 调用。随着时间的推移,我不得不添加越来越细的行号(比如,在 60 行和 70 行之间添加了一个 65 行,然后是 64 行,最后当布季谢完空间就得给整段代码重新编号)。
10 INPUT “What is your name: “; U$30 INPUT “How many stars do you want: “; N40 S$ = “”50 FOR I = 1 TO N60 S$ = S$ + “*”70 NEXT I80 PRINT S$90 INPUT “Do you want more stars? “; A$100 IF LEN(A$) = 0 THEN GOTO 90110 A$ = LEFT$(A$, 1)120 IF A$ = “Y” OR A$ = “y” THEN GOTO 30130PRINT“Goodbye “; U$140 END所有这些代码都是我他们完成的。那这时候,人们还不能在网上搜索示例代码,所以大家都认为我或许要从事 IT 行业。
与此同时,他们在学校里学了一类叫作 Logo 的东西。这就没那么有意思了,你须要做的只是让一只海龟在屏幕上画出形状就行了。你能给它函数,比如 FD 90、RT 90,然后用 REPEAT 4,它就会重复四次,画出一个正方形。画一个圆会花极短的时间,因为你必须给出 REPEAT 360,看着海龟重复 360 次才能画出一个圆。所以有这时候你能作弊一下,执行 REPEAR 180,让海龟一次向右 2 度,这种计算机系统最终会绘制出几乎相同的东西,但只需进行 180 次计算即可。
为了增加趣味性,你能像下面这种做一个形状,告诉它做一个圆,然后告诉它向右转一点,然后已经开始下一个圆。
在看到 Bryan Cantrill 的这段视频之前,我几乎完全忘记了布季谢过 Logo 这件事。Cantrill 年纪跟我差不多,小这时候也学过 Logo。他们历经也很相似:对让海龟画圆这件事完全心不在焉,但他幸运地遇到了 C 词汇并真正投入到程式设计中,而我没有。这是我自身的原因。
在 20 世纪 80 年代的计算机系统课上,他们都坐在 Calgary Ranchlands 社区学校的一间没有窗户的房间里,对着笔记本电脑让海龟画圆。由于 Logo 超级容易上手,以至于我和其他几个人都觉得,它根本就不像是一门程式设计词汇。老师们注意到了这一点,就说马上要举行 Logo 竞赛了,他们应该去参加。那应该是一场全市范围的赛事,也有可能是一次省级范围的赛事。
赛事持续了两三天,他们终于在最后一天鼓捣出了一个产品,获得了评委们的认可并有望获奖。我的队友比我更投入,而我却已经开始表现出对赛事的兴趣缺乏。我觉得他们拿到第四或第五名就能了,但队友并不满意。所以当赛事结束时,我如释重负。我晓得我不想程式设计,不想赢了赛事后作为 Logo 歌星开发人员再被派去参加其他赛事。
我当时的人生目标就是让那个我中学时一直暗恋的女孩喜欢上我。还有就是在当时,人们认为会笔记本电脑的人都是书呆子。所以那这时候,我在公共场合都会和笔记本电脑保持一定的距离,来保持这种的形象:是的,我是很擅长笔记本电脑,但我并不是一个笔记本电脑爱好者或其他什么。
在看了两三天的 Logo-Proficient 赛事和他们所做的东西后,他们获得了一件 T 恤和一个瓶子作为参与奖励,这是我最后一次使用 Logo 。与此同时,我又持续用了一段时间的 BASIC ,直到 90 年代初,他们把 ADAM 计算机系统换成了 386,BASIC 就被我忘得一干二净,而我也不打算花钱买一本关于程式设计的书。
Bryan Cantrill 第一次接触 Logo 的历经是这种的:
我想布季谢过的第一类词汇是 Logo,现在回忆起来,这是一类虐童的行为,Logo 太可怕了!如果现在你去看 Wikipedia 上的 Logo 词条,你会说:“嗯,这很好,就像一类受到影响的 Lisp 方言……”但是这些都是错的。“Logo 是一只什么都不会做的海龟,我说的海龟就是指大脑袋显示屏上的一个三角形,它什么都不会做。它的魔力就像你告诉它“box”(绘制正方形),它会告诉你“I dont know how to box”。我记得三年级的这时候,计算机系统是必修课。我还记得当时那种机械、冷漠的感觉,因为这个东西不晓得如何绘制正方形,而我也不在乎你知不晓得怎么绘制正方形。我第一次接触计算机系统就是“我对这件事一点儿也不关心”。 2 Python、Ruby 还是 Lua?从 90 年代到 2000 年代这段时间,我没有做过任何人程式设计。然而,在这段时间里发生了两件至关重要的事:我成了《星际迷航:下一代》(Star Trek: The Next Generation)和《创世纪 VII》(Ultima 7)的超级粉丝。
Data 是我最喜欢的角色,因此我经常思考 Soong 博士是如何做出来 Data 的,他们须要多长时间才能达到这种的阶段。当我玩《创世纪 VII》时,我曾有过并且现在仍然有同样的感受:这个世界充满了细节,我会继续玩这个格斗游戏甚至只是为了和人们聊聊天、逛酒吧、看人们读书。
所以,这段时间是让我对程式设计再次感兴趣的重要时期。程式设计不再是关于海龟和令人沮丧的赛事,而是科幻小说、电影、奇幻格斗游戏、音乐以及其他一切我认为很酷、很有价值的一切。
那这时候,我晓得有一类叫作 C++ 的程式设计词汇是用来开发格斗游戏的,也许有一天我能用它做出一个长得像 Android 机器人那样的 Data 和《创世纪 VII》那样的格斗游戏。这让我对 C++ 产生了一定的崇拜,但我已经和程式设计无缘了。
我从加拿大搬到了日本,然后移居韩国。有一天,我遇到了一位来自多伦多的韩裔加拿大人,他在韩国当开发人员。作为一名韩裔,他能在没有严格的雇主允许让他保持签证的情况下从事自由职业,只需整天坐在星巴克用两种词汇进行程式设计:PHP 和 Python。我晓得 PHP 这个名字,一直以为它只是一个电子公告板的名字。他跟我说应该试一试,因为能很快学到新技能,也会对我的职业职业生涯有帮助。
他向我推荐了 Python,说应该先从尖萼词汇已经开始。初次使用 Python 非常迷茫,只有一些小小的成功。我记得我读过关于 Python 2 和 Python 3 的帖子,这些帖子都是说 Python 2 如何更好,Python 3 如何强迫每个人接受的。不管这意味着什么,我注意到一些熟悉的东西,比如 print,但熟悉的 $ 却不见了,也没有任何人行号或 GOTO。在没有主函数的情况下,我设法将一些东西放在一起,但我真的不晓得,一个流程没有行号和其他类似有用的东西该如何从头到尾运行。
那这时候的互联网已经开始普及,人们在网上会对一类词汇与另一类词汇进行比较和讨论。我注意到一类叫作 Ruby 的词汇更像我的风格,所以我尝试了一下。然后我又看到一类叫作 Lua 的词汇,感觉它好像就是为我做的。我不晓得如何使用,但我就相信 Lua 是我想要的。我认为 Lua 是最容易学习的程式设计词汇,如果我能学好尖萼词汇,就能专业委员会所有其他程式设计词汇。
几个月后,我在星巴克又遇到了那个韩裔加拿大人,他问我 Python 学得怎么样了。我告诉他,我觉得 Lua 应该是适宜我的程式设计词汇,但我说不出理由,显然我还没有掌握如何写代码。他最后评论说:“嗯,也许你没有程式设计基因。”
不知为何,我却固执己见地认为他们有这方面的基因。我中学的这时候就自学了 BASIC,我晓得我有这个天赋。我只是须要真正喜欢上 Lua 并学好它……或者我应该学习 JavaScript?但大家都说你应该先学 Python,虽然我确实更喜欢 Ruby……结果我一直没完没了地纠结着,直到我再一次失去了兴趣。
最后,我又回到加拿大生活了几年,程式设计根本不在我的考虑范围内。2011 年到 2015 年期间,唯一与程式设计有关的事情只有一次,就是听说隔壁办公楼里都是写 C++ 的人,他们为管道和其他能源项目定制 SAP,赚钱许多。
340 岁,第一次专业委员会程式设计2015 年,油价崩盘,Calagary 经济也随之崩盘,他们整个团队也解散了。拿到了丰厚的裁员补偿后,我决定已经开始真正学习编写代码。
我专业委员会了如何编写函数,如何创建对象等等,但是 self 关键字仍然让人困惑,使用对象也是如此。再努力点就足以解决这些问题了,但我的老毛病又犯了:
“Python 在制做格斗游戏方面很糟糕——它不会让你做出任何人像《创世纪 VII》这种的东西。
“为什么不去试试 C++?不,那太难了!C# 怎么样?让他们试试吧。”
“哇,这真是太复杂了。尽管如此,C# 看起来是个不错的选择!等等,这是什么?F#?尖萼词汇真的很酷。为什么所有的词汇都不是这种的呢?”
“F# 太棒了!为什么就没有更多的人使用它呢?也许我应该好好学完 Python……”
“那就 Python 吧,又简单又好用!除非是 JavaScript。这种我就能在浏览器上做任何人事情了。也许我能从一些基于浏览器的格斗游戏已经开始?是这时候试一试了……”
而后,裁员补偿的钱快用光了,必须重新找工作了。找到工作后,我去市区和以前的同事们聚餐。那时遇到了我的一个 90 年代中期后就没见过的老朋友,他在财务部门工作,问我在做什么工作,我告诉他我找到了一份新工作,下周已经开始上班。“哦,我敢打赌是程式设计工作对不对!你一直都很擅长程式设计。”他说。我回答说:“哦,不是程式设计……我已经很久没有真正做过这些事了。是做项目控制方面的。”
我对这次谈话记忆犹新,因为这让我思考为什么我从来没有学过程式设计,而且无论从哪个角度来看,我年轻的这时候似乎就或许要学程式设计。不过我当时忙于其他事情,没有再去尝试程式设计。
我在 2018 年回到韩国。第二年八月,我给当时工作的公司提出了辞呈,那这时候我是一名文案。离正式辞职还有一个月的时间,我已经开始考虑学门技术,也许这次真的要好好学习 Python 了。我能每天花上几个小时,到最后一天就会掌握得很好,然后再花上一个月左右的时间去找工作。这种做了几天后,我的老毛病又犯了。“好吧,你能稍微看一下其他词汇,”我自言自语地说,“但你必须把 Python 作为重点。”
那是我第一次尝试 Rust 。我听说它确实很精确和高效,但很难学,喜欢它的人会赞不绝口。我是在《X 分钟速成 Y》(Learn X in Y Minutes)(翻译者注:GitHub 上的一个项目,包括了许多的简短的入门教程,比如算法、程式设计词汇、开发工具等)和《Rust 词汇游乐场》(the Rust playground)已经开始学习 Rust 的。
我已经开始学习 Rust 的这时候,查了一下尖萼词汇的用途,答案无一例外是,它几乎什么都能做。所以我能做出《创世纪 VII》这种的东西,或者任何人我想要的东西。更有意思的是,词汇的细节和词汇的底层东西并没有让我感到厌烦:我发现他们被吸引得更多了。随着我对尖萼词汇的深入了解,我有了许多怀旧之情。
我写的所有东西都被直接转换成二进制文件,我又能看到计算机系统的内部结构了。大量的 Rust 讨论都是关于如何强化代码的,我觉得这很有吸引力。但尖萼词汇很高级也很安全,如果我全身心地投入,它几乎能使任何人事情正式成为可能(至少在一类词汇能做到这一点的范围内)——这就是为什么我的老毛病完全消失了。
谁晓得这种代码会获得成功呢!
《Rust 程式设计》(Programming Rust)这两本书对我来说,刚已经开始读的这时候太难了(一方面对 C++ 和 C 的内容引用太多了),所以我是看了其他书后才回到这两本书上,并最后喜欢上了它。
不过,对我帮助最大的是流媒体视频。第一个是 Javascript 开发者 Brooks Builds 制做的 70 多个视频,他把他们看 Rust Book 的每一步都录了下来。看着别人努力学习一门你也在学习的词汇,会让你有种在精神上参与的感觉,这是其他类型的流媒体做不到的。“是 mit einer deutschen Familie,不是 mit einem deutsche Familie!”或者“只要用 into_iter() 就能编译了!”等等这些时刻,你会觉得他们真的是在和别人一起学习(事实上你确实是在学习)。
从那以后我已经开始看 Brian Myers,他基本也是靠必应(bing.com)搜索学习 Rust 。Jon Gjengset 我留到了最后看的(这是在 《Crust of Rust》教更简单的东西之前),同时也看了 Hello Rust、Ryan Levick、Doug Milford、Tensor Programming、this Rust crash course、dcode 的 Rust 视频等所有的视频(不是全部按顺序排列的)。还有一个我喜欢的视频流就是 rhymu8354,他是一个 25 岁的 C++ 爱好者,他们做了一个类似《创世纪 V》的格斗游戏,最近已经开始学 Rust。
半年后,我发现我有生以来第一次正确地专业委员会了程式设计。然而并没有什么秘诀:真的是单一的专注和勤用必应搜索的结果。
由于只有一个 Surface Go 笔记本,我一定要避开任何人有太多外挂的东西。但我做了一些东西,比如朝鲜汉字转换器(朝鲜汉字就是韩国使用的汉字),效果很好,最后我还整理了两本名叫《用简单的英语学习 Rust》(Learn Rust with easy English)的教材,目的是为了让那些英语二级水平的使用者更容易学习尖萼词汇,而不必用翻译成他们国家词汇的 Rust 相关书籍。
这个故事的寓意我想就是经典的“找到他们喜欢的事情,然后一直做下去”。这对我来说并不新鲜,只是我花了那么长时间才找到适合他们的词汇。它让其他词汇变得如此易读易懂,包括 C 和 C++。
我想说明两点:一、见异思迁和缺乏专注不一定是永远的;二、每个人性格不同,最简单的词汇不一定是你最喜欢的词汇。
Reddit 网站上的 /R/LanguageLearning 等版块上经常有这种的讨论:“我真的很想学(著名的 X 词汇),但我是否应该继续学更简单的西班牙语 / 法语等,尽管我讨厌它?”答案当然是否定的——只需学习你想学的词汇就行了。这种建议更容易给出,因为自然词汇并不像程式设计词汇那样与职业发展紧密相连。但是由于程式设计词汇也有许多后继的东西,同样的建议也许是能适用的。
Rust 肯定不是那种为了正式成为大团队中的初级开发人员而学习的词汇,更不用是在 40 岁年纪的这时候。但是,如果你是那种对程式设计屡屡三番捡起后放下的人,也许找到合适的程式设计词汇会让你坚持下去。
作者介绍:
Dave MacLeod,加拿大人,居住韩国首尔。职业翻译,精通韩文、日文、德文、法文、英文。业余 Rust 开发人员。
原文链接:
https://github.com/Dhghomon/programming_at_40/blob/master/README.md
活动推荐微软 OG 白皮书来啦!“Azure 混合云技术” + “混合权益” 一次搞定!让你节省最高 42% 的上云成本,最大化投资价值!不仅如此,还有 Windows Server 最新产品介绍,SQL Server 十大亮点,AHUB(Azure 混合权益) 问答,云上安全等重磅干货。还在等什么?扫码或浏览👇