无师自通变身程序员你也可以做到(Python新人开发员有哪些可以考虑的工作类型)
(Python新人开发员有哪些可以考虑的工作类型)
https://m.toutiao.com/is/JT3mrg5/
全文共4168字,预计学习时长11分钟
图源:unsplash
科里·奥尔索夫既是作者,也是演讲者,同时是一名创业导师。他所创作的《无师自通:专业程序员的养成》被BookAuthority 评为有史以来最好的编程类书籍之一。尽管大学时主修的专业是政治科学,克里·奥尔索夫后来却在eBay当软件工程师,又多次在硅谷创业,这些工作中积累下来的经验成为他创作的基础。
他在书中为我们展示了如何无师自通成为一名Python程序员,采用的是一种非传统的方式:编码实操先行,理论学习次之。这份指南足以带领新人程序员们从写下第一组Python程序开始,直至成长到可以通过第一次技术性面试。
如今,越来越多人想要自学成为专业的程序员,这种趋势肯定还会延续下去,于是,我们决定访问科里·奥尔索夫,与他共同探讨初学者要面临的最大挑战。
新入行的开发人员要不要既学前端开发又练后端开发,以及在职业生涯的起点上,Python新人开发员有哪些可以考虑的工作类型,对于这些问题,科里都会为我们一一解答。
Evrone:科里,您好,很荣幸今天能够跟您面对面交流。现在开始吧。有人说,对于软件开发,就像对于音乐表演和画画一样,有些人抱有天生的热忱,您觉得这是真的吗?
科里:我相信肯定有部分人在编程上是有天赋的。但并不代表其余的大部分人就不能做编程了。
如果有人觉得自己没有编程天赋,我会推荐他去读丹尼尔·科伊尔的《一万小时天才理论》。他详细地阐述了天赋的作用是如何被高估的,同时充分论证了学成任何技能的关键更多在于刻意练习而不是天赋。
Evrone:现代IDE编辑器和VSCode一类的代码编辑器都习惯将Git与精美的图形界面整合到一起。您觉得,对于新入行的开发者来说,是学习使用Git命令行界面好呢,还是依赖IDE集成工具好呢?
科里:在我的书上也好,课堂上也好,我都会教学生怎样根据命令行使用Git。IDE集成工具是很好,但是它要求对GUI(图形用户界面)下面的变化要有基本的了解。
Evrone:对于新人开发员而言,最难的一件事或者一个概念是什么呢?
科里:大多数程序员最先碰到的难关是函数,但是,大多数情况下,新人程序员要学的最难的概念是面向对象程序设计(object-orientedprogramming)。Python中,将“自身实例”作为参数传递的概念尤其难为理解。
Evrone:在2020年,标准英语读写能力是不是世界各地的软件开发者都必须具备的呢?对于这个专业来说,这是个必修技能还是选修技能呢?
科里:这是个有用的技能,但不是必须的。说它有用是因为很多资料都是用英文写的。可就算这样,去年我有幸在东京的PyCon JP上发表演讲,那里的Python场景很宏大,可是在日本说英语的人很少。由此可见,不会说英语也绝对可以成为一名优秀的程序员。
Evrone:您的书《无师自通:专业程序员的养成》帮助无数想要成为软件开发员的人奠定了入行的坚实基础。您现在拥有五万个Facebook组群,在知名度这么高的情况下,您目前工作的动向是什么呢,能跟我们分享一下吗?
科里:眼下,我正在写一本新书,叫《无师自通:计算机科学家的养成》。这是上一本书的续作。在第一本书里,我有提及一部分计算机科学知识;而在这本新书里,我会更深入地阐明一些概念,对自学而成的程序员来说,这些概念对他们整个职业生涯都是很有帮助的。
此外,我手头还有一个新项目叫“编码表”。这是一个网站,上面有超过两万门编程课程,而用户可以通过价格、评论、主题以及其他标签在这些课程中进行筛选。一旦你找到合适的课程,这个网站就能帮你结识到参加编程课程的其他人。
图源:unsplash
Evrone:运营这样庞大的一个Facebook社区,对您开发和改进指导方案有没有帮助呢?
科里:肯定是有的,它可以帮忙找出那些重复出现的问题。这也是我创立“编码表”的出发点之一。总有很多人在问,针对不同的程序设计科目,什么课程是最好的。这样相同的问题很多,我们却要反复去解答,这样很没有效率。所以,我决定创建一个网站,帮助人们找到针对任何程序设计科目的最佳课程。在这方面我有很多想法,这些想法对我优化课程设置也有帮助。
Evrone:大部分人都认同,Python是最佳的多用途编程语言,是应该教给初学者的第一门编程语言。那么,您觉得程序设计中第二优秀的语言是哪种呢?除了Python,您还有其它喜欢的语言吗?
科里:如果不先教Python的话,我会根据学生感兴趣的领域,选择教JavaScript或者Swift。这两种都很好学,市场需求也都很旺盛。
Evrone:对于初学者,他们可以选择从VSCode这类简单但可延展的程序编辑器入手,也可以直接接触PyCharm这种功能齐全的IDE,这两种方式您会推荐哪一种呢?
科里:在我的书和课程上,我都是从IDLE开始教的。很多学生都掌握不到IDLE的窍门,而IDLE已经比VSCode和PyCharm简单多了。
我想让他们从更简单的东西入手,随后再引导他们学习PyCharm,这是我最喜欢的IDE。PyCharm好用的功能特别多,在上面编辑程序很方便,不过刚开始学习的时候用不到这些功能。
Evrone:有人说“选择语言的同时,也是在选择未来每一天要做的工作以及完成工作的方式”。对于Python而言,在职业生涯初期,新人Python开发员可以预想到的项目是怎样的呢?
科里:对于新入行的程序员,我尤其推荐Python,原因之一就是它功能真的太丰富了。如果你学JavaScript,只有做网页开发才用得上。在数据科学领域是用不上的。
而学Python,你可以进入任何领域:后端网页开发和应用程序开发,游戏开发,数据科学等等。既然Python可以用于这么多不同的领域,那一个Python程序员在职业生涯的起步阶段,就可以任意选择进入那些领域中的某一个,这是很令人开心的。不过Python程序员一般不会从事网页和应用程序的前端。
Evrone:对于初学者来说,在入门期就学习新的Python async库合适吗?还是说,这个功能对学习者的实操经验有一定的要求,在实践几年后再去学习asyncio和aiohttp更合适呢?
科里:我觉得,在学习编程的初始阶段,最好不要专注于学习这些。在掌握了编程的基本功之后,再去学习这些库比较好。
图源:unsplash
Evrone:最近Python引进了类型提示和“渐进式类型”方式,并且广受资深开发人员和库作者的欢迎。但是对于新开发人员呢?他们是应该从一开始就学习类型呢,还是应该过几年,等积累了一定的实操经验之后,再去学习如何通过类型捕捉未来可能出现的错误呢?
科里:在我学习编程的时候,理解数据类型是一个顿悟时刻。理解数据类型的概念,熟悉所学编程语言中的不同类型,对于新人程序员来说是很重要的。不过如果我是个初学者,我暂时不会在意类型提示。这个功能不错,但是对新程序员没什么用。
Evrone:您如何看待“全栈式开发人员”这股热潮呢?新开发人员既学前端开发又练后端开发,这合理吗?
科里:我不推荐这种前后端都学的做法。从一个初学者变成一个软件开发人员,在这一整个学习过程中,我就犯了这个错误。
如果从头来过,我会专注学习其中一端。两端都学的问题就在于,我觉得我两端都没学好。不管想成为优秀的前端开发人员还是后端开发人员,需要学习的东西都是很多的,两端都学好这并不现实。最好还是成为其中一端的大佬。而且,就算你做两份工,拿到的也是一份工资。
Evrone:开发人员要在工作之余学习新的东西,这经常让他们有“油尽灯枯”的感觉。平衡好工作与生活,避免真的被编程吞噬了生活,对此您有什么好方法可以推荐给新入行的开发人员吗?
科里:做运动!几年前我重新开始打篮球,这真的对我平衡生活和工作有奇效。作为程序员,我们整天面对屏幕,所以找一项不需要屏幕的爱好,诸如打篮球或者其它运动,就可以帮助我们缓解疲劳。我过去玩过极限飞盘,那个也很好玩。现在我在考虑学学高尔夫,虽然这玩意真的很难。
图源:unsplash
蒂姆·费里斯在他的一集播客里提到过,他喜欢分别设置一项职业目标和一项个人目标。打个比方,将公司的营业额翻一番跟硬拉达到300磅。这样一来,即使有一个目标失败了,他还有另外一个目标。我觉得这是个很好的建议,我自己也在尝试。
Evrone:软件开发这股热潮席卷全球,数不胜数的专业开发人员都是自学成才的。对于培养软件开发人员的好模式,您有什么建议呢?是否有必要建立一门像“计算机科学”那样的学科,将所有数学、算法以及数据结构都囊括其中呢?或者还需要别的什么东西呢?
科里:对于很多大学的计算机科学的课程安排,我发现他们的问题在于教授学科的顺序。如果想要顺利成为一名软件工程师,学习计算机科学、数学、算法和数据结构确实是有用的。但是,一开始就教这些不太合适。
学生应该先学编程,发现其中的乐趣,然后再去考虑其它零零总总的问题。在有些领域,比如网页开发,想要取得成功是不需要学数学的。而像很多大学那样,把数学作为第一节编程课的前置课程,只会吓退很多害怕数学的人,让他们对编码望而却步,并没有什么作用。
而且,外面有那么多或低价或免费的资源,你靠自己就可以更快地学会编程,还不需要背负债务,也就没什么必要花钱花时间去学校学习了。
科里的第一本书已经被翻译成八种语言,并且得到了《福布斯》等媒体的推荐。眼下,科里正在创作他的第二本书,主要服务于他的Facebook群组“无师自通的程序员”,帮助群组里的学生学习编程。同时,他也在构建“编码表”社区。
我们很高兴能看到,全世界有这么多人选择学习Python,并且将其作为自己的职业。