学习编程适不适合从Python入门?哪种语言更适合入门?

原创 码农  2020-01-16 11:23:41  阅读 277 次 评论 0 条

本文对比了C语言和Python语言,分析它们作为编程入门语言各自的利弊,并给出了我推荐的编程学习道路。



我本身已经入门了Python脚本语言,在进阶C语言和JAVA语言后,Python重学就轻松很多,几个小时就拾起了忘记的语法,剩下的几天则学习《Fluent Python》、《Python Cookbook》和另外几本进阶的书。Python融合了诸多编程语言的特色,内容不少,但也算容易理解,我把这几本书来回切换着看,现在基本上算初步掌握了。如果按照我之前的构想,下周学习一下标准库,看几个开源文档的源代码,同时打上千行代码,也算Python小成,可以学习其他让人早衰的知识了。

然而,在Python的整个学习过程中,我总觉得不太舒服。Python的语法写起来太简单了,在写惯了C语言的我看来,它花样太多,而且写起来不动脑子。


我在入门编程时,在网上看到过不少人的讨论,其中主要就是辩论C语言和Python谁更适合入门的问题。作为一个两条路都走过一遭的新手,我跟大家分享一下我对这两门编程语言的理解。

首先让我从一个例子出发,对C语言和python语言做一个比较。我把编程的过程比作炒菜的过程,那么不同语言的程序员是怎么做出一道同样的菜呢?

作为一个C语言工程师,你需要做以下的流程:

  • 你需要先在小本子上规划好炒这道菜的所有原料,查看哪些食材是家中有的,哪些食材是要去购买的。

  • 在决定好购物清单后,你就要想该去哪里买,是楼下的小卖部呢,还是几公里外的农贸市场,在思考过交通、食材质量、价格等诸多变量后再得出答案。

  • 随后,你在市场挑选食材,跟老板讨价还价,然后拎着份量不小的一大堆东西回家。

  • 回到家后,你把食材洗好切好,决定好配料的用量,然后左手翻着菜谱,右手惦着铲子炒菜,滚热的油滴时不时溅到你的手上,冒出淡淡的青烟。

  • 炒完菜后,自己转盘,然后把尚有余温的锅刷干净。

  • 吃完后,自己把碗筷洗出来,专门下楼把厨余垃圾倒掉,因为它们容易腐败。

  • 回到家后,躺在床上,累得如尸体一般,不想动弹。

作为一个C语言工程师,没有人会帮你。准备这道菜的所有流程全部是你自己完成的,你需要处理好一切事情。

但如果你是一个python工程师,那就太轻松了。

  • Python的标准库和外部库就像是“海螺姑娘”,看到你需要食材了,就“啪”地在你面前凭空变出一堆质量很高的食材,还是切好腌好了的。

  • 在很多情况下,你甚至不用动手炒菜,把食材收拾到一个“python魔法锅”里,盖上锅盖,这个锅就会自动帮你炒好。

  • 你带上手套优雅地装盘,用刀叉使用完毕后,直接把它们丢到洗碗机里去。

  • 厨余垃圾由”海螺姑娘“自己收拾。

  • 吃完一餐,神清气爽,甚至想再吃一次。


C语言和Python语言最明显可见的差别,那就是代码量了。C语言是上古语言,那时编程的绝对主体就是很懂计算机的程序员,特别欢迎复杂但实用的工具,因此C语言一出生就颇为硬核。你不仅需要自己决定好程序的逻辑结构,还要规划好变量的类型声明、赋值,想好在哪些代码应当被编译,更要对计算机底层的硬件具有充分的认识,才能处理好指针和内存分配这几些强大的工具。编程语言的发展轨迹基本上就是“懒人化”,越往后的语言一般就越“软核”,Python的出生日期不仅比C语言晚了20年,比C++这门对象设计语言也晚了10年,语法简洁程度可想而知。Python本身是类似于Lisp的一门抽象语言,它自动会处理好一些繁琐的东西,让程序员去专心思考问题,而不是花那么多时间去打代码。因此,要想完成同样一个任务,假设python语言需要写N行,那么C语言则一般要写10N行。

说句实话,如果让我把C语言和Python语言拟人化的话,那么C语言就是手持巨剑、肩披重铠、背背强盾的大武将,一举一动都有宗师气象,而Python则是衣着时尚、手持Ak47步枪的小青年。C语言虽然又帅又威猛,打代码的手感不要太好,但如果论起功能强大和拓展性来,Python手里的步枪可就比大剑强太多了。

长江后浪推前浪,一浪更比一浪强。

 

总结一下,Python在拓展功能、语法简易度上都比C语言强太多,那么许多人可能就想:既然如此,我何必要学C语言找罪受,Python我可以!此言差矣!

让我们回到之前那个炒菜的例子。Python语言能让你少干许多事,这个自然很好,但它会让你养成懒惰的坏习惯,不去学着做菜。假如有一天海螺姑娘走了,魔法锅砸了,你也就无计可施。相反,虽然C语言工程师每炒完一道菜都要汗流浃背浑身乏力,但ta在学习的过程中不断积累经验,不仅会挑选食材了,而且也会掌握配料的处理了。不断练习,必将成为一代大厨!

明白了把。此时你是一个立志于成为“名厨”的新手,如果太依赖于Python自身强大的功能,很可能就患上依赖症,最终啥也不懂。而学习C语言虽然痛苦,但能够帮助你理解更加深入的东西,如果配合阅读其他书籍,不仅知道怎么编程,更“知其所以然”,知道计算机是怎么执行这段代码的,这个对人的提高就要大很多了。编程领域有个词叫“造轮子”,意思就是拒绝使用已有的、成熟的功能,而要自己重新写一个出来。造的轮子越多,你的编程能力就越强!

此外,C语言是许多语言的祖师,C++、C#不必多说,Python本身就是由C语言所实现的。学过C语言后再学Python,你就会有一种“柳暗花明又一村”的感觉:你可以用C语言来解释Python语言的整个结构了。不仅如此你对Python的理解会更加深入,而且你能够自己用C语言拓展Python的功能,甚至自己写出一个编程语言。这个对Geek的诱惑实在太大了,我自己也很兴奋。

虽然用Python写小项目时的体验感是无敌的,但由于Python语言架构本身的某些问题,Python程序在大项目中的表现还远远赶不上C\C++。目前,C\C++\JAVA\C#等仍然是大项目开发的基本语言,随着硬件性能的发展,Python与它们之间的性能上的差距会缩小,但仍然有较大差距。


总结一下,Python语言虽然非常简洁,但容易使人懒惰。假如你是一个对编程有追求的青年,学习C语言并不断“造轮子”则对个人的成长更加有帮助。

注意,我不认为Python的“懒人化”是完全不好的,全世界的著名黑客都喜欢Python语言,目前绝大多数互联网公司的工作语言也是Python语言。Python能够帮人省掉很多不必要的程序优化时间,但是作为一个新手,你不能偷懒,要自己去做这些事情,不练习你就没办法提高。


现在是互联网时代,掌握一门编程语言能够让你拥有更多的机会。如果让我给大家推荐入门语言,我会给大家推荐这样的道路:

  1. 新手入门,必学Python。这时候你啥也不懂,一些基本的Loop和Control Flow 都不懂,此时就可以利用好Python语言语法简单的特点,学好一些基本的概念。等到你完整读完一本Python入门书了(可以不做习题),那你的新手阶段也可以算基本结束了,进入一个分水岭。

  2. 如果你觉得编程很无聊,而且目前没有什么用得着Python的地方,那么你可以放弃了,不必再做后续的阅读。

  3. 如果你觉得编程也挺无聊,但学习Python可以帮助自己做一些生活中的小事情,那么你可以专门走Python的路线

    首先,重读那本你已经阅读过的入门著作,或者更换另外一本不错的入门书,完成半数以上习题, 随后开始进阶内容的学习。

    进阶内容就要难很多了,你会发现自己啥也看不懂。给你两个字:坚持。编程的学习是讲究循序渐进的,每一次学习都难免需要其他知识作为铺垫,正如学习如来神掌首先要从最基础的罗汉拳学起。你专门走Python这条道路,跳过其他的很多内容,走火入魔,自然就要承受零基础读进阶内容的后果。此时你可以上网去寻找一些信息,效率挺低,不过也能解决一些问题。

    如果你没有坚持下来,不要责怪自己,逆天而行总是困难的如果你强咽下一口血把这本进阶书读完,那请你把这本大概800页的书再读上至少两遍,书中的所有程序至少码两遍。然后,请你读下大概1400页的Python3标准库。然后,请你上开源平台上看看一些比较有名的外部库,学习下它们的代码。

    等到你把这几步全部做完后,恭喜,你才刚刚入门python而已!Python的语法虽然学起来简单,但内容太丰富,水不是一般的深。从新手到入门,学习效率高点大概2个月就成。但从入门到精通,恐怕就需要几年的实践经验了。

    当然,如果你走这条路真的达到精通python的境界,我当然会很欣赏你,但欣赏中又会带点小小的不屑:“哼!旁门左道,非我族类!单学编程语言不学计算机科学,就如7岁小孩持有倚天剑,虽然在平常生活中可以斩金削铁无所不能,但因为没有内功,碰到强敌就完蛋。我甚至怀疑,是否真的有完全不学习计算机科学的编程大神存在。编程生涯中那么多坑,你总得学点其他的东西吧。

  4. 如果此时你对编程有了一些兴趣,觉得编程是很好玩的事情,恭喜,你成为了命途多舛的Geek。

    学习编程适不适合从Python入门?哪种语言更适合入门? 学习编程适不适合从Python入门?哪种语言更适合入门? 编程代码

    大概就是这种感觉


    上面说过,由于需要许多知识做铺垫,python进阶就困难了不少。如果你仍然坚持学习Python,你就能可能遇到你进步路上的第一个瓶颈。

    此时我给你的建议就是:学习C语言的吧!C语言真是好玩的语言,一套流程走下来获益多多。本来C语言新手入门是比较麻烦,但如今你已经在python中走过一遭,许多各语言共通的特性已经知道的差不多,如果配合好书,C语言入门也不算太难了!

    C语言不仅该入门,而且值得进阶。学完C语言后,就该接触面向对象的语言了。我个人学过JAVA语言,但推荐你学C++语言,不仅因为它一脉相承于C语言,C++语言的特性要比JAVA多,更重要的是C++图书的质量要比JAVA的不知道高到哪里去了!

    C++入门即可,然后就可以反过头来学Python。在C和C++语言的鬼门关中走过一遭后,你会惊讶地发现,曾经天书一般的Python进阶书竟然是这么容易理解。你可能走上Python工程师的道理,但也没准会跟我一样,学过一遍后反而“C语言一生推”呢!

    为什么说你”命途多舛“,是因为走程序员这条路,有死无生!要想有更加广阔的视角,你就必须学习计算机科学,必然要学习算法、编译、操作系统、计算机系统、网络等等一些基础知识,各个水都深得很。这个需求是客观的,你学着学着语言,看着某本书,忽然就会没有某些知识就没法继续学习下去。等到基础掌握完,你可以选择一个领域深挖下去,搞一个呈正态分布的知识体系出来。当然,十年也已经过去了。此生此世,乃至哈诺塔谜题结束,你将永远学习下去,一刻不能脱出!


写完这篇文章,果然舒服很多,比起打代码来,打拼音简直是种享受。学编程越多,我就越想将学一辈子。

呜呼!吾生也有涯,而知也无涯!愿我能够更加聪明,能够接着玩下去。


本文地址:https://www.itcodeit.com/post/53.html
版权声明:本文为原创文章,版权归 码农 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?