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

本文对比了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语言一生推”呢!

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 备份 一张表_mysql 备份表的一个方法

#--- start# 新建表create table sp2_match_comment_tmp like sp2_match_comment; # 这种方式 外键索引,触发器不会在新表中有,要自己添加LOCK TABLES sp2_match_comment write, sp2_match_comment AS smc2 read, sp2_match_comment_tmp write;# 导出最新…

springmvc的工作原理_SpringMVC工作原理

1 简介SpringMVC框架是以请求为驱动,围绕Servlet设计,将请求发给控制器,然后通过模型对象,分派器来展示请求结果视图。其中核心类是DispatcherServlet,它是一个Servlet,顶层是实现的Servlet接口。2 运行原理…

java逻辑运算符_Java逻辑运算符

Java逻辑运算符Java逻辑运算符包含下面6中符号:&& 与 ;&& 与 前后两个操作数必须都是true才返回true,否则返回false& 不短路与 ; & 不短路与 表达式都会执行到|| 或; || 或 只要两个操作数中有一个是tru…

跨站点请求伪造_十大常见web漏洞——跨站点请求伪造(CSRF)

CSRF介绍什么是CSRF呢?我们直接看例子。https://mp.toutiao.com/profile_v3/graphic/preview?dodelete&pgc_id6829574701128352260这个URL是头条删除pgc_id为6829574701128352260的一篇文章的连接,通过执行这个URL用户就可以删除这篇文章。首先攻击…

java多线程队列_java多线程消费者生产者模式(BlockingQueue 通过阻塞队列实现)

import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;/*** Created with IntelliJ IDEA.* User: csx* Date: 4/24/14* Time: 9:56 AM* To change this template use File | Settings | File Templates.** 生产者与消费者模型中&#x…

unique函数_C++核心准则C.35:基类的析构函数必须满足的条件

C.35: A base class destructor should be either public and virtual, or protected and nonvirtual基类的析构函数要么是公开的虚函数,要么是保护的非虚函数Reason(原因)To prevent undefined behavior. If the destructor is public, then calling code can atte…

java jta 例子_Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)...

在本系列先前的文章中,我们主要讲解了JDBC对本地事务的处理,本篇文章将讲到一个分布式事务的例子。请通过以下方式下载github源代码:本地事务和分布式事务的区别在于:本地事务只用于处理单一数据源事务(比如单个数据库)&#xff0…

python连接redis哨兵_Python redis.sentinel方法代码示例

本文整理汇总了Python中redis.sentinel方法的典型用法代码示例。如果您正苦于以下问题:Python redis.sentinel方法的具体用法?Python redis.sentinel怎么用?Python redis.sentinel使用的例子?那么恭喜您, 这里精选的方法代码示例或…

交换两个数组 差最小 java_如何交换两个等长整形数组使其数组和的差最小(C和java实现)...

1 importjava.util.Arrays;23 /**4 *5 *authorAdministrator6 *7 */8 public classTestUtil {9 private int[] arrysMin null;1011 private int[] arrysMax null;1213 private int matchNum 0;1415 private boolean hasMatched false;1617 /**18 * 返回数组的所有元素的总和…

python 判断子序列_Leetcode练习(Python):第392题:判断子序列:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。...

题目&#xff1a;判断子序列&#xff1a;给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~ 500,000)&#xff0c;而 s 是个短字符串(长度 <100)。字符串的一个子序列是原始字符串删除一些(也可…

垂直串联六关节机器人调试手册_工业机器人有哪些应用你知道吗?

目前&#xff0c;工业机器人大部分集中于传统的焊接、喷涂等领域&#xff0c;我国工业机器人的核心部件和整机市场仍被国外垄断&#xff0c;工业机器人要面向整个智能制造市场&#xff0c;还需要具备应对整个智能制造过程中大多数工艺的能力&#xff0c;而工业互联网则是实现智…

flume avro java 发送数据_flume将数据发送到kafka、hdfs、hive、http、netcat等模式的使用总结...

1、source为http模式&#xff0c;sink为logger模式&#xff0c;将数据在控制台打印出来。conf配置文件如下&#xff1a;# Name the components on this agenta1.sources r1a1.sinks k1a1.channels c1# Describe/configure the sourcea1.sources.r1.type http #该设置表示接…

python三角函数拟合_使用python进行数据拟合最小化函数

这是我对这个问题的理解。首先&#xff0c;我通过以下代码生成一些数据import numpy as npfrom scipy.integrate import quadfrom random import randomdef boxmuller(x0,sigma):u1random()u2random()llnp.sqrt(-2*np.log(u1))z0ll*np.cos(2*np.pi*u2)z1ll*np.cos(2*np.pi*u2)r…

java url 本地文件是否存在_我的应用程序知道URL中是否存在文件会一直停止[重复]...

这个问题在这里已有答案&#xff1a;我试图写一个应用程序&#xff0c;如果在给定的URL中有一个文件&#xff0c;将字符串放在textview中&#xff0c;这是代码和崩溃信息&#xff0c;可能是什么错误&#xff1f;public class MainActivity extends AppCompatActivity {String u…

python枚举类的意义_用于ORM目的的python枚举类

编辑问题我正在尝试创建一个类工厂,它可以生成具有以下属性的枚举类&#xff1a;>从列表中初始化类允许值(即,它)自动生成&#xff01;).> Class创建自己的一个实例对于每个允许的值.>类不允许创建任何其他实例一旦上述步骤已完成(任何尝试这样做会导致异常).>类实…

java 生成校验验证码_java生成验证码并进行验证

一实现思路使用BufferedImage用于在内存中存储生成的验证码图片使用Graphics来进行验证码图片的绘制&#xff0c;并将绘制在图片上的验证码存放到session中用于后续验证最后通过ImageIO将生成的图片进行输出通过页面提交的验证码和存放在session中的验证码对比来进行校验二、生…

yy自动语音接待机器人_智能语音机器人落地产品有哪些?

据相关研究报告表明&#xff0c;在众多人工智能落地产品或者应用场景中&#xff0c;智能语音机器人无论从产品的成熟度还是应用的广泛度来说&#xff0c;都是人工智能行业最热门和最有前景的产品。智能语音机器人并不只是一款产品&#xff0c;它是所有智能语音系列产品的统称&a…

java资源文件获取属性_Java读写资源文件类Properties

Java中读写资源文件最重要的类是Properties1) 资源文件要求如下:1、properties文件是一个文本文件2、properties文件的语法有两种&#xff0c;一种是注释&#xff0c;一种属性配置。注 释&#xff1a;前面加上#号属性配置&#xff1a;以“键值”的方式书写一个属性的配置信息…

java被放弃了_为什么学Java那么容易放弃?

学习Java确实很容易就放弃&#xff0c;但是也很容易就学好&#xff0c;因为大多数人都是抱着试一试的心态&#xff0c;然后当后面就坚持不下去但是回过头来想一想&#xff0c;打游戏上分容易吗&#xff0c;一样是磕磕碰碰的&#xff0c;有时候十几连跪都不会放弃你上分的心情。…

python 隐马尔科夫_机器学习算法之——隐马尔可夫(Hidden Markov ModelsHMM)原理及Python实现...

前言上星期写了Kaggle竞赛的详细介绍及入门指导&#xff0c;但对于真正想要玩这个竞赛的伙伴&#xff0c;机器学习中的相关算法是必不可少的&#xff0c;即使是你不想获得名次和奖牌。那么&#xff0c;从本周开始&#xff0c;我将介绍在Kaggle比赛中的最基本的也是运用最广的机…