成为自学成才的程序员:Cory Althoff 采访
简介
Cory Althoff 是一位作家、演说家和创业顾问。 他所著的“The Self-Taught Programmer”一书被 Book Authority 誉为有史以来最伟大的软件书籍之一。 他根据自己在 eBay 和硅谷几家初创公司担任软件工程师的经验编写了这本书,尽管他在大学主修的是政治学。
他的书向读者介绍了如何使用非传统方式成为一名自学成才的 Python 程序员:先学编程,后学理论。 从编写第一个 Python 程序到通过第一次技术面试,这本书可以一 直为您提供指导。
如今,越来越多的人通过自学成为程序员。 考虑到这一趋势会一直持续下去,我们决定和 Cory 谈谈新开发人员所面临的最大挑战。 他讲述了对于新手开发人员来说,同时学习并实践前端和后端开发是否合理,以及新手 Python 开发人员在职业生涯初期可以期待参与什么样的项目。
Evrone: 嗨,Cory,很高兴能在今天采访你! 那就开始采访吧。 在你看来,人们对于软件开发就像对玩音乐或画画一样,有一种“自然的亲近感”,这是真的吗?
Cory: 我相信有些人肯定具有编程的天赋。 但这并不意味着大众就不能编程。
如果你担心自己没有足够的编程天赋,那我推荐你阅读 Daniel Coyle 编写的“The Talent Code”这本书。 他很好地解释了为什么天赋会被高估,以及对于任何技能,为什么成功的关键不在于天赋,而在于有意识的练习。
Evrone: 现代集成开发环境 (IDE) 和 VSCode 等程序员编辑器都倾向于将 Git 与精美的图形界面集成在一起。 对于新开发人员,你认为学习和使用 Git 命令行界面与依靠 IDE 集成相比,哪个选择更好?
Cory: 在我的书和课程中,我教过我的学生如何通过命令行使用 Git。 IDE 集成是很好,但你应该对图形用户界面 (GUI) 背后的原理有基本的了解。
Evrone: 对于新开发人员来说,最难学的东西或概念是什么?
Cory: 大多数程序员最先遇到的问题是函数。 但在大多数时候,新手程序员最难学习的一个概念是面向对象的编程。 在 Python 中将“自身”作为参数进行传递这个概念尤其让人困惑。
Evrone: 在 2020 年,世界各地的软件开发人员是否需要具备读写地道英文的能力? 这是我们专业的必修技能还是可选技能?
Cory: 具备这项技能很有帮助,但不是强制性的。 说它有用是因为很多文档都是英文。 说到这里,我去年有机会在东京的 PyCon JP 上发言。 那里的 Python 规模很大,但在日本很少有人说英语。 所以即便你不会说英语,也完全可以成为一名成功的程序员。
Evrone: 你的“Self-Taught Programmer”这本书为任何想要成为软件开发人员的人打下了坚实的基础。 你现在这么受欢迎,并且拥有 5 万个 Facebook 群组,那你现在在做什么?
Cory: 现在,我正在写一本新书,叫“The Self-Taught Computer Scientist”。 这是我第二本书的续篇。 我在第一本书中教过一些计算机科学,但在这本新书中,我会更深入地介绍一些概念,这些概念对自学成才的程序员的整个职业生涯都是有益的。
我还有一个新项目叫 Coding List.这是一个网站,可让你按照价格、评论、主题等筛选 2 万多个编程课程。 找到了正确的课程后,它可以帮助你结识也在参加编程课程的其他人。
Evrone: 在 Facebook 上运行如此庞大的社区,是否有助于你发现新的和改进针对新手开发人员的教学方式?
Cory: 当然。 这有助于我了解哪些问题会反复出现。 这也是我创建 Coding List 的原因之一。 很多人都在问,对于不同的编程课程,最好去参加哪些课程,这样效率太低了,因为我们不得不重复回答同样的问题。 因此,我决定创建一个网站,帮助人们找到适合任何编程主题的最佳课程。 我有很多这样的见解,这也帮助我改进了课程设置。
Evrone: 人们普遍认为 Python 是最好的通用编程语言,我们应该先向新开发人员教授这种语言。 但对于编程而言,你觉得排名第二的语言是什么? 除了 Python 之外,还有其他你喜欢的语言吗?
Cory: 如果我不先教 Python,我会教 JavaScript 或 Swift,这取决于学生想要进入哪个领域。 这两种语言都很容易学,而且需求量也很大。
Evrone: 对于新手开发人员,你建议他们从简单但可扩展的“程序员编辑器”(例如 VSCode)开始,还是直接跳到功能齐全的 IDE(例如 PyCharm)?
Cory: 在我的书和课程中,我让每个人都从 IDLE 开始。 许多学生很难掌握 IDLE 的窍门,即使它没有 VSCode 或 PyCharm 那么复杂。
我喜欢先给他们一个机会去熟悉一些简单的东西。 之后,我再向他们介绍 PyCharm,这是我最喜欢的 IDE。 PyCharm 有很多有用的功能,可以让编程变得更加方便,但在一开始你并不需要用到这些功能。
Evrone: 关于 Ruby,有这么一种说法,“选择了语言,也就选择了你日常工作的项目,以及完成这些项目的方式”。 至于 Python,新的 Python 开发人员在职业生涯初期可以期待参与什么样的项目?
Cory: 对于新手程序员,我特别喜欢 Python 的一个原因是它的通用性很强。 当你学习 JavaScript 时,它只在 Web 开发中有用。 你不会把它用于数据科学。
使用 Python,你可以进入许多领域:后端 Web 开发和应用开发、游戏开发以及数据科学等等。 因为 Python 可应用于如此多的不同领域,作为一名 Python 程序员,你在职业生涯初期可能会参与其中任何一个领域的项目,这很令人兴奋。 不过,你可能不会从事网站或应用的前端方面的工作。
Evrone: 对新手开发人员来说,一开始就学习新的 Python“async”库好不好,还是说此功能需要一定的实战经验,最好在实践几年之后再学习 asyncio 和 aiohttp?
Cory: 我认为刚开始学习编程就专注于这些方面并不好。 最好是在掌握了编程的基础知识后,再去学习那些库。
Evrone: Python 最近引入了类型提示和“渐进类型”方式,这在经验丰富的开发人员和库作者当中广受欢迎。 但新手开发人员该怎么做呢? 他们应该从一开始就学习类型,还是应该先进行几年的实战练习,然后再学习如何通过类型避免为未来的错误埋下陷阱?
Cory: 理解数据类型是我在学习过程中的顿悟。 对于新手程序员来说,理解数据类型的概念以及熟悉编程语言中的不同类型很重要。 不过,作为一名新手开发人员,暂时不需要去管类型提示。 这是一个很酷的功能,但对新手程序员帮助不大。
Evrone: 你如何看待被炒作的“全栈开发人员”? 对于新手开发人员来说,同时学习和练习前端和后端开发合理吗?
Cory: 我不建议这样做。 同时学习前端和后端,是我从初学者成长为软件开发人员过程中所犯的最大的一个错误。
如果重新来过,我会专注于前端或者后端。 两者都学的问题是,我总是觉得自己在这两方面都不够好。
要想成为一名优秀的前端或后端开发人员,需要掌握的东西太多了,所以想同时学习这两方面的内容是没有意义的。 最好能成为其中一个领域的专家。 另外,你做了两份工作,却只能领取一份工作的报酬!
Evrone: 开发人员如果除了工作之外还要学习新的东西,这通常会导致“倦怠”。 为了让新手开发人员实现工作与生活的良好平衡,避免让编程工作占据他们全部的生活,你对此有什么建议吗?
Cory: 进行体育运动! 几年前,我又开始打篮球,这对我平衡工作和生活起到了很神奇的作用。 作为程序员,我们整天都待在屏幕前,所以找到一个不用盯着屏幕的爱好,比如打篮球或其他运动,对避免倦怠很有帮助。 我以前也玩过极限飞盘,这项运动也很有趣。我还在学习打高尔夫球,尽管我觉得很难,但我也在尝试!
在 Tim Ferriss 的一集播客节目中,他谈到自己喜欢设定一个职业目标和一个个人目标,比如,让公司的收入翻一番和做到硬拉 300 磅。 这样一来,即便有一个目标没有达成,那他还有另一个目标,这个建议非常好,我也会尝试这样做。
Evrone: 软件开发是一个席卷全球的行业。 有非常多的专业的开发人员都是自学成才的。 你认为良好的教育对于软件开发人员有什么意义? 我们是否需要一门像“计算机科学”一样包含所有数学、算法和数据结构的“科学”,还是说我们需要的是其他东西?
Cory: 我觉得许多大学的计算机科学课程的学科教授顺序存在问题。 如果你想成为一名成功的软件工程师,学习计算机科学、数学、算法和数据结构会很有帮助。 但是,一开始就教这些东西是没有意义的。
学生应该先学习编程,体会到编程的乐趣,然后再去考虑其他东西。 在某些行业,例如 Web 开发,你不需要学习数学就能取得成功。 像许多大学那样,把数学作为第一门编程课的先决条件,这是没有任何意义的,因为这会让那些害怕数学的人不愿意学习编程。
另外,现在有很多免费和低成本的资源,如果你可以不用负债就能更快地自学编程,那投入这么多的时间和金钱去上大学就越来越没有意义了。
Cory 的第一本书已经被翻译成 8 种语言,并被 Forbes 等出版物推荐。 现在,Cory 正在撰写他的第二本书,以帮助他的 Facebook 群组(即 Self-Taught Programmers)中的学生学习编程。此外,他还在创建 Coding List 社区。 我们很高兴看到全世界有这么多人选择学习 Python 并将其作为自己的职业。 在 Evrone,我们努力走在新技术发展的前沿,并不断采用创新工具和方法。 如果您已有项目构想,并且对使用 Python 感兴趣,那么我们的开发人员很乐意与您讨论各种可能性。 无论您现在处于项目开发的哪个阶段,请告诉我们您的联系方式,我们会尽快与您取得联系,就您的项目以及我们能够提供的帮助进行讨论。