我在P.SE上阅读了更多问题,建议初学者选择Python作为他们的第一门编程语言。
不要误会我的意思,我喜欢Python。我很喜欢!但是它的哲学围绕着“我们都同意这里的成年人”。
从经验/知识的角度来看,初学者不是成年人。这就意味着即使您在伤口中幸存下来,也更容易朝自己的脚射击并养成一些不良习惯。
我在想,用一种“更静态”的语言,用脚踩枪会比较困难,因为它的限制性更大。
回到我的问题。为什么推荐使用Python作为入门级编程语言?
有哪些优点使其适合教授编程语言。还是...顾问的个人喜好?
我在P.SE上阅读了更多问题,建议初学者选择Python作为他们的第一门编程语言。
不要误会我的意思,我喜欢Python。我很喜欢!但是它的哲学围绕着“我们都同意这里的成年人”。
从经验/知识的角度来看,初学者不是成年人。这就意味着即使您在伤口中幸存下来,也更容易朝自己的脚射击并养成一些不良习惯。
我在想,用一种“更静态”的语言,用脚踩枪会比较困难,因为它的限制性更大。
回到我的问题。为什么推荐使用Python作为入门级编程语言?
有哪些优点使其适合教授编程语言。还是...顾问的个人喜好?
Answers:
IMO,代表Python作为入门级语言的最突出观点是:
python中的hello世界:
print "Hi there"
Java的Hello World:
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
}
你好世界在C:
#include<stdio.h>
int main(int argc, char** argv)
{
printf("Hello World");
}
不必谈论其他两个的编译,而python要简单得多。我只需要谈论我感兴趣的单个想法,所有使问题复杂化的机制都将在python中消失。我可以等到他们准备好谈论模块时,再也不必着急为简单程序获取stdio.h了。我可以等到他们准备好上课之类的主题,而不必急于他们的第一个程序。它具有REPL,可用于在命令行中四处游荡。从概念上讲,Python非常擅长。这是一件好事,因为它可以帮助初学者专注于手头的任务。
这是一个不寻常的观点。
成年人的同意是Python哲学中很小的一部分。它当然不会绕着它“旋转”。如果import this在解释器中进行操作,它甚至都不是“ Python禅宗”的一部分。
其他事情,例如“显式胜于隐式”,“简单胜于复杂”和“可读性计数”对于Python来说要重要得多,这说明了Python为什么是一种好的第一语言。
无论如何,“同意成人”实际上仅是因为Python中缺少私有对象。在我看来,这本身就是对初学者的好处的另一个指示:刚开始时,您无需担心接口之类的问题。
有两个不同的几点。在抚养孩子时,您应该将它们放在只有安全物品的泡沫中还是让它们在可能绊倒的院子里玩耍?
进入泡沫非常严格。您必须以非常特定的方式编写代码才能运行它。当人们第一次起步时,任何不做自己想做的事情都是浪费。这也可能导致“我不知道为什么会这样,但是有人告诉我这是必要的。”
在Python中,这不存在。如果您想说“ Hello World”,您就是print "Hello World"。使用Python作为切入点可以使某人踏上第一步,只需编写实现所需的代码即可。第一次编程的人在了解编程的基础之前无法理解封装的价值。
同样,在小程序中,类型安全不是大问题。新手开发人员编写的任何代码都将很小而且包含在内。直到您拥有更大的代码库,并且将很多部分用作抽象层并且没有积极考虑时,类型安全才显示出确保您按需进行的好处。当所有代码都在同一个文件中时,只需要看一下函数,看看做错了什么就容易了。
其他福利:
Python对于初学者来说是一种很棒的语言,因为它使简单的事情变得简单,同时使足够复杂的事情成为可能,因此它不被视为无用的玩具语言,甚至高级程序员也发现它是某些工作的正确工具。具体来说,简单的事情包括:
简单程序的样板代码的绝对最小值。
垃圾收集。
动态输入。
干净,简单的语法。
将其与Java或C ++进行比较,并比较难于解释“ Hello,world”程序中涉及的所有概念。复杂的事情包括:
内省(Python相当于反射)。
猴子修补。
巨大的标准库可以完成这些工作。
就是说,没有人只知道Python是一名优秀的程序员,因为没有人只知道一种语言或一种语言的风格才是一名优秀的程序员。任何认真学习编程的人最终都应该学习低级的知识,而不是在他/她仍然试图掌握流控制,递归和其他基础知识的时候。
对于初学者来说,缺少静态类型是一种功能,而不是错误!
在学习编程时,即使最明显的东西也可能难以理解。动态类型系统非常简单,并且在入门课程中摆脱了较紧迫的主题的困扰,例如模块化,控制流等。
在教育环境中动态键入还有一些概念上的优点:
类型与值而不是变量关联。可以说这更直观,因为它反映了程序实际崩溃的原因。
错误消息更加直接和具体。在Python中,您会获得漂亮的堆栈跟踪和一条消息,指出实际出了什么问题。在静态类型语言你得到一个编译器警告说什么会出问题。
使用编译器的学生只能使用他们完全理解的程序,以免他们面临无法解决的编译错误。
运行时错误检查使您可以运行不完整的程序。这允许更多的增量程序,学生可以首先担心使程序的开始正确,然后再查看会发生什么。
一些重要的概念(例如参数多态性和鸭子类型)以动态语言免费提供,但需要使用静态语言的更复杂的类型系统。
最后,尽管您仍然必须处理相同的复杂性,但在开始编程时并没有获得静态类型的所有好处:
初学者程序很小,没有很多代码路径(因此,您不必担心很少访问的代码中的类型错误)。
Begginer程序不使用高级界面和功能,因此“使用类型系统设计程序”部门也没有太多收获。
有一个非常,非常,非常的Python为初级程序员重要的事情,每个人似乎都忽略了:强制有效的压痕。
像其他评论者一样,我教了初学者几年。看到这样的事情是非常不正常的:
#include <stdio.h>
int main(char *args[])
{
int A = 1, B = 1, C;
for (int X = 0;X < 20;X++)
{
printf("%d\n", A);
C = B + A;
A = B; B = C;
}
}
现在想象一下在大约一百行代码中这种可怕的不一致。对于某些学生来说,他们所有项目的整体看起来都是这样。
我不知道他们如何做到这一点,它也从未打扰过他们。每次我问时,他们的回答都像“嗯,没关系,因为编译器会解决这个问题。” 即使我通过修复缩进向他们显示了一个明显的错误,他们仍然始终没有任何线索。
在Python中,这种缩进类型完全是无效的。他们被迫使用至少可读性强的东西,即使有些不一致。这给了他们一种习惯,希望他们在最终学习其他语言时会继续下去。
由于上述大多数原因,Python是一种很棒的第一语言。特别是,第一语言的要求是Python具有柔和的学习曲线。例如,您不必完全了解类,就可以开始。在这方面,这有点像我们许多人开始学习的基础课程。
到目前为止,尚未被强调的一件事是,许多语言的学习曲线都很柔和,但是在尝试做更高级的工作时却很快陷入困境。老派基础课程就是一个很好的例子。使用Python,您可以先了解一些非常高级的知识,然后再使用其他语言可能是更好的选择。
到那时,初学者可以了解更多关于选择和折衷的知识,并且可以使用C / C ++,Java,Assembler,Prolog,Lisp等。实际上,Lisp可能也是一种很好的第一语言,尽管它比较严格。 !
I'm thinking that in a "more static" language it would be harder to shoot yourself in the foot-嗯,C和C ++的静态类型,你会很惨,惨得惊讶地看看你能有多少种方式打击你的脚从使用它们...