是时候改变一下自学编程的方式了。这篇来自国外网友的教程被fast.ai的创始人点赞还记得大学时你是怎么学习Java、C、Python等语言的吗?让我们看看经典的教材和在线课程。几乎都是以下套路:学习变量、数组、对象等专业词汇;查看编程实例,照葫芦画瓢写代码;重复以上步骤,直到学完所有课程。然而,程序员JeffOlsen认为这种教学方法太过时了。编程之于计算机科学就像烹饪之于化学。即使您不了解化学变化,您仍然可以做出美味的煎蛋卷。为此,他提出了一套编程教学的新思路,Jeff的想法在HakerNews上获得了大多数程序员的认可。就连课程平台fast.ai的创始人JeremyHoward也来喝彩:“这和我们平台深度学习的教学方式差不多。”有网友指出,对于初学者来说,归纳推理能力的形成非常重要。不仅对老师有意义,对于自学编程的人来说也是一种更好的学习方法。改变教学方法杰夫的教学方法被称为“预测先行”。先给学生一段简单的代码,让他们预测会发生什么,然后从运行结果中学习语言的一些特性。为此,杰夫提出了编程教学的5条标准。符合这些标准的课程教学,知识点传达到位:不懂这个语法的同学能找出这段代码的作用吗?这段代码与您以后可能遇到的代码是否相当相似?命名文字是否有意义,变量命名是否正确?这些问题是否让学生专注于代码中最重要的部分?代码示例是否需要一些先验知识,或者是每个人都可以理解的?具体来说,没有直接提到概念,而是先提出一个难题让学生解决。这个谜题包含了当天的重点,然后让学生根据这个谜题创建一些新的代码,在解题的过程中学习专业术语。这不仅仅是教师指南。我们在学习编程的时候,最好是带着问题去思考,去学习代码,而不是生搬硬套书本上的例子,这样才能真正掌握技巧。几个例子Jeff首先展示了最基本的HelloWorld程序的编程,他的方法与传统方法略有不同。我们先看这段代码:name="Tamara"print("Hello"+name)运行上面的程序会发生什么?一般我们可以直观的猜测运行结果中会出现Tamara,但实际运行结果是HelloTamara,中间没有空格。接下来,如何让程序输出带空格的结果,还需要调试一轮。在这个过程中,Jeff并没有讲到字符串、变量等概念,但是在解决这个问题的过程中,我们掌握了打印函数、字符串拼接等一系列的用法。Jeff还举了几个例子,希望能纠正传统教学课程中死板的内容。1.条件判断传统教学:if1>2:print("1大于2")else:print("1不大于2")本例学生只能看代码,不能学习条件判断通过使用代码。Jeff建议将代码更改为:age=15ifage>=18:print("YoucanbuyR-ratedmovietickets")else:print(f"Youwillbe18until{18-age}years")TerminalLieutenant一般输出是什么?你的答案应该是:再过3年你就不会满18岁了。接着,Jeff抛出了几个问题:整个代码中没有3,你怎么知道会出现“3年”?我们如何更改程序以显示其他语句?缩进对我们的程序有什么作用。通过这3道题,同学们知道了if-else语句的缩进格式,也知道了如何利用它通过改变条件来实现其他的判断。2、数组的传统教学:a=[3,2,7,5,3,9]print(a[2])#returns7这个例子中,为什么a[2]的结果是7,有的同学没学过编程的人可能无法理解,甚至会有错误的理解:哦,原来是输出第二个数后的一个数。Jeff建议将其更改为:favorite_foods=["sushi","tamales","pizza","grilledchicken"]print(favorite_foods[2])这个程序的输出是什么?我们如何打印出第一个食物,最后一个食物?如果将最后一句更改为favorite_foods[10]会怎样?通过这个简单的例子,同学们可以了解数组,indexalreadyindexoutofbounds错误。3.对象传统教学ClassDog:def__init__(self):passdefspeak(self):print("woof!)Fido=Dog()Fido.speak()虽然这段代码以小狗为例,看起来生动有趣,但是它实际上存在一些问题:(1)网络空间中不存在狗。(2)创建和调用函数需要9行代码,实际上可以更短。(3)通过这种方法创建的所有狗都有只有相同的功能,那么为什么要创建一个类?Jeff建议将其更改为:user1=User("Ty","Tdog@aol.com",16,"Pa$$word")user2=User("Sarai","SMendes@hotmail.com",15,"Kangaroo!")user3=User("Osu","Osu22@gmail.com",12,"12345abcde")print(user2.age)提问环节:第一个用户的邮箱什么是吗?哪个用户的密码最弱?最后一行会输出什么?这样,同学们先学习如何创建对象。至于代码中出现的User(),自然要教他们如何创建classes是的。最后,附上Jeff博客的链接,希望他的方法能够l帮助你学习编程。
