本文对比了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能够帮人省掉很多不必要的程序优化时间,但是作为一个新手,你不能偷懒,要自己去做这些事情,不练习你就没办法提高。

现在是互联网时代,掌握一门编程语言能够让你拥有更多的机会。如果让我给大家推荐入门语言,我会给大家推荐这样的道路:新手入门,必学Python。这时候你啥也不懂,一些基本的Loop和Control Flow 都不懂,此时就可以利用好Python语言语法简单的特点,学好一些基本的概念。等到你完整读完一本Python入门书了(可以不做习题),那你的新手阶段也可以算基本结束了,进入一个分水岭。

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

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

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

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

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

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

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

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

大概就是这种感觉

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

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

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

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

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

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

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

编程入门python java和c语言_学习编程适不适合从Python入门?哪种语言更适合入门?...相关推荐

  1. 编程程序的名称要记住吗_学习编程时要记住的5件事

    编程程序的名称要记住吗 by Kurt 由库尔特 学习编程时要记住的5件事 (5 Things to Remember When You're Learning to Program) Learnin ...

  2. python爬b站评论_学习笔记(1):写了个python爬取B站视频评论的程序

    学习笔记(1):写了个python爬取B站视频评论的程序 import requests import json import os table='fZodR9XQDSUm21yCkr6zBqiveY ...

  3. 学JAVA编程用什么电脑配置_学习编程,你真正需要的是什么样配置的电脑?

    写这篇文章,仅针对经济条件一般且想认真学习编程的同学,家里经济条件优越,且想玩大型游戏的同学请绕过. 当然,这里也不是说不能玩游戏,只是说如果想认真学习编程,游戏请尽量不玩. 学习编程,你真正需要的是 ...

  4. 小孩学python有意义吗-让中小学生学习编程有什么意义

    让中小学生学习编程有什么意义? 1.中小学生为什么要学习编程? 首先,未来社会,随着信息技术和人工智能的发展,越来越多行业的工作离不开编程.美国前总统奥巴马就呼吁:"如果我们想让美国保持地位 ...

  5. C语言_学习笔记_(一)程序设计与C语言

    计算机和人脑完全不一样,计算机有自己的思维方式和行为习惯.所以有的事情人类很容易就做到了,计算机可能会很困难:而有的事情人类不擅长或者不乐意做,计算机却可能会很容易实现.学习编程就需要了解计算机做事情 ...

  6. 谷歌语言设置_如何设置您的Google主页以使用两种语言

    谷歌语言设置 If you live in a bilingual household, you likely switch back and forth between both languages ...

  7. 不同语言编程能整合到一起吗_学习编程入门指南

    每天都看到很多对编程感兴趣的人在问是不是可以自学软件开发,或者应该怎么自学编程才能入门.在这篇文章里,我将尝试重现一个初学者在学习计算机编程时可能会碰到的问题,并尽量提供相应的解决思路,希望对初学者有 ...

  8. python从基础到进阶_无需编程基础,Python从入门到进阶大法

    deffactorial(n): ifn==0: return1 else: returnn * factorial(n-1) 13. 框架与栈调用 Python代码载入框架,框架位于栈中. 函数与参 ...

  9. c语言 python java css,从零起步学编程 Python篇 Java篇 C#篇 CSS篇 全4册

    内容介绍 本书共四册,从零起步介绍关于Python.Java.C#.CSS这四种常用编程语言的基础知识和实践技巧.作者将以浅显易懂的方式来讲解看似复杂的概念,并通过精选项目来阐述相关问题,进而使你更加 ...

最新文章

  1. 这个CV数据集生成器火了,支持13类复杂CV任务,DeepMind谷歌MIT等打造丨开源
  2. 《Docker——容器与容器云》:第五章 构建自己的容器云
  3. greenplum(一)
  4. googlehelper手机版ios_二次元漫画控iOS苹果手机版下载v1.0.0下载|免费二次元漫画控iOS苹果手机版下载绿色版...
  5. C++——auto_ptr类
  6. 订餐系统之同步饿了么商家订单
  7. ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别
  8. LeetCode 417 太平洋大西洋水流问题
  9. 电信光猫该怎么同时连接三个路由器?
  10. Vue使用nextTick的原因和作用
  11. aptio2018设置u盘启动_华硕笔记本重装系统时,BIOS内无法设置u盘启动怎么办?
  12. 181008有道扇贝每日一句
  13. 关于nagios监控系统添加主机和服务脚本
  14. c语言实现61850协议,IEC61850开发库 libIEC61850提供了用C语言编写的IEC 61850 / MMS - 下载 - 搜珍网...
  15. vnr懒人版教程_【visual novel reader最新版】visual novel reader翻译懒人整合版下载 百度云资源 最新版-七喜软件园...
  16. UMD 被淘汰了吗?不考虑的 UMD 的库如何在纯 UMD 前端项目中运行?
  17. 前端的长度单位有哪些
  18. switch双属性php,thinkphp-条件判断-SWITCH标签
  19. 洛谷——P1238 走迷宫
  20. 汽车计算机控制系统及其组成,汽车计算机控制系统的研究.doc

热门文章

  1. SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】 服务器支持 TLS Client-initiated 重协商攻击(CVE-2011-1473)【原理扫描】
  2. windows下mysql8.x配置远程连接
  3. Docker-compose 安装Minio 最新版本
  4. cannot convert value of type ‘org.codehaus.xfire.spring.editors.ServiceFactoryEditor
  5. 关于JDK8采坑JCE加密限制版本问题
  6. linux 动态传参执行shell脚本
  7. 动态执行shell脚本
  8. oracle us7ascii 中文,US7ASCII字符集中汉字显示问题
  9. android ui怎么用ps切图,怎样用ps对设计稿进行一键切图?
  10. C语言 函数不定长参数 - C语言零基础入门教程