漫谈:Java和Python现在都挺火,我应该怎么选?Java和Python优缺点比较。

http://www.bossqiang.com/article/4

声明:这是一篇容易引起撕逼的文章,为了祖国和谐,人民安康,请各位看官尽量理性讨论。同时,这篇文章是面向一些初入行的朋友进行一些相对中肯一点的分析和建议而已,虽然有浓厚的个人色彩,但我还是尽量以事实说话,以代码说话,大牛们就不要拿自己的牛逼经验来这里装逼了,当然,你如果非得来跟我撕,哥们儿我奉陪。另外,由于文中以自己所在的机构蜗牛学院所做的一些事情来举例,如果你认为这是软文广告,请止步于此。强哥打广告,都是硬的,软的不来(做了**还要立**的事哥不屑)。好吧,咱们进入正题。

 

我先问大家一个问题,为什么中国人用刀叉是很容易上手的一件事情,而外国人用筷子,应该是他们在中国吃饭时最痛苦的一件事情呢?为什么会这样呢?其实原因非常简单,当我们学会了一门技术难度要求更高的技能以后,再去降级学习难度更低的技能是非常容易的一件事情,反之则不然。

 

20171115_104800.jpg

 

这个道理同样适用于我们的学习,强哥对Java和Python都有较为丰富的使用经验,当然,Java的应用经验更丰富,代码量比Python更多一些。正是由于我们丰富的Java经验,当蜗牛学院的软件测试方向需要为学生讲授Python课程时,我们所有的讲师都会被分配任务去研究Python,并完成教案编写,教材编写,案例编写。我们会发现,使用Python是一件非常容易的事情。基本上来说,解决问题的方式,方法,算法,思路,所有的编程语言都一样。我们去学习一门新的编程语言的时候就会容易很多,只需要关注与我们所熟悉的编程语言在语法和使用上存在哪些方面的不同即可。

 

那么问题来了?蜗牛学院也要讲授Python?那到底是Python值得学习还是Java呢?这里面有三点我必须说破,却很少有人从这个角度来给大家做分析:

  1.  如果一个不懂2,3门编程语言的人,或者很少使用到Java或者Python,来告诉你Java好还是Python好,这是赤裸裸的不负责任。如果这个人用Python并且混得还稍微可以,他一定会告诉你Python好,如果这个人用Java,他一定会告诉你用Java好。如果两个语言都没有用过的键盘侠,他会告诉你语言都是相通的,不要纠结。每一个人都说得好有道理的样子,于是让你无从选择。强哥熟练使用8种以上的编程语言,所以才稍微感觉有点资格,来说一说这两门编程语言。虽然,从我个人的角度在我心目中,编程语言只有两种,第一种是Java/C,第二种是其它。但是我不能通过这种偏激的方式来误导大家。

  2. 我们必须要明白Java和Python的各自定位。Java源自C和C++的技术体系,于1995年推出,定位于给专门的程序员设计大型的复杂分布式应用而设计。而Python是1991年推出(比Java还早)主要面向于系统管理,科研,教育和非程序员群体等。大家一定要理解清楚一个现实,这个世界上并不是只有程序员才需要写程序,还有很多群体需要写程序。比如蜗牛学院在这方面的定位就很清楚:Java开发全栈方向的学生学习Java编程和JavaScript编程,软件测试方向的就业班学员学习Python(因为他们并非专业的程序员群体),而软件测试方向下属的自动化测试开发高级研修班,是Java/Python两个方向同时存在。那你说你觉得哪个更好呢?。

  3. Python比Java早4年出身,但是在国内为什么几乎到2010年之后,Python才逐渐火起来呢?原因很简单,因为我们都太现实了。由于大数据的盛行,由于自动化测试方面的人才需求,以及对于互联网的一些基础应用系统的的开发,企业加大了对Python人才的招聘力度(当然,与Java比还有较大的差距),由于有一门感觉很简单又能赚大钱的编程语言出现了,简直是人类的福音啊,所以火起来了。这一点与近几年虚火很旺的Web前端开发很像,其实绝大部分人没什么技术能力,但是工资却拿得不错。这不是个人的原因,企业也很浮躁,仅此而已,一旦虚火泄了,谁能撑到最后?请各位自行脑补。

 

也不知道大家从哪里得来的一些“误导”,觉得Python简单,Java很难,所谓"人生苦短,我用Python"之类的。一方面,Python上手的确相对要快一点而已,仅此而已。解决复杂问题时,没有人会觉得难点在使用哪门编程语言上,而是解决这个具体问题的算法思路上。这一点各位务必要拎清这个思路。另外一方面,由于Python近几年的火爆,不排除一些人故意散播一些言论,来误导大家使用Python。这件事情就像这么多年,一直有人觉得学习软件测试要容易一些一样,很多人也是报着通过软件测试进入这个行业,选择了一个自己认为没有难度的领域进入。但是,强哥发现,当3,5年过去了,很多测试人员目前最焦虑的就是,自己技术不够深,在企业当中越来越没有竞争力了。所以最终,还是得硬着头皮研究深层次的测试技术,无论是编程,网络,数据库,协议,还是自动化测试,性能测试等。但是这个过程非常痛苦,就像我说的那样,这个世界上99%的人都会选择一条容易走的大路,因为懒惰,因为恐惧。而成功是属于那1%的人一样。这句话同样适用于编程语言或者技术功底的训练上。

 

其实大家如果有过实际的编程经验,我们不妨认真想想,当我们研发一个系统的时候,究竟会用到哪些技术?那些什么需求分析,跟测试撕逼,跟客户撕逼,跟老板撕逼的那些烂事我们就不提了。我们就来看看纯技术层面的一些基本要求:数据库,Linux命令,网络协议,接口设计,算法思路,框架,改BUG,编程,前端交互。你应该懂我,利用不同的编程语言编写程序只是研发过程中众多你需要掌握的技术当中的一块而已。其它,与你用哪们编程语言无关,这一点如果你都理解不了,觉得强哥在忽悠你的话,那请自便吧。或者换一个角度,会一门编程语言,而不是完整技术体系,就能当技术大牛的情况,我觉得可能只有在你们家村里可以行得通,因为就你一个人懂。

 

20171111_025818.jpg   20171111_025834.jpg

 

当然,以上我们讨论是的纯粹的基于技术定位,你也许可以反驳我说,难道做测试的都得懂编程,难道做Python的都不行?这当然不是这样的,任何一个领域都有大神,随着经验的丰富都能够解决很多难题。但是,那是很久以后的事了,我们现在讨论的是,你还在纠结Java还是Python的这件事,毫无疑问,这个时候,你仍然还是一个菜鸟,甚至连门都没入。强哥建议大家,不要因为什么事情简单,所以我要去做,无论是学习编程语言,还是其它,这是最要命的一个出发点,会毁了你的未来。

 

下面我给大家列出一段我分别使用Java和Python写的发送一个HTTP协议的一段代码。这段代码收录在强哥今年年底即将出版的一本自动化测试开发的高级教程里面,全书均采用Java进行代码演示,明年,我会有一本几乎一模一样的但是是使用Python进行代码实现的书。之所以能够这样,原因很简单,Java能解决的基本问题,Python也能解决,当然,Python能解决的,Java一样可以。但是在干重活儿方面呢,Java更成熟一些。

 

Java的代码,实现Agileone系统的需求提案新增功能:

// 实现需求提案的新增
public void doAdd() {// 先发送POST请求实现登录String postUrl1 = "http://localhost/agileone/index.php/common/login";String postData1 = "username=admin&password=admin&savelogin=true";String resp1 = hr.sendPost(postUrl1, postData1);System.out.println(resp1);// 对sendPost()方法进行了额外的封装,一次封装,处处使用// 再发送POST请求完成新增String postUrl2 = "http://localhost/agileone/index.php/proposal/add";String postData2 = "type=Enhancement&importance=Medium&"+ "headline=&"+ "content=这是用于Java代码测试的内容-10009&processresult=";String resp2 = hr.sendPost(postUrl2, postData2);System.out.println(resp2);
}

 

我们再来看看Python实现同样功能的代码:

# 导入urllib和http库import urllibimport http.cookiejar# 利用cookiejar自动管理整个过程中的Cookiecj = http.cookiejar.CookieJar()opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))# 利用urllib构造POST请求并处理登录logindata = { "username" : 'admin', "password": 'admin', "savelogin" : "true" }data_encoded = urllib.parse.urlencode(logindata).encode('utf-8')login = opener.open("http://localhost/agileone/index.php/common/login/", data_encoded)print(login.read())# 发送Post请求提交新增需求提案proposaldata = {"type":"Requirement", "importance":"medium","headline":"Headline from Python - 10010","content":"Content from Python - 10010", "scope":"1", 
"processresult":""}data_encoded = urllib.parse.urlencode(proposaldata).encode('utf-8')proposal = opener.open("http://localhost/agileone/index.php/proposal/add", data_encoded)print(proposal.read())

 

相信大家很难区分所谓的简单与难。因为代码几乎都很类似,这种情况发生在很多场景,解决很多问题时都是一样的。其实很多人之所以宣传Python简单易学,我们抛开某些可能的商业目的或者社会心理的原因之外(商业目的还用说吗,比如最简单的例子,蜗牛学院专门做Python培训的,当然我会不顾一切地说服你,Python是最好的编程语言,没有之一,Java都是垃圾,都是落伍了的,这种睁眼说瞎话的还少吗?因为你很懒,懒得去求证真相而已。社会心理就是我自己是搞Python的,我怎么能说自己做的技术很LOW逼呢,我自己是搞Java的,Java必然是最牛的啊)。让我们单纯从事实出发,Python简单的原因只是因为,我们使用Python时,我们可能跟个傻子一样,在直接调用别人给我们写好的代码接口而已,而Java的很多处理相对要原生一点,我们写的代码要稍微多一点。但是只要完成封装,代码就很难说谁更简单了。而这个封装的过程,其实才是编程最重要的部分,如果这一部分我们都不愿意亲自参与,也不想知道个中实现原理,你想想,你怎么可能成长为一个优秀的程序员,还有天理吗?让那些勤奋的人,情何以堪。

 

这一点就像C语言,由于C语言更原生,更底层,几乎没有提供太多封装好的代码接口,很多问题的解决都需要我们自己写代码,所以这也是为什么很多人觉得C语言很难,道理是一样的。但是,牛逼的人,都更喜欢自己创造。相比起C语言来说,Java和C#之类的,为我们提供的代码接口要丰富得多,我们使用起来其实也要容易得多,结论就是,在C语言面前,其它高级语言都太简单了,因为封装了太多可以直接用的类库和接口。所以,要成长为一个高级程序员,一定不是写写简单的应用而已,比如Java的源代码是必须要去学习的,我们一定要知道这些封装好的代码接口的实现细节。否则,跟使用Python封装好的东西,又有何本质区别呢?

 

所以,请不要再纠结了。强哥的经验,如果你把Java作为你的人生的第一门用心学习的语言,那么你只需要花极短的时间,就可以基本学会C++,JavaScript,PHP, Python,R,C#,Objective-C,Swift,Go(是的,每一门语言都可以在极短的时间学会,只是具体的问题解决和一些坑需要多积累一些实战经验而已)。但是反过来,如果你把Python作为你的第一门语言,问题就回到外国人使用筷子这件事情上了,答案不言而喻。

 

所以,你未来如果要立志成为一个专业的程序员,建议先学习Java(或者C#也行,两者有很多原理上很像,实在不行,C/C++也可以哦),那是给程序员的专属语言,是有门槛的,所以你才能够建立自己的竞争力。如果你只是想玩玩,感受一下,或者是把编程语言作为一个工作中的工具而已,Python是个不错的选择。这是面向学习的建议,如果是在企业中真实做项目,那就不要纠结了,项目需要什么,咱们就学什么,不需要那么多理由,干,才是真理。

 

锤子好用还是榔头好用?Java好还是Python好?为什么非得二选一?浮躁,一个吃饭的工具而已,搞技术的,通吃它们不就完了吗,你再也不会纠结了,这,才是一个技术人员该有的状态。难道不是吗?

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

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

相关文章

Spring集成和Web服务

本文是我们名为“ Spring Integration for EAI ”的学院课程的一部分。 在本课程中,向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来,您将深入研究Spring Integration的基础知识,例如通道,转换器和适…

如何在微博首页放置一个二维码?

首先用photoshop打开作为微博背景的图片,还有二维码图片。 然后将二维码图片整合到背景图片的适当位置,并编写相关说明,如下图。 然后将图片保存到桌面。 打开微博,可以看到左侧现在是没有二维码的

RethinkDB创始人教你如何打造一个伟大的互联网产品

关于作者 我叫Slava Akhmechet,本人是 RethinkDB 的创始人之一,RethinkDB是开源,分布式数据库,旨在帮助开发人员与运营商在打造实时应用时处理无结构数据 如何打造一个伟大的互联网产品 假如你认可“销售定乾坤”的原则&#xff0…

Android获取LAUNCHER,Android 获取Launcher 启动列表

先留着有时间再看获取Launcher 启动列表即 列出所有Launcher程序 通过PackageManager 来获取[代码 步骤]1. 定义内部类 LauncherItem 用于定义Application相关属性 比如:图标 名称 以及 ComponentNameJava代码1  public class LauncherItem {23   Drawable icon;…

数据库高可用架构 转载

数据库高可用架构对于我们这些应用端开发的人来说是一个比较陌生的领域,是在具体的数据库产品之上搭建的环境,需要像DBA这样对数据库产品有足够的了解才能有所涉及,虽然不能深入其中,但可以通过一些经典的高可用架构学习其中的思想…

解决 There are no resources that can be added or removed from the server

网上下载了一个项目,在eclipse中部署时,加载项目到tomcat中项目名称无法显示,报出There are no resources that can be added or removed from the server 这个是因为下载下来的项目没有eclipse的相关配置文件,eclipse不知道这是一个什么项目。 解决方法: 1、进入confi…

推荐几款爬虫软件与无需编程的数据分析工具

爬虫软件: 八爪鱼,火车头,前嗅,熊猫采集器,集搜客等 相对来说八爪鱼配置还是比较简单的,不过免费版的爬起数据来那叫一个慢。。。 不过也可能是我是个急性子。。。1分钟爬10条,很心塞啊。火车头就尴尬,不是高 配版。。基本上啥也干不了,不过好的一点是他们的论坛还是…

登录时本地保存账号密码及关闭ARC的方法

对于登录时保存用户名和密码,苹果官方使用的是KeychainItemWrapper,但使用时有些不便,如在引入KeychainItemWrapper的类中都要关闭arc,不能自定义key,必须使用该类提供的kSecValueData、kSecAttrAccount等。所以推荐使…

收银扫描设备统计

前端时间开发一个会员管理系统,里面涉及一些支付的问题,就查找一些配套的硬件设备。记录点滴成长 2000元的配套设备一般就可以满足系统应用啦。

推断:Facebook的新Java静态分析工具

如何使用Facebook的Infer改善Java开发工作流程? 如果您与技术话题保持紧密联系(如果您正在阅读此博客,我想您应该这样做),那么您可能听说过Facebook 刚刚向公众发布的新工具:推断。 由于它来自Facebook&am…

html 转换xslt,XSLT xsl:template 元素

元素元素用于构建模板。match 属性用于关联 XML 元素和模板。match 属性也可用来为整个文档定义模板。match 属性的值是 XPath 表达式(举例,match"/" 定义整个文档)。好了,让我们看一下上一节中的 XSL 文件的简化版本:xmlns:xsl&qu…

开发一个大数据网站做的铺垫

知名大数据分析网站推荐8个 用到的大数据5个关键技术 人工智能6大关键技术

如何优化Hibernate EllementCollection语句

介绍 Hibernate支持三种数据映射类型 : 基本 (例如String,int), Embeddable和Entity 。 通常,数据库行映射到Entity ,每个数据库列都与一个基本属性关联。 当将多个字段映射组合到一个可重用的组…

使用Eclipse将包含第三方jar库的java工程打包成jar包

1、MANIFEST.MF 在工程下新建一个MANIFEST.MF的文件,项目结构如下。 M.java package cn.hwd.main;import java.io.IOException;import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.s…

史上最牛逼的导航网站(很全很详细)

今天,给大家推荐47个聚合型的导航网站 每一个都收录上百个网站,1个能顶100个,丝毫没有夸张的成分。 (推荐收藏) 设计师导航网站 01 优设导航 https://hao.uisdc.com/ 设计师必备的导航网站,包含设计工具、素材资源、字体设计、配色方案、酷站模板等。 界面清晰无广告…

codeforces 337D Book of Evil(dp)

转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Book of Evil Paladin Manao caught the trail of the ancient Book of Evil in a swampy area. This area contains n settlements numbered from 1 to n. Moving through the swamp is ver…

html 如何去滚动条,css怎么去除滚动条?

css可以通过overflow与scroll属性来实现去除滚动条效果。css设置overflow属性为hidden可以实现去除滚动条或设置scroll属性为no。1、这个可以用CSS实现 你可以用JS操作CSS方法一:设置CSS属性overflow为hidden。<body style"overflow:hidden"&a…

阿里云ECS服务器连接不上3306端口?

连不上3306端口一般有三种情况。 1 .本机上防火墙没有开放3306端口,需要自己配置入站规则,或者关闭本机防火墙。 2 .linux 服务器上的 iptables 防火墙没有开放3306端口, 或者关闭服务器上的防火墙。 打开 /etc/sysconfig/iptables 在 "-A INPUT –m state --sta…

UGUI 锚点

今天我们来学习下UGUI的锚点, 他是做什么的呢? 基本上就是用于界面布局. 1. 1个控件对应1个描点. 2. 描点分成四个小叶片, 每1个叶片 对应 控件四边框的角点 3. 不管屏幕如何放大缩小, 控件四边点与 每一个叶片对应的四边点距离不变.(换句话说,按钮的中心与描点的…

语文课外运用计算机探究,[小学语文]计算机在小学写字教学中的运用之我见

[小学语文]计算机在小学写字教学中的运用之我见随着经济的快速发展,教育也出现了加快发展、加快改革的势态。随着教育技术的不断增加,教学设备得以不断更新,教学手段变得更加现代化。特别是我们火星小学,计算机辅助教学已成为学校…