本周我们欢迎Daniel Zingaro成为我们本周的PyDev!丹尼尔是《通过解决问题来学习编程》的作者。A Python Programming Primer》和《Algorithmic Thinking》的作者是No Starch Books。如果你想看看丹尼尔还在做什么,你应该访问他的网站。
丹尼尔甚至还勇敢地跳过一次天空!
现在让我们花一些时间来进一步了解丹尼尔吧
你能告诉我们一些关于你的情况吗(爱好、教育等)。
我现在是一名计算机科学家,但这几乎没有发生。当我还是个学生的时候,我非常喜欢我的心理学课程。就像,痴迷。我学习、学习、学习这些课程,然后,过了这个点,我就会去学我的计算机科学的东西。我把心理学和CS专业都坚持了三年,然后终于不堪重负,选择了CS。我不完全确定为什么--我想,只是有一些关于计算机科学家所做的问题解决的类型。
我很高兴我在心理学研究方面所付出的努力。了解人和了解计算机对于写一本编程书来说是同样重要的技能。
在2000年中期,我读了一个CS的硕士学位,在一个叫做形式方法的领域,你要证明系统没有bug(或者,你知道,你要修复东西直到你能证明它)。我喜欢它,但我觉得我无法在这个领域做出贡献。我坐在那里好几天,艰难地阅读一篇论文,而在我看来,其他人能够更快地阅读和理解。我记得有一次去参加一个研究会议;会议结束后,我想,"我不可能做到这些人所做的事。但当然,我做不到:他们是这个领域的老手,而我只是在学习。这些天我当然对自己更有耐心。
同时,我有机会客串一个关于编译器的讲座。虽然只是一个讲座,但这足以让我知道,我想专注于如何教授CS。这就是我现在所做的。
写作是我生活中的一个重要部分......不幸的是,这个重要部分在我专注于学术研究事业时被我忽略了很多年。我的妻子是一位作家,她帮助我回到了这个领域。2018年,我从教学岗位上休了一年假,在此期间,我以多年未曾有过的紧迫感进行写作。其结果是一本名为《算法思维》的书,这本书没有数学,没有证明,但对如何思考数据结构和算法有严格的介绍。在那之后,我不得不写更多的东西,《通过解决问题学习编程》就是这样的结果。
通过解决问题来学习代码》是基于我十年来对一个问题的研究:我们如何才能帮助学生更好地学习编程/计算机科学的材料?例如,这就是为什么书中的材料围绕着解决问题(而不是单独学习语法),为什么文中有一些概念性的问题,我希望读者暂停一下,以确保他们在正确的轨道上,以及为什么所有的练习(即使是在章节的最后)都有样本解决方案。另一个明确的目标是以同情心来写作。学习编程是很困难的。对于刚起步的程序员来说,我们最不需要的就是假装不知道。
为了好玩,我正在努力阅读斯蒂芬-金的所有书籍。我曾经也读过Animorphs的书,但我不得不禁止自己从事这项活动,否则我就会把它们通通读完,其他什么也做不了(你好,2014年夏天)。
你为什么开始使用Python?
大约15年前,多伦多大学将他们的CS入门课程序列从Java转向Python。不久后我来到多伦多大学,有机会教一门编程入门课程。所以我必须学习Python,而且要快!"。
我认为Python是一种很好的第一种编程语言。可用的库非常丰富,我们几乎可以立即使用它们,让学生从事有趣的、激励性的和媒体丰富的项目。我认为这对鼓励学生的多样性和扩大对计算机科学家是什么和他们做什么的过时的概念来说是一个好处。
你还知道哪些编程语言,你最喜欢哪一种?
我有两个最喜欢的。Python和C,取决于项目的情况。当我想在高层次上工作时,我就用Python。而当我想写接近硬件的小程序时,我会用C语言进行系统编程。
我没有认真使用过许多其他语言。我在过去花了几年时间使用Visual Basic 6;我用它来制作无障碍音频电脑游戏。
对于那些刚刚开始的人来说。我认为先做一点背景研究(你想做什么?),然后再潜心研究一种合适的语言,比一开始就试图选择完美的语言要好得多。你所学的一大块内容将被转移到其他语言。而且,无论如何,语言是来来去去的,所以关注基本的、交叉性的概念是关键。这就是我在书中所努力的。我希望你成为一个程序员,哦,对了,你也会成为一个Python程序员。
你现在在做什么项目?
我目前正在探索其他一些书籍的选择。我最近写的两本书--《算法思维》和《通过解决问题学习编程》--是我不得不写的两本书。在它们写完之前,我无法考虑任何其他书籍。现在,它们已经写好了,我正在研究一些不同的书籍方向。这两本书把我撕碎了。我猜想,未来的任何书都需要更多的哄骗。我期待着这可能带来的机会和挑战。
你最喜欢哪些Python库(核心或第三方)?
我真的应该尝试使用更多的库现在,我要说的是,在我的教学中,我从Pygame中得到了很多。它帮助我开发游戏或图形项目,激励一些学生。(除了游戏之外,使用其他领域也很重要,这是肯定的)。但当我确实想要一个游戏背景时,Pygame就是我所使用的)。)
你提到你是盲人/视力障碍者。在这种挑战下,你是如何写书或写代码的?
在过去的30年里,这方面的情况发生了巨大的变化,以至于今天,我只需要一个免费的软件(NVDA读屏器)就可以完成我所有的工作。如果你已经是一个中级/高级程序员,而且你想买我的Python书是为了支持我的工作,而不是为了学习:请考虑捐赠给NV Access,即实现NVDA的人。
在Python中,有一件事让我花了不少时间来适应,那就是它的缩进!它在屏幕上看起来很好,但我不知道它是什么。我敢打赌,它在屏幕上看起来不错,但与大括号或开头/结尾不同,缩进对我来说大多是看不见的。这些天我使用了NVDA的一个功能,当缩进增加时,它会发出越来越高的哔哔声。
我喜欢任何有趣的东西。有什么比我在收到我的书的作者副本时无法阅读我写的东西更有趣的呢?或者写代码生成图表,而我自己却无法使用?我很感谢我在No Starch出版社的编辑,如果没有他们,我可能还在使用6号字体、ASCII表格和令人头痛的交叉图。
你在写这本书时学到了哪些经验?
有时,看似不同的兴趣/探究方向会以惊人的方式结合在一起。
几年前,我开始对竞争性编程感兴趣。这是真的:程序员在国际问题解决比赛中竞争。我被他们社区的创造力所吸引,并开始广泛阅读他们制作的东西。他们的大部分资源都集中在高级编程和数据结构方面,后来我把其中的一些内容纳入了我的高年级课程。他们有成千上万个独特的、高质量的问题,这些问题在书本上是找不到的。
另外,我曾多次教过编程入门课程。我的大部分研究都是关于编程入门的。而我在教学和研究中了解到的一件事是,背景可以帮助许多学习者。一些学习者会对学习循环以达到一个不明确的、抽象的未来目的感到冷静。但是其他人则想知道 "为什么是循环","为什么是函数",为什么我需要这些东西?
在编写《通过解决问题来学习编程》时,我能够将我在编程入门方面的经验和研究与我对竞技编程社区产生的大量问题的认识结合起来。(事实证明,竞技程序员也设计了成千上万的入门级问题!)没有这两条线索,我就不可能写出这本书。
你还有什么想说的吗?
学习编程可以是一种挑战。不要担心你需要多长时间。也许你的朋友比你学得快。也许有人告诉你,像你这样的人不能编程。也许你以前也尝试过,但一无所获。或者,等等。也许你*认为*你一无所获。衡量进展并不容易,尤其是在开始时。不要让别人阻止你。按照你自己的时间表工作。你有别人没有的想法和优先事项。如果你想学习,我希望你能找到资源、力量和能量来做这件事。
非常感谢你接受采访,Daniel!
The postPyDev of the week:Daniel Zingaro首次出现在Mouse Vs Python上。