返回社区

用 Python 启程!

我们时不时会遇到那种一头扎进编程学习深水区的人!Carl,网名“Meatball”,通过 Exercism 的 Python 学习路径开始学编程……这真是了不起的壮举,不过谁不喜欢挑战呢!

在 Youtube 上观看
时长 34分钟

Jonathan:你好,欢迎来到 Exercism 播客。我叫 Jonathan。很荣幸能回来,无论你身在何处,与你分享生活和故事。今天我们的嘉宾名叫 Karl。我直接进入正题,请 Karl 简单介绍一下自己。那么 Karl,告诉我你来自哪里?你目前在忙什么?你又是怎么知道 Exercism 的?

Carl:我住在瑞典的哥德堡,目前是一名全日制学生。但当我开始接触科技和编程时,我用了 Exercism。我从 Python 学习路径开始,我觉得对大多数初学者来说,Python 学习路径是最好的,因为 Python 语法相当直接,在我看来也很符合人的直觉。说到编程语言的类型,Python 对你还挺友好的。它没有那么多类型,数据类型,但……是的。所以我开始做概念练习,跟着教学大纲走。我大概每隔一个周末做一两个练习。过了一段时间,当我真正……因为一开始……我犯了很多错误,现在回头看……现在我年纪大了一点,或者说……现在编程时间长了,我能看出那些错误了。所以你不必,你的代码一开始不必完美。我喜欢的一点是,当我真正……当我在 Python 学习路径上做了很多练习后,我转到了 Ruby 学习路径。好。为什么从 Python 转到 Ruby 是个好选择?因为两者有很多相似之处。Ruby 语法很像,但也有一些不同。比如,Ruby 更偏 OOP,也就是面向对象。所以我觉得对初学者来说,从 Python 开始,然后转到 Ruby,可能是一段相当不错的旅程。下次见。

Jonathan:你是从 Python 开始的。我的意思是,人们来到 Exercism 时,通常已经有一点开发经验。如果你之前有一些开发和编程的知识与经验,人们用 Exercism 往往是为了提升某门特定语言的技能。但我的理解是,你没有任何编程经验,是从 Exercism 开始的,对吗?

Carl:我以前做过一些类似 Scratch 的可视化编程,但从没真正写过代码。从零开始是挺难的。我觉得这是每个程序员都有的共同点。开头就像爬山,起伏不定,等你爬上坡之后,就变得容易了。就像你。

Jonathan:我还以为你会说,你爬上坡之后,山变得更大了,然后你又爬一点,它越来越大、越来越大。你有没有过那种感觉?有一个时刻,事情开始说得通了。有没有那么一刻,你心想:好吧,我懂了。

Carl:我的意思是,真正要完全理解一样东西需要很多时间,而大多数人一开始常做的是……大量使用 while 循环,因为它们比 for 循环更容易控制,因为 for 循环你得在开始前就告诉它循环要跑多久。我觉得……当我真正学会如何正确使用 for 循环,而不是过度使用 while 循环时,我觉得编程开窍了,或者说循环是怎么回事,我理解得清楚多了。

Jonathan:好,所以那就像是一个时刻,你觉得:好吧,这个概念我明白了。那么,你对循环的理解,后来有没有迁移到其他概念上,让那些概念也开始越来越说得通?我用自己的经历来说。我也在 Go 学习路径上学 Go。循环一直让我摸不着头脑,直到我花了大概三天时间,把练习和文档过了一遍,一点一点拆开来看。而那段理解循环的经历,实际上对我从整体上理解代码、理解函数之类的东西,产生了很大的影响。你觉得你的经历也类似吗?

Carl:在 Python 里,你经常要解决各种问题,经常要遍历东西。这差不多就是你在 Python 里唯一做的事。在 Python 里,你通过遍历东西来解决问题。也就是说,循环非常重要,必须完全理解。当你真正完全理解 Python 里的循环后,你就能做很多事,因为一切都建立在遍历对象的基础上。

Jonathan:那很好。你现在在读书,你之前录音前简单提到过,数学、物理。你目前正在学哪些主题?你目前正在学什么主题或什么科目?

Carl:我在学编程、数学和物理。

Jonathan:好,你觉得这些怎么样?

Carl:我做过,问题是,我其实是为了那些编程课程做准备才做 Exercism 的。然后我意识到,我现在知道的比那些课程覆盖的要多得多。

Jonathan:太棒了。

Carl:我从那些课上学不到太多,因为我反而学了马克思主义。

Jonathan:所以 Carl,你的意思是,大家其实应该做 Exercism,而不是去读大学学位?

Carl:我的意思是,你不上计算机科学,我觉得你确实会多了解一点计算机如何运作,还有比特之类的东西。而 Exercism 只教你编程、解决问题和其中的逻辑部分。我觉得上大学仍然有意义。

Jonathan:我刚才是稍微跟你开玩笑,因为如果你告诉有大学学位的人他们什么都不懂,我们可能会冒犯很多人。所以这个我们先避开。Carl,告诉我,我还要再问你一些关于成长的问题。你小时候……我该怎么措辞呢。小时候,你喜欢解决问题吗?你对乐高之类的东西感兴趣吗?我问这个,是因为人们做编程时,往往对解决问题有一种天然的喜爱。那么成长过程中,你有没有很多爱好或偏技术的东西?跟我聊聊吧。

Carl:我的意思是,我喜欢乐高。我没有……我小时候数学不错。那就是解决问题,尝试解不同的数学题。我觉得真正让我进入编程的是……我对科技的整体兴趣,我真的很喜欢电脑。而且我真的很喜欢……谢谢。每次有人电脑出问题,他们就会说:哦,你能帮我吗?这有时有点烦,但实际上往往很有趣。所以其实是我对计算机产生了浓厚兴趣,然后把我引向了有趣的编程。

Jonathan:好,据我了解,你现在已经在 Exercism 上完成了四到五个学习路径,或者说你用 Exercism 学了四到五门语言,对吗?

Carl:是吗?对,我做过……我开始了大概六个学习路径。好。但我只会说自己对其中一些掌握得还不错。

Jonathan:好,那其中有哪些?应该是 Python、Ruby。

Carl:Python、Ruby、JavaScript 和 TypeScript,不过我对 Elixir 也还算可以。

Jonathan:好,那所有这些语言里,你学得最享受的是哪一门?

Carl:我真的很喜欢 Elixir。我很喜欢在那门语言里打字的感觉。我觉得它是一门非常……非常有趣的输入语言,但它和我习惯的其他语言很不一样。有点像在某个时刻从头开始。是的。但我觉得,如果有人真想学一门非常非常强大的语言,JavaScript 就在那儿。在我看来,它是你能掌握的最强大的语言之一。

Jonathan:好,如果我没错的话,JavaScript 应该更偏向解释型语言,这样说公平吗?然后 Elixir 大概更偏函数式,是吗?

Carl:是的。

Jonathan:好,所以这两者很不一样。我觉得有趣的是,你似乎同时喜欢这两门语言的全部光谱。Elixir 到底哪里让你觉得有趣或享受?你能说清楚吗?

Carl:我的意思是,就是这种函数式编程。你有这些……你有这些函数,你要把它们组合在一起。用这些函数,你要解决问题。对我来说,至少这意味着我非常依赖……Elixir 文档非常重要,真的要做点什么的话。而且在我看来,Elixir 文档很棒。所以你会通过搜索找到正确的方法,我觉得这非常有趣。

Jonathan:所以这几乎就像拼图,可以这么说,你把所有东西拼在一起,好让你看清问题。

Carl:把所有东西拼在一起,拼出一幅图。而且就像我说的,我也很喜欢写这门语言的感觉。所以它是一个很棒的拼图。

Jonathan:好,不错。那你在那个学习路径上进展到哪了?你已经做完实践练习了吗,还是仍在做概念练习?

Carl:那门语言有很多概念练习。我记得大概有 20 个,或者更多。我现在还在概念练习阶段,我已经做了……大概 90% 左右,所以快完成了。

Jonathan:太棒了,真不错。真的很不错。那么 Carl,我想多了解一点你的生活,不限于编程和开发。你空闲时间喜欢做什么,有什么爱好?如果让你把所有时间都花在编程之外的事情上,你会做什么?

Carl:如果我不被允许说编程,我空闲时间喜欢玩一些电子游戏,我也喜欢骑自行车。那也很有趣。

Jonathan:山地自行车还是公路自行车?

Carl:公路自行车。

Jonathan:那你经常骑车吗?跟我说说,你在瑞典,对吧?对。你住的地方是平坦还是多山?有没有美丽的大海?因为我对瑞典的印象就是有很多海。

Carl:有很多海。对,我住的地方挺平坦的。但如果你往北走,就更多山。

Jonathan:瑞典现在在下雪吗?感觉天气要开始变冷了。

Carl:上周好像在下雪,但现在没怎么下雪了。

Jonathan:好,那你会雪中骑车吗?

Carl:会。

Jonathan:你会啊。我们还有另一位,你可能认识 Brian。Brian,他是 Elixir 导师之一。Brian Underwood,他也住在瑞典,我想是在斯德哥尔摩,他会在隆冬出去跑步,在瑞典的黑夜里跑。所以我觉得那挺酷的。那你经常骑车吗,比如一周一次、两次?还是说你定期会骑?还是只是……

Carl:我,我,我,当我出行时,我骑车到公交站,然后从公交站坐公交。

Jonathan:好,然后你找个好地方,然后……所以你是坐公交出行。

Carl:我骑车到公交站,然后坐公交。

Jonathan:明白了。好,不错。Carl,大学离你住的地方有多远?你现在住在家里,还是租房子?你的情况是怎样的?

Carl:我住在家里。有 30 公里远。我们,大概要花,我不知道。哦,等等。对,30 公里,大概没错。大概要 40 分钟或什么的。

Jonathan:好,那还不算太糟,但仍然是挺长的一段路。那你还有几年要读,才能进入所谓的真实世界?你还有四年要读。你现在是大一吗?

Carl:对。

Jonathan:好,哇。所以你已经读完第一年,这是一个四年制学位。好。那你的梦想是什么,未来想做什么职业,或者有什么想法吗?

Carl:我一直想从事太空相关的工作,因为我觉得那很酷。不是天体物理学之类的,而是也许做一些与太空相关的编程。我们有欧洲航天局,那可能会是一个方向,但……如果不是那个,我觉得就……我不知道,一份普通的后端工作也不错。

Jonathan:一份普通的后端工作,我喜欢你这么说。在我听来,这显得那么直接、那么容易。你觉得你以后会想搬到瑞典以外的地方吗?还是你喜欢瑞典?有什么想法吗?我的意思是,听好,我问你的这些问题,你可能还没考虑过,因为你还有几年才需要做这些选择。但太空听起来真的很迷人。你打算怎么做?你打算怎么开始进入那个领域?

Carl:我其实完全不知道。从没真正想过具体怎么做,但……我的意思是,到时候看吧。这更像是一个梦想,而不是一个实际计划。不过回答你之前的问题,我其实想过也许住在加拿大之类的地方,但我想我可能还是会住在世界的北边。

Jonathan:好,那就是寒冷、冰和雪。你对此满意吗?满意。Carl,你有兄弟、姐妹吗,有兄弟姐妹吗?

Carl:我有一个弟弟。

Jonathan:好,所以你们两个人。他喜欢编程吗?你会把学到的东西和知道的东西教给他吗?

Carl:哦,他其实不喜欢编程。我不知道。

Jonathan:哦,真的吗?那你们没有重叠。但你会和他一起玩游戏吗?

Carl:我有时和他一起玩游戏,对。

Jonathan:他比你小很多吗,还是说他现在应该在上学?

Carl:他比我小大概五岁。

Jonathan:好,那年龄差还挺大的。哦,那很好。太棒了。那么回到 Exercism 和你的参与,如果我没记错,你现在在维护 Python 学习路径?对,或者在贡献。贡献,好,不错。希望有一天能维护。你觉得怎么样?你从这段经历中学到了什么?

Carl:我的意思是,Python 学习路径上的人真的很棒,和他们一起工作真的很有趣……因为目前我做了很多文档工作,你确实会学到如何写文档,而且你也经常需要做很多研究。对,所以你要写很多文档,你也会学到很多,因为你必须把很多其他人的文档读一遍。所以你会真正深入概念。

Jonathan:那你具体享受这种作为贡献纪律的体验吗?

Carl:对,我的意思是,读那些文档时我学到很多。

Jonathan:不,那真的很棒。那么说到目前为 Python 做贡献,你的想法是之后也想开始为 Elixir 和 Ruby 做贡献吗?你怎么看?

Carl:我的意思是,对,我可以想象自己为 Ruby 学习路径做贡献,但 Elixir,我不这么认为。我有一个长期计划,要为 TypeScript 学习路径做贡献,但到时候看吧。我想接下来六个月我会继续留在 Python 学习路径上。

Jonathan:好,不错。那你跟我说说,你能稍微解释一下 TypeScript 吗?就给我讲讲它大概是怎么回事。我问是因为我听说过它。但我听说它有点……巩固了 JavaScript,不过如果我完全说错了,你可以告诉我。它有点像是给 JavaScript 做安全检查,但我可能说错了。它到底是什么?

Carl:它是什么?我的意思是,这个描述挺不错的。我上过一门前端课,老师用 JavaScript,他在 HTML 里写了一些基础 JavaScript。因为我把这段代码复制粘贴到 TypeScript 里。然后 TypeScript 就说:哦不,你不该这么做。这不安全。所以它很大程度就是关于这个,让你的代码安全。比如避免崩溃之类的事情。它引入了类型,这样你就不会有类型冲突。对,总体上它会告诉你要做安全的事,不要写不安全的代码。对,它是一门不同的语言,但和 JavaScript 非常相似。你常常可以把 TypeScript 想成 JavaScript,但你给它穿上了盔甲。所以它像受到保护。

Jonathan:好,所以它是一门自己的语言。在我脑子里,我有个印象,它几乎像是 JavaScript 的插件,但你是说它其实完全是一门自己的语言。

Carl:我觉得是。我的意思是,它们非常相似,所以也许它们其实一样,就像插件,但我喜欢把它想成自己的语言,因为它有一些关键区别。

Jonathan:我大概已经冒犯了所有 TypeScript 粉丝,说它是 JavaScript 的插件。我相信这会引起一些有趣的讨论。但对你来说,TypeScript 的安全性正是让它值得进一步探索的特点,对吗?

Carl:我的意思是。其实让我接触 TypeScript 的是,我的 React 库不支持普通 JavaScript,只支持 TypeScript。我习惯了 TypeScript,我觉得它真的很好。它也让代码更清晰,当你使用类型时,因为你实际上能看到:好,这个接收一个数字,输出一个字符串。读起来更容易。

Jonathan:好,你刚才提到了 React Native。你更喜欢前端开发还是后端?据我了解,你更喜欢后端。但你也会稍微碰前端吗?

Carl:我碰过一点前端,但我 CSS 太差了。所以我通常会找个好的 UI 库来用。

Jonathan:你说 CSS 差,具体是什么意思?是你就是不懂,还是它太让人困惑,或者东西太多……到底是哪一点让你觉得吃力?

Carl:它就像,有那么多东西可以赋给一个对象,非常滑。哦,比如在 CSS 或 HTML 里创建链接时,文字下面会出现一条线。然后要去掉它,你得加上 text-decoration,再写 none。它其实就会去掉那条线。有太多东西要记。而 CSS 最烦人的是,如果你在代码或 CSS 里改了一个地方,它经常会搞坏别的地方。所以你实际上得:好,我解决了这个问题。现在又出现了这个问题,我得解决那个,然后继续。所以它一直就……

Jonathan:所以它就像把问题踢到别的地方去。那一定很让人沮丧。我猜我唯一的 CSS 经历是学,也试着学 React。然后你有那么多变量,像你说的,那么多选项。你是要扩展它还是限制它?如果你那么做,又会改变这个按钮。不知不觉,如果你不小心,所有组件都在做不同的事。Exercism 的 Jeremy,他很擅长 CSS,但我觉得他只是知道其中所有不同方面的太多东西了。所以对你来说,前端不像后端那样让你喜欢。

Carl:我对前端的编程部分没问题,但实际的外观我不太喜欢。而后端,至少对我来说,更多是如果它能工作,就别弄坏它。

Jonathan:对,别碰它,让它去。我觉得有趣的是,人们往往偏爱……这一个或那一个。你知道后端到底哪里吸引你吗?你说你喜欢它只要能工作就行。后端那种逻辑思考和事务处理,是你最喜欢的一个方面吗?

Carl:对,我喜欢它,因为它主要是逻辑和设置不同的数据库结构。差不多就是这样,虽然我数据库也不太好。

Jonathan:那很好。太棒了。那么 Karl,我还有几个问题。我很喜欢了解你来自哪里、喜欢做什么。你能说出一些关键建议,或者推荐给刚开始学编程的人吗?你可以从他们可能更有科学背景的角度来说,也许给那些喜欢科学的人一些提示。但如果你完全从另一个角度来看,你会说什么……是一件值得持续做的好事?

Carl:持续做?我的意思是,我觉得你应该……从一门简单的语言开始。不要一开始就学 Rust、C++ 或 C。但然后实际上……我知道 Jonathan 也说过一点类似的话,但……当你看到一个问题时,通读问题,休息一下,想一想你会怎么解决,然后回来真正解决它,因为……让你的大脑处理你将如何实际解决问题是很好的。另一件事我觉得是……不要走得太快。现在做一点,过会儿做一点,因为比方说你在做很多概念练习,最好让那些信息沉淀下来,而不是在同一天把所有概念都做完,到那时候你可能只会感到困惑。

Jonathan:以及所有东西如何应用。好,不错。所以慢慢来。给自己空间去思考。你会说,慢一点,让东西深深扎根,比快速、听起来就像你说的,比快速掠过表面更好吗?

Carl:有些语言你可能只需要学语法和基础的东西,然后就能进入更真实的场景,再深入下去。说到 JavaScript,我学了基础,然后做了 React 项目,在那里……学到了一点新东西,也更深入了这门语言。

Jonathan:哦,那很好。好,不错。太棒了。好,Carl,这周我还有一个问题。你这周对社区有什么推荐?你的特别推荐,几乎什么都可以。可以是,你知道,去雪中骑自行车。可以是跳进冰冷的湖里,或者如果你在瑞典,去蒸桑拿。你会给社区推荐什么?

Carl:对,我的意思是,我不,我觉得在雪里骑车非常难。所以我不推荐大家那么做。

Jonathan:对。

Carl:但我想我会说我之前说过的。如果你卡在一个问题上,休息一下。不要就坐在那里再花几个小时硬解它。最好休息一小会儿,然后把它当成一个问题再回来看。

Jonathan:好,不错。所以这周你的推荐是,如果你需要学点什么,慢下来,休息一下,喝杯咖啡。你喝咖啡吗?

Carl:还不喝。

Jonathan:还不喝。好。永远不喝。

Carl:其实我只是喝水。这大概是我的特别之处。

Jonathan:好,太棒了。我告诉你,这会在未来的人生中为你省很多钱。太棒了。好,Carl,今天能和你聊天真是我的荣幸。谢谢你的时间,也谢谢你为不同学习路径做出的所有贡献,谢谢你参与 Exercism。我们真的很感激。过去几个月我很高兴认识你,尤其是通过我们运营的 Discord 服务器。我想是 Ex-Orts,你在 Elixir Discord 上吗?

Carl:要么是 cohort,要么是 experts。

Jonathan:对,我想我肯定在那上面经常看到你,那很棒。对,谢谢你做贡献。真的很棒。期待不久后再聊,非常感谢你的时间。那么,请留在通话里,我们可以从那里收尾。但谢谢大家收听。你刚刚听到的是我 Jonathan 和 Carl 的对话,期待很快再联系。再见。

Carl:再见。

来自我们社区的更多故事

倾听、学习,并从我们的社区成员那里获得启发。