还在纠结选Python还是Java?看完就有数了

自动草稿

程序员界里,每天都会有无数史诗级别的部落冲突上演,大到编程工具的使用,小到是该用空格还是Tab。其中编程语言的选择,可谓是历史最悠久,最有争议的问题之一。特别对于初学者来说,在做选择时,经常想送自己一首《凉凉》。

对于初学者,最频繁地听到的两种语言莫非Python与Java了。如果你问一名Java程序员,肯定会建议你先学Java,因为他们认为Python像个乳臭未干的黄毛小子。

但如果你问Python程序员,可能会得到一个完全相反的答案,他们认为Java是刻板啰嗦的老大爷,而人生苦短,我用Python。

一边是全世界使用最广泛的Java,一边是用过的人都会觉得是最好的语言的Python,到底如何选择,的确很让人纠结。

但别担心,本文将会从

语言特色

学习曲线

职业方向

市场需求

等多个方面为你解答“选择Python还是Java的人生难题”

01人生苦短,我用Python

Python是一门拥有简洁语法的高级编程语言。一个名为Guido van Rossum的荷兰大佬在1991年设计了它。设计这门语言的初衷,就是为了让代码读起来更轻松,并且让程序员们比起用其他语言,可以写更少的代码,事半功倍。

从语言本身来说,Python是出了名的简洁,容易上手。一个Python的粉丝曾经写过一首名为The Zen of Python (Python之禅)的诗来赞颂这门语言的优雅。以下这首诗的节选和翻译。

《The Zen of Python》

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren’t special enough to break the rules.

优美胜于丑陋(Python 以编写优美的代码为目标)

明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)

简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)

复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)

扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)

间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)

可读性很重要(优美的代码是可读的)

即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)

国外著名科普暴漫xckd也有这样一张形容Python之酸爽的著名漫画。

漫画中提到了学习一门编程语言,如烧香拜佛般必做的一件事:让屏幕输出Hello World! 这句话。 在Python中,做这件事只需要写一行代码:print “Hello World!”。 但是相比之下,Java实现这句话就要繁琐得多,需要至少4行代码(不小心就diss了一下Java)。总之,用Python编程,比起其他语言,更像是直接在和电脑对话。

public class HelloWorld {

public static void main(String[] args) {

System.out.println(“Hello, World”);

}

}

如此对比,Python的简洁明了和上手的容易程度就一目了然了。当然,这还只是一个例子,很多时候Python一两行代码就能搞定的事情,Java却需要多达10行,甚至20行。Python省去了像Java一样死记硬背语法和结构的时间。只需要基本的学习,你就可以读懂很多代码了。

正是因为如此简单平缓的学习曲线,通过Python的学习,你可以很清晰地了解程序员的思维,更专注地学习编程通用的基本概念。在领悟透彻了这些知识以后,学习任何语言都是小菜一碟。许多国外知名大学,如MIT和哈佛,也渐渐地将计算机导论课程语言的选择,从Java转变成Python。Python甚至还因此进入了小学计算机教材中。

Python的流行也不是没有原因的,它在行业与生活中的运用也十分广泛。通过丰富的Web开发框架,如Django和TurboGears,Python可以用来快速完成一个网站的开发和Web服务。典型如国内的豆瓣、果壳网等;国外的Google、Dropbox等。在系统网络的运行维护中,有大量重复性工作的地方,并需要做管理系统、监控系统、发布系统等,将工作自动化起来,提高工作效率,这样的场景Python是一门非常合适的语言。

因为Python的易于维护性,就连谷歌前段时间也将网站后台的很多代码用Python重写代替。业余时间,也可以用Python写写简单的网络爬虫,看看谁拉黑了你的微信,甚至做一个刷票机器人。

当然,说到Python,就不得不提它目前最火热的运用:人工智能和数据分析。Python拥有十分完善的数据分析生态系统。Numpy & Scipy、Pandas、matplotlib 是 Python 最基本数据分析的三驾马车,而 Jupyter notebook 则是分析的最基本交互式环境。只要涉及机器学习,深度学习,神经网络这些高大上的领域,是绝对避不开Python的。

甚至看到很多研究者的讨论帖子都建议早点把研究工具迁移到 Python 生态系统。再前几年的关于机器学习的在线课程里,Andrew Ng不管课上讲解还是课下作业,统统一律用MatLab。但是在今年新出的深度学习课程里,他毫不犹豫地选择了Python作为课程讲解和作业的语言,并且强烈推荐广大学习者熟练掌握Python。在人工智能大行其道的今天,Python的运用前景和发展空间绝对是无限的。

02喝咖啡补充Java代码

虽然说了这么多Python在难易程度上的优点,相对于Java,它也不是完全没有缺点。即便Python开发的速度和效率比较高,但从运行的速度和效率来说,Java还是略胜一筹。

当运算量很大时,Java的独特平台设计的好处就显现了出来。Java使用的虚拟机架构和独树一帜的JIT编译模式能大大提高它的运行速度。这也是为什么Java至今仍然是世界上最受欢迎的语言之一。

早在1995年,Jame Gosling就设计出了Java。 Java是一门以Class为单位,高度面向对象的高级编程语言。设计初衷是“写一次代码,在哪里都可以用。” 它可以完成任何规模的任务,所以它也是很多公司在做商业级项目的时候的普遍选择。

如果你想知道Java在实际生活中可以干什么,其实远在天边,近在眼前。如果你有一部安卓手机,几乎所有App都是用Java写成的。大型网站的后端,比如电子商务交易平台阿里巴巴,淘宝,京东也都主要使用Java开发。大型的企业级应用比如大型企业管理系统,CRM系统,ERP系统也可以用Java开发。有关通信及网络的大型企业,比如移动、联通、电信、网通,有关金融行的大型企业,所有的银行、证券公司、互联网金融和大型管理系统,比如供应链,客户管理系统,物流系统主要的信息化都和Java息息相关。

现在越来越火的大数据,最主流的框架Hadoop的主要开发语言也是Java。所以不难看出,Java还是行业应用不可撼动的老大哥。

03两种语言的“钱途”如何?

 

自动草稿
 

最后,来谈谈大家最关心的部分:薪资。我们来看看最受程序员欢迎的一些互联网公司都招什么Python岗位:

1.美团

薪资:20k~40k

岗位职责: 1. 负责云数据库/云主机控制平面研发工作 2. 加强平台管理和控制功能,提升资源交付和管理效率

岗位要求:

1. 熟练使用Python,能写出漂亮的Pythonic的代码;

2. 极强的学习能力和动力,对未知技术和领域能快速掌握并实践;

3. 熟练掌握操作系统原理,Internet网络原理;

4. 有云平台开发、自动运维平台开发等大型Python项目经验者优先;

5. 在开源社群活跃并有积极贡献者优先。

2.携程

薪资:15k-25k

Python开发工程师:1. 负责运维平台设计及开发,实现运维自动化和运维效率的提高 2. 帮助开发团队改进开发流程和效率 3. 与运维团队合作,收集需求,改善运维流程,实现各种运维工具,提高运行维护作业水平 4. 负责网站监控系统、数据收集和数据分析等系统的开发 5. 结合虚拟化技术,打造和完善携程云平台

以下是加分项:

6. 熟悉大型网站运维工作,有运维开发经验者优先;

7. 有CMDB/monitoring system/agent/automation系统设计与开发经验者优先

8. 熟悉Puppet/Zabbix/Celery/RabbitMQ优先

9. 熟悉Python/Django/Tornaod优先

10. 熟悉前端开发(XHTML/JQuery/CSS)优先

11. 对OpenStack熟悉者优先

同时,数据显示,2017年在雇主发布的职位说明中,Python技能需求增速达到174%,居于首位,Spark、Hadoop等大数据技能需求增幅也十分靠前。

Java方面:

1、京东

薪资:15k-30k

需要具备以下技能:

1、熟练掌握Java基础,熟练掌握多线程开发技术,熟悉软件开发流程;

2、熟悉主流Java开源框架如struts、hibernate、spring;

3、熟练掌握HTML/CSS/Javascript/jquery/Ajax;

4、熟悉Oracle/ SQL Server/MySQL其中的一种,并能熟练编写SQL和存储过程;

5、熟悉Linux系统,掌握Linux命令。

2、网易

薪资:15k-30k

必须技能:

1、精通java,熟练运用SpringBoot、SpringMVC、Hibernate、Mybatis、struts、struts2等技术,能练使用JQuery或相关的JS框架,精通面向对象设计;

2、熟悉mysql/sqlserver数据库,了解相关的数据库维护和性能优化,熟悉Tomcat、weblogic等服务器的配置与发布;

3、全面扎实的软件知识结构(操作系统、软件工程、设计模式、数据结构、数据库系统、网络安全等);

4、熟练SQL语句的编写;思维活跃,具备一定的软件设计能力及良好的软件工程思想;

04两种语言综合比对

敲黑板,划重点!

从语言本身,Python语法简洁,容易上手,而Java以独特的架构和较快的速度著称。

Python作为最近越来越火的语言,是大数据和人工智能的主力军,同时也在网页开发中广泛运用。而Java则垄断了企业级应用的开发。两者工程师的薪资也都十分可观。