为什么推荐使用Python作为入门级编程语言?[关闭]


16

我在P.SE上阅读了更多问题,建议初学者选择Python作为他们的第一门编程语言。

不要误会我的意思,我喜欢Python。我很喜欢!但是它的哲学围绕着“我们都同意这里的成年人”。

从经验/知识的角度来看,初学者不是成年人。这就意味着即使您在伤口中幸存下来,也更容易朝自己的脚射击并养成一些不良习惯。

我在想,用一种“更静态”的语言,用脚踩枪会比较困难,因为它的限制性更大。

回到我的问题。为什么推荐使用Python作为入门级编程语言?

有哪些优点使其适合教授编程语言。还是...顾问的个人喜好?


17
I'm thinking that in a "more static" language it would be harder to shoot yourself in the foot-嗯,C和C ++的静态类型,你会很惨,惨得惊讶地看看你能有多少种方式打击你的脚从使用它们...
彼得Török

@PéterTörök:是的,它使您的整个脚步都离开了(c ++:D)。我说“更静态”,试图避免发生类似...的未知事件……我不知道... Java?!?!...每个人似乎都讨厌,因为在学校/大学里有人认为这种感觉很普遍。从它的
恐惧

1
我认为C ++是更好的入门语言,因为它帮助我更好地理解了其他语言。
systemovich 2011年

1
在试用了使用它的第一学期编程课程后,我开始尝试将python作为开始语言。学生们常常不理解“类型”,空白依赖杀死了他们。他们还很难理解那些引用了面向对象业务的“自我”对象。它有它的优点,但也肯定有它的缺点。
钻机

2
@MahmoudHossam我同意。我只是强调我的经验中的一些症结。Java,C#,Lisp等都有其问题。这些只是我向初学者学习python时遇到的主要问题。
钻机

Answers:


30

IMO,代表Python作为入门级语言的最突出观点是:

  • 它的学习曲线 -从零开始到“ Hello world”比大多数其他语言快得多
  • 它很直观 -语法的设计遵循了最少惊讶的原则,并且总体上是非常一致的(不幸的是,标准库并不总是遵循这种一致性)
  • 它只需要很少的样板代码:一个典型的“ Hello world”是一行代码,并且可以编写简单的程序而不会产生任何其他需要说明的背景噪音(例如,函数声明关键字,import语句,类构造,预处理程序指令,等等。)
  • 有很多优秀,简单的工具可以处理python代码,尤其是交互式解释器;您不需要学习构建系统,IDE,特殊的文本编辑器或任何其他东西即可开始使用python-仅需要命令提示符,交互式编辑器和简单的文本编辑器
  • 它使用动态类型,但是与许多其他动态类型的语言不同,类型是透明的,并且与类型相关的陷阱很少

只想强调语言的直观性。我见过具有0编程经验的人可以快速学习Python。这在很大程度上是由于语法/语法非常接近英语口语。
斯蒂芬·格罗斯

12
最后一点:人们经常将动态打字与弱打字混合在一起。Python是动态类型的(与值相关联的类型而不是变量),但也具有强类型(因此程序崩溃而不是无声地吞没转换错误)
hugomg 2011年

@missingo我第二个-鹰眼是您拥有的;)
yati sagade 2011年

@missingno:我知道区别。非透明类型的一个示例是PHP的数组键-整数键的数组与其他类型的数组的行为不同;如果将两个足够大的整数相加,则可能会以浮点数结尾。那只是一个例子-尤其是PHP和javascript(Web开发中两种最流行的动态语言)到处都是晦涩的打字边缘。
tdammers

从您的评论来看,“类型透明”是指管理类型的规则容易理解吗?您到底想说什么?
phant0m 2013年

8

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非常擅长。这是一件好事,因为它可以帮助初学者专注于手头的任务。


15
您忘记了“返回0”;您的C实现中的语句:)编译器警告!
斯蒂芬·格罗斯

2
这就是为什么BASIC首先存在的原因。10打印“ Hello World!” 20 END为了获得额外的荣誉,Python程序失败了“它说'Hello World!'吗?”。单元测试:-)
Ross Patterson

3
与F#中的相同:printfn“ Hello World!”。是的,F#非常适合初学者!
2013年

7

这是一个不寻常的观点。

成年人的同意是Python哲学中很小的一部分。它当然不会绕着它“旋转”。如果import this在解释器中进行操作,它甚至都不是“ Python禅宗”的一部分。

其他事情,例如“显式胜于隐式”,“简单胜于复杂”和“可读性计数”对于Python来说要重要得多,这说明了Python为什么是一种好的第一语言。

无论如何,“同意成人”实际上仅是因为Python中缺少私有对象。在我看来,这本身就是对初学者的好处的另一个指示:刚开始时,您无需担心接口之类的问题。


1
是的,但是关于那些“私有”部分,由于您可以访问它们,因此您可能会不知不觉中发现一些围绕它们的变通方法/捷径。
JohnDoDo 2011年

@JohnDoDo如果我决定在C#或Java中将private字段转换为public可破解,那有什么区别?顺便说一句,在Python中,您可以为该属性添加下划线前缀以使其私有(尽管不是真正隐藏)
OnesimusUnbound 2013年

4

有两个不同的几点。在抚养孩子时,您应该将它们放在只有安全物品的泡沫中还是让它们在可能绊倒的院子里玩耍?

进入泡沫非常严格。您必须以非常特定的方式编写代码才能运行它。当人们第一次起步时,任何不做自己想做的事情都是浪费。这也可能导致“我不知道为什么会这样,但是有人告诉我这是必要的。”

在Python中,这不存在。如果您想说“ Hello World”,您就是print "Hello World"。使用Python作为切入点可以使某人踏上第一步,只需编写实现所需的代码即可。第一次编程的人在了解编程的基础之前无法理解封装的价值。

同样,在小程序中,类型安全不是大问题。新手开发人员编写的任何代码都将很小而且包含在内。直到您拥有更大的代码库,并且将很多部分用作抽象层并且没有积极考虑时,类型安全才显示出确保您按需进行的好处。当所有代码都在同一个文件中时,只需要看一下函数,看看做错了什么就容易了。

其他福利:

  • 很多做很多事情的图书馆
  • 灵活地教授面向对象的编程和函数式编程技术,而又不会使一种编程语言似乎不得不适应另一种语言。

3
反类推:教孩子不玩火。1)您可以与他交谈,解释火是什么,火是什么,向PowerPoint幻灯片显示任何内容..或2)让他玩火并被烧死。实际上,第二种方法要有效得多。我感兴趣的是,由于未采取任何安全措施,他可能会烧毁房屋甚至将其烧成火药狂。有点极端的情况,但无法真正用语言表达出来。
JohnDoDo 2011年

1
@JohnDoDo-那么,让他被烧毁……这是最好的学校,谁没有小时候被比赛烧死的?不会杀死他的……
Rook

1
@JohnDoDo:仅仅因为这种语言可以让你玩火,并不意味着老师没有指出火是非常危险的,并说明了避免火的方法。我认为您还缺少的另一件事是某人与某种语言无关。在对编程有了基本了解之后,他们可以使用另一种语言来学习更大的概念(例如不烧毁建筑物)。
unholysampler

3

Python对于初学者来说是一种很棒的语言,因为它使简单的事情变得简单,同时使足够复杂的事情成为可能,因此它不被视为无用的玩具语言,甚至高级程序员也发现它是某些工作的正确工具。具体来说,简单的事情包括:

  • 简单程序的样板代码的绝对最小值。

  • 垃圾收集。

  • 动态输入。

  • 干净,简单的语法。

将其与Java或C ++进行比较,并比较难于解释“ Hello,world”程序中涉及的所有概念。复杂的事情包括:

  • 内省(Python相当于反射)。

  • 猴子修补。

  • 巨大的标准库可以完成这些工作。

就是说,没有人只知道Python是一名优秀的程序员,因为没有人只知道一种语言或一种语言的风格才是一名优秀的程序员。任何认真学习编程的人最终都应该学习低级的知识,而不是在他/她仍然试图掌握流控制,递归和其他基础知识的时候。


2

我认为Python是一个不错的选择。通常,对于“入门”级编程,您需要一些简单而又富有成效的东西。接收快速反馈既支持学习动机,也支持学习速度。我敢说这不是在学习“正确的方法”,而是“迷上一生并热爱生活编程”。其余的将在以后通过经验,中学教育等各种方式很好地实现。


1

恕我直言,教人们用“安全”语言进行编码是一个非常糟糕的主意。人们认为一切都很简单,只考虑添加代码层。并减少了在问题出现时进行调试/修复的机会。

好的程序员绝对必须了解C / C ++甚至汇编语言。他们的思维方式也必须来自这一方面。而不是-“哦,GC,它确实很神奇(tm),我们很酷,为什么C ++没有GC,这很愚蠢。” 态度。


1

对于初学者来说,缺少静态类型是一种功能,而不是错误!

在学习编程时,即使最明显的东西也可能难以理解。动态类型系统非常简单,并且在入门课程中摆脱了较紧迫的主题的困扰,例如模块化,控制流等。

在教育环境中动态键入还有一些概念上的优点:

  1. 类型与值而不是变量关联。可以说这更直观,因为它反映了程序实际崩溃的原因。

  2. 错误消息更加直接和具体。在Python中,您会获得漂亮的堆栈跟踪和一条消息,指出实际出了什么问题。在静态类型语言你得到一个编译器警告说什么出问题。

    使用编译器的学生只能使用他们完全理解的程序,以免他们面临无法解决的编译错误。

  3. 运行时错误检查使您可以运行不完整的程序。这允许更多的增量程序,学生可以首先担心使程序的开始正确,然后再查看会发生什么。

  4. 一些重要的概念(例如参数多态性和鸭子类型)以动态语言免费提供,但需要使用静态语言的更复杂的类型系统。

最后,尽管您仍然必须处理相同的复杂性,但在开始编程时并没有获得静态类型的所有好处:

  • 初学者程序很小,没有很多代码路径(因此,您不必担心很少访问的代码中的类型错误)。

  • Begginer程序不使用高级界面和功能,因此“使用类型系统设计程序”部门也没有太多收获。


1

有一个非常,非常非常的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中,这种缩进类型完全是无效的。他们被迫使用至少可读性强的东西,即使有些不一致。这给了他们一种习惯,希望他们在最终学习其他语言时会继续下去。


0

由于上述大多数原因,Python是一种很棒的第一语言。特别是,第一语言的要求是Python具有柔和的学习曲线。例如,您不必完全了解类,就可以开始。在这方面,这有点像我们许多人开始学习的基础课程。

到目前为止,尚未被强调的一件事是,许多语言的学习曲线都很柔和,但是在尝试做更高级的工作时却很快陷入困境。老派基础课程就是一个很好的例子。使用Python,您可以先了解一些非常高级的知识,然后再使用其他语言可能是更好的选择。

到那时,初学者可以了解更多关于选择和折衷的知识,并且可以使用C / C ++,Java,Assembler,Prolog,Lisp等。实际上,Lisp可能也是一种很好的第一语言,尽管它比较严格。 !


-1

Python作为第一语言的关键问题是动态类型化和缺少变量声明。恕我直言,这是该语言的唯一主要问题。

简单地增加一行代码,说我只会在变量foo中存储一个字符串,这允许程序员,开发环境,语言(对于“专业代码”,这是可怜的傻瓜,后来不得不接受并支持它)一起工作。对于普通的开发人员和初学者而言,尤其是对于多个类型使用变量是没有意义的。在极少数情况下,使用允许动态类型化的显式var / object类型确实有意义,这是完全可以的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.