40岁开始学编程!

2022 年 10 月 28 日 CSDN

【导语】我今年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 Jackson's Sorcery》,并学着制作自己的小型角色扮演游戏。

其实,这些游戏不过是从维基百科上复制了以下这些代码,其中包含大量掷骰子的RAND语句和GOTO调用。我记得,后来我做了很多细微的调整,终于实现了在游戏开始时播放音乐,以及画一个简单的图形。

10 INPUT "What is your name: "; U$
20 PRINT "Hello "; U$
30 INPUT "How many stars do you want: "; N
40 S$ = ""
50 FOR I = 1 TO N
60 S$ = S$ + "*"
70 NEXT I
80 PRINT S$
90 INPUT "Do you want more stars? "; A$
100 IF LEN(A$) = 0 THEN GOTO 90
110 A$ = LEFT$(A$, 1)
120 IF A$ = "Y" OR A$ = "y" THEN GOTO 30
130 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 和 Python。

我知道 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更好……一时间,我感到很迷茫,又一次失去了编程的兴趣。最终,我学会了如何使用Python获取用户输入,并返回结果,但我没有使用任何外部函数。

接下来的几年里,我又回到了加拿大,而编程的学习一直没有任何进步。在这期间内,我在一家公司担任项目总监,而我接触到唯一与编程有关的工作是一个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无关,但我会努力寻找机会。

— 推荐阅读 —

  
  
    
对话 iPod 之父 Tony Fadell:我们曾想在三十年前创造智能手机
黄东旭:开源数据库的国际化思考与实践
马斯克 440 亿美元收购 Twitter,转身炒掉 CEO、计划裁员75%!

登录查看更多
1

相关内容

人们为了让计算机解决各种棘手的问题,使用编程语言 编写程序代码并通过计算机运算得到最终结果的过程。
【经典书】多处理器编程艺术,562页pdf
专知会员服务
65+阅读 · 2022年7月10日
【干货书】Python3编程高级指南,494页pdf
专知会员服务
85+阅读 · 2022年5月18日
【经典书】Linux UNIX系统编程手册,1554页pdf
专知会员服务
44+阅读 · 2021年2月20日
【干货书】Linux命令行与shell脚本编程大全,第3版818页pdf
专知会员服务
61+阅读 · 2020年12月30日
【耶鲁】数据结构与编程技术,572页pdf
专知会员服务
45+阅读 · 2020年12月27日
专知会员服务
95+阅读 · 2020年12月19日
【2020新书】C语言编程傻瓜式入门,第二版,464页pdf
专知会员服务
60+阅读 · 2020年10月15日
【干货书】Python 编程,480页pdf
专知会员服务
228+阅读 · 2020年8月14日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
我用 Rust 编程的这两年
CSDN
1+阅读 · 2022年11月11日
十年编程经历杂谈
InfoQ
0+阅读 · 2022年7月10日
为什么 Rust 是初创公司的绝佳选择?
InfoQ
0+阅读 · 2022年7月3日
“C 不再是一种编程语言!”
CSDN
0+阅读 · 2022年4月4日
“C不再是一种编程语言”
InfoQ
0+阅读 · 2022年3月28日
编程大神竟“玩”出了不像 C 的 C 程序
CSDN
0+阅读 · 2022年2月25日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
Reversible Column Networks
Arxiv
0+阅读 · 2022年12月22日
Arxiv
1+阅读 · 2022年12月20日
Arxiv
0+阅读 · 2022年12月19日
Arxiv
0+阅读 · 2022年12月17日
已删除
Arxiv
31+阅读 · 2020年3月23日
Arxiv
21+阅读 · 2018年8月30日
A Survey on Deep Transfer Learning
Arxiv
11+阅读 · 2018年8月6日
VIP会员
相关VIP内容
【经典书】多处理器编程艺术,562页pdf
专知会员服务
65+阅读 · 2022年7月10日
【干货书】Python3编程高级指南,494页pdf
专知会员服务
85+阅读 · 2022年5月18日
【经典书】Linux UNIX系统编程手册,1554页pdf
专知会员服务
44+阅读 · 2021年2月20日
【干货书】Linux命令行与shell脚本编程大全,第3版818页pdf
专知会员服务
61+阅读 · 2020年12月30日
【耶鲁】数据结构与编程技术,572页pdf
专知会员服务
45+阅读 · 2020年12月27日
专知会员服务
95+阅读 · 2020年12月19日
【2020新书】C语言编程傻瓜式入门,第二版,464页pdf
专知会员服务
60+阅读 · 2020年10月15日
【干货书】Python 编程,480页pdf
专知会员服务
228+阅读 · 2020年8月14日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
相关资讯
我用 Rust 编程的这两年
CSDN
1+阅读 · 2022年11月11日
十年编程经历杂谈
InfoQ
0+阅读 · 2022年7月10日
为什么 Rust 是初创公司的绝佳选择?
InfoQ
0+阅读 · 2022年7月3日
“C 不再是一种编程语言!”
CSDN
0+阅读 · 2022年4月4日
“C不再是一种编程语言”
InfoQ
0+阅读 · 2022年3月28日
编程大神竟“玩”出了不像 C 的 C 程序
CSDN
0+阅读 · 2022年2月25日
相关基金
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
相关论文
Reversible Column Networks
Arxiv
0+阅读 · 2022年12月22日
Arxiv
1+阅读 · 2022年12月20日
Arxiv
0+阅读 · 2022年12月19日
Arxiv
0+阅读 · 2022年12月17日
已删除
Arxiv
31+阅读 · 2020年3月23日
Arxiv
21+阅读 · 2018年8月30日
A Survey on Deep Transfer Learning
Arxiv
11+阅读 · 2018年8月6日
Top
微信扫码咨询专知VIP会员