Programming involves encountering numerous bugs and errors, and solving them is a core part of the process. Struggling through these challenges builds persistence and resilience, which are crucial for becoming a proficient programmer.
Tim leveraged his YouTube channel, Tech with Tim, to connect with Microsoft. They reached out for a content collaboration, and he used that opportunity to express his interest in an internship. After a phone interview and a successful in-person interview in Redmond, he was offered the position.
Tim earned $7,350 per month during his internship, which was equivalent to approximately $10,000 to $11,000 Canadian dollars at the time.
Python's syntax is simple and close to English, making it less overwhelming for beginners. It allows them to quickly write basic programs and see immediate results, which is motivating and helps build confidence.
Tim realized the importance of building the minimum viable product (MVP) first to validate the idea quickly. He also learned to detach his ego from the complexity of the project and focus on simplicity to avoid over-engineering.
Tim starts by identifying a specific goal or project he wants to achieve with the new technology. He then breaks it down into smaller tasks, learns the necessary concepts incrementally, and applies them immediately to his project to ensure practical understanding.
Tim emphasizes the importance of struggling through bugs and errors, as this builds persistence and problem-solving skills. He advises beginners to focus on the process of overcoming challenges rather than expecting perfect code right away.
Tim's interest in Minecraft's redstone mechanics introduced him to basic logic gates and computer architecture concepts. He also ran Minecraft servers, which sparked his entrepreneurial curiosity and taught him about server management and coding.
Tim practices solving coding problems on platforms like LeetCode and AlgoExpert. He emulates the interview environment by using a whiteboard and speaking out loud to explain his thought process. He focuses on breaking down problems into smaller parts and solving them step by step.
Tim believes in simplifying complex problems and breaking them into smaller, manageable parts. He emphasizes the importance of incremental progress and tracking one's own improvement to stay motivated.
<context>#150 编程就是挣扎!我采访了19岁时在微软找到工作的Tim Ruscica 在本周的播客中,freeCodeCamp创始人Quincy Larson采访了软件工程师和多产的编程教师Tim Ruscica,他是Tech with Tim YouTube频道的幕后推手。他还在freeCodeCamp的YouTube频道上开发了课程。我们讨论了:- Tim如何在19岁时通过黑客手段获得微软实习机会并获得70,000美元的薪水 - 他是如何通过玩Minecraft在小时候学习计算机架构的 - 他从一次失败的科技创业中学到的教训 - 为什么他推荐Python作为第一门编程语言。“这是最不令人感到压倒性的事情,可以让你动手实践。”你能猜出我在开场时播放的是什么歌吗?此外,我想感谢每月支持我们慈善事业的11,133位善良人士,是他们让这个播客成为可能。你可以加入他们,支持我们的使命,网址是:https://www.freecodecamp.org/donate 我们在对话中提到的链接:- Quincy提到的《真实天才》的课堂蒙太奇:https://www.youtube.com/watch?v=wB1X4o-MV6o - Tim的一段模拟编码面试视频:https://www.youtube.com/watch?v=3Q_oYDQ2whs - Tim的课程:https://techwithtim.net/dev</context> <raw_text>0 最重要的事情其实是学习如何挣扎,并且接受失败和解决问题。
编程实际上就是不断遇到各种不同的错误和bug,以及事情没有按预期工作并找出解决方法。你很少会看到一个程序员坐下来写出完美的代码而没有错误。因此,作为初学者,尤其是要专注于过程,专注于挣扎。如果你坐在那里,已经花了一个小时在解决一个bug上却无法弄明白,相信我,我们都知道这非常非常令人沮丧,但这是克服困难、建立坚持不懈的重要事情。
并且要接受这种感觉。
欢迎回到Free Code Camp播客。我是Quincy Larson,FreeCodeCamp.org的教师和创始人。每周我们都会为您带来来自开发者、创始人和技术领域雄心勃勃的人的见解。本周我们与Tim Rusica交谈。他是一名软件工程师和多产的程序员,同时也是Tech With Tim YouTube频道的教师。他还在Free Code Camp上开发了一些课程。Tim,欢迎来到节目。
是的,非常感谢你邀请我。很高兴和你交谈。我想已经有几年了。是的,我们认识很多年了,通过电子邮件等方式有过联系,但自从我们上次同步交谈已经有几年了。你现在在哪里加入我们?
我目前在迪拜。实际上,我在过去几个月里一直在世界各地旅行,但现在终于开始恢复常规生活,希望在迪拜定居至少几个月。太棒了。迪拜的魅力是什么?因为我有很多其他开发者游牧者、数字游牧者朋友,他们作为远程开发者工作,很多人喜欢去迪拜。是的。
是的,所以,不想详细说,因为我们可以为此做一个完整的播客,但我会说首先是零税收。如果你来自像加拿大这样的地方,我想我不需要告诉任何人那里的税收情况,还有就是便利性,这里的商业非常容易建立。我在大约30天内就成为了居民,一切都超级方便。所以如果你想快速去某个地方,而又不想经历整个公民身份的过程,迪拜就是最容易到达的地方。
像是一个现代化的大城市,连接非常好,讲英语,所有这些因素。太棒了。是的,这很有道理。所以你在那边,正在进行许多不同的项目,平衡着同时进行的工作、创业项目,当然还有你的Tech with Tim YouTube频道,这太棒了。我鼓励人们去看看,如果他们还没有的话,但也许你可以谈谈你最近在忙些什么。是的。
是的,当然。最近我有一个科技创业公司,我在过去几个月里逐渐结束了它,我想我们可以稍后再谈这个。显然,我在做YouTube频道。这是我至少全职做了大约五年的持续工作。现在我结束了那个科技创业,我会更加全心投入,制作更多内容,也在其他平台上发布。
然后我总是在寻找其他的副业。你知道,做视频每天都很单调,所以我试图稍微离开镜头,做一些辅导,运行课程,进行不同的项目。我可能会再次做一个学校社区。就是,嗯,现在我在寻找下一个大项目来解决。
没错。是的,对于那些只是听音频的人,你可能没有意识到Tim其实很年轻。你现在多大了?我24岁。24岁。所以我想你可能是我在播客上采访的第二年轻的人,可能是最年轻的人。我已经做了超过100集,差不多150集。所以我们通常是在和那些年长、拥有更多生活经验和行业经验的人交谈。
但你既年轻又非常有知识和成就,因为你在非常年轻的时候就开始编程。如果我没记错的话,我记得你在12岁的时候就开始学习数据结构和算法,这是你在某个时刻提到的。
是的,我不确定12岁时是否了解数据结构和算法,但我确实在12岁时开始编程,甚至可能早在11岁时就开始了。很难记得那时候的一切。大约在15、16岁的时候,我开始认真对待它,那时正处于高中阶段。到我上大学时,我已经相当擅长了,因为我已经做了很长时间。然后如果你想的话,我们可以谈谈那个故事。但当我在大学时,我开始了这个YouTube频道。它在那之前就开始了,但我开始真正认真对待它,然后我做了一段时间。
因为这个原因,我需要学习所有这些新东西,以便我可以在线教授它们。我同时在攻读计算机科学学位。是的,我迅速掌握了大量编程概念。但我从小就对编程产生了浓厚的兴趣,因为它非常有趣。我喜欢这样做。所以我并没有像一个14岁的软件工程师那样取得巨大的进展,但我确实构建了很多东西。自然,当你这样做时,你会很快变得擅长。
是的,绝对如此。当人们经常做某件事时,他们通常会变得更好。而是什么驱使人们去做得更多呢?他们喜欢它。正是如此。是的。你有早期的热情。也许你可以谈谈你成长过程中家庭的情况,因为你在安大略省长大,那里是加拿大人口最多的地区,离多伦多不远。年轻的Tim在他的环境和周围条件下是如何受到滋养的?是什么推动你不仅仅做很多孩子会做的事情,比如玩乐或被典型的青少年事务分散注意力,而是被编程和技术吸引?
当然。所以我认为有很多因素,很难只指出一个,但我很幸运有一个了不起的家庭,父母都在身边,我还有一个弟弟,他们总是给我机会去做几乎任何我想做的事情,无论是体育活动,还是我想要一台用于学习或玩电子游戏的笔记本电脑。
我从来没有想要或需要的东西是我无法获得的。所以首先,这就立即设定了基调。我在多伦多附近长大,我总是在做事情,我一直对数学和科学感兴趣,可以说是更偏向批判性思维,而不是创造性、艺术性类型的领域。
我喜欢做机器人,搭建乐高。即使在我七八岁的时候,我也会做这些事情。我的父亲是一名土木工程师。他有土木工程硕士学位,机械工程本科学位。所以他教了我一些东西,并给了我一些灵感。我记得我第一次接触技术时,
实际上是我在玩Minecraft时,有些人可能会对此有所共鸣,但我当时10岁,喜欢Minecraft,整天玩。我真的很喜欢Minecraft中的红石和构建东西。即使当时我不知道该怎么称呼这种工程过程。
我开始构建Minecraft插件。我在很小的时候就运行Minecraft服务器。哇。这最终让我接触到一些编程知识,比如修改配置文件,或者试图弄清楚如何登录Linux服务器以运行Minecraft服务器等等。
不知怎么的,这最终让我接触到HTML、CSS,这种非常传统的入门路径,通过早期的OG YouTuber,比如New Boston和Sendex。这些人对我来说是很大的灵感。只要我发现这一点,我就立刻被吸引住了。
这第一件事就是,我觉得这非常非常有趣。这是第一件对我来说真的很有挑战性的事情。因为在学校,对我来说,坦率地说,真的很简单。我从来不需要学习或做作业之类的事情。
所以当我发现这一点时,我可以全心投入,因为它太难了,我对学习更多的东西感到非常着迷。那种在键盘上敲击的感觉,构建即使是一个简单的网站,这种感觉是如此上瘾,我很快就进入了这个领域,然后开始学习所有更高级的东西。
是的,所以红石。我不是Minecraft一代的人。我是Doom一代的人。但那是电石之类的东西吗?我见过人们在Minecraft中构建图灵完备的计算器之类的东西。这是因为有一些电气路径属性或其他东西。是的。
是的,你可以……基本上是基本的逻辑门之类的东西。你可以在Minecraft中构建一个与门、或门或非门,所有这些东西。显然,这非常基础,但如果你上计算机架构课,第一章的内容,我几乎是通过在Minecraft中做这些事情学到的,这有点疯狂。你可以构建各种疯狂的东西。我从来没有像那样在Minecraft中构建16位计算机或完全功能的电子游戏,但我喜欢……
使用它并弄清楚,路径是如何走的。我更感兴趣的是这些,而不是建造房子或城堡之类的东西。是的。这很有道理。我喜欢这个游戏吸引了这么多年轻人。我现在不再年轻了,但我绝对认为这是一个围绕构建事物、探索和分享地图等内容的游戏。我觉得这太酷了。
而且,涉及到创造力。我孩子们喜欢玩Mario Maker,他们喜欢构建关卡和其他东西。你可以创建音乐作品。在Mario Maker中,你可以创建各种不同的东西。我认为这可能比你在Minecraft中能做的事情要受限得多。我期待着我的孩子们最终能够接触到Minecraft,但这似乎是一个很好的,我的意思是,Minecraft的赞美。你已经通过玩电子游戏了解了很多计算机架构。
是的,是的。我不知道我是否会说很多,但我对Minecraft非常着迷,以至于我自己建立了Minecraft服务器。我当时在卖捐赠角色之类的东西。你知道,你会进入一个社区,或者雇佣管理员和管理员之类的东西。所以我在很小的时候就做了这些事情。这大概就是激发了我的创业好奇心,因为它与工程组件相结合,构建东西,安装不同的插件,设置配置。
我在学习编程的同时做这些事情。是的,这真的很有趣,也是一个很好的渠道来探索所有这些东西。是的,你在运行这些服务器时真的很酷。你从中学到了一些早期的社区建设经验教训吗?在你运行服务器时有没有发生过任何紧急情况或噩梦场景,或者任何童年的早期战争故事?
是的,我能想到的有两个,这大概是一些创伤后应激障碍的伤疤。但第一个是我们服务器上的一个管理员。管理员,供任何听众参考,我相信你可能知道这意味着什么,但他拥有所有控制的完全访问权限。我有一个我信任的合作伙伴,我在现实生活中认识他。然后这个其他管理员,我们在过去的六个月里变得非常亲密。
在某个时候,他就像,我不知道,背叛了我们,嗯,你知道,开始破坏服务器,开始搞砸所有命令,做所有这些事情。所以我想信任和安全以及限制权限是我学到的一件事。然后我们还有另一个人,嗯,与此略有不同,他加入了服务器,他实际上是在为他的一个课程进行实验,这非常有趣,他试图证明权力如何被金钱腐蚀。
在15、16岁的时候做这样的事情真是疯狂。孩子们的Minecraft服务器。是的,我知道。这真的很奇怪。当他加入服务器时,我们并不知道这一点,但他开始捐赠相当可观的金额。所以他可能捐赠了200美元或250美元之类的。慢慢地,他通过给我们服务器所有者的钱而逐渐攀升,获得额外的钱或额外的命令或控制,或者像你知道的那样,攀升到服务器的权力层级,这种层级是存在的。任何在这些世界中玩的人都知道你有不同的角色。
然后在做了几个月之后,他告诉我们,他一直在试图利用我们,并把这当作实验。无论如何,这不是一件负面的事情,只是有趣。我们完全不知道他一直在这样做。所以。
我不确定这个故事是否连贯,因为我真的记不清楚13岁时的所有事情。这真是疯狂,因为这是你在现实生活中经历的事情。这就是世界的运作方式。人们试图购买市议会的席位,以便获得倾倒放射性废物的许可证。正是如此。就像Burns先生那种事情,对吧?是的。所以你亲身经历了这一切。真是一次惊人的经历。首先,有人背叛了你……
因为当你试图运行一个创业项目时,这种事情时常发生。我是说,如果你试图运行一个创业项目,最常见的事情就是你从错误的人开始,发现这些人基本上是累赘。绝对如此。我不知道你对此有什么看法,但我非常反对共同创始人。我是说,自己做,不要带其他人进来,因为他们永远不会像你一样对它充满热情。但,是的……
所以你在高中时,轻松通过,成绩优异,因为你对这些东西非常感兴趣。而且,听起来你有良好的生活习惯。我是说,那些总是在玩Minecraft的孩子,保持专注,玩Minecraft和编程,保持低调。你并没有像一些我最近采访过的人那样,卷入一些非常糟糕的事情。
而且确实卷入了一些非常糟糕的事情。听起来你避免了这一切。你怎么说?是的,是的,我会这么说。我的意思是,像任何孩子一样,我也犯过错误。我做过一些我不该做的事情。我偷偷溜出家门,嗯,有些事情我不会在这个播客上说。但一般来说,一切都根植于,
你知道,我有目标。我有我喜欢保持忙碌的事情。我从小就对自我提升感兴趣。再次,我很幸运有一个了不起的家庭,父母都灌输给我良好的习惯,并给了我很多自由去探索和弄清楚我喜欢什么。他们并不太限制我。
而且他们让我做很多不同的事情。所以是的,我,你知道,我算是运气不错,但显然我也利用了这种运气,嗯,
是的。我想我今天的样子还不错。好吧,我的意思是,拥有一位土木工程师的父亲,这听起来真的很不错。我是说,那是硬核工程。
当你是土木工程师时,你犯错了,桥就会倒塌,人们会死。当你是软件工程师时,我是说,是的,确实有一些极端案例,比如波音的丑闻。但大多数情况下,像服务器宕机之类的事情,通常不是生死攸关的。但当你有那种……
所以,也许你可以多谈谈你的父亲。告诉我你的父亲是什么样的人?
是的,当然。我的父亲非常棒。非常像一个家庭男人,总是提供者,所有这些。但他也非常聪明,非常专注于工程。同样,他上大学时学习了工程。他的父亲总是在建筑工地工作,建造东西。
我父亲在我们住过的任何房子里,几乎都是自己建造了一半或完全翻新了一半。他在外面建造了巨大的甲板。他甚至做过更技术性的工作。他曾在一家家庭自动化公司工作,在40,000平方英尺的房子里安装先进的安全系统、生物识别系统和50台电视的音视频系统。
他总是让我接触这些。即使在我14、15岁的时候,我也会作为他的助手跟随他去这些工作现场,给机架接网线,做所有这些事情。所以我更多地倾向于软件方面,而他则更像是实际动手,真正用锤子、钻头和锯子以及他工具棚里的数十亿工具来建造东西。但是的,我在
很小的时候就接触到了这些,甚至是简单的乐高,现在作为成年人我知道乐高和机器人玩具是多么贵,嗯,你知道,他会给我买所有这些东西,和我一起搭建,帮助我完成这些项目,并且总是对我所做的事情表现出兴趣。当我开始编程时,他的一些同事是程序员,他们在做他们的工作,所以他会把我介绍给他们,他们会推荐你知道的编程语言或下一步要学习的内容。
所以是的,他在各个方面都非常支持我。绝对是我成长过程中的榜样,我想要像爸爸一样,但在不同的领域。是的。是的。你的弟弟也是,嗯,
我想他的名字是Noah?是的,Noah,没错。是的,他也同样聪明,热衷于科学和这些东西。绝对可以谈谈你和你弟弟的关系。顺便说一下,如果你在听,我只是想在深入探讨大量编程问题之前,先建立一下这个人的背景。我准备了大约20个问题来问Tim,但我只是想先对他的背景有更多的了解。
是的,是的,没问题。我可以整天谈论编程。这些问题可能是我在许多播客中没有被问过的更独特的问题。所以,嗯,我的弟弟Noah,是的,也非常聪明,非常聪明。和我一样,他也仰望我的父亲,但更多地转向科学,而不是……
我们称之为工程。他对化学和生物学非常热情。他现在正在攻读生物化学学位,准备进行硕士学位。他21岁,我相信在拍摄时。他刚刚完成本科学位,然后我们看看他将来会做什么硕士学位或其他什么,但他非常专注。他在实验室工作,坐在课堂前面,和所有教授交谈。
是的,他也非常聪明。我和他会一起做项目。他会在我们年轻时帮助Minecraft服务器。当时他在学校上计算机科学课程,考虑到我并没有真正帮助他太多,他自己做得也相当不错。所以,是的,真是个好家伙。不幸的是,我没有见到他太多,因为我在迪拜,而他在加拿大的另一边。上次见到他是在几个月前,我刚去拜访他。所以,嗯,是的,但那就是Noah。好吧,我想谈谈大学,因为你有一个独特的大学经历。首先,嗯,你没有完成大学,你辍学了。嗯,所以我会直接说这一点,并且我会附带说明,我们总是鼓励人们不要傻,继续上学。
但是,有时有一些特殊情况是可以辍学的。但,嗯,你是我想说的,进入大学期间极其不幸的少数人之一,对吧?所以我没有在疫情期间进入大学,但我在疫情发生时正在上大学。
所以,我的大学第一年是2018年,2019年。我出生于2000年。所以是的,当我18岁快19岁的时候,我想,或者我在大学时刚满19岁。无论如何,我非常幸运,像我第一年的大学生活,你知道,我们在加拿大称之为大学,而不是学院。学院是稍微不同的东西。
我得到了我的第一年大学体验,你知道,和一个随机的人住在宿舍里,做所有的派对和大学的事情。我相信你们中的许多人还记得这一点。所以我对此非常感激。我在之后的整整一年里,和五个其他男孩住在校园外的一栋房子里,离学校非常近,我们可以步行。
我得到了相当长一段时间的面对面授课,尽管我没有去太多的课程,我们可以稍后再谈。然后发生了COVID,差不多在我完成第二年时。然后当我进入第三年时,那完全是在线的。
所以我在第三年结束时只上了一学期,然后辍学。那时我住在家里。我从大学搬回家,因为距离很远。是的,我可以谈谈辍学的决定,但至少这就是
我在大学的经历。像我得到了不错的几年,实际上得以结识人,进行社交互动。所以我对此非常感激,相比那些在家里或地下室上第一年的学生。是的。好吧,我很高兴你得到了这些经历。再一次,我对任何支付全额学费却在家里上Zoom课程的人表示同情。这听起来像是一场噩梦,但,嗯,听起来,你说你甚至没有去太多的课程。像,你的大学经历是什么样的?
是的,我认为,嗯,不同的学位是不同的,对吧?但至少对我来说,在计算机科学方面,我不会说我知道学位中的很多内容。有些课程,尤其是那些非常重的编程课程,嗯,是的,讲座对我没有帮助。我已经知道那些内容。
但我发现教学风格,比如75分钟的讲座,讲解PowerPoint幻灯片,尤其是当我们谈论像编码这样技术性和实践性很强的内容时,这并不是一种有效的学习方式。所以我在所有课程中表现得很好。你知道,我通过了所有的期中考试,成绩很好。我获得了荣誉,所有这些。但我发现我可以在家里自己学习得更好。比如说,如果录制了讲座,我宁愿以两倍的速度观看。
在本周的播客中,freeCodeCamp创始人Quincy Larson采访了软件工程师和多产的编程教师Tim Ruscica,他是Tech with Tim YouTube频道的创始人。他还在freeCodeCamp的YouTube频道上开发了课程。我们讨论了:- Tim如何在19岁时通过黑客手段获得微软实习机会并获得70,000美元的薪水 - 他是如何通过玩Minecraft在小时候学习计算机架构的 - 他从一次失败的科技创业中学到的教训 - 为什么他推荐Python作为第一门编程语言。“这是最不令人感到压倒性的事情,可以让你动手实践。”你能猜到我在开场时播放的是什么歌吗?此外,我想感谢每月支持我们慈善事业的11,133位善良的人,他们使这个播客成为可能。你可以加入他们,支持我们的使命,网址是:https://www.freecodecamp.org/donate 我们在对话中提到的链接:- Quincy提到的《真实天才》的课堂蒙太奇:https://www.youtube.com/watch?v=wB1X4o-MV6o - Tim的一段模拟编码面试视频:https://www.youtube.com/watch?v=3Q_oYDQ2whs - Tim的课程:https://techwithtim.net/dev</context> <raw_text>0 或者我宁愿只是浏览PowerPoint幻灯片,挑出重要信息,或者和我的朋友打电话,讨论想法,找出解决这个问题的方法。大多数时候,我其实更想自己学习。我发现很多时候,当我去听讲座时,要么我根本不专心,因为它没有吸引力而且很无聊,要么我根本听不懂讲师在说什么。
是的,我不想让人觉得我在贬低大学,但坦率地说,很多教授我都觉得他们不够资格来教书。这也是我在很多YouTube视频中提到的事情之一。我收到的评论中有一个是:“你在20分钟内讲解的这个概念比我教授整个学期讲的要好。”
对我来说,我希望不是这样的,但这就是我在网上取得成功的原因,因为我知道如何以一种有意义的方式将内容拆解开来。我发现大学在这方面对我来说并没有做到,至少在面对面的讲座中。我确实记得在学校时,有很多教授让我想,为什么他们甚至要教这个?他们一定在研究方面很优秀,因为我几乎听不懂他们在说什么。他们的英语水平非常有限,而且他们似乎没有任何提高英语的愿望。
就像没有任何提高教学水平的愿望。他们只是走进教室,对着黑板讲课。你看过《真实天才》这部电影吗?
1980年代的电影,Val Kilmer主演。太棒了,所有听这个的人都去看看《真实天才》。它讲的是一个博士项目,我想是在卡内基梅隆大学或麻省理工学院之类的地方。整个主题是一些非常聪明但又非常古怪的人,1980年代的氛围很有趣。但有一个音乐蒙太奇,他们在做学校的事情。起初,你看到教室里,
学生们坐在那里打哈欠,教授正如我所说的那样,对着白板讲课,根本没有吸引力。然后他们回到同一个教室场景,有人设置了录音机,其他学生仍然坐在那里,感到无聊。然后你再回去,最后的场景就是...
是的。
对。与实际情况相比,大家可能真的在忙着做程序,而不是只是坐在那里。当然,他们可能会在慢跑时以双倍速度听这个讲座。但坐在那里听讲座,必须是非常吸引人的。如果你看David Malin,
哈佛CS50的教授。他非常吸引人,并且他已经将他的教学方法调整到21世纪的注意力跨度。没错。你可以观看整个大学课程。每年我们都会发布一个新版本的课程,最新版本。但这是我见过的最吸引人的大学课程。
我有幸在播客上采访过他。但你知道,大学的很多内容并不是深刻的见解和启示,而是和两三个人坐在研讨会上,与一个极其博学的人进行非常亲密的对话。很多时候是在一个有500人的讲堂里,大家都在分心,打开笔记本电脑做其他事情,没人真正专注,但他们觉得自己必须在场,或者教授已经明确表示他们必须在场,出勤率会影响成绩等等。但听起来你能够避开很多这些。我是说,这对你的成绩有影响吗?你说你在期中考试中发现很多东西你已经知道了,因为你已经编程多年,类似的事情。但你有后悔错过讲座吗?
不,老实说,我希望我在大学时早点开始逃课。
也许这听起来很疯狂,但对我来说,这真的是一种深刻的时间浪费,至少对于我学习的方式来说。我大约在第二学期时意识到这一点;第一学期我几乎上了每一节课。你还得记住,我是在工程学院。虽然这不是你能选的最难的课程,但也不是简单的课程。课程负担不轻。所以你每周有30小时的面对面讲座、辅导或实验室,或者你需要在场的其他课程。
每周花这么多时间坐在教室里,而你还有四五个不同的作业要做。我在经营我的YouTube频道,试图赚钱,还要做所有这些额外的事情。你想和朋友们一起出去玩,想要某种平衡。如果你去每一节讲座,你很快就会发现没有时间去做任何能帮助你学习的工作。
所以,对我来说,我越是逃课,成绩就越好,因为与其在那段时间里混日子,我实际上是在学习。我可以在那段时间里学到更多的东西,而不是坐在500个人面前,基本上被当作听众。然后,你知道,尽量快速写下所有笔记,而那些笔记之后会在线发布。对,所以这真的是,
在大多数课程中都是一种浪费时间。有几门课有很好的教授。我修了商业辅修,所以在大多数这些课上我去上课,因为那些课更吸引人,而且很多内容并不是在线发布的。他们只是讨论这些内容,所以你需要在场才能理解。
我足够聪明,建立了一个网络,所有人都在每一节课上,所以他们会告诉我一些可能没有在线的信息,比如,明天有个突击测试,你应该来上课。所以我在某种程度上是在破解系统。老实说,如果我想做所有其他事情,我就负担不起去上课。所以我决定不去。是的,我错过了一些出勤分,但我弥补了。这真是深刻的...
就像你说的,当你停止上课时,成绩反而变好了。百分之百。并不是对每个人都适用,但对我来说,我知道我如何学习,我知道我在那时已经学会了如何学习。所以只要我大致知道课程大纲,大多数时候我会在YouTube上观看相关视频。我甚至可能会回去看我自己的YouTube视频,以记住某个概念。是的,这更有效,对吧。
这也是我做的事情。我会观看和收听我的很多播客,因为我从这些对话中学到了很多,是的,这很好。让我们谈谈YouTube,因为你不仅学习了所有这些东西,还转过身来开始教给其他人,以至于你能够迅速成为最受欢迎的、观看量极高的,
硬核编程YouTuber,知道不是那种生活方式的编程,而是实际上,来吧,构建这个。这里是如何构建的。这个概念是如何运作的。就像,我想是那种硬核程序员的YouTuber。你在超级年轻的时候就做到了这一点。第一次我们谈话时,我想你大约19岁左右。是的,这太疯狂了。但是,你很快就开始作为一名教师建立自己的名声。是的,这很有趣。
当我大约15岁时,我在一个夏令营工作。别担心,我会谈到YouTube,因为这算是开始。我在那里担任夏令营STEM部分的项目协调员。在那之前,我已经在那里工作了几年,像14岁时就开始了。等我在那里工作了两年,营地的主任知道我对编码感兴趣,他想要发展STEM方面的内容,因为我们主要是一个体育营地,并提供编程专业和机器人等课程。
所以我承担了这个任务,开始构建一个为期一周的半天编码专业课程,教孩子们如何编码。那时我对编码已经相当熟练。我也知道这对我的生活有多大的影响,我非常享受这个过程,我想让孩子们接触到它。所以我花了很长时间来构建这个编码专业。
在那种规划阶段,我最终创建了大约20个YouTube视频,这是我关于Python基础知识的第一个YouTube教程系列,基本上涵盖了Python到面向对象编程的内容。
我发布了这些视频,并将它们添加到我为孩子们创建的“学校网站”上。一些随机的人开始找到这些视频,并开始评论我的教学风格和呈现方式,并说:“这真的很好,我们想要更多你的视频。”但与此同时,我也在夏令营教孩子们。
我从和这些对编码一无所知的孩子们坐在一起中获得了巨大的快乐。在一周结束时,他们正在构建选择你自己的冒险游戏或测验游戏。他们对此充满热情。我不得不把他们从电脑前拖走,让他们回家。我知道很多孩子现在已经进入计算机科学专业或进入这个领域。这真正点燃了我对教学的热情。我不会说我当时很出色,但我认为我有某种自然的驱动力。
至少我真的很享受这个过程,然后通过这些YouTube视频,我开始获得很多积极的反馈,我想:“你知道吗,我就随便发布一些随机视频。”所以在我还在高中时,16、17岁的时候,我就随便发布这些YouTube视频,虽然没有从中赚到钱,但你知道,获得了一些观看量,积累了经验,那个时候我用着劣质的麦克风,坐在我的卧室里。然后快速过渡到我进入大学时,我已经积累了大约两三千的粉丝。
我不知道为什么,但我有一种感觉,我可以做的事情比玩Fortnite、逃课和什么都不做要多。我想:“你知道吗?我就全力以赴做这个YouTube频道。”我在大学的第一年这样做了,并且很快就发展起来了。那时我遇到了你们,开始在FreeCodeCamp上发布一些内容。你们当时给了我很多曝光。很多人来到我的频道。我记得有些日子,我的订阅者从每天60个飙升到1000个,因为FreeCodeCamp刚刚发布了我的视频。
是的,之后就这样起飞了。这就是教学的开始。是的,为了给大家一个视角,我想你现在有超过200万的订阅者,我知道订阅者在我谦虚的观点中算是一种虚荣指标。这并不意味着200万人都在想:“哦,Tim今天在干什么?让我们关注Tim。”FreeCodeCamp有1000万的订阅者,我们发布视频的第一天可能也只有大约...
4万的观看量,或者如果它真的很受欢迎,可能在第一个月会获得大约50万的观看量,但并不是说我只是想快速让人们调整期望。并不是说人们像我不知道你在街上走的时候,人们会认出你:“我可以和你自拍吗?”这种情况一般不会发生在我身上,可能会发生在Bo身上,因为他在每个视频的开头,但这不常见。
是的,是的。为了纠正一下,我在我的主YouTube频道上大约有160万的订阅者。在我的生活中,可能有15到20次人们在现实生活中认出我。就像上周在迪拜购物中心,有个随机的家伙说:“嘿,你是Tech with Tim吗?”所以确实会发生,但我绝对不是名人,尤其是考虑到观看这些内容的观众类型。是的,我的意思是,如果你在...
音乐、艺术或电影等领域,你会经常被认出。像听这个播客的人,他们非常认真地想要扩展自己的技能,成为开发者。这是一个非常非常小的群体,和像Taylor Swift这样的明星相比,当然是的。所以,但仍然这也是相当可观的。所以,我也想强调,
这并不是关于人数的多少,而是你对某人的影响。如果有人坐下来观看你发布的全面的Python项目课程,这些课程非常全面,教学质量很好,规划得也很好。我的意思是,如果有人坐下来做这个,他们会花费大量时间与你在一起。他们会认真思考你分享的内容。这是一个完全不同层次的亲密感和影响力。他们可能能够带走这个。
我需要阻止我的猫可能断开通话。没关系,我以前也遇到过这些问题。是的。所以他们可能在以完全不同的方式思考你和你在他们学习中扮演的角色。他们把你视为一个曾经经历过的人。所以显然你在学校时,
即使你对讲座的价值没有那么看重,你仍然取得了很好的成绩。你知道,从教别人到自学,听起来你有这种直觉,也许我根本不需要上大学,对吧?也许这是一千年的机构,至少对像我这样的人来说,已经有些过时了。这个想法是否在你脑海中闪过?
是的。所以我会带你走过这个思考过程。顺便说一下,这并不像“好吧,我就退学,我讨厌大学”那么简单。我今天告诉人们,去上大学。我并不不推荐大学,尽管我的一些视频可能会有一些吸引眼球的标题。一般来说,这总是有细微差别的。我认为如果你是一个积极进取的人,你知道自己很有动力,你知道自己会努力工作,而你在大学里花的时间,
实际上是花在自己身上,而不是玩电子游戏,也不是只是坐在那里无所事事,那么你可能会比在大学里更有效地学习你需要学习的东西。这是我在上大学时发现的。而且发生的事情是,
我们处于一种特殊的情况,我已经完成了两年半的学业。所以所有逻辑上,我的父母和其他人都告诉我:“就完成它吧。这只是你生活中的一年。”因为我有一个夏季学期。所以你确实需要再上三个学期。你就完成了,拿到学位。结束了。这是这个时间的逻辑部分,你知道,快点结束。但在那时,我已经通过我的YouTube频道赚了很多钱,
我已经在微软找到了实习机会,而大学本该给我的所有东西,我几乎都已经拥有了,我已经实现了这些目标。在这一点上,大学的课程开始变得更加困难,某些课程我并不一定需要去上课,但我得付出比以前更多的努力。所以我在大学里投入的每一点努力都
在削弱我在YouTube频道和我当时所做的所有课程上的进展,我现在每天工作12到14小时,感到精疲力竭。我就是无法跟上。我没有平衡。我坐在我的地下室里,在COVID期间,大家都在应对抑郁和所有这些事情。
我问自己,这个机会成本真的值得吗?我应该花费大约15,000美元,完成这个学位,而我知道每一秒我都在做这件事,我会赚得更少。这会影响我能取得的进展。最终我做出了决定,我真的不认为我需要这个。如果我真的需要,我总是可以回去完成它。
也许我得重新开始。也许我的学分不被承认。但如果那样发生,没关系,我会去做的。我知道如果我想,我总是可以完成学位。所以这就是我的理由和思考过程。我做了一些视频,绝对不是一个简单的决定。我的生活中的每个人几乎都在告诉我不要这样做,而是做其他事情。但现在,显然,他们都很高兴我这样做了,他们信任我的判断。所以,是的。是的。
让我们谈谈微软,因为在19岁时获得一份工作... 这可不是简单的事情。我想,首先...
我会认为这可能意味着你会有几个实习机会,然后逐步积累,或许你在大四时,终于得到了微软的机会。我敢肯定,每个申请微软实习的人,可能都有数十人被拒绝。这是一个相当竞争激烈的实习。也许你可以谈谈这个实习,你是如何获得的,是什么样的经历。这是在COVID期间,对吧?是的。
是的。所以我会带你走过整个过程。我认为这对很多观众来说都很有趣。坦率地说,我当时在大学的合作项目中,这基本上意味着在夏天,你知道,你有大学的助理,你应该去找某种技术相关的工作。他们有数百个大学批准的职位发布,你进去申请。
即使在那时我已经拥有的所有资历,比如编程、YouTuber、与freeCodeCamp合作,做了X、Y、Z,所有这些其他学生并没有的额外经历。
我在大学申请的87个工作中,仍然只得到了一个面试。所以现在那些正在申请大量工作的人的人说:“哦,这太难了。”相信我,我在刚开始时也经历过这种情况,即使我拥有很多人认为的疯狂资历。是的。现在我很幸运,因为我在大学之外有一个网络。我认识一些人,我有品牌合作,因为YouTube。到那时,我的YouTube频道大约有十万订阅者。
微软实际上联系我,想让我做一些与YouTube相关的内容。他们想支付我制作一些微软技术栈的广告。
通过这个机会,我当时正在寻找实习机会。所以星星对我来说正好对齐,我给微软的人发了消息,说:“嘿,我很乐意和你合作,但你能帮我联系任何招聘人员吗?我在找实习机会。那是什么样的?”所以他们把我连接到公司外的一个招聘人员,然后接着我就进行了一次20分钟的电话面试,像Google Meet那样的面试,这有点讽刺,因为这是
微软在Google Meet上进行的面试?他们用的不是Teams,我记得。也许现在他们可能会用Teams,因为他们建立了那个基础设施。是的,我记得是在Teams上,但我不知道。你知道吗?忽略这一点,因为也许我像个滑头。只是告诉他们,他们没有用Skype,因为他们确实花了数十亿美元收购了Skype。
关键是他们在某个平台上进行面试,我不认为是Teams。也许是Google。我不知道,但我参加了某种视频通话,这在当时并不像现在那么普遍。我做了一些非常简单的现场编码问题。他们把我放在一个在线代码编辑器里,他们说:“嘿,你知道,回答这个问题,基本上需要使用字典并计算一些值,以确保你足够合格,以便我们进一步考虑你。”
他们甚至没有要求我的简历,什么都没有。我认为我的YouTube频道对他们来说已经足够了,值得花时间这样做。然后在我完成这个后,面试中很明显我通过了,他们给我发了邮件,说:“嘿,我们想把你带到雷德蒙德,这是微软的总部。我们想邀请你进行一次面对面的面试。”
在这个时候,我还不知道整个“LeetCode世界”和编码面试是什么样的,甚至这个电话筛选,我是完全没有准备的。我根本不知道我在这里要面对什么。
所以当我听到他们安排了面试,可能是在2020年1月,疫情前的两个月。我就开始努力准备LeetCode的内容。我开始查找所有这些资源,上Reddit,找到所有参加过这些面试的人。我开始意识到:“好吧,我得准备技术编码面试,而在两个月前,我甚至不知道这是一回事。”
所以这也是我与Algo Expert合作的开始。因为我开始使用Algo Expert进行准备,然后是LeetCode,最后我被他们雇佣,制作了一些课程。关键是我非常努力地准备所有这些内容。然后他们把我飞到雷德蒙德。当时我在渥太华,渥太华是加拿大的首都,离多伦多几个小时的路程。
所以我飞了大约11个小时,经过中转,住在雷德蒙德的酒店,这是我第一次独自旅行。到达后,你知道,18岁租车,最终开车到雷德蒙德办公室。你说的关于那些实际上获得微软面试的人,多少人被录用的事情。搞笑的是,我只是作为一个随机的人被面试这个团队。这不是一个招聘轮次。
这不是这些项目的一部分。他们会挑选顶尖学生并雇佣他们。微软有很多不同的招聘途径。对。当时我坐在微软办公室的大厅里,看到大约40个和我年龄相仿的大学生,正在申请实习。
招聘人员告诉我,在这些40个人中,只有一个人会被录用,去申请他们所申请的角色。所以无论如何,这是一种独特的情况... 所以侧门。是的,继续。你说这些时,我听到的是侧门。是的。
哦,是的。这是我再次强调,我在进入时并不知道这些。我完全是盲目的。我没有花几周时间在线研究这些东西。我现在在微软。我知道我有面试。我期待它是技术面试,但我没有进行过编码面试。我没有真正的开发工作,除了我做的一些随机自由职业工作。
所以我几乎是以盲目的状态走进去,唯一的例外是我知道我需要通过某种技术测试,但我不知道那是什么水平。所以我做了所有这些准备,然后我进行了三次技术面试。第一次是相对简单的中等难度的LeetCode问题。第二次是更像设计风格的问题,并不涉及复杂的算法。最后一次实际上是与组织的负责人进行的面试,这是一种非常...
<context>#150 编程就是挣扎!我采访了19岁时在微软找到工作的Tim Ruscica 在本周的播客中,freeCodeCamp创始人Quincy Larson采访了软件工程师和多产的编程教师Tim Ruscica,他是Tech with Tim YouTube频道的创始人。他还在freeCodeCamp的YouTube频道上开发了课程。我们讨论了:- Tim如何在19岁时通过黑客手段获得微软实习机会并获得70,000美元的薪水 - 他是如何通过玩Minecraft在小时候学习计算机架构的 - 他从一次失败的科技创业中学到的教训 - 为什么他推荐Python作为第一门编程语言。“这是最不令人感到压倒性的事情,可以让你动手实践。”你能猜到我在开场时播放的是什么歌吗?此外,我想感谢每月支持我们慈善事业的11,133位善良人士,是他们让这个播客成为可能。你可以加入他们,支持我们的使命,网址是:https://www.freecodecamp.org/donate 我们在对话中提到的链接:- Quincy提到的《真实天才》中的课堂蒙太奇:https://www.youtube.com/watch?v=wB1X4o-MV6o - Tim的一段模拟编码面试视频:https://www.youtube.com/watch?v=3Q_oYDQ2whs - Tim的课程:https://techwithtim.net/dev</context> <raw_text>0 我会把它归类为一个困难的LeetCode问题,我认为它并不是设计成可以在规定时间内完全解决的。好吧,无论如何,在我们继续之前,让我给大家提供一些快速的背景信息。首先,LeetCode是一个人们去做算法和数据结构编码面试问题的网站。你也可以在freeCodeCamp上做这些,我们有很多这样的题目。
然后AlgoExpert是一个专门帮助你为这个过程做准备的网站。它由一个叫Clement的人运营,他非常酷。他在YouTube上也有一些不错的视频。我希望在某个时候能请他上节目。你为他工作过。所以你没有在... 只是因为你的措辞,我想澄清一下。你是在AlgoExpert工作,而不是在LeetCode。是的,是的。然后我想观察的另一件事是,现在这一点非常重要...
你的声誉在某种程度上是先于你的。你已经做了所有的工作来建立你的声誉、网络和技能。这三者是我告诉人们要努力的三条腿。当你没有声誉,没有网络,只是盲目地申请网页表单和类似的东西时,即使你正在经历一些...
你知道,大学赞助的,比如说,嘿,我们要举办一个招聘会。我们会飞你过来。这会很有趣,所有这些东西。大约40个人非常努力。那么你成为那个获得机会的人的几率有多大呢?嗯,我的意思是,从数学上讲非常低,肯定是的。是的,但...
如果他们甚至不知道你基本上没有竞争,只有你一个人,他们只是试图决定,这是一个“是”还是“否”的几率有多大呢?对。他们并不是在决定,这40个人中谁是最优秀的。正是如此。他们只是在说,这个人够好吗?你知道,所以我想象你在这40个人中是非常有优势的。
百分之百。而且那40个人,我甚至认为他们并不是在申请同一个团队或任何类似的东西。发生了什么?再一次,我承认这非常非常幸运。星星似乎对齐了,但我也为自己设定了能够处于那个位置的条件,以便能够发生这种情况。
嗯,他们几乎为我在那个团队上创造了一个角色。我进去面试时,他们甚至没有为我面试的职位发布正式的招聘信息。我不知道薪水会是多少,我甚至不知道我将要做什么,我将在哪个团队工作。最后我实际上是在数据科学团队的VS Code的Python扩展上工作。顺便说一下,这就是我最终工作的地方。但无论如何,他们几乎是把我带进来,说:“看,如果他不错,我们就会雇用他,因为,
他是Tech with Tim。这可能是一个有价值的资产,无论他们出于什么原因把我带到那里。如果他表现不好,我们就送他回家,或者说我们在飞他来面试上浪费了一些钱。这就是发生的事情。因为我在面试中表现良好,正如你所说,我没有竞争。他们只是说他通过了标准。我们会雇用他。这就是发生的事情。是的。我们会谈谈——我的意思是,这一定很疯狂。你的父母可能会很高兴。你的教授们——
在他们知道你是谁的情况下,因为你没有上课,我想他们会很高兴。哦,是的,我知道他能做到。我做得很好,教会了他。可能很多人试图声称功劳。但是你19岁,你刚刚通过了微软的面试。世界上最大的科技公司,可能像我知道的在谷歌和微软之间,但,还有Nvidia,但,
我们来谈谈那是什么感觉?这只是很酷。我是说,你没有任何可以比较的东西,没有先例。你19岁,对吧?这是你第一份大工作吗?我想象你可能有过暑期工作和类似的事情?显然你在夏令营教书和类似的事情,但也许你可以解释一下收到那个offer的感觉,以及那时你脑海中在想什么。因为你在渥太华,你在上学,对吧?
疫情即将开始。在这一点上,疫情的开始是否有任何动摇?我必须感谢我的妈妈,因为她实际上在我飞往华盛顿或西雅图的前一两天给我打了电话。她说,听着,就像当你在飞机上时,戴上口罩,擦拭座椅。这里有一些东西。我们并不真正知道这是什么,但要小心。我说,好吧,妈妈,没问题。我会没事的。然后在我从...
面试回家后,整整两周后,疫情开始了。所以这不是在西雅图。那是美国的第一个地方,确实是。很可能在那架飞机上有些人已经感染了COVID-19。就像,我
在我去那里前一两天,正是人们第一次听说这个东西,人们并不真正知道这是什么,但有一些关于它的讨论。中国发生了一些事情。但再一次,我们真的不知道任何事情。然后大约两周后,那场巨大的浪潮袭来,大家都知道这是什么,并且感到恐慌,世界末日来了。所以如果我在两周后才进行面试,我就不会在微软工作,因为他们会取消面试,然后我就无法在那里工作。是的。
好吧,所以你回到渥太华。他们当时告诉你了吗?他们举起手说,你得到了这份工作,还是说我们会通知你?那么发生了什么,再次回顾这一点,我知道对观众来说听起来很疯狂。但在我通过最后的面试后,那是与首席负责人的面试,最后的boss,等等。他实际上带我参观了我们所在的整个微软办公室。
几乎就像他在试图说服我去那里工作。所以我几乎在那时就知道我得到了工作邀请,但我没有正式的,比如说这是薪水,这是你开始的时间,这将会发生什么。我一旦回到渥太华,大约两天后,他们就给我发了正式的电子邮件,祝贺我。然后让我通过微软人力资源部门的庞大人员,填写所有这些表格和东西。
所以当我第一次收到那封电子邮件时,我记得大约是晚上8点。我刚从房间里出来,告诉我的室友。每个人都非常高兴。我们在庆祝。是的,这是一种非常不真实的感觉,因为你知道当你获得这种级别的职位时。你在那时就已经为生活做好了准备,因为你现在在简历上有了那种印记,表明我足够优秀。我在这里证明了自己。所以是的,这是一种压倒性的感觉,所有这些都得到了回报。
嗯,你知道,所有这些辛勤工作终于得到了回报,尽管在YouTube频道上已经有了一些回报。这也是一种权威的标志。我确实知道我在说什么。我实际上擅长编码。因为在那之前,尤其是当你在16、17岁时教编码时,确实会有一种强烈的冒名顶替综合症。嗯,你知道,当你走出去,把自己展示出来,可能你犯了错误或有什么问题。我要说的是,这几乎是很多验证,我可以总结一下。听起来确实如此。
那么,你会怎么做?显然,疫情正在爆发。这是一个独特的情况,希望没有人会经历这种情况,因为希望在接下来的100年里不会再有像我们刚经历的那样的疫情。希望下次我们会更有准备,一切都会好起来的。我们来谈谈,他们给你提供了多少?我相信很多人都很好奇,这个19岁的孩子会得到多少钱?
是的,那真是疯狂。薪水是每月7,350美元。而且,我还是加拿大人,所以请记住,那大约是10,000多美元。在那时,我认为几乎是11,000加元,这太疯狂了。我的意思是,那时我赚的钱比我父母还多,或者比我认识的其他很多人还多。
这只是三个月的实习,所以并不是说我立即就有了终身的薪水。他们给我提供了大约5,000美元的搬迁津贴。此外,我将要在西雅图或雷德蒙德工作,他们会支付住房费用。他们会支付租车费用。他们会支付健身房的费用。
就像所有的一切。此外。是的。是的。如果你把整个薪酬包加起来,三个月大约是40,000加元。所以可能是30,000美元,仍然很疯狂。尤其是那是在2020年,但发生的事情是因为疫情的发生,他们并没有撤销我的offer,但他们只是说,嘿,这将会在线上进行。
所以最终这只是一个完全远程的实习。因此,我没有得到完整的体验。微软的实习生有一种独特的文化。所以我错过了所有这些东西。但团队确实做了很好的工作,试图给我一个真正不错的在微软工作的体验。老实说,这样也很好,因为由于是远程工作,我有足够的时间继续在我的YouTube频道上工作,做其他事情,并根据我的需要平衡这些事情,而不是每天必须在办公室待八个小时,对吧?是的。
太棒了。那么你接下来要去哪里?你完成了实习,而此时你仍然在上学吗?这是在你退学之前吗?是的,是的。所以我完成了实习,然后我又上了一个学期的课。在这一点上,我几乎已经知道我会退学,但我想我至少要完成我当前的学期,然后再做出那个决定。然后我退学了。然后现在我做了这个,我有了那种验证。我开始为AlgoExpert工作,做一些...
算法风格的问题。我最终与他们一起建立了一个编程专家课程,以及一个区块链课程。我做了很多其他的创业事情,是的,这就是那时发生的事情。
是的。所以,这样就结束了你的职业轨迹,这又是短暂的,因为你年轻,你还有大部分人生在前面。对吧。我很高兴听到这些事情,但正如我在采访早些时候承诺的,这不仅仅是一次自传式的采访。我们将深入探讨很多编程内容。让我们开始吧。是的。所以,
我想我想开始的事情之一,因为这确实与...
你的雄心和你所取得的成就有关。我从来不想成为那些负面的人,像是,哦,现在的孩子们,真是一群傻瓜,你知道,就像这种代际战争,人们发起的,像是,哦,他是个婴儿潮一代,或者,哦,他们是个Z世代,或者类似的东西。对吧。我认为这很荒谬。人们基本上是基于他们的环境而相似的。对吧。但你观察到的一件事是,
作为一个年轻人,环顾四周。你看到,我想你说过年轻人尽量不去思考超过他们必须的事情。类似的东西。我不确定... 我认为这也可以描述我父母那一代的很多人。如果你想按代际分组并成为代际主义者,星际迷航是,对吧?星际迷航有下一代。我是个星际迷航的超级粉丝,所以也许这并没有那么糟糕。但基本上...
你认为这仍然是事实吗?你几年前说过这句话,你显然已经成长和发展,但你认为很多人是否有某种内在的特性?我们将非常笼统地说,他们只是试图避免思考。你对不思考如何让人们落后有什么看法?是的。我想我可能会为此添加一些细微差别,现在可能会以不同的方式描述它,但
我注意到,当我在夏令营工作时,这就是我认为你提到的几年前的评论的来源,几乎在前两三天只是重新连接他们的大脑,教他们如何思考最基本的事情。像是,尤其是现在我们有AI和所有这些工具时,立即的反应是,我不知道某件事。好吧,立刻寻求帮助,或者立刻抱怨,或者立刻放弃。就没有挣扎。没有压力。
你知道,深度批判性思维,作为程序员,我们都知道,成为程序员实际上就是在挣扎,直到你找到问题的解决方案。对吧。所以我意识到,当我开始教这些孩子时,我必须向他们解释如何思考,像是,好吧,你有一个问题。让我们首先弄清楚问题是什么?
好吧,这是问题。问题在哪里?是在这个文件中吗?是在那个文件中吗?就像这样分解,超级基础的,像我们如何缩小某个东西的位置,最终尝试找到解决方案。我认为今天很多人,
他们并没有真正接受如何使用他们的大脑的训练。就像我说的,即使我们上学时,你知道,像是对或错。也许在数学课上,确实有一些批判性思维,你知道,你必须弄清楚那些事情。但在很多情况下,就像是,做这个以获得答案。只需这样做,遵循这个逐步程序。就像是,我们现在处于一种脑袋石化的文化中,你知道,甚至我自己也注意到我的注意力持续时间在下降,因为所有这些短视频,我甚至无法再看电影,因为太长了,类似的事情。所以是的,
我不知道如何简洁地表达这一点。我只知道
我作为一个孩子,真的很喜欢思考。我喜欢使用我的大脑。我喜欢挣扎和被刺激,这就是我进入编程的原因。当我向这些孩子介绍编程时,这几乎是他们第一次真正需要思考如何做的事情。显然,他们在这方面的技能非常缺乏,如果这有意义的话。我们来谈谈批判性思维技能。好的。我认为人们会... 批判性思维和问题解决这两个术语被随意使用,但...
这实际上是一个非常广泛的不同技能的光谱。也许你可以谈谈,你会如何细分批判性思维?也许你可以给出一些例子,说明你所发展的批判性思维技能是如何进步的,以及你过去是如何处理问题的,而现在你如何利用你所有的经验来处理它。是的。
是的,当然。所以我认为最大的事情和我给大多数人的第一条建议就是简化和分解。所以如果我们想把它带入...
你能够思考某件事情的第一种方法是将其分解为更容易思考的事情,对吧?就像如果我想尝试解决,像是构建一个Twitter克隆或类似的东西,即使现在,我们两个都不能立即做到。我们要做的第一件事是开始分解所有将要进行的较小事情,然后继续这个过程,递归地进行。对于所有这些步骤,直到我们得到一些足够简单的东西,以便我们可以思考解决方案。
所以这是我注意到的很多孩子的第一件事,对吧。就像,好的,我想让你制作一个Python程序,询问用户的名字,然后打印出,你知道,嗨,随便他们的名字。那句话中已经包含了步骤,但他们只是没有这样思考。对吧。他们一次性考虑整个事情,这让人感到不知所措,他们不知道该怎么做。他们为什么会知道该怎么做?因为他们从未做过,但第一件事应该是,好的,我想做这个。我已经知道怎么做什么?好的。我如何将其分解为更小的步骤?所以我知道这并没有完全回答你的问题,但这就是,
我认为每个人需要发展的第一个关键技能是,如何将这个非常复杂的事情尽量分解为最少的可能或我能理解的最小的事情,对吧?这就是他们教你如何在数学中做的事情。你知道,你在简化表达式,你在扩展东西。
是的,我不知道如何更清楚地说这个。定义什么是批判性思维是一件困难的事情,但是的,这就是我现在为你准备的。是的,我的意思是,这完全有道理。我可以给出一个非常广泛的、与编程无关的想法,只是像,例如,每周我录制一个音频封面,使用键盘、贝斯、鼓和吉他,我们用它作为我们的开场音乐,因为每周都是不同的流行歌曲。
很多时候我会想,哦,我不会有声乐,那么我应该把声乐旋律放在哪里?我应该把它放在钢琴的右手上还是吉他上?我能学会那部分吗?我能弄清楚那个和弦是什么吗?那个和弦...
音色在没有像你知道的那种授权样本或类似的东西的情况下工作吗?就像,像是将事情分解为,好的,最简单、最基本的是什么?通常我只是拉出一首歌的MIDI转录,并试图在钢琴上学习它,然后弄清楚如何转调或编排它。但是,你知道,
当我第一次开始做这个时,我感到完全畏惧。就像,哦,我怎么可能,知道,捕捉到那个?这只是其中之一,越是我批判性地思考,像是,什么可以做到,哪些乐器会,像是,知道,听起来和哪些合成音色和类似的东西。像是将其分解为不同的步骤,几乎像是创建一个清单。像,好的,首先我得弄清楚,像,知道,这首歌的BPM是多少?这首歌的调是什么?你知道,
鼓声是原声的还是电声的?你知道,像,低音是用吉他演奏的,还是用,知道,键盘演奏的,还是像是序列化的琶音,或者类似的东西。像是试图理解和像,
这就是我如何逆向工程一首歌,换句话说。我知道这与编程无关,但这只是我脑海中想到的第一件事,我想谈论的。最初这让我感到非常畏惧,我认为这是不可能的。我永远无法做到这一点。然后一旦你将其分解为这些小步骤,你会意识到,哦,实际上我可以做到这个微小的步骤。这不是问题。这就是大事情,实际上只是很多小事情。你知道,正如你所说,像原子位,对吧?
将事情分解。如果你能进一步细分事情,就这样做,直到你得到一个非常不具威胁性的任务,不会让你感到... 因为我认为很多人遇到的问题是他们感到畏惧。当你遇到一些算法挑战时,你没有心理框架来处理它,所有这些事情。所以我有一个后续问题,
你练习了很多,每个人都会告诉你,像,像,我不知道每个人,但像我交谈的大多数人,当然我会告诉你,变得更好的方法是大量练习,刻意练习。但你能做些什么超越刻意练习?你是如何练习某件事的?因为仅仅是走过场与,
像是你在学习新技能时所做的那种刻意练习是非常不同的。是的,是的,100%。我认为在你开始练习任何事情之前,你必须有某种实际的目标在心中,对吧?很多人告诉我,你想学习编程。我的第一个问题是,为什么?你想用编程做什么,对吧?这是一件非常非常普遍的事情。只是学习编程。
但你必须知道你为什么想做这件事?因为如果你不知道为什么以及最终结果应该是什么,你就没有办法衡量自己是否真的朝着那个方向前进。这实际上,我开始有点偏离主题,但这是我在学习编程时早期犯的一个错误。
我没有目标。我只是因为有趣而做这件事。就像,你可以说目标是娱乐,这对人们来说可能听起来很疯狂,或者享受。但最终发生的事情是,我在所有这些不同的事情之间徘徊,是的,我在学习一些东西,但考虑到我投入的时间,效果并不是特别好。因为我不知道我在去哪里。所以第一件事是,好的,你想最终达到哪里?你为什么要学习这个?我能够真正学习所有这些LeetCode的东西,实际上是因为我知道目标是通过微软的技术面试。
所以每天,当我坐下来练习LeetCode问题或练习其他所有这些问题解决挑战时,我问自己,好的,我需要以一种适用于这个最终目标的方式来练习这个。所以我实际上为每一个问题,听起来现在很疯狂,但这样做是好的,我会真的拿出一个白板,像一个实体白板。我会查看在线问题,然后我会
在我的房间里像个疯子一样大声说出我的思考过程,并在白板上写出解决方案。我知道这样做的原因是因为我知道那就是我在面试中必须做的事情。所以我说,好的,我如何尽可能模拟那个环境?这样它就变成了第二天性。我做了大约75到100次,你会听到网上的人说,你知道,我必须做7,000个LeetCode问题或其他什么,真的,疯狂的数量。
如果你正确地做这件事,你可以减轻那种数量的水平。所以你只需要有一个计划和策略,来决定你将如何学习。你可以在这个过程中进行调整。就像我很早就意识到,我不能直接进入这些中等和困难的LeetCode问题,因为我根本不知道如何解决这些问题。
所以这就是我为什么从AlgoExpert开始。我说,好的,让我看看Clement是如何解决这些问题的。让我暂停视频,挑战自己,试着猜测他接下来会做什么,但让他在前15到20个问题上引导我。就像那种逐步迭代的过程,最开始不需要完美。
你会逐渐发展出适合你的策略。但我会说第一件事是,是的,拥有一个目标,同时也要衡量你的进展。这就是为什么像LeetCode这样的东西非常好,因为你可以看到,好的,我这周做了七个简单的,现在我做了五个中等的,对吧?你可以追踪到你正在取得进展。当你看到进展时,就像去健身房一样,例如,
你会继续做,因为你知道自己真的在变得更好。而如果你没有任何方式来追踪自己的进展,你不知道自己在进步,那么就很难不断重复同样的事情,对吧?是的,绝对如此。我会说,这通常会影响程序员。显然,有冒名顶替综合症,但还有一种对自己技能停滞的看法。
在本周的播客中,freeCodeCamp 创始人 Quincy Larson 采访了软件工程师和 prolific 编程教师 Tim Ruscica,他是 Tech with Tim YouTube 频道的创始人。他还在 freeCodeCamp 的 YouTube 频道上开发了课程。我们讨论了:- Tim 如何在19岁时通过黑客手段获得微软实习机会,从而获得70,000美元的薪水 - 他是如何通过玩 Minecraft 在小时候学习计算机架构的 - 他从一次失败的科技创业中学到的教训 - 为什么他推荐 Python 作为第一门编程语言。“这是最不令人感到压倒性的事情,可以让你动手实践。”你能猜到我在开场时播放的是什么歌吗?此外,我想感谢每月支持我们慈善事业的11,133位善良人士,他们使这档播客成为可能。你可以加入他们,支持我们的使命,网址是:https://www.freecodecamp.org/donate 我们在对话中提到的链接:- Quincy 提到的《真实天才》的课堂蒙太奇:https://www.youtube.com/watch?v=wB1X4o-MV6o - Tim 的一次模拟编码面试视频:https://www.youtube.com/watch?v=3Q_oYDQ2whs - Tim 的课程:https://techwithtim.net/dev</context> <raw_text>0 当然。我总是告诉人们,你实际上并没有停滞不前。只是感觉你停滞不前。你仍然在不断取得增量的进步。只是出于某种原因,你正在经历一个进步不那么明显的阶段。就像你第一次学习代码时,写下你的第一行代码,你已经将你写的代码量增加了100%。没错。或者从技术上讲是无限百分比。你一生中写的代码量,对吧?然后第二行只增加了100%。然后它进一步细分。
所以你可能会到达一个点,你觉得自己并没有真正取得很多进展,你可能会觉得自己处于所谓的教程地狱,这可能是新入行的技术人员中最被过度使用和误解的术语,但你对这个术语很熟悉。我听到你在笑。你会如何描述教程地狱?
是的,我会说教程地狱更像是,至少在我看来,是当你在观看一个视频时,你觉得你可以跟着视频走,你理解那个人在做什么。但是如果你试图自己模仿,或者当你试图自己模仿时,你就完全迷失了。
有趣的是,我女朋友现在就在房间对面。她正在上我的编程课程,她有点开始感受到这一点,她在看我,这有点搞笑。她说,好吧,这完全有意义。我理解一切。她通过了所有的小测验。然后一旦她进入代码编辑器,就像是空白。像,我该怎么办?我不知道该怎么办。我不知道该怎么办。所以我给了她一个方法来克服这个问题,就是你不能只看视频。视频是作为指南存在的,但你应该跟着做。你应该暂停,挑战自己。就像,
这应该是一个互动的过程。它不是讲座,对吧?这就是我在大学时跳过的所有内容。所以我不确定这是否有意义。你看它时,它是有意义的。但当你试图自己去做时,你真的会感到困惑。你根本不知道从哪里开始,尽管感觉你应该知道,因为你刚刚看过并理解了某人是如何做到的。
是的,我会说 Freeco 游戏以一种方式对抗这种人们自欺欺人的倾向,认为他们在编程方面很优秀,仅仅因为他们观看了某个非常优秀的人。我总是开玩笑说,人们喜欢观看 Twitch,因为这让你感觉自己在 CSGO 或其他游戏中表现得非常好。实际上,你必须提醒自己,不,我并没有赢。
我在看别人赢。这不是我,但在你的大脑中,它几乎让你感觉像,哇,我真不敢相信我打中了这个球。哦,我在看 Ninja 或其他人。他们打中了那个球。但这就是大脑的运作方式,这是一种怪癖。现实是,你需要让人们—
把手放在键盘上,尽快让他们感受到,哦,哇。我需要继续进步。就像我还没有到达那个水平。你需要在某种程度上让他们谦卑,但你需要以非常小心的方式做到这一点。所以 free code camp 的做法是,我们有这些更手把手的项目,你在逐步进行,像,好吧,现在写这行代码,还有所有这些测试,以确保你不会偏离轨道。一旦你完成了那个引导项目,
砰。我们就放了一个测试套件和空白画布。空白画布问题,哦不,我该怎么办?我该怎么办?然后你可以开始查看测试,开始思考,好吧,这在测试 DOM 上是否存在这个元素或其他东西。所以我最好创建那个。然后接下来你知道的,只需按照测试进行,你就可以弄明白。但这与仅仅观看某人引导你完成每一步是非常不同的过程。
所以我觉得你很酷,首先,你的女朋友正在向你学习代码。这太棒了。而且她也能直接接触到 Tim,获得关于她的表现和作为开发者的成长的反馈。这真是太好了,帮助她做到这一点。是的,她是我最贵的学生,毫无疑问。我们是一对一学习。是的。
是的,当然就你投入帮助她的时间和精力而言,我想也是如此...
我有一个问题,比如说,假设你正在接近其中一个。我们就用 leak code 问题这个术语,因为 leak code 是一个有很多这些问题的网站。我认为很多问题实际上是来自于像 Google 这样的公司在某个日期提出的问题。人们记住问题,然后回来在这里报告它们。所以你实际上可以做一些与这些程序相似的事情。但我的意思是,很多这些程序只是经典的计算机科学程序。
数据结构算法问题,无论如何你可能会接触到,但可能会有一些独特的怪癖,或者看到某个问题在某个公司被问到的可能性增加可能会有所帮助。可能亚马逊更关心某种类型的问题,而谷歌则更关心另一种类型的问题。
但是假设你假设你必须进行一次编码面试,你走进去,你有白板,你身上什么都没有。你没有访问 stack overflow 的权限。基本上,他们说,好吧,这是问题。
你的过程是什么?假设像 ROT 13,像旋转 13,像凯撒密码那样。这是一个非常常见的,非常基础的程序。但是现在你有了很多编程经验,你会如何开始思考这个问题,而你已经经历了电池测试并获得了微软的工作等等?
是的,是的。我已经有一段时间没有做这些类型的问题了。老实说,如果你现在把我扔进一个编码面试,我可能会表现得比我19岁时更糟,因为在那之前我有过巨大的准备。这是一件你必须保持新鲜才能做好事情的事情。所以如果你正在进行编码面试,我会说,
到你进去的时候,你知道你已经尽可能地准备好了。这将消除我之前在频道上谈到的所有焦虑和压力。现在,如果我可以打断一下,这就是我们谈论的系统性偏见之一。
面试官非常偏向于新毕业的大学生,因为那些人有时间去做这些事情,并且刚刚经历了计算机科学的所有这些事情。因此,一个新毕业的计算机科学专业的学生在编码面试中可能表现得比甚至高级程序员要好。开玩笑的。
因为他们与此相距甚远,并且因为他们最近没有练习过,并且因为他们忙于工作,他们不一定有时间整天磨练 leak code。这是一个特定事物的不同技能集,但一般来说,解决问题。如果你只是随机选择两个人,你知道,你选择一个程序员,选择一个非程序员,然后你说,像解决这个一般问题,但不编码,只是想办法解决。你会立即看到思维过程的差异。是的。嗯,再次回答你最初的问题,
我想做的第一件事是尽可能深入地理解问题。对于我来说,作为一个有经验的程序员,解决某个问题的更困难的事情是理解问题并提出理论解决方案,而不是将其写成代码。你可能也是这样。可能是的。我的意思是,其他经常编码的人,像将其翻译成代码是简单的部分。弄清楚该写什么代码是困难的部分。所以这是我想开始的第一个假设。
或者至少注意到这一点,所以我想先真正理解问题,即使它是超级简单的东西,我会问愚蠢的问题,我会确保我理解输入的类型、预期的结果,我会拿一个边缘案例或他们给我的案例,我会确保我知道如何得到那个答案,然后我会提出我自己的案例,确保我得出他们期望我得出的答案。我想确保在目标上有共同的理解。
实际上就像我谈到学习编程一样。在你能做到之前,你需要知道你想做什么。
接下来我要做的事情是尝试解决我能想到的最小的问题部分,并消除任何边缘案例。因此,在很多这类问题中,你会有一个空列表,例如,这可能会搞砸你的解决方案。你会有一些像两个元素不工作,或者你只是有这些奇怪的情况,比如你可能得到一个负数或一个空字符串。所以我会尽量立即处理这些,以便当我进入我的解决方案时,我不需要担心所有这些可能使解决方案过于复杂的奇怪情况。
然后我会尽可能地开始分解它,我会在白板上花费超过一半的时间,走过我的思维过程,准确解释我在尝试做什么以及我如何尝试得出这个解决方案。这将使观众感到模糊或含糊,因为
这取决于问题。你可以在 YouTube 上观看我做这个的过程。我有与 Clement 进行的模拟编码面试和各种专门做这个的视频,但我会尽可能地走过我的思维过程。很多人在这些情况下犯的最大错误是他们害怕说错话,或者他们害怕他们想到的第一件事不正确。几乎永远不会正确。
你需要经历七八个失败的解决方案或想法,才能到达正确的地方。所以我会开始思考我能想到的最简单的事情,这可能不会起作用,然后立即排除它。所以,好吧,那不行。然后我会去下一个,下一个,下一个。我会把这一切都大声说出来,让其他人知道我在做什么,这就是批判性思维,顺便说一下,这就是他们问你这个问题的原因,以便他们可以深入了解你的思维过程。
然后一旦我想出了某个东西,我正在绘制这个,并且我将解决方案分解为我能想到的最小部分,
然后我会开始解决它。好吧,假设你知道,我想出了,这是我的算法第一步、第二步、第三步、第四步、第五步,等等。因为我已经尽可能地分解它。然后我只会有一些伪代码或一些奇怪的,呃,你知道,神秘的图纸。我会开始编写代码来解决这个问题。编码部分是最快的,因为我只是在翻译我刚刚思考的所有东西。对吧。就像,我想出的详细计划,现在。好吧,我只需将其转化为代码,作为一个有经验的程序员,这是最简单的部分。那时就像写英语一样。是的。
是的,所以一旦你理解了问题及其涉及的所有内容,并且你已经消除了很多边缘案例,并且你已经讨论过事情并推理过,重要的是,你的面试官看着你这样做,他们对你的思维过程有了洞察,因为你一直在大声说话。专业提示。专业提示。
整个过程中大声说话。不要只是看着白板,像,哦,不,不,不。你需要通过一切进行讨论。然后编写代码就变得简单了,对吧?因为这只是实现细节。你当然有大量的编写代码的经验,因为你已经做了很多年,并且你对此充满热情并享受它。
呃,我真的很想问的一个问题是,你提倡从 Python 开始,这与 Dr. Chuck、David Malin、许多编程讲师的看法相同,free code camp 我们广泛使用 Python。基本上,除了做基本的,我们从像 CSS、HTML 和 JavaScript 的网页开始。但一旦我们进入真正的编程,所谓的真正编程,像实际实现东西一样,
大部分都是用 Python 教的。是的。你对 Python 的当前看法是什么?你仍然认为在2024年这是一个好的起点吗?如果有人说,我想学习编程,你会推荐他们从 Python 开始吗?是的。所以首先,再次,
我很想说是或不是,但这确实更微妙,因为你首先要理解,为什么你要学习编码?如果这仅仅是一个爱好,像,你只想了解编码,Python 绝对是因为你可以用它做最多的事情,非常非常快。也许与像 JavaScript 这样的东西相比,它在构建网站等方面是相似的。如果你想做一些小的爱好任务或自动化项目,或者你只想要大量的在线资源,像,Python 资源的数量是如此广泛,这真的是一个很好的起点。是的。现在...
我通常推荐人们从 Python 开始的原因是因为语法更容易理解。很多更有经验的程序员不太重视打字技巧、导航编辑器、移动光标和使用大括号等。在初学者编程教程中,人们不太重视这些。你必须解释什么是管道或反引号或...
波浪号,像人们不知道这些东西是什么。像现在去问你的朋友,他们是否知道键盘上的波浪号是什么。大多数人可能不知道那是什么,除非他们编程,对吧?所以我喜欢推荐 Python,因为它是最简单的编写,并且最接近英语。因此,对于完全的初学者来说,在真正的编程语言中,它是最不令人感到压倒性的事情。这不是像 Scratch 这样的东西。
所以你可以立即动手实践。有一天你可以写一个非常基本的程序,并在终端中看到真实的输出。这是很有动力的。所以这就是我推荐 Python 的原因。现在,如果你只是超级聪明,知道,也许你之前编码过一点,像你的目标是找到一份工作,Python 并不总是最好的起点。像,
还有其他需求更高的语言,或者在获得职位时竞争较小的语言,比如 C++、Java、PHP。还有各种其他出色的语言,可能会让你更好地获得第一份工作,而不仅仅是了解 Python。这就是我喜欢对此进行细化的原因。我认为它是一个很好的起点,但要理解,仅仅因为你从中开始,并不意味着这是你在职业生涯中将要使用的唯一语言。
当然。我收到的最常见问题之一是我应该先学习哪种编程语言?我的直觉是,我会说 Python,我会说这是错误的问题,因为我觉得编程语言只是一个实现细节。一旦你学会了一种高级脚本语言,其他的语言基本上都是如此,重要的是理解实际发生的事情,为什么它的结构是这样的。然后是计算机工作的一些基本方面,诸如此类。但像,
你会说人们应该关注哪些最重要的概念技能,而不是仅仅说,哦,我不确定这个 Python 语言,因为人们有倾向于切换,或者他们会尝试在不知道自己在做什么的情况下,搞 geek 出拥有这些定制工具链。他们会说,我在学习 Vim。我自己也很有罪。我学过 Vim。我学过 Emacs。
我甚至换了键盘,像程序员 Dvorak 键盘。是的,它的发音是 Dvorak。Dvorak 是作曲家。Dvorak 是这个欧洲名字的美国变体。但抱歉,我总是必须说这个,因为人们总是认为我在发音错误。但我学会了所有这些不同的细节,这些其实并不重要。真正重要的是?你会说在学习编码时真正重要的是什么?
是的,听着,我的意思是,当你学习如何编码时,第一件事就是写一些代码,对吧?像我不是...
尤其是当我教初学者时,我并不完全专注于理论,像,让我们理解指针和引用不可变类型。是的,这些事情会出现,但在任何这些事情变得有意义之前,或者你甚至想知道这些事情之前,你必须写一点代码。所以这就是为什么说从 Python 开始是一个简单的事情。我回到之前的观点,因为这让你很快进入这个过程。现在,除此之外,最重要的事情实际上是学习如何挣扎,并且能够接受失败和解决问题。
编程实际上就是遇到大量不同的错误和故障,以及事情没有按预期工作,并找出如何修复它们。你几乎永远不会看到一个程序员坐下来写出完美的代码而没有错误,所以作为初学者,尤其是要专注于这个过程,专注于挣扎。如果你坐在那里,已经在一个错误上工作了一个小时,你无法弄清楚,相信我,我们都知道这非常非常令人沮丧,但这是克服的真正重要的事情,以建立那种坚持不懈的精神。
并且能够接受那种感觉。像当你在挣扎时,那就是你真正取得最大进展的时候。所以专注于付出努力,并且能够接受,像,能够接受沮丧。基本上。我可以告诉你,我不是一个愤怒的人,但我想过要像打我的显示器或把我的键盘扔到房间另一边那样做的次数。是的,像,常见的 meme,对吧?像,
这就是编程,尤其是当你刚开始时,你根本不知道自己不知道什么。有很多事情出错,YouTube 视频没有成功。所以专注于那种挣扎和努力。我在 Instagram 上做了一个最近表现非常好的视频。像,编程就是挣扎,学习就是挣扎。所以,专注于。
只要记住这一点,专注于这个过程,不要立即放弃。你必须建立那种毅力。这是一个在生活的许多其他领域中都能带来的东西,而不仅仅是编程。像所有程序员都是能够坐下来,处理大量不同的错误并找出解决方案的人。像你只是一个解决问题的高手。所以是的,这就是主要的,主要的概念。如果你明白这一点,其他一切都可以学习,但你必须建立那种性格特征,像成为一个能够解决问题的人,或者女孩,或者任何人。
对。太棒了。说得好。编程就是挣扎。我喜欢这个。最终,我总是说,任何足够有动力的人都可以学习编码。足够的动力是最难的部分,对吧?没错。不是聪明到足够或数学好到足够的事情。像如果你有资源和耐心,你会弄明白的,对吧?但像你可以—
你可能只需把某人放在1970年代的图书馆里,手里只有糟糕的,知道,任何可用的书。实际上,那时有一些非常好的书可用,比如 Dennis Ritchie 和 Brian Kernighan 的 C 书,你可以听到 Dr. Chuck 在 Free Coke Camp YouTube 频道上阅读。他会逐字阅读整个内容并进行评论。但大多数情况下,资源是极其有限的,但一个足够有动力的人可以。
可以做到。史蒂夫·沃兹尼亚克就是这样做的。是的,显然他是一个特例天才,但可能还有很多其他人在1960年代、1970年代、1980年代,像一旦基本机器可用时,能够弄清楚如何开始使用它们来做当时可能的事情。一直以来都是关于挣扎。我认为这就是为什么
人们在编程方面如此出色,因为他们并不一定意识到这有多令人沮丧,他们并不一定有很多其他事情拉走他们的注意力。他们并不在想,我可以出去工作赚钱,或者我可以和我的孩子们共度时光,而我却在这里和这个可恶的机器在一起,知道吗,像...
所以我,还有一件事我想说的是,我很想听听你对这是否准确的看法,但我认为人们对儿童天才的这种看法,像,你可能是海报男孩,如果有人是早期成就者,像,知道,像只是个天才小孩,或者其他的。如果还有人说这个词,我知道我听起来像个老年人,但这可能只是因为你对它充满热情并感兴趣,你能够,
那种压倒了任何挫折或模糊的感觉,或者你所感受到的任何东西,正是你的热情推动着你向前,你只是投入了时间,对吧?你认为这是因为你有某种基因上的倾向,能够很好地编码,还是你认为这只是花费的时间?
不,我的意思是,听着,我会说,尤其是在编程软件工程、STEM 密集型领域,高智商会对你有帮助。并且,有些人可能根本不会成为优秀的软件工程师。我不会坐在这里撒谎告诉你每一个人都会成为下一个软件工程师并获得高科技工作。它并不适合每个人。我很幸运,能够学习这件事,但这并不是我擅长它的原因。
我擅长它的原因,顺便说一下,可能比你们大多数人花了更长的时间才能擅长它。因为我12岁时就开始了。我甚至不知道基本的数学知识,嗯,是因为我投入了那段时间。因为我真的非常享受那种挣扎和解决问题的过程。像有些夜晚,我的父亲会进来,说,伙计,去睡觉吧。现在是凌晨两点。我会说,不,我的代码里有一个错误。我需要修复这个。对吧。就像那种固执,我认为很多孩子都有。然后出于某种原因,当他们长大时,这种感觉就消失了。像,
如果你给孩子一个问题,很多时候他们会一直努力直到解决它。他们真的想完成它。对我来说,我喜欢那种感觉。尽管这非常令人沮丧,但当你最终找到那个修复时,你会感到无比的轻松,可能是世界上最简单的事情。然后你永远不会忘记这一点。像有些错误我可以记得五、六、七年前的事情。所以是的,这纯粹是时间的积累。我无法追踪我现在编程的时间,已经12年了,
因为我24岁,我12岁时开始的,像我投入的小时数,以及可能浪费的小时数,我没有做任何有生产力的事情,但在追求热情上是不可估量的。轻松超过10,000小时。这就是为什么现在我说编写代码就像写英语一样。呃,甚至像我在键盘上打字的方式,我以不同的风格打字以更快地编写代码。对。所以,是的,确实是数量和热情。
是的,我很好奇,现在你确实拥有编程技能,我的意思是,学习永无止境。我喜欢说开发者的关键工作描述是学习,而不是编码。编码只是学习的残余,对吧?它是实际完成工作的实现细节,但实际工作是思考,对吧?然后解决方案只是...
再次强调,拥有你工作的实际输出是至关重要的。你不能仅仅进行理论构思,永远生活在你的头脑中,成为一个梦想家。你确实需要将代码付诸实践。但假设现在你拥有相当广泛的技能,不仅仅是技术技能,但让我们专注于技术技能。好的。
<context>#150 编程就是挣扎!我采访了 Tech with Tim,他在19岁时获得了微软的工作 在本周的播客中,freeCodeCamp 创始人 Quincy Larson 采访了软件工程师和 prolific 编程教师 Tim Ruscica,他是 Tech with Tim YouTube 频道的创始人。他还在 freeCodeCamp 的 YouTube 频道上开发了课程。我们讨论了:- Tim 如何在19岁时通过黑客手段获得微软实习机会,从而获得7万美元的薪水 - 他是如何通过玩 Minecraft 在小时候学习计算机架构的 - 他从一次失败的科技创业中学到的教训 - 为什么他推荐 Python 作为第一门编程语言。“这是最不令人感到压倒性的事情,可以让你动手实践。”你能猜出我在开场时播放的是什么歌吗?此外,我想感谢每月支持我们慈善事业的11,133位善良人士,他们使这个播客成为可能。你可以加入他们,支持我们的使命,网址是:https://www.freecodecamp.org/donate 我们在对话中提到的链接:- Quincy 提到的《真实天才》的课堂蒙太奇:https://www.youtube.com/watch?v=wB1X4o-MV6o - Tim 的一次模拟编码面试视频:https://www.youtube.com/watch?v=3Q_oYDQ2whs - Tim 的课程:https://techwithtim.net/dev</context> <raw_text>0 假设一种新技术出现了,它非常强大,比如大型语言模型,对吧?它们可能早在实验室中就存在。它们的规模远不如今天这么大。由于变压器架构和其他改进,它们的工作效果也远不如今天好,对吧?假设你突然需要学习一门全新的语言。
或者一套工具之类的东西。你能给我们讲讲你会如何处理这个问题吗?也许你可以谈谈在 GPT 的早期阶段,我不知道你是否参与了 GPT-2、GPT-3,但当你开始认真对待它时,你是如何学习它的工作原理的,最终又是如何教授它并将这些工具融入到你自己的项目中的。也许我们可以把 LLMs 作为一个主题
来讨论你是如何学习它的。因为我对像你这样的人如何吸收大量信息非常感兴趣。好的。首先,我得知道我为什么想学习这个?我的最终目标是什么?对我来说,即使我不喜欢,如果只是出于纯粹的好奇,我总是会先附加上我想做的事情,至少与我将要学习的东西相关,这样我就可以寻找与该主题相关的具体信息。
就像我们谈过的,学习 LLMs 或者学习这个新模块或新事物是非常令人感到压倒性的。几乎关于任何事情你都可以学习无尽的东西,对吧?所以你必须立即缩小范围,这样你才能真正知道你想做什么。所以我给你一个更相关的例子。我最近在学习 Streamlit。这是一个 Python 的 UI 库。是的。我想制作一个关于它的迷你课程。所以...
我学习 Streamlit 的目标是制作这个课程在 YouTube 上教授。因此,我知道在学习这个模块时,我必须专注于核心重要概念,去掉所有其他垃圾,尽量简洁地传达给观众。这是我开始时的目标。现在,当我想学习这个时,我要做的第一件事是花大约 20、30 分钟尝试获取一些高层次的概述,这样我就可以了解一些我还不知道的东西。
你不知道你不知道的东西。这就是我想说的。所以我想听听在线专家的意见,可能是 Streamlit 的创始人,他谈论这个话题 15 分钟,或者我想阅读一篇关于 Streamlit 的快速文章,或者我想阅读文档的主要页面。我想获取一些可以帮助我指导下一步学习的一般信息,这样
我对我所要进入的内容有一点了解。我不想直接进入 Streamlit 文档,从头开始,因为那可能会浪费大量时间。如果那不是我想要关注的主要功能。所以我试图尽快削减我需要学习的内容。这样我就能获得高层次的概述,并且,
现在我将为这个任务制定一些子目标。我会说,好吧,我想学习 Streamlit。我想知道如何在 Streamlit 中制作这个简单的网站,也许我可以用 JavaScript 制作。我要多快才能学会怎么做?我会打开代码编辑器,打开 Streamlit 文档,打开 chat GPT 或 AI。我会开始尝试解决这个任务。
这可能涉及我花一些时间提前阅读大量文档,或者观看一个短的 YouTube 教程,速度是两倍。但我试图尽快达到一个子目标,这样我就可以运用那些解决问题和批判性思维的技能。我不是盲目地阅读内容,希望能获取一些信息。我学习某样东西的方式是因为我必须将其应用于某个东西。所以这就是我寻找那些具体信息的原因。所以我从一些基本的东西开始,以便了解情况或掌握要点。
然后我有了我的具体目标,所以...
很多时候是制作一个 YouTube 教程。所以我学习的只是我需要的东西,以便我能知道得足够好,以便我能教给别人,或者我有一些项目需要构建,或者是一个自由职业的事情。所以我想,是的,我会专门学习这个以完成这个事情。所以,我可以继续说下去,但这就是我所做的事情的一般要点。我想立即应用它,我不想仅仅获得纯理论。我想知道我为什么要学习它,并立即开始逐步朝着那个任务努力。好的。这很有趣。听起来你把一切都框架成一个项目,并且有一些可以衡量的东西。
当然。就像某件事情是否完成,我怎么知道我是否学会了它,如果我没有完成某件事情,对吧?绝对如此。我认为很多人都是以竞争为结构的,像学校,像体育比赛,竞争编程,运动,战争。谁有更多的钱?这个富有的家伙和那个富有的家伙的净资产是多少?你知道,所有这些东西,对吧?很多人
很多时候,这归结为人们无法衡量事物,并提出自己的启发式和不同结果的评估标准。
如果你和自己竞争,你可以把任何事情变成竞争。你不需要和其他一千个人一起跑马拉松。你可以自己去跑,看看哦,我这次的跑步时间缩短了10秒。你可以和自己竞争。例如,迈克尔·菲尔普斯,他不关心其他游泳运动员在做什么。他关心的是自己的时间。只要他能可靠地达到...
某个时间,他就会觉得,好的,我准备好了。就这样,他尽力而为,与自己竞争。现在,部分原因是因为他处于这个领域的顶尖,或者至少他曾经是,当他赢得所有奥运奖牌时。没有人可以合理地进行比较。但如果你考虑自己的生活,比较并没有什么意义,因为每个人的情况和事情都不同。所以听起来
你有一种能力,可以在没有明确评估标准的情况下,创造出强制性因素,这样你就可以清楚地跟踪进展,并将目标转化为可衡量的东西。
是的。是的,百分之百。我是说,看看,当你知道自己为什么想学习这个东西时,这非常有帮助,对吧?如果你只是说,我对这个东西感到好奇,我想学习它。那么我,好的,随便吧。这并不重要。你想怎么学就怎么学,你知道,可能你不会取得太多进展,但如果是说,嘿,在两周内,你要去给苹果的 CEO 做一个关于 LLMs 的演示,或者类似的事情,对吧?你会发现自己能更快、更有效地做到这一点,因为你确切知道你需要做什么。你会剔除所有的废话,只学习你需要做的东西。顺便说一句,这就是我对待大学的方式。我说,看看,我为什么要学习这个?我学习大部分内容是因为我想通过这个考试。这样我才能毕业,虽然最终没有实现。但
关键是,我会缺席讲座,因为那里90%的内容与考试无关。所以我只会专注于我知道会被问到的具体问题。呃,你可以以这种方式玩这个游戏,对吧?这就是为什么,
我不知道。这就是我一直在做的。我只是试图更聪明地工作,而不是更努力地工作。老实说,如果我想学习某样东西,我会想,我能多快学会这个?我不是说,哦,我需要成为绝对的专家。我想知道我需要知道的绝对基础知识,以完成这个任务。我寻找的就是这些。作为一名教师,你会看到学生们走过来问,这个会在考试中吗?但我认为很多人失去了...
这个信息,如果每个人都在问,这个会在考试中吗?那么答案应该总是,当然,你应该想办法把你所教授的所有内容都放到考试中。这样才会有理由让某人真正去学习,所以这是一个非常合理的问题。人们的时间有限,你不能在黑板上哲学化,呃,理想化。但归根结底,学生们只想通过考试,继续他们忙碌的生活,并且,
你知道,作为一名教师,越早意识到这一点,开始说,好的,我需要重新构建我的考试,以便我总是能回答“是的,这会在考试中”,然后我需要开始为我的教学做准备。所以,像你知道的,如果你能找到那种方法让它运作,我的意思是,考试可以是你需要的任何长度,对吧?如果我今天是一名教师,像我还在教书,如果有人抱怨,我会说,好的,考试将是三个小时,对吧?
我们将把所有内容都放在上面,因为我希望你学习所有内容。我希望你学习所有内容。而且,我想我从来没有理解为什么会有这种随机抽样,有些人只是运气不好,因为像,哦,我无法解决他们问的特定问题,我只是运气不好,他们问了一个我没有准备的问题。你错过了教科书的一半,现在,是的,现在你完蛋了。是的。是的。我是一个巨大的倡导者。当你查看 free code camp 即将进行的考试时,它将是非常详尽的。它将有,
你知道,超过一百个问题,并且它将涵盖广泛的内容,我们将确保它非常平衡。但是,嗯,正如你所说的,我认为,
只要人们知道他们在做什么以及为什么要这样做,就会给他们明确的目标感。然后考试不仅仅被视为某种任意的东西,而是作为评估标准。希望能够确认,好的,我努力学习了,我通过了考试。这就是它应该运作的方式。它消除了很多任意性,呃,你知道,命运给了我一手坏牌,类似的东西。所以,我会结束我的讲坛,问你几个快速的结束问题。所以,
你在迪拜。你刚刚完成了这个没有成功的大型创业项目。我是说,你发布了一段视频,谈论你基本上没有获得产品市场适应性。
你没有获得足够的付费客户来证明继续经营业务的合理性。这就是99.99%的初创企业的情况,尤其是如果他们确实有大目标。如果你想去创建一个柠檬水摊,那是一个可能有20%成功机会的项目。
成功的机会取决于人们的口渴程度、温度、你是否在一个人流量大的公园等等,但当你试图建立一些真正新颖的东西时,获得我们所称的产品市场适应性是非常困难的,也许你可以谈谈那段经历以及你从中学到的东西。
是的,100%。我认为这是一次谦卑的经历,但也让我作为开发者成长了很多,因为在初创公司,给一点背景,我并不是主要负责人。我们有一位首席执行官,他创办了公司,投入了大量资金,非常有经验,成功的企业家,不需要这数百万美元。他把我引入了一个共同创始人的角色,但我只是少数股东,负责技术方面。所以我真的专注于这个的工程。
所以尽管我不想把市场产品适应性的问题推给其他人,只是给个背景,我并不是负责让人们为此付费的人。我只是负责构建这个东西,这几乎是我的角色。但作为一名工程师,我从中学到的,特别是,我认为第一件事是
你真的不应该构建任何东西,除非你有一个非常非常好的理由去构建它。我认为很多时候,作为工程师,我们会感到兴奋,我们想要构建这个功能。它看起来非常酷。你想要在键盘上工作。你对这个事情感到兴奋。你已经在这个事情上工作了一段时间。至少对我来说,大约两年,你开始过度工程,构建所有这些东西,使用,正如你之前所说的,所有这些疯狂的技术栈和所有这些东西,而在一天结束时,大部分内容并不重要。
所以我得到的第一条教训是,如果我将来再做这样的事情,我会尽量少编码。我会尽量构建最简单的东西,即使我使用的是无代码工具。我不在乎。我会完全将我的自我和自我价值与编程语言和项目的复杂性分开。只想尽量做出我能验证和测试的绝对最小的东西,这样如果它不奏效,我可以在六个月或四个月内失败,而不是两年。
这就是我学到的。与此同时,我很高兴我构建了这个产品,因为我获得了很多工程经验,管理了一支工程师团队,构建了这个庞大的,呃,至少在技术上令人印象深刻的东西,但没有人使用它,所以归根结底,这真的重要吗?对吧?所以这就是我从中得到的主要教训,嗯,像精益创业那样的东西,嗯,100%简单。每个人都在看我的视频,像哦,你刚刚总结了精益创业,我想,也许这就是它,但你知道,我读过那本书。
阅读它并说,哦,是的,这很有道理,比你实际参与其中要容易得多。你在努力工作,构建这个东西。你认为你有下一个伟大的想法或功能。我不知道,我认为你几乎必须经历它,才能真正与那里所说的所有事情完全相关,或者至少将它们付诸实践。是的,亨利·福特本人曾说过,如果我问人们他们想要什么,他们只会说他们想要更快的马。
而他们真正想要的是汽车,但他们还不知道。所以你的创新不会仅仅通过询问人们的问题和展示东西以及倾听他们的抱怨而来。必须有一些洞察的闪现。必须与社会的某种步骤变化相关联。
与社会的某种变化相关联,对吧?所以我赞扬你去做这个。100%每个人都可以说,嗯,难道你没有进行客户验证和类似的事情?但每个人都这样做,每个人都认为他们做得足够充分。
呃,你知道,他们的确足够灵活,但在实践中,有时它会奏效,有时则不会。这并不一定,我的意思是,有些人可能不需要做太多的尽职调查,他们可能只是运气好,获得了产品市场适应性。我认为 free code camp 是一个很好的例子。但是,呃,其他人,呃,你知道,当你试图获得像,我认为是运动员的东西。所以如果我理解产品,它是像,
为运动员提供训练之类的东西。是的,基本上。这就是总结。是的。这是一个很难让运动员采用的东西,价值主张在哪里?这真的会有效吗?这值得我花时间吗?我还有很多其他事情要做。所以是的,听起来这是一个非常困难的项目。那么你接下来要去哪里?你接下来的六个月、一年计划是什么样的?
是的,所以不深入太多背景故事,我搬到了迪拜。这是一个巨大的生活变化,来自加拿大。在我搬到迪拜后,我花了大约五个月的时间旅行,像数字游民一样在东南亚各地游荡。我也回到加拿大待了一段时间。所以我非常没有规律,四处游荡,这非常有趣,但不可持续。所以现在我回到迪拜,我已经在这里待了大约六周。
我主要的重点是建立一个非常好的日常习惯,恢复那些习惯,回到我19、20岁时在微软做事情时的高峰生产力,并且重新回到那种状态。我在初创公司失败后有一点悬而未决。我总是做 YouTube 频道,但这不足以填满一个完整的星期,尤其是因为我喜欢在周末做一些事情等等。所以现在我回来了。我已经建立了那个日常习惯。我做了更多的工作,我正在全力以赴地投入 YouTube。所以我试图扩大我的课程,我正在制作更多的内容。如果有人关注我,你会看到我在所有这些不同的平台上做短视频之类的。是的。我只是想比以前更频繁地发布内容。我从来没有真正花时间去全心投入 YouTube,而不去做其他事情。
坦率地说,这是一个巨大的商业和收入来源。所以我只是想看看,如果我花费六个月真正投资,花一些钱,雇一些人,看看我能把 Tech with Tim 带到什么地方,完全专注于这个。然后我们再看看接下来是什么,如果我甚至想继续做这个。好吧,伙计,祝你好运。我会鼓励每个人。
去查看一些 Tim 的视频,我已经将它们添加到视频描述或你的播客应用程序的节目说明中,无论你在哪里收听这个。
我对 Tim 有很高的评价。我认为他是一位了不起的老师,他非常擅长将复杂的想法分解,使其不仅易于理解,而且让学习变得有趣。所以感谢你为 free code camp 频道开发的许多课程。我们期待继续向任何想进入科技领域并想了解更多的人赞美你。
数学编程、计算机科学,以及你在频道上涵盖的所有概念。
百分之百。是的,非常感谢你邀请我。这是一个有趣的节目。希望我们能再做一次,看看一两年后的情况。是的,特别感谢 free code camp。我是说,他们真的让我接触到很多社区。他们让我受到启发。我记得看到 free code camp 发来的第一封电子邮件,说,嘿,我们想发布你的课程。嗯,这也让我继续前进。是的,感谢你在 YouTube 职业生涯早期的所有支持。太棒了,伙计。好吧,所有仍在收听的人,我希望你们今天过得愉快,直到下周,祝你编码愉快。