Python被严重高估了吗?不,是我们曲解python了!

在这里插入图片描述

“Python是AI专用语言”、“全民学Python”种种,说明的不是Python被高估了,而是Python被曲解了。

下面我就从两个层面分析python有没有被高估

我觉得在学校层面上,python并没有被高估。我个人体会,学校对学生对python驾驭能力的培养,还仅仅是启蒙水平。写写作业,实现一些经典的learning算法如linear regression,Kmeans甚至CNN,我觉得是python程序员最基本的日常,谈何高估?python,是我们为止,学习算法用起来最方便,使用人数最多的工具之一。在没有新的语言替代python之前,用python学习各种算法以达到熟练方乃明智之举。

在科研层面,我认为python并没有被高估的迹象。现在每天依然有大量的库不停地更新,导致的结果是python不断地抢走大量原本使用Matlab,Fortran的理科玩家,因为python方便,而且有社区技术支持,玩法多,论文发表后也方便别人复现。而且还有个很重要的问题,做research不是公司承包项目。research很多追求的是算法或者模型是否robust和sound,对是否能最后高效的商业应用反而不是很关心,这和python的属性基本契合。所以我认为,如果在没有比python又快又简便的语言诞生之前,python未来5年在实验室会继续挤压其他语言的生存空间。

Python是通用编程语言,只是在AI、大数据等方面(还是技术栈上层;底层还是靠C/C++)应用得比较多。专用语言出了专用的领域就不能用了。

固然,Python有它的相对简单性(相对简单性指的是语言和各种库都给好了再去写的时候比较简单)。首先是它的语法简洁,语法糖多,模板少,比如文件读取。然后是一些特性支持比较好,比如int理论上可以任意大,又如读JSON不用模板。

然后就是Python真正复杂到可怕的一些特性了,这里仅举几例。

首先,动态类型。这就允许a是个int型的然后a=str(a),就要小心变量的类型在转换前后发生变化。Python还允许函数参数类型不事先确定,只要用到的时候类型不出错就可以了,比如只用到加减乘除,如果没有显式的类型检查,就适用于整数、浮点数、复数、分数,甚至素数域或扩域里的数了。如果要用某个第三方库的函数,还要看这个函数各个参数是什么含义、支持什么类型、推荐用什么类型;不给或给不全就只能要么分析库源码要么尝试了。

其次,作用域。一个函数里面(只要不是里面再套一层函数),if、try、while、for的局部变量甚至可以在跳出之后使用,编程时极易不小心引用到名称十分相近的变量(而IDE可能不会报错)。

再次,异构类型集合(collection)和匿名类型(注意不是匿名类)。集合(collection)在Python里面包括元组(tuple)、列表(list)、集合(set)、字典(dict)等,所述四种
collection中除set的元素和dict的键必须是可hash的这个要求以外,对存放元素的类型并无要求,甚至可以混合存放。可以想象,编程者对collection中哪个位置存放什么类型的元素必须十分清楚。至于匿名类型,大概是JSON里怎么表示对象的,Python里就怎么写,不用class,却也要清楚哪个键对应什么类型的值;甚至直接用元组,不仅要清楚哪个位置存放什么类型的元素,还要清楚哪个位置存放的元素是什么含义。

最后,抛出异常的位置和程序出错的位置或许相隔较远。可能只是一个TypeError或ValueError或AttributeError,程序出错的位置离抛出异常并中止的位置可能隔了几个函数,而且成因或许很复杂,比如不同的类型执行“相同的”函数,实际却差之千里。

所以,如果要用Python做一些正经的事,请一定先学静态程序分析,而其中的类型分析在这里尤为重要。

类型分析的难度方面我遇见最难的一个例子是DataFrame的条件过滤,例如

 _records = _records[~functools.reduce(lambda x, y: x | y,
                                  [_records[_axis] <= 0 for _axis in axes])]

因为是惰性计算,所以推测其中的操作数一定是某个表示placeholder的专设类型,而表达式实质上是语法树,索引操作符[]表示“应用”。

最后就是找工作。个人体会,光会个python去找工作我觉得是有点搞笑的,无论您多么精通。如果您手上没捏个几篇拿得出手的论文,也没实实在在肝过的项目,就会个python然后您能找到AI开发的工作那基本是不太可能的。想做AI,数据挖掘,ML, DL, 您必须同时具备优秀的数学思维能力,同时理解如何把你做的machine如何跟外界交互。训练数据不是在学校里学的调个CSV和TXT,而是用SQL去调用数据库,实时数据要用websoket,还要考虑要不要用stream的算法。最后visualization我们是不是需要UI interface?要搞UI那我们是不是需要搞个简单又好看的前段后台?JavaScript不学一学吗?Vue和React不挑一个吗?Nodejs不来一发吗等等。

最后。个人建议在学校里,一定要抓紧时间赶紧怼python,无论是CS或者非CS。CS的同学需要是精通python复现各种算法(我反对用python练习后台开发,应该用nodejs或者其他),非CS应该学习python语法,明白如何用python做你的实验和模拟,而不是死磕Matlab。但当你的重心转移到在找工作上时,应多样化你的能力,显示一精多长(多精多长当然更好-,-),最好还要有项目作证你的能力,才能游刃有余。

更多软件测试资源分享微信公众号:【软件测试小dao】
软件测试技术交流群:1033482984

不要只做收藏从未停止,行动从未开始的人,很多事情,做着做着就无师自通了。如果在做的过程中还能稍微加点思考,稍微看一些别人的经验和做法,成长会更快,效果也会更好!加油吧,测试人!路就在脚下,成功就在明天!

一个用心码了这么多文字的人,往往渴望得到大家的认可。如果你觉得这篇文章对你有帮助,双击屏幕,给我点个赞呀!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值