现在流行的编程语言里,python的热度可谓是热的通红,python以其短小精悍的语法、以其高效的开发,简单入门作为亮点,迅速的在各个领域占有一席之地。
然而,无论你说python有多好,我都不建议你学它入门,其理由如下:
1、有句话叫做:人生苦短,我用python!
这句话没错,只不过你认真看,人家是用,不是初学!
2、python的特点是易读、易维护,并且被大量用户所欢迎
注意,仍然是用户,不是初学者。学都没学会,写都不会写,哪来的维护?
3、python简单易学?
No,所有的编程语言都说它简单易学,PHP说它简单易学,VB说它简单易学,C也说它简单易学,甚至连写个接口脑袋都要抽三筋的Java,你去翻基本入门书,都说它简单易学云云。。。。
实际上:python官方英文的library就薄薄的2000页(强调,不是200,你没看错),简单吧!这还不包括reference、logging等等HowTo指南,加起来3000页不止。当然不需要你全部背下来,但是你如果没有整体的看一遍下来,压根就不会明白人家的设计理念是怎么回事!
当然,这不能怪python,因为任何一门编程语言,要有足够的能力操控OS、底层硬件和网络,它就必须有这么多的功能模块,而多一个模块,就多一门学习的内容,相比Java,那已经是简洁到不能再简洁了。
然而这3000页看完了,也只是入门而已,只是知道了这门语言有什么功能而已。。。。。
所以,没有一门语言是真正简单易学的,包括中文的易语言(虽然不入流,但好歹是中国人的一门编程语言),都是易学难入门,入了门难懂怎么用,用了难精通。。。。。
4、python的抽象程度太高
对于入门的程序员而言,python封装了太多的抽象概念,我觉得这个才是最大的障碍。
在一些抽象程度比较低的语言,比如C或C++,VB等,for循环就只是for循环,功能是很单一的,单一就意味着简单好懂(我指的是真的懂,不是看山是山,而是看山还是山的懂),借着简单的循环概念,甚至可以一路追到汇编的原理都不难。
但是python不同,python简化和高度抽象了for循环,所有的可迭代对象都可以用来for in,用该来当然爽,但是如果是初学者,很可能这个看山是山的概念就跟着一辈子,直到有一天看到C语言的for,觉得看山不是山的时候,才会想这弄清楚这些迭代是怎么回事。从学习的角度而言,python的简单和抽象,反而是一个障碍。
这只是冰山一角的例子,实际上,python封装了一系列编程语言中的常用数据结构,链表你不需要懂,堆栈不需要,树的原理也不需要,排序算法也不需要,10个字母以内一个函数就搞定了,何必像C语言那样写一段一段的实现,但是,我认为,C语言中这些基本的数据结构实现是整个编程思想的基础,有句话这么说,教会你编程语言简单,教会你编程思想,估计没几个老师做得到。缺乏基础的编程思想,即使能够勉强的依葫芦画瓢,也编不出好代码。
5.python的面向对象
对于任何一个初学者而言,我觉得用python学习面向对象都是不明智的。面向对象本身就是抽象度很高的编程理念,而像javascript和python这类动态类型语言,对面向对象的抽象程度就更高,如果没弄清楚类和对象的概念,就从学习原型入手、从动态对象属性入手,那对于面向对象的概念都只能是浅层的,即使深入理解了这些原理,所花费的学习时间成本也会非常非常高!
相对抽象程度低一些的编程语言,比如C++,可以很容易的读懂什么是类,函数是什么,对象属性是什么,什么是对象,什么是继承,单继承多继承,静态方法、静态变量,抽象类、接口等等等等,它的抽象程度低,就会把这些基础的概念一个一个的分清楚。而如果你到python中,完了,没别的,一切都是对象,就是对象一锅粥。
当然啊,这相当好用,对象可以绑定属性,类也是可以是对象,函数也是对象,都可操作。好用不代表好懂,如果你刚学编程就这么一锅粥的混沌,概念的深入是非常困难的。我无法猜测你将来的python水平会怎么样,但是至少我能保证,你绝对看不懂一些高质量的程序,人家的思路是什么,为什么这么写才会高效。
6.对于初学者而言,C&C++ VS python
python的优点是能够用最短的代码实现功能:但是,这并不意味着,让你写最短的代码学懂编程!越短的代码,代表越高级的抽象,看得见摸得着的东西都搞不懂,突然就站在高度抽象的层面上学习,个人认为这是本末倒置的。
python有丰富的模块和库:但是,用一个库,就意味着你要学一个库,python让你不要重复造轮子,但不是让你可以不懂轮子是怎么造出来的。这些库对于编程老手来说,就是一个工具百宝箱,但是,这个丰富对于初学者的另外一个说法就是:复杂,难懂,要学的东西太多!!!
python的明确、优雅、简单哲学:语意上抽象上的明确,对一个语法都没弄懂的人来说就是糊涂,弄不清一句表达式完成了一个功能到底它做了什么事,对编程语言的理解也就只能局限于表层。在此之上建立的高楼(框架)等等都是依葫芦画瓢,不知所以。代码的优雅,前提是你能写出一定量的代码,才会懂什么叫优雅,如果门都没入,懂什么优雅呢?把世界有名的抽象画给我看,我觉得还没有我三岁的女儿画的直观,我懂什么优雅?编程也一样。python的3000页手册,对任何一个初学者而言,都谈不上简单吧?
所以,我的建议是,入门应该从C和C++入手,这两门语言在实际开发中,是非常非常难的!但是对于学习而言,却是所有编程语言中最简单的!为什么这么说,看如下理由:
1、C&C++涵盖了几乎所有编程语言的基础概念,也就是说,在基础概念上,别人有的它都有,别人没有的它也有。而且,从数据类型到语法,到循环逻辑到面向对象,所有的概念都非常清晰,是什么就是什么,是鸭子就是鸭子,而不是像鸭子是鸭子(python),这对初学者而言是非常重要的,任何的概念都没有歧义,明确、简单!(我指的是在学习概念上)。所以,学概念和编程思想,C&C++是无可替代的,所有的概念都简单直接,概念丰富,抽象程度低,这对理解计算机的编程原理是最快的途径。
2、标准库的内容相对少,对学习者而言,越少的库学习的时间成本就越低,抛开大量的工具库,学习编程语言本质的东西,编程思想的学习速度就越快。工具库本身就是为了应用的,而不是为了入门的。
3、C&C++在使用上是非常难的,因为抽象程度低,实现的库少,要实现一个功能就需要用大量的功能代码和重复的造轮子,要使用来生产,就必须是很多人一起烧脑,所以它难。但是如果你能拿来使用,那就绝对是大牛的大牛,linux就是全部用C写的,python解释器也用C写的,Java也用C写的,但要真用到那个境界,真的真的很难。
7、总结
请明确以下两点:
C&C++的复杂,是针对使用者,对初学者而言,他们是学习编程最简单的语言,没有之一。
python的复杂是对初学者,对使用者而言,想要的功能都有人帮忙实现好了,拿过来用就可以。
但是要学会怎么编程,只学C&C++好像不知怎么用,只学python用的云里雾里。个人的建议是:学C和C++入门,把C和C++的所有概念学完,再学python。如果你想用1个月的时间入门python,最好用20天的时间来学C&C++入门,再用10天学python。这样,你对python的领悟,绝对比30天都学python要深刻的多。
最后,组织一句颇为矛盾的话:
如果这辈子你只学一门编程语言,我建议你学python,
但是学python之前,你必须得先基本上学会C和C++