【编者按】我今年40岁,终于再次下定决心已经开始自学程式设计。尽管我一直对笔记本电脑充满了浓重的兴趣,而且似乎从小学已经开始就与IT领域惺惺相惜了结缘,但而后却经历了一场又一场的失败。我希望责任编辑能对你有所启迪,让你晓得人生永远没有太迟的已经开始,有时你而已需要找到正确的语言来自学程式设计。
书名镜像:https://github.com/Dhghomon/programming_at_40
声明:责任编辑为 CSDN 译者,需经允许禁止转发。
作者 | David MacLeod译者者 | 弯月公司出品 | CSDN(ID:CSDNnews)我第一场接触程式设计,是在六十年代80年代,两台名叫ADAM的计算机系统上,如下图右图:
图源:Andrew Lih,基于CC BY-SA 2.0 协议这是两台个人笔记本电脑、COLECOVISION 格斗街机和印刷机的结合体。计算机系统本身就像下面的图片右图,有两个录音带驱动器(并非内存模块)、两台电视(并非显示屏),还有两台印表机(下面有两个控制器,可以把它变成两台功能完整的印刷机)。许多ADAM计算机系统用户都有内存模块,但他们没有,只能花极短时间等待录音带加载,它们会发出嘶或小喇叭的声音,持续大约几分钟才能加载完成。鸣声代表者缓慢往前,而小喇叭声代表者快速倒回,所以整座加载操作过程是:往前加载,接着向后移动到下两个块。
我提过这台笔记本电脑刚抢到的时候,我母亲在地窖演唱了许多录音带,但不晓得为什么而后他们就有了许多格斗游戏。我最喜欢的这款格斗游戏是《Gateway to Apshai》,这是一种Roguelike格斗游戏。两个月前,他们谈及这款格斗游戏,他说该格斗游戏是用Forth实现的。以下是他的这段话:
当初那台Coleco Adam计算机有两个Zilog Z80 CPU,我试著了一下Forth。不晓得你是否提过,我从美国交付了两盘录音带,里面有两个骇客流程和一两本书《Adam骇客手册》,我根据文末的说明,将ColecoVision格斗游戏下载到盲点录音带上,这样就获得了大量的格斗游戏。我自己并没写过任何流程,但录音带上的流程带有源码,我而已调整了许多参数,接着重新保存,就补齐了这些流程。整座操作过程很有意思,也很有意思。
实际上,母亲还向我展现了BASIC,当时我认为这是世界上唯一的程式设计语言。我自学了BASIC,并参考了许多书刊,比如《the Mystery of Silver Mountain》(银山之谜)和《Hunt the Wumpus》(猎杀乌普斯),很快就学会了程式设计。而后,我又阅读了《Steve Jacksons Sorcery》,并学着制作自己的小型角色扮演格斗游戏。
其实,这些格斗游戏不过是从维基百科上复制了以下这些代码,其中包含大量掷骰子的RAND语句和GOTO调用。我提过,而后我做了许多细微的调整,终于实现了在格斗游戏已经开始时播放音乐,以及画两个简单的图形。
10 INPUT “What is your name: “; U$20 PRINT “Hello “; 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 30130 PRINT “Goodbye “; U$140 END所有这些代码都是我两个人完成的,而且在当时他们还无法通过网络搜索示例代码。从各方面来看,似乎命运注定将来我要从事IT的工作。同一时间里,他们在学校自学了一种名叫Logo的程式设计语言。语言本身并并非很有意思,内置了一套海龟绘图,可以在屏幕上绘制各种形状。你可以发送命令,比如FD 90, RT 90,接着通过REPEAT 4重复四次这个动作,它就能够绘制出两个正方形。画两个圆圈需要极短时间,因为你必须REPEAT 360,才能绘制完成,而且你必须看着海龟重复360次操作,才能画两个圆。所以,有时他们会作弊,每次让海龟移动2度,接着REPEAT 180,也能画出两个差不多的圆,但海龟只需要重复180次操作。
此外,你还可以让海龟制作许多看似很花哨的形状,比如画两个圆圈,接着向右转一点,再画两个圆圈,如此不断重复,直到最后得出下面这个漂亮的图形。
图源:susam,基于 CC BY 4.0 协议长大成年后,这段自学Logo语言的经历几乎被我遗忘殆尽了,但有意思的是,有一场我看到了Bryan Cantrill的两个视频(https://www.youtube.com/watch?v=LjFM8vw3pbU&t=246s&ab_channel=Humio),他和我年纪相仿,他们有着类似的童年经历。他和我一样,已经完全忘记了Logo语言的自学,只提过让海龟画画。他很幸运,而后已经开始自学C语言,并被程式设计所吸引。而我却没有那么幸运。
提过80年代的时候,有一场在一堂计算机系统课上,他们坐在一间没有窗户的房间里,在笔记本电脑前让海龟画画。课程的内容非常简单,而且我并不觉得这像是自学一门程式设计语言。他们的老师也注意到了这一点,并告诉他们很快就会举办两个Logo比赛,他们都应该参加。关于那场比赛,我只依稀提过那是一场市级的比赛,或者也有可能是省级比赛,所以其他学校的孩子也会和他们在同两个房间里参加比赛。小时候,遇到其他学校的孩子,我总会很好奇,我总想搞清楚哪个孩子最厉害,以及他们的学校氛围如何。他们学校也派了许多代表者去参赛,他们的任务是制作许多能够打动评委的作品。整座比赛持续了两三天,他们在比赛现场完成了部分工作,还有许多只能带回家做,最后一天,每个团队展现两个作品,接受评判,并角逐各个奖项。
然而,此次比赛并没有给我留下美好的回忆。当时,我的队友比我更热衷于比赛,而我从那时起已经开始对程式设计失去了兴趣。最终,我提过他们的作品获得了第4或第5名,但我的队友很不满意。比赛结束的时候,我感觉如释重负,因为在这之后我无需再与程式设计的世界打交道,而且我也不想赢得比赛,并作为优秀的Logo流程员被派往其他比赛。我只想坐在笔记本电脑面前,老老实实地做两个宅男,而我参加比赛也而已为了吸引小学时心仪的女孩子的注意。所以,在接下来的日子里,在公共场合我一直与笔记本电脑保持距离,因为我想给其他人一种印象:“我很擅长笔记本电脑,但我并非搞计算机系统的。”
比赛的最后,他们得到了一件T恤衫和两个水杯。接下来的日子里,我一直在自学BASIC,直到90年代的某一天,他们的ADAM计算机系统换成 386,与此同时我也逐渐放弃了自学程式设计。我所面临的难题是,当时没有互联网可以快速搜索代码示例,而且我也不打算花钱购买程式设计的书刊,因为我不想回到那个充满竞争的世界,也不想因此被那个女孩拒绝。
然而,我很怀念那间自学Logo课程的房间:昏暗的房间,没有窗户,里面摆满了笔记本电脑,既像到了未来,也像到了地狱般的感觉。走进学校的侧门,右转,接着就会发现自己置身于另两个世界,这个世界只有两个昏暗的房间,三面都是嘶作响的笔记本电脑。很可惜,这个房间只用于Logo教学。
回顾90年代到2000年初,我基本没有接触过任何程式设计。
然而,这个期间内发生了两件重要的大事:我成为《星际迷航:下一代》和《创世纪 7》的忠实粉丝。机器人Data是最喜欢的角色,所以我经常思考宋博士如何组装了这个机器人,他们需要多长时间才能达到那个阶段。而至于《创世纪 7》,这可能是我玩过的第这款格斗游戏。里面的世界非常真实,一点都不像格斗游戏,例如商店不会24小时营业;如果我闯入某人的房子,主人会发怒;被打破的罐子不会被刷新复原。
如今再玩《创世纪 7》,我仍然有同样的感觉:这个世界充满了真实感,我想与里面的人交谈,去酒吧,看人们读书,或者而已环游世界,看看会发生什么。
所以,那段时间的经历对我产生了深刻的影响,以至于我再次对程式设计产生兴趣。
程式设计不而已用海龟画画,也不是令人沮丧的比赛,而是科幻小说、电影、奇幻格斗游戏、音乐以及我认为生活中很酷和很有价值的一切。就在那个时候,我了解到有一种名叫C++的语言可以用来制作格斗游戏,也许有一天我可以利用这门语言,制作像Data一样的机器人和像《创世纪 7》一样的格斗游戏,但我依然没有机会接触程式设计,因为互联网还没有普及。虽然我对C++充满了崇敬,但我没有自学的途径。
而后,我从加拿大搬到了日本,接着到了韩国。有一天,我遇到了一位来自多
我晓得 PHP 这个名字,但我以为它而已两个论坛的名称,但实际上这个论坛使用的是PHP 3。他告诉我应该试一试程式设计,因为我自学新技术的速度很快。他说,在PHP 和 Python这两门语言中,他更推荐Python,我应该从自学Python已经开始入门。
第一场使用Python的体验感觉很混乱,但最后还是取得了许多小成果。我提过读过有关对比Python 2与3的帖子,帖子中说Python 2更好,而Python 3实在让人一言难尽。姑且不论哪个版本更好,我注意到许多熟悉的语法,比如print,但熟悉的$却不见影子,也没有任何行号或 GOTO,而且还没有主函数。我实在搞不懂没有行号和其他类似的指示,流程是如何从头执行到尾的。
更糟糕的是,当时互联网已逐步普及,他们很容易找到对比两种语言的文章。我注意到,还有一种名叫Ruby的语言看起来更适合我,所以我试著了一下。而后,我还发现了Lua语言,感觉这门语言就是专门为我定制的。我不知道如何安装或使用它,但我莫名地觉得这就是我要自学的语言。我有许多模糊的印象,曾有人说过他们可以选择一门最简单的程式设计语言已经开始自学,等到充分掌握这门语言之后,再自学所有其他语言。
两个月后,我又在星巴克遇到了那位朋友,他问我自学Python的进展如何。我告诉他,我觉得Lua更适合我,但我没有充分的理由,而且也没有掌握到真正的程式设计技术。最终,他表示:“也许这门语言并不适合你。”但不知何故,我坚持认为Lua很适合我。我曾在小学的时候自学BASIC,但我坚信我应该好好自学Lua。但网上众多说法纷飞,有人说我应该自学JavaScript,有人说Python更适合初学者,还有人说Ruby更好……一时间,我感到
接下来的几年里,我又回到了加拿大,而程式设计的自学一直没有任何进步。在这期间内,我在一家公司担任项目总监,而我接触到唯一与程式设计有关的工作是两个SAP实施项目,他们的承包商公司有许多C++程式设计人员。当时我所在的城市是加拿大的卡尔加里,那几年卡尔加里的经济发展一片欣欣向荣,然而这一切都成为了过去。
2015 年油价暴跌,卡尔加里的经济持续滑坡,他们整座团队都被解聘了。失业之后,我下定决心这一场要认真自学程式设计。2011年~2018年,在加拿大生活期间,我一直想回到韩国,并且我决定自学程式设计。我心想,这一场我会好好自学程式设计,并在韩国找到两个适合的职位。最终,我终于对Python有了许多了解。我自学了如何编写函数、如何定义对象等,但我仍然并非很理解关键字self和对象的使用。我告诉自己,再努力一点就可以攻克这些难题。但那时的我又已经开始有点犹豫了。
Python不适合编写格斗游戏,我无法使用Python编写出《创世纪 7》之类的格斗游戏。
为什么不试试C++呢?不,C++太难了。那么C#呢?要不要试试看?
唉,Python太难了,似乎C#更好许多。等等,这是什么?F#?这种语言真的很酷。为什么其他语言没有那么酷?
F#太棒了!可为什么没有人使用呢?也许我应该好好自学Python……
Python很好,简单易学!那么JavaScript呢?或许我可以试试浏览器程式设计。也许我应该试著一下基于浏览器的格斗游戏?我应该试著一下……
而后,我无法继续空吃山空的日子,于是找到了另一份工作。有一天,我在市中心遇到了一位老朋友。短暂的寒暄后,他问我目前在做什么工作,还问我是并非在做流程员,他说他一直觉得我很适合程式设计的工作。此次谈话让我重新思考为什么我从未真正静下心来好好自学程式设计。
2018年,我再次回到韩国。工作之余,每天我都会拿出两个小时来认真自学Python。坚持了几天后,我的老毛病又犯了,我犹豫着要不要试试看别的语言,最后我决定每天最多只能花费两个小时试著其他语言,剩余的时间都要用来自学Python。
于是,我试著了Rust,读了许多相关的文章,听说Rust很难学,但有一大批忠实的粉丝。更重要的是,Rust非常高效。我快速看了看Rust,接着又老老实实地回去自学Python。
接下来的一段日子里,我一边认真自学Python,一边试著Rust。我感觉Rust有点像C#,而且我发现你可以利用这种语言编写任何东西,甚至是编写《创世纪 7》之类的格斗游戏。更有意思的是,该语言的底层实现细节并没有让我感到厌烦,相反,我对它的兴趣越来越浓重了。或许是和小时候自学程式设计的经历有关,随着自学的深入,我已经开始怀念当年的一切。我编写的代码都变成了二进制文件,我甚至可以看到计算机系统的内部结构。网上有大量关于如何优化Rust代码的讨论,我非常感兴趣。同时,我发现这是一门高级语言,而且安全性很高。我幡然醒悟,这门语言才是我的“真命天子”,我可以全心全意地自学它,并使用它编写任何东西。
谁能想到最终我会选择Rust!
我读了许多关于Rust程式设计的书刊,还观看了许多视频。我非常喜欢这门语言。在坚持自学了6个月后,我第一场感觉自己真正学会了程式设计。我做了两个简单的小项目,汉字转换器,效果很好,我还整理了许多自学Rust的资料。
回首往事,虽然我优柔寡断,而且没能集中精力自学一门语言,但最终我花了极短时间找到了适合自己的语言。希望大家都能找到自己喜欢的方向,并坚持下去。
此外,选择第一门程式设计语言时考虑的因素许多,也许最简单的语言不一定是最适合你的语言。你只需要选择自己最喜欢的语言。
但话说回来,我也并非十分确定自己此次的选择是正确的。虽然我目前的工作与Rust无关,但我会努力寻找机会。
—