作者|戴夫·麦克劳德
译者| Sambodhi
策划|蔡芳芳
每个程序员都有自己“真正的命运”编程语言。
虽然我早在小学就玩电脑如鱼得水,似乎注定要进入IT行业,但后来经历了一次次的失败。这一年,四十多岁的我终于学会了编程。也许我的经历会让你明白,只要你想开始,什么时候都不晚。有时候,你只需要找到适合自己的语言。
“不想成为 Logo 明星程序员后再被派去参加比赛”我的编程生涯始于20世纪80年代我的第一台电脑。那是一个叫亚当电脑的怪物,就像下图:
这是个人电脑、ColecoVision游戏系统和打字机的混合体:两个磁带驱动器代替了磁盘驱动器/盒式磁带,一台电视代替了显示器,还有一台有趣的打印机,它带有一个开关,可以把它变成一台完整的打字机。许多其他ADAM计算机用户都有真正的磁盘驱动器,但这台没有。加载磁带需要很长时间。
我们刚拿到的时候,父亲在地下室录了很多磁带,但不知道为什么会有这么多游戏。我最喜欢的游戏是《阿普谢之门》(一款格斗类电子游戏),这是一款类似流氓的游戏(探索迷宫类电子游戏)。后来他解释说是用Forth实现的。以下是他的原话:
当我们有Coleco Adam计算机时,它有一个Zilog Z80 CPU,所以我用了一点Forth。我不知道你是否记得,我从美国订购了一盘磁带(用于磁带机),里面有几个黑客程序和一本名为《亚当黑客指南》的书。它允许我们将ColecoVision的游戏下载到空白带,所以我们得到了很多游戏。我自己没写过什么程序,但是磁带上所有的程序都附有源代码,你可以按逻辑写。在某些情况下,我需要调整参数并再次保存,以便优化任何需要破解的程序。很好玩,也很好玩。
关键是他给我看了一种叫BASIC的语言。当时我以为BASIC是世界上唯一的编程语言。我开始学习这种编程语言,之后又看了《银山之谜》《猎巫人》(Hunt the Wumpus)之类的书,很快就学会了编程。我是根据史蒂夫·杰克逊的巫术开始的!》(巫术!)这本书是我自己做的迷你RPG游戏。
最后,它们就像是下面这段从维基百科复制过来的代码的更大版本,其中有很多RAND dice和GOTO调用。随着时间的推移,我要加的行号越来越多(比如我在60行和70行之间加了65行,然后是64行,最后用完空,就要对整个代码重新编号)。
这些代码都是我自己做的。当时人们在网上搜索不到样本代码,所以大家都觉得我注定要从事IT行业。
同时,我们在学校学了一个叫Logo的东西。没那么有趣。你需要做的就是让一只乌龟在屏幕上画一个形状。你可以给它函数,比如FD 90,RT 90,然后重复4次,它会重复4次画出一个正方形。画圆要花很长时间,因为你要给重复360,看乌龟重复360次,才能画圆。所以有时候可以作弊,执行REPEAR 180,让乌龟一次向右转2度,这样计算机最终会画出几乎一样的东西,而只需要做180的计算。
为了增加趣味性,你可以做一个这样的形状,告诉它做一个圈,然后告诉它向右转一点,然后开始下一个圈。
在我看到布莱恩·坎特里尔的这个视频之前,我几乎完全忘记我用了Logo。Cantrill和我差不多大,小时候学过Logo。我们的经历差不多:让乌龟画圈我完全心不在焉,但他很幸运的遇到了C语言,真正投入到编程中,而我没有。这是我自己的原因。
上世纪80年代的计算机课,我们都坐在卡尔加里牧场社区学校一个没有窗户的房间里,让乌龟在电脑前画一个圆。Logo太容易使用了,以至于其他几个人和我都觉得它一点都不像编程语言。老师们注意到了这一点,他们说标志大赛马上就要举行了,我们应该参加。应该是全市比赛,也可能是全省比赛。
比赛持续了两三天,最后一天我们终于粗制滥造出了一个产品,得到了评委的认可,有望获奖。我的队友比我更投入,但我开始对游戏缺乏兴趣。我认为我们只能获得第四或第五名,但我们的队友并不满意。所以比赛结束的时候,我就放心了。我知道我不想编程,也不想在比赛中获胜后被派去其他比赛做Logo明星程序员。
我当时的人生目标就是让我小学就暗恋的那个女生喜欢上我。还有,那时候大家都觉得懂电脑的都是书呆子。所以当时我在公开场合和电脑保持一定的距离,以维持这个形象:是的,我擅长电脑,但我不是电脑爱好者或者别的什么。
看了两三天精通Logo大赛和他们的所作所为,我们得到了一件t恤和一个瓶子作为参与的奖励。这是我最后一次使用Logo。与此同时,我继续使用BASIC一段时间。直到90年代初,我们把亚当电脑换成了386,BASIC就被我彻底遗忘了,也不打算花钱买一本关于编程的书了。
布莱恩·坎特里尔第一次接触Logo是这样的:
我想我用的第一种语言是Logo。现在回想起来,这是一种虐待儿童的行为。Logo太可怕了!现在,如果你看维基百科上的Logo条目,你会说,“嗯,这个很好,就像一个受影响的Lisp方言……”但这些都是错的。“Logo是一只什么都不会的乌龟。我说的乌龟,是指显示器上一个大头的三角形。它什么也做不了。它的魔力就像告诉它“盒子”(画一个正方形),它会告诉你“我不& # 39;我不知道如何拳击.
记得初三的时候,计算机是必修课。我还记得当时那种机械冷漠的感觉,因为这东西不知道怎么画正方形,我也不管你会不会画正方形。我第一次接触电脑是“我一点都不关心这个事情”。
Python、Ruby 还是 Lua?从90年代到2000年代,我没有做过任何编程。然而,在这段时间里,发生了两件至关重要的事情:我成为了《星际迷航:下一代》和《创世纪7》的超级粉丝。
数据是我最喜欢的角色,所以我经常想宋博士是怎么做数据的,我们要多久才能达到这个阶段。玩《创世纪七》的时候,我曾经有过,现在仍然有同样的感觉:这个世界充满了细节,我会继续玩这个游戏哪怕只是和人聊天,去酒吧,看人家看书。
所以这个时期是我重新对编程产生兴趣的重要时期。编程不再是海龟和令人沮丧的游戏,而是科幻、电影、奇幻游戏、音乐和其他一切我认为很酷很有价值的东西。
那时候我知道有一种叫C++的编程语言是用来开发游戏的。也许有一天我可以用它来做一个类似Data和Genesis VII的游戏,看起来像Android机器人。这在一定程度上让我很佩服C++,但是我已经和编程失去了联系。
我从加拿大搬到日本,然后搬到韩国。有一天,我遇到了一个来自多伦多的韩裔加拿大人,他在韩国做程序员。作为一个韩国人,他可以在没有严格的雇主允许的情况下自由职业,以保留他的签证。他只需要整天坐在星巴克里,用两种语言编程:PHP和Python。我知道PHP这个名字,一直以为只是公告板系统的名字。他告诉我,我应该试一试,因为我可以很快学会新技能,这对我的职业生涯有帮助。
他向我推荐Python,说要从这门语言开始。第一次用Python,很迷茫,只有几次小的成功。记得看过关于Python 2和Python 3的帖子,都是关于Python 2如何更好,Python 3如何强迫大家接受的。不管是什么意思,我注意到了一些熟悉的东西,比如print,但是熟悉的$不见了,没有行号,也没有GOTO。没有主函数,我试着把一些东西放在一起,但是我真的不知道一个程序没有行号和其他类似的有用的东西怎么能从头运行到尾。
那时候互联网开始普及,人们会在网上比较讨论一种语言和另一种语言。我注意到一种叫做Ruby的语言更像我的风格,所以我尝试了一下。然后我看到了一个叫Lua的语言,好像是为我而生的。不知道怎么用,但是我相信Lua就是我想要的。我认为Lua是最容易学的编程语言。如果我能学好这门语言,我就能学习所有其他的编程语言。
几个月后,我在星巴克又遇到了韩裔加拿大人,他问我Python怎么样了。我告诉他,我觉得Lua应该是适合我的编程语言,但我无法解释为什么。显然,我还没有掌握如何写代码。最后,他评论道:“嗯,也许你没有对基因进行编程。”
不知道为什么,我却固执地认为自己有这个基因。我在小学自学了基础,我知道我有这个天赋。我只需要真正喜欢上Lua,学好它就行了……或者我该学JavaScript?但是每个人都说你应该先学Python,虽然我确实更喜欢Ruby……...结果就是无休止的纠结,直到再次失去兴趣。
最后回到加拿大生活了几年,编程根本不是我考虑的。2011年到2015年,只有一件事和编程有关,就是听说隔壁写字楼里全是写C++的人,他们为管道等能源项目定制SAP,赚了不少钱。
40 岁,第一次学会编程2015年油价崩盘,卡拉加里的经济也崩溃了,我们整个团队都解散了。在获得丰厚的裁员补偿后,我决定真正学习如何写代码。
我学会了如何写函数,如何创建对象等等,但是self关键字还是让人摸不着头脑,使用对象也是。更努力的工作足以解决这些问题,但我又犯了同样的老错误:
后来裁员补偿的钱快用完了,我们只好找新工作。找到工作后,我去市区和以前的同事吃饭。那时,我遇到了我的一位老朋友,他从90年代中期就没见过我了。他在财务部工作,问我在做什么。我告诉他我已经找到了一份新工作,下周开始工作。“哦,我打赌是编程工作,对!你一直擅长编程。”他说。我回答:“哦,不是编程...我已经很久没有真正做过这些事情了。是为了项目控制。”
我对这段对话记忆犹新,因为它让我思考为什么我从来不学编程,而且无论从哪个角度看,似乎我从小就注定要学编程。但是我忙着别的事情,没有再尝试编程。
2018年回韩国。第二年8月,我向当时工作的公司递交了辞呈,当时我是文案。在我正式辞职的前一个月,我开始考虑学一门技术。可能这次真的需要学习Python了。每天可以花几个小时,最后一天可以掌握好,然后再花一个月左右的时间找工作。这样做了几天,老习惯又复发了。“好吧,你可以稍微看看其他语言,”我对自己说,“但你必须专注于Python。”
那是我第一次尝试Rust。听说确实精准高效,但是很难学,喜欢的人会赞不绝口。我是在《Y分钟学会X》(译者注:GitHub上的一个项目,包括很多简短的入门教程,比如算法、编程语言、开发工具等)开始学习Rust的。)和《铁锈操场》。
当我开始学习Rust时,我检查了这种语言的用法。答案是,它几乎可以做任何事情。所以我可以做出像创世纪七号这样的东西,或者任何我想要的东西。更有趣的是,语言的细节和语言背后的东西并没有让我厌烦:我发现自己更被吸引了。随着我对这种语言的深入了解,我有了很多留恋。
我写的东西都直接转换成二进制文件,又能看到电脑内部结构了。很多Rust的讨论都是关于如何优化代码的,我觉得很吸引人。但是这种语言很高级,也很安全。如果我全心全意地投入,它几乎可以让任何事情成为可能(至少在某种程度上,一种语言可以做到这一点)——这就是为什么我的旧习惯完全消失了。
谁知道这种代码会不会成功!
《编程锈》这本书一开始对我来说太难了(一方面是因为C++和C的引用太多了),所以直到看了其他的书才回归这本书,最后还是爱上了它。
然而,对我帮助最大的是流媒体视频。第一个是Javascript开发者Brooks Builds做的70多个视频,记录了看Rust Book的每一步。看着别人努力学习一门你也在学习的语言,会让你有精神投入的感觉,这是其他类型的流媒体做不到的。“是Miteiner德意志家族,不是Miteinem德意志家族!”或者“直接用into_iter()编译!”等这些时刻,你会觉得你真的是在和别人一起学习(其实你就是)。
从那时起,我开始观察Brian Myers,他基本上是通过Bing(bing.com)搜索研究Rust的。Jon Gjengset我把它留到最后看(这是在rust的外壳教更简单的东西之前),我还看了所有的视频(不是全部按顺序)如Hello Rust,Ryan Levick,Doug Milford,Tensor Programming,this Rust速成班,以及dcode的Rust视频。我喜欢的另一个视频流是rhymu8354。他是一个25岁的C++爱好者。他做了一个类似Genesis V的游戏,最近开始学Rust。
半年后,我发现我人生中第一次正确地学会了编程。但是,没有什么秘密:真的是单一专注和勤奋使用bing搜索的结果。
既然只有一台Surface Go笔记本,我必须避免任何有太多插件的东西。不过我做过一些东西,比如韩文汉字转换器(韩文汉字就是韩国用的汉字),效果很好。最后,我编写了一本名为《轻松英语学习Rust》的教材,目的是让英语二级的用户在不使用翻译成本国语言的Rust相关书籍的情况下,更轻松地学习这门语言。
这个故事的寓意,我觉得是经典的“找到自己喜欢的事情,坚持做下去”。这对我来说并不新鲜,但我花了这么长时间才找到适合自己的语言。它使其他语言易于阅读和理解,包括C和C++。
我想提出两点:第一,考虑不周和注意力不集中不一定是永恒的;第二,每个人性格不同,最简单的语言不一定是你最喜欢的语言。
Reddit网站的/R/LanguageLearning版块经常有这样的讨论:“我真的很想学(著名的X语言),但是我是否应该继续学习更简单的西班牙语/法语,尽管我很讨厌它?”当然,答案是否定的——只学你想学的语言。这种建议比较容易给出,因为自然语言不像编程语言那样与职业发展密切相关。然而,由于编程语言有许多后继者,同样的建议可能也适用。
Rust绝对不是那种在大团队里成为初级程序员要学的语言,更别说40岁了。但是,如果你是那种反复拿起编程又放下的人,也许找到合适的编程语言会让你坚持下去。
作者介绍:
戴夫·麦克劳德,加拿大人,住在韩国首尔。专业翻译,精通韩语、日语、德语、法语和英语。业余铁锈开发者。
原始链接:
https://github . com/Dhghomon/programming _ at _ 40/blob/master/readme . MD
关注我,转发这篇文章。如果你相信我“接收信息”,你可以免费获得价值4999元的InfoQ迷你本。点击文末“了解更多”,可移步InfoQ官网获取最新资讯~