为什么要学 Python?
程序员文章站
2022-05-11 08:21:37
...
我是一名大三本科生,一直学的是java,像多线程反射这些东西也都了解,spring,ibatis这些框架也在实习时用过,其它web框架也多少了解。
身边很多同学在大二就开始学python,但是我至今没看到他们怎么用过,所以一直很困惑自学python有什么用,加之对python的用途也不是很了解,大二没有考虑学python。我看过一些介绍,说python是一种"胶水语言",linux下用python做服务器的工具也很常见。
如果是为了开发自己用的小工具,我觉得对我而言java就足够了。所以我想问问前辈们当初学习python是什么什么动机、什么目的、什么理由?因为我总觉得学校里某些同学似乎是为了赶时髦才学的python,然后看两天就四处吹嘘自己会python,python有多么多么高级牛掰厉害,然后就扔着不用了,我想如果我都不知道学习的目的,估计也会看两天python就扔到一边,所以想咨询一下前辈们的学习python的理由以及用它做了什么。
可能大家曲解了我的意思了,我只是想问一下python和其他语言相比有没有什么有魅力的地方,这样我就能学习时更好的体会python这门语言设计者的本意,有自己的体会,用自己的思维方式去学习。而不是为了盲目的去看教程,只为了把它作为自己的一个额外能力。我觉得只有一直用python的人才能说出它与其它语言的不同之处,这些体会是网上教程不可能去写的,所以我才会问为什么要学python,因为我觉得每一种语言一定是有其它语言可取代的地方才会一直存在下去,我的本意只是想问问大家对python这门语言的见解体会,以及对学习python的认识,不是想贬低什么,更没有炫耀哪种语言的意思。虽然大家对我的问题可能偏重于指责,但是还是很用心的回答了我的问题,很受教
学会py还可以飞。
好吧我够了。悄悄搬运开始学py的第一个slide。感觉这个概括的相当全面了。一句话Java和Py和平共存互补啦。壮哉我大Java母语(抱歉有点跑题了(逃_(√ ζ ε:)_
如果只给一个理由的话,一句话:写起来快、看起来明白。
你要非要问它可以干什么。作为通用性的语言基本上什么都能干,除了一些对性能要求很高的场合。比较常见的领域是:web服务器、科学计算、应用内嵌脚本、系统管理(程度由高到低)。
就这个事情而言简单说说我的看法吧。
首先,我觉得赶时髦没有任何的问题(话说Python现在算时髦么,都快20年了。时髦的应该是go、hack之类的吧)。作为一个职业程序员,追赶技术的潮流本来就是很正常的事。有了什么新的工具、语言、理论。先拿来玩一玩,了解一下他的特性。这叫技术储备。一个东西之所以能流行起来必然有它的特点在里边。有的时候学些东西仅仅就是 have a fun 而已。每次都当你有需求的时候再学永远都会落后一拍,而且无法站在一个高度去选择。
举个例子:比如你现在要写个手机游戏,现在有Unity、cocos2d、cocos2d-x、cocos2d-x lua 及其他引擎可供选择。如果你从来都没有用过这几个东西你怎么选择?肯定是上网看一堆良莠不齐的博客,问问同事、学长之类的,最后凭感觉选一个就开始写。如果你只会其中一个呢?你肯定会毫不犹豫的使用你会的那个。问题在于,有的时候不同的技术方案有不同的局限性,弄不好这就是定时炸弹啊。如果这些你都用过,即使不是非常的精通。你也可以根据自己的团队组成、工期、人员招聘的难度、游戏类型等等来选择最合适的工具。等到有需求的时候根本不会有那么时间来让你每个都学一遍的。
其次,最为一个程序员,开拓视野很重要。多尝试几门语言没有任何坏处。学习其他的语言有助于你跳出自己之前的局限来看问题。语言限制了你的表达,也限制了你思考问题的方式。多了解一些不同的编程范式,有助于你加深对编程语言的了解。没有什么坏处。只是蜷缩在自己熟悉的东西里永远无法提高。
最后,我觉得你的心态有很大的问题。为什么这么说呢?如果很多人不断的对我说:“自己会python,python有多么多么高级牛掰厉害。”我的第一反应是:“我擦,真的么?这么吊的东西我居然没用过。回去玩玩看,到底好不好用。”而不是说:“擦,又TM给老子装逼,会python了不起么?”如果你真正渴求的是知识or技术,你根本不会在意谁在什么地方用什么语气说的。你在意的只会是知识本身。 因为被*了,觉得Python大法好。
PS:Python大法确实好阿。 有人说我不好好说话,那就改一下言辞。不过还是要把这句放最前面:
『学XX有什么用,我会XX,不也挺好的吗』这种话从CS学生嘴里说出来真是不应该。
我上大学的时候,学校只教C++和Java。因为Linux玩过一段时间被叫去写网站,接触了PHP。当时对PHP惊为天人:语言简洁,能直接写网站,带字符串处理。这种感觉就是题主所说的『神器感』,那段时间天天和同学介绍PHP,介绍它有多强大。
后来对Python有了『神器感』,对Django有了『神器感』,对flask有了『神器感』,对scala有了『神器感』,对go有了『神器感』。再后来,对C++有了『神器感』,对Java有了『神器感』。我现在接触过的语言只有这些了,实在没精力再学习其他语言,如果让我回到大学,那么多闲暇时间足够我学多少东西啊!
说白了,任何一个语言,稍微深入地学习一下而不是看知乎上『学习XX有什么用』的问题回答,你都会很快有『神器感』,因为任何一门语言如果流行到你听说过名字,一定是有一个区别其他语言的比较优势。
真正有求知欲的人,看到一门简单并且上手很快的语言怎么都会去学习一下的。你学Java,没问题啊,基于JVM的语言那么多。scala,closure,还有一大堆知名语言的JVM实现,一个一个学习一下又如何呢?只会Java,那么就好好研究下JVM,看看byte code,理解JVM GC机制和ref counting的区别,理解它的JIT机制。
你说用过spring和ibatis,那 Pony ORM - Use Pure Python to Speak to Your Data 这种用Python黑魔法做出来的ORM你用过吗?Django Admin site这种建站神器用过吗?再不济,web.py和flask这种快速建站工具试过吗?
你说学过多线程,那你知道工业界很少用多线程,多是纤程、协程了吗?你知道go把goroutine做成语言特性是多牛逼吗? 看图,别说话。
因為 人生苦短 写脚本啊!生活中遇上的小问题,没有必要动用“重型武器”。
处理文本,归类文件,批量下载……
爬虫什么的,几行就写出来了。
一切懒得用手操作的,都丢给Python好了。
Java太臃肿;
PHP不方便在本地运行;
C和C++太麻烦;
Golang需要编译;
Cmd功能太弱(Bash还可以,可我日常用的是Windows)。
LIST神马的我还没学明白呢……
选择很有限,Python的出现就很及时了嘛…… 只会java的话有些不方便的地方:
PS:最近花了很多时间在Go上,目前看来很有可能用GO取代Java和一部分python的用途,开发效率很高,写并发程序超级省心,和linux系统结合也比java好,部署简单,不依赖于外部工具(go内置的工具,相对于maven和virtualenv来说相当简洁好用)。长期看来,一直依赖的c/c++/Java/Python可能会变成c/go/python,完全能实现一样的功能和性能,而且更加高效。 不用动机,动机就是好奇或者自己恰好有时间而已,抛开具体用途的目的,多学一门语言也不是坏事,因为一这可以培养你的视野和不同的思维方式,二可以熟悉学习新语言的能力。
你看我现在如果要用一门新语言,一个星期左右的空闲时间就够我上手了,因为大多数有点名气的语言我都研究过,基本要素无非那几个,强类型弱类型,静态类型动态类型,有没有lazy evaluation,函数式还是命令式,有没有gc,动态还是编译,oo系统是怎么样的,并发支持是哪种,多线程怎么样,还是原生支持协程,或者Erlang那种高级的api,语言执行效率怎么样。知道的足够多对你自己就灵活多了,平时的选择也就多了。
比如我之前的实验一直是用Python写的,但是最近我发现Python效率实在是太坑了,那我很自然的想到换门语言嘛,那我就去找,首先用惯了python,c/java这种肯定是回不去了,要考虑效率,那基本选择就是JVM或者js v8上的或者静态编译的,同时我还偏好函数式,找了一圈,Clojure貌似还可以,那我就换Clojure,一星期熟悉语言,然后就切换过来了。结果发现Clojure太依赖Java了,还有性能还是不行,要提高性能我还得给各个变量手动type hint,那我何必用Clojure,于是又花一个星期干脆转到Haskell。为什么切换的这么自如,就是因为我没事的时候这些语言基本都翻过知道大概是怎么回事啊。
所以我跟你讲,珍惜大学这种空闲时间,有兴趣就多学点。学过就扔了没关系,你忘记的是语法,但是思想和特点是不会忘或者即使忘了也是会有点印象的,而语法这种东西是最简单最容易学的忘了也无所谓。但以后万一用到了,你就多种选择了。
(另外,我不觉得Java程序员学了Python会看两天就扔到一边哈哈,既然三分之一的代码量就能干同样的事何必和自己过不去呢哈哈~~逃~~另外五年前学Python那叫赶时髦现在都烂大街了好么~装逼不来加入我大Haskell么少年~
嗯哼~ 让每个问 “Python 能干什么” 的人都去看这个网页就对了:http://nbviewer.ipython.org
至于做点大家都能做的事情,写个网站好了。Django 这种重型框架的代码重启时间也是在 1s 以内的,在 Tomcat 部署个 WAR 包 30sec 够不够?
身边很多同学在大二就开始学python,但是我至今没看到他们怎么用过,所以一直很困惑自学python有什么用,加之对python的用途也不是很了解,大二没有考虑学python。我看过一些介绍,说python是一种"胶水语言",linux下用python做服务器的工具也很常见。
如果是为了开发自己用的小工具,我觉得对我而言java就足够了。所以我想问问前辈们当初学习python是什么什么动机、什么目的、什么理由?因为我总觉得学校里某些同学似乎是为了赶时髦才学的python,然后看两天就四处吹嘘自己会python,python有多么多么高级牛掰厉害,然后就扔着不用了,我想如果我都不知道学习的目的,估计也会看两天python就扔到一边,所以想咨询一下前辈们的学习python的理由以及用它做了什么。
可能大家曲解了我的意思了,我只是想问一下python和其他语言相比有没有什么有魅力的地方,这样我就能学习时更好的体会python这门语言设计者的本意,有自己的体会,用自己的思维方式去学习。而不是为了盲目的去看教程,只为了把它作为自己的一个额外能力。我觉得只有一直用python的人才能说出它与其它语言的不同之处,这些体会是网上教程不可能去写的,所以我才会问为什么要学python,因为我觉得每一种语言一定是有其它语言可取代的地方才会一直存在下去,我的本意只是想问问大家对python这门语言的见解体会,以及对学习python的认识,不是想贬低什么,更没有炫耀哪种语言的意思。虽然大家对我的问题可能偏重于指责,但是还是很用心的回答了我的问题,很受教
回复内容:
因为吃完py就可以吃raspberry pi啊。学会py还可以飞。
好吧我够了。悄悄搬运开始学py的第一个slide。感觉这个概括的相当全面了。一句话Java和Py和平共存互补啦。壮哉我大Java母语(抱歉有点跑题了(逃_(√ ζ ε:)_
如果只给一个理由的话,一句话:写起来快、看起来明白。
你要非要问它可以干什么。作为通用性的语言基本上什么都能干,除了一些对性能要求很高的场合。比较常见的领域是:web服务器、科学计算、应用内嵌脚本、系统管理(程度由高到低)。
就这个事情而言简单说说我的看法吧。
首先,我觉得赶时髦没有任何的问题(话说Python现在算时髦么,都快20年了。时髦的应该是go、hack之类的吧)。作为一个职业程序员,追赶技术的潮流本来就是很正常的事。有了什么新的工具、语言、理论。先拿来玩一玩,了解一下他的特性。这叫技术储备。一个东西之所以能流行起来必然有它的特点在里边。有的时候学些东西仅仅就是 have a fun 而已。每次都当你有需求的时候再学永远都会落后一拍,而且无法站在一个高度去选择。
举个例子:比如你现在要写个手机游戏,现在有Unity、cocos2d、cocos2d-x、cocos2d-x lua 及其他引擎可供选择。如果你从来都没有用过这几个东西你怎么选择?肯定是上网看一堆良莠不齐的博客,问问同事、学长之类的,最后凭感觉选一个就开始写。如果你只会其中一个呢?你肯定会毫不犹豫的使用你会的那个。问题在于,有的时候不同的技术方案有不同的局限性,弄不好这就是定时炸弹啊。如果这些你都用过,即使不是非常的精通。你也可以根据自己的团队组成、工期、人员招聘的难度、游戏类型等等来选择最合适的工具。等到有需求的时候根本不会有那么时间来让你每个都学一遍的。
其次,最为一个程序员,开拓视野很重要。多尝试几门语言没有任何坏处。学习其他的语言有助于你跳出自己之前的局限来看问题。语言限制了你的表达,也限制了你思考问题的方式。多了解一些不同的编程范式,有助于你加深对编程语言的了解。没有什么坏处。只是蜷缩在自己熟悉的东西里永远无法提高。
最后,我觉得你的心态有很大的问题。为什么这么说呢?如果很多人不断的对我说:“自己会python,python有多么多么高级牛掰厉害。”我的第一反应是:“我擦,真的么?这么吊的东西我居然没用过。回去玩玩看,到底好不好用。”而不是说:“擦,又TM给老子装逼,会python了不起么?”如果你真正渴求的是知识or技术,你根本不会在意谁在什么地方用什么语气说的。你在意的只会是知识本身。 因为被*了,觉得Python大法好。
PS:Python大法确实好阿。 有人说我不好好说话,那就改一下言辞。不过还是要把这句放最前面:
『学XX有什么用,我会XX,不也挺好的吗』这种话从CS学生嘴里说出来真是不应该。
我上大学的时候,学校只教C++和Java。因为Linux玩过一段时间被叫去写网站,接触了PHP。当时对PHP惊为天人:语言简洁,能直接写网站,带字符串处理。这种感觉就是题主所说的『神器感』,那段时间天天和同学介绍PHP,介绍它有多强大。
后来对Python有了『神器感』,对Django有了『神器感』,对flask有了『神器感』,对scala有了『神器感』,对go有了『神器感』。再后来,对C++有了『神器感』,对Java有了『神器感』。我现在接触过的语言只有这些了,实在没精力再学习其他语言,如果让我回到大学,那么多闲暇时间足够我学多少东西啊!
说白了,任何一个语言,稍微深入地学习一下而不是看知乎上『学习XX有什么用』的问题回答,你都会很快有『神器感』,因为任何一门语言如果流行到你听说过名字,一定是有一个区别其他语言的比较优势。
真正有求知欲的人,看到一门简单并且上手很快的语言怎么都会去学习一下的。你学Java,没问题啊,基于JVM的语言那么多。scala,closure,还有一大堆知名语言的JVM实现,一个一个学习一下又如何呢?只会Java,那么就好好研究下JVM,看看byte code,理解JVM GC机制和ref counting的区别,理解它的JIT机制。
你说用过spring和ibatis,那 Pony ORM - Use Pure Python to Speak to Your Data 这种用Python黑魔法做出来的ORM你用过吗?Django Admin site这种建站神器用过吗?再不济,web.py和flask这种快速建站工具试过吗?
你说学过多线程,那你知道工业界很少用多线程,多是纤程、协程了吗?你知道go把goroutine做成语言特性是多牛逼吗? 看图,别说话。
因為 人生苦短 写脚本啊!生活中遇上的小问题,没有必要动用“重型武器”。
处理文本,归类文件,批量下载……
爬虫什么的,几行就写出来了。
一切懒得用手操作的,都丢给Python好了。
Java太臃肿;
PHP不方便在本地运行;
C和C++太麻烦;
Golang需要编译;
Cmd功能太弱(Bash还可以,可我日常用的是Windows)。
LIST神马的我还没学明白呢……
选择很有限,Python的出现就很及时了嘛…… 只会java的话有些不方便的地方:
- 系统部署,如果经常调用外部命令或者资源,用java很不方便。
- 如果要和其他工具或者语言交互,java不如有胶水语言之称的python效率高。
- 网页开发,非工业级应用的话,python代码量只有1/3不到,多快好省性能不差。
- 发布简单,python的环境比起java来相当轻量级。
PS:最近花了很多时间在Go上,目前看来很有可能用GO取代Java和一部分python的用途,开发效率很高,写并发程序超级省心,和linux系统结合也比java好,部署简单,不依赖于外部工具(go内置的工具,相对于maven和virtualenv来说相当简洁好用)。长期看来,一直依赖的c/c++/Java/Python可能会变成c/go/python,完全能实现一样的功能和性能,而且更加高效。 不用动机,动机就是好奇或者自己恰好有时间而已,抛开具体用途的目的,多学一门语言也不是坏事,因为一这可以培养你的视野和不同的思维方式,二可以熟悉学习新语言的能力。
你看我现在如果要用一门新语言,一个星期左右的空闲时间就够我上手了,因为大多数有点名气的语言我都研究过,基本要素无非那几个,强类型弱类型,静态类型动态类型,有没有lazy evaluation,函数式还是命令式,有没有gc,动态还是编译,oo系统是怎么样的,并发支持是哪种,多线程怎么样,还是原生支持协程,或者Erlang那种高级的api,语言执行效率怎么样。知道的足够多对你自己就灵活多了,平时的选择也就多了。
比如我之前的实验一直是用Python写的,但是最近我发现Python效率实在是太坑了,那我很自然的想到换门语言嘛,那我就去找,首先用惯了python,c/java这种肯定是回不去了,要考虑效率,那基本选择就是JVM或者js v8上的或者静态编译的,同时我还偏好函数式,找了一圈,Clojure貌似还可以,那我就换Clojure,一星期熟悉语言,然后就切换过来了。结果发现Clojure太依赖Java了,还有性能还是不行,要提高性能我还得给各个变量手动type hint,那我何必用Clojure,于是又花一个星期干脆转到Haskell。为什么切换的这么自如,就是因为我没事的时候这些语言基本都翻过知道大概是怎么回事啊。
所以我跟你讲,珍惜大学这种空闲时间,有兴趣就多学点。学过就扔了没关系,你忘记的是语法,但是思想和特点是不会忘或者即使忘了也是会有点印象的,而语法这种东西是最简单最容易学的忘了也无所谓。但以后万一用到了,你就多种选择了。
(另外,我不觉得Java程序员学了Python会看两天就扔到一边哈哈,既然三分之一的代码量就能干同样的事何必和自己过不去呢哈哈~~逃~~另外五年前学Python那叫赶时髦现在都烂大街了好么~装逼不来加入我大Haskell么少年~
嗯哼~ 让每个问 “Python 能干什么” 的人都去看这个网页就对了:http://nbviewer.ipython.org
至于做点大家都能做的事情,写个网站好了。Django 这种重型框架的代码重启时间也是在 1s 以内的,在 Tomcat 部署个 WAR 包 30sec 够不够?