初学者学习Python好还是Java好


Posted in Python onMay 26, 2020

网络上有很多关于语言选择的问题,其中关于Python和Java的问题大抵如下:

Python和Java该如何选择 ?

将来Python(Java)会不会替代Java(Python) ?

零基础应该选择学习Python还是Java ?

做web开发,用Python好还是Java好呢?

这类问题过一段时间就得来一波,今天就以这个为切入点和大家唠唠。

为啥要说这个话题?

Python既是一个大众化的语言,也是一小搓儿开发者喜欢的语言。怎么说呢?

每个开发者都应该学学Python这个胶水语言,后端开发者不会Python都不好意思出门和别人打招呼。事实上基本在每个公司都有Python的身影,只不过公司的核心业务、用户产品很少用Python来做。

国内大一点的、使用Python做基础设施的公司1只手就可以数出来:豆瓣、知乎、美团、饿了么、搜狐(漏掉的欢迎补充)。 公司级别把Python作为核心的公司屈指可数,它更像是一波有「特殊」感情开发者的选择,这波人品味很挑剔,这个有点难描述,参照Pythonic这个词希望你成为的开发者吧。

Python在国外环境要好得多,但是在国内一直在缓慢的赢得更多人的心,在我的感觉里还有点「病态」发展(这个就不展开了),增速是可预期的,不会出现井喷式的增长。

职位就是那么多,很多人抱怨找不到工作,究其原因,无非是市场冷静客观下来优胜劣汰,能力不达标罢了。据我所知,只要你的能力匹配,Python高级工程师是非常受市场青睐的。

造成Python市场不好的原因有哪些?

政治。我们都知道语言通常不是技术瓶颈,那为什么公司会有很强烈的技术选型因素?这其实是「政治」。BAT出来的人到其他小型公司做高管,他们为了站稳会选择重构成自己熟悉和喜欢的技术栈,而且重构大部分是为了KPI和晋升。这些有话语权的人往往不会Python,只熟悉传统的PHP,Java,这就造成一种「恶性」循环,其他语言的市场热度不会降下去,政治正确要比技术正确更重要,Python语言很难在这种环境里突破重围。那么知乎、饿了么这些公司为什么选择Python?嘿嘿,除了创业早期为了显得逼格高(有时候这是创业营销的一种需要),他们的高管中有些是豆瓣出去的哦,所以你看到同样的现象,豆瓣出去的人做技术决策的结果选了Python。

招人难。国内找靠谱的Python工程师实在是太难了。会Python和真的靠它吃饭差别实在太大了,知乎Python话题下大部分充其量算是会用Python写脚本的人在强答罢了。你看我的同事或者我了解到的Python领域里面的开发者基本都是不用知乎也不回答Python问题的。我们知道,Python非常适合创业期完成产品快速试错和迭代,如果一个公司没有优秀的开发者坐镇,我还是不太相信用Python能坚持下去的,太多工程问题真的不是学院派能解决的,很多问题Google/SO是找不到的。那么用人荒造成了想选择Python为公司技术栈的公司望而却步,最后恶性循环大家都不太敢让核心系统用Python了。

总有刁民拿性能说事儿。性能问题确实是存在的,但事实上绝大部分公司和产品真的不需要担心这点,也有人说Python没有大型网站的顶级的解决方案。其实不然,国内有豆瓣,国外有Instagram、Reddit等等成功的案例,我说了很多遍了,决定网站性能的主要因素是架构,然后是代码水平,最后才是语言。 但是很多对Python一知半解的人就被这么吓跑了,并且拿着这些槽点去吓别人。

技术环境不好。PyCON北京场都组织不起来,真的有干货的开发者都不出来活动,万事与Ta无关高高挂起,反观前端氛围真的很好。很多新人想入坑,但是没人带,没方向,没组织,外面尽是坏人,每天看到的都是类型于发爬虫这种很low级别的技术文章,这种气氛下,未来真的青黄不接呀。

Python or Java?

终于到了正题了。工作和个人项目中会常用到Python,Golang,Lua,Javascript、CSS,做运维的时候还用过Perl和Ruby。很多年前看《程序员修炼之道》,作者建议每年至少学习一门新语言,每季度阅读一本技术书籍,非常有道理。其实学习语言无非是语法、库和框架这三者,如果掌握正确的方法一个月就能开始用它写点东西了,没什么必要纠结学那个的问题,开发者的基本素养之一就是整个职业生涯里面都得不断学习,除非我不认同某个语言的设计哲学和语法,比如我个人是不喜欢Java的。学的时候可以带着问题来学,比如A语言和B语言相比有什么优劣,设计上为什么不同、它们只能有很么互相借鉴的地方,为什么?等以后在工作中可以针对不同的项目特点选择合适的语言。我爱Python,但是只在正确的时候用它,而不是一棒子打死无论什么场景都用某语言,要记住,用语言或 者框架来划分技术其实很幼稚。

插个题外话,可能有的读者会问「那怎么不见你写/回答Golang、Rust等方面的文章/问题呀」?因为不自信,不想误人子弟,也不想强答。「自信」是什么呢?就是使用它的时候不担心有什么解决不了的问题,天下我有的感觉,大不了看源码,我C学的不好,但是不影响我带着问题读CPython的源码,不过离贡献C代码就差的很远了,我现在也没想着走这一步,所以对C语言的掌握程度好久没变过了。如果没有经过4-5年的深入和实践,我真的不觉得能在某个领域指手画脚。

说到选择。如果你没有强烈的对语言的认可或者不认可,单纯为了尽快养家糊口,选Java,因为市场需求量大,应用广泛,成熟案例多。如果你很理解「人生苦短我用Python」这句话,答案就不言而喻了,不过无论是否选择Python吃饭,甚至你不是一个纯纯的开发者,我还是再建议你应该也要学学Python。

之前在知乎看到过大概这样一句话「只会Python找工作很难」,我是认可的。通过观察和了解,我身边的大部分除了Python都能使用其他技术完成工作,比如前端、IOS、安卓等。无论Python还是Java都只是编程语言,工作中还需要具备很多其他的能力,拿Web开发来说(这里不考虑软技能和需求分析、沟通协作等方面的事情),HTTP/TCP、Linux、数据库、Web服务器、第三方库和框架、Web基础(HTML/CSS/JS/ES6) 、消息队列、分布式、虚拟化、RPC、缓存、搜索引擎、微服务、上线流程、趁手的开发工具、调试流程、分布式文件系统、安全等等,随便一想就这么多内容。当然最难的和最有价值的是工作经验。只会编程语言算什么?你有什么竞争力,你给个有点悟性的本科生2个月时间工作起来不会差很多。一定不要放大编程语言对于找工作的重要性。

另外插个话题。应届生找工作对语言的要求并没有那么重要,反而数据结构、算法、计算机系统、Linux、计算机网络甚至英语这些基础更重要。希望还没有毕业的同学能够抓紧时间多多充电。多看书多时间多刷题。

知识点补充:

Java历史

Java是一种面向对象的编程语言,由1995年由Sun Microsystems的James Gosling Jr.领导的软件工程师团队设计。

其背后的理念是“Write One,Run Anywhere”(WORA),这意味着它可以在支持Java虚拟机(JVM)的多台机器和平台上运行而无需任何代码修改。Java代码编译为字节码 - 一种直接转换为本机代码的中间语言。

Java的语法大量借鉴了C ++和其他面向对象的语言,如Smalltalk,Ada和Modula-3,因此其强大的输入影响力。因此,具有C ++和其他语言经验的程序员会发现学习起来非常舒服。

Python历史

Python是一种动态类型,面向对象的编程语言,由Guido Van Rossum于1991年设计,Python支持多种编程范例,包括面向对象,命令式,功能性和程序性。

与Java的字节码不同,Python是一种解释语言,这意味着它使用了解释器。这使得它比Java慢一点。

对于来自C / C ++世界的程序员来说,Python的duck-typed语法可能看起来有些奇怪,但大多数程序员发现,一旦我们掌握了它,它就会更有趣。

Python在业界获得了很大的关注,特别是在Web应用程序开发,游戏开发,数据科学,机器学习和数据分析领域。

如果你以前从未学过编程,我通常会推荐Java作为第一语言。Python是一种很好的语言,因为python语法比较开放,但是Python隐藏的语法糖太多,这让新程序员感到困惑。

到此这篇关于初学者学习Python好还是Java好的文章就介绍到这了,更多相关选Python好还是Java好内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现下载指定网址所有图片的方法
Aug 08 Python
Python调用微信公众平台接口操作示例
Jul 08 Python
Python实现希尔排序算法的原理与用法实例分析
Nov 23 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
Python自定义简单图轴简单实例
Jan 08 Python
Python从零开始创建区块链
Mar 06 Python
利用Python如何实现数据驱动的接口自动化测试
May 11 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
May 05 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
May 28 Python
python函数map()和partial()的知识点总结
May 26 #Python
Python selenium使用autoIT上传附件过程详解
May 26 #Python
Python的历史与优缺点整理
May 26 #Python
python实现逢七拍腿小游戏的思路详解
May 26 #Python
Python是什么 Python的用处
May 26 #Python
完美解决jupyter由于无法import新包的问题
May 26 #Python
使用pth文件添加Python环境变量方式
May 26 #Python
You might like
基于PHP+MySQL的聊天室设计
2006/10/09 PHP
PHP下使用CURL方式POST数据至API接口的代码
2013/02/14 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
php实现文件上传基本验证
2020/03/04 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
Element-UI中Upload上传文件前端缓存处理示例
2019/02/21 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
企业管理部经理岗位职责
2013/12/24 职场文书
工程开工庆典邀请函
2014/02/01 职场文书
优秀部门获奖感言
2014/02/14 职场文书
投资合作协议书
2014/04/17 职场文书
环保倡议书格式范文
2014/05/14 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
网站文案策划岗位职责
2015/04/14 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis