前几天看到某网站看到有人提了这么个问题,Python这么火,为啥找工作这么难呢?
近几年人工智能的发展确实推动了Python的热度,Python出现在了中小学课本,产品经理、运营等非程序员职业都认识到了Python这门语言的重要性,甚至有些非互联网行业的员工都跟风的学起了Python,你一定会问,Python凭什么这么火?人工智能出现前Python有这么火吗?
我们先不拿Python与Java、C这些老大哥做比较,因为差距确实是存在的,但从这两年的各大榜单的编程语言排名数据来看,它确实稳居前几名,而且趋势越来越猛,直逼编程语言的头号老大,令人意想不到的是曾经风靡一时的Perl、Ruby 似乎在一点点淡出我们的视线。
但不可否认,很多在编程界摸爬滚打数十年的技术大牛依然保持本心,无论是Perl、Ruby、go、PHP、Java、C还是现在热门的Python,都有其忠实的追随者,无论时代如何改变,初心不变。
时代在变化,市场经济有周期轮回,编程语言又何尝不是呢?
有人说Python现在是大牛市,现在科技前沿都在用Python,它是最先进的生产力;
有人说算法是独立于语言的,我周围搞科研的,没有见谁用Java做算法的,做工业级产品需要大量码农搬砖,Java啰嗦但是可靠性高,搞算法研究的代码绝对比做软件产品的规模小得多,没必要用Java,Python足矣;
有人说python目前火是因为广泛用于人工智能,而人工智能是需要有数学基础的,这可能是与其他语言的差别之处;
有人说搞人工智能,需要有学历,资历,能力当基础。你光会语言,有啥用?你没研究生学历,根本没有这种工作机会,没有机会哪来实际经验;
有人说这些语言我都不看好,还是go语言未来有发展;
有人说还是学C吧,不用担心过时;
有人说Python中国要的少,想继续追高估计有点难了,大多数企业都招Java和C++……
反正每个人都各执己见,你根本无法去判断谁对谁错,因为每个人都有自己偏爱的语言。
那Python之前火吗?
其实在技术圈Python很早就广为人知了,特别适用于做 MVP(最小可行性)产品,运用在创业初期的产品开发,同时在测试、运维、科研等领域也被广为使用。我们熟悉的社交应用Instagram、流量全球第4的社交新闻站点Reddit、云计算管理平台OpenStack以及企业ERP管理平台Odoo等,都是早期用 Python 开发出来的明星产品。
近几年又因人工智能的热潮,Python爱好者借势将Python推向了一个新的高度,就连教育部门都开始重视Python,促使很多人跟风效仿。于是他们产生了这样的错觉:用三四个月的时间学会Python就可以轻松找工作。然而他们并不知道,学会和实践之间差了时间和努力!
百度搜索指数里,Python搜索指数从2011年开始一直是平滑增长,从2017年开始超过Java,而Java基本没啥变化,甚至有下降的趋势。
很多Java、C语言爱好者看到这样的数据会慌会气愤,其实他们不知道,大部分Python开发者掌握的第一门语言都不是Python,可能他们之前就掌握了Java、C++等其他语言和计算机相关的理论知识,而对于他们来说,学Python自然是轻车熟路,只是工作碰巧遇到了Python。
Python 虽然看起来简单,但是用好不容易,特别是大规模的团队对 Python 的要求就更高了,你去市场上去看,一般招Python都是要求有一定经验的。
总结下Python找工作,你可能会遇到的问题(以下来源于学生的真实反馈):
一、一学就会,一写就懵。
学过 Python 的同学,肯定都学习过列表、元组,如果是通过Atstudy网校教程的话,肯定都学习过列表和元组的访问、修改和删除操作。
不知道有多少人还记得第一次看这部分内容的感觉,反正我的感觉是「很简单嘛,和想象中差不多」,那几个操作已经很熟悉了。
有一次我在处理一个字符串拼接,我是用的元组,然后我 append 半天,总是报错,我记得很清楚呀,我学习的时候明明是有这个方法的呀,为什么就是不行呢?
等我回去仔细一看,嘿,append 竟然是列表的方法,这知识点简单么?忒简单了,可以信手拈来么?不行。
举例这个已经是最简单的部分了,类似的我还在多个元素拼接上吭哧过半天,才发现元组必须和元组类型进行拼接,不然也是报错。
如果需要两个元组拼接后不是合成一个元组,而是形成一个新的复合型元组,那就更要纠结一会了。
看完我上面说的是不是觉得很简单,请动手写一写,或者回忆下自己当初是怎么解决这些问题的。
古人云「看书如流水,编码如便秘」,甚是。建议解决方案:多动手实操练习,真的能熟能生巧噢。
二、原样照抄我会,稍加变通就懵逼。
我之前很多的脚本都是 python2.6 写的,因为 py2 已经不更新了,所以我正尝试逐步改为 py3。
有一次我拿一个简单的脚本试试效果,脚本功能很简单,就是把一个PE文件内容使用文本方式读取出来,然后暴力搜索其中是否存在某指定字符串,并得出搜索结果。
py2读取文件内容的写法是:
def test_readfile2(filepath):
"""读取文件内容
Args:
filepath:目标文件全路径
Returns:
context:读取到的文件内容
"""
with open(filepath, 'r') as obj:
context = obj.read()
return context
同样的写法,在 py3 中执行会报错:
UnicodeDecodeError:'gbk'codec can't decode byte 0x90 in position 2: illegal multibyte sequence
根据之前弱弱的经验,一看也知道是编码的问题,但是我反复的 encode 或者 decode,都是无济于事。
明明知道是很简单的问题,但就是搞不定,那种无奈,实在是很无奈。
一次偶然的机会,终于知道了解法,方法果然很简单:
def test_readfile3(filepath):
"""读取文件内容
Args:
filepath:目标文件全路径
Returns:
context:读取到的文件内容
"""
with open(filepath, 'r', errors='ignore') as obj:
context = obj.read()
return context
仅仅是加了一个参数 errors,一切都搞定了,是不是有种豁然开朗的感觉。
建议解决方案:只有自己亲自踩过的坑才是真的坑,一定要多动手实操练习,了解每一种变通的可能。
三、基本用法会,稍微进阶就懵逼。
用 Python 写 GUI 的同学,应该有部分是使用的 wxPython 这个库,反正我是用的这个。
如果只是写个主界面,大家都会定义一个主窗口类,比如 MainClass 之类的,其他控件也可以按教程一步步操作实现。
有次我需要在主界面之外加一个设置窗口,同时设置项更新后,主界面要立刻响应。
这个响应函数我是写到主窗口的类里面的,搞了半天,我就是不知道怎么在子窗口类中调用父窗口类里面的方法,网上也搜了很久,就是没找到有类似的问题以及解决方案。
明明知道是很简单的问题,但就是搞不定,那种无奈,实在是很无奈。
后来仔细看了网上的一些实现的例子,发现可以在父窗口类中把 self 作为参数传递给子窗口,子窗口再通过这个self 来进行父窗口类中方法的调用,完美解决。
同样的回过头看看解决方法,真的是很简单,而且也确实给人豁然开朗的感觉,但这又明明就是一个稍微进阶了一下的基本用法而已。
不动手时不知道自己有多弱,上手后才追悔莫及。
建议解决方案:多动手实操练习,每一个遇到的问题,都是自我进阶的阶梯。
总结:
有人问独孤求败,君子剑和青锋剑哪个好?
独孤求败说,这些不重要,只要技术到了,拈花飞叶皆可伤人。
杨过和郭靖武功天下卓绝,然而武林中绝大多数人表示:
“前辈,哪个门派能招一大拨杨过、郭靖和独孤求败?”
编程语言的竞争也是如此,就Java和Python来说,Java语言的特性决定了一门新手和老手写出来的代码差距不会太大(这里肯定有人不会同意),而 Python 的代码虽然简单,但不同的人写出来的代码千差万别。
至于Python这么火,为什么你还找不到工作?我想说Python这门语言确实是有前途的,这两年大家都在给Python疯狂打Call,让Python成为所谓的第一语言,大家都在学,一个大胆的猜测就是未来 Python 将会像英语一样成为大家必备的一个技能。
但是如果你现在啥都不会,只会Python,你去找工作的确有点困难,当然并不见得学Java找工作就容易了,最主要的还是对整个计算机体系的掌握,语言作为工具只是很小的一部分。
欢迎加入 51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 群: 755431660