Pythonjava编程语言能做什么适合做什么?

python到底可以做什么工作_学python编程语言可以做游戏开发吗-IT培训联盟
python到底可以做什么工作_学python编程语言可以做游戏开发吗
更新时间: 11:24:11 点击量:1108 点赞数:74
来源:IT培训联盟
内容摘要:   Python是一门好用的编程语言,受到很多IT人士的学习与追捧,我们知道学习Python可以做人工智能、运维以及Web开发,其实,这些仅是Pytho
  Python是一门好用的编程语言,受到很多IT人士的学习与追捧,我们知道学习Python可以做人工智能、运维以及Web开发,其实,这些仅是Python编程的部分应用,Python具有很广泛的应用,可以总结为以下10个方面。
  1. Web开发
  最火的Python web框架Django,支持异步高并发的Tornado框架,短小精悍的flask,bottle,Django官方的标语把Django定义为the framework for perfectionist with deadlines(大意是一个为完全主义者开发的高效率web框架)
  2. 网络编程
  支持高并发的Twisted网络框架,py3引入的asyncio使异步编程变的非常简单
  3. 爬虫开发
  爬虫领域,Python几乎是霸主地位,Scrapy/Request/BeautifuSoap/urllib等,想爬啥就爬啥
  4. 云计算开发
  目前最火最知名的云计算框架就是OpenStack,Python现在的火,很大一部分就是因为云计算市场近几年的爆发
  5. 人工智能
  MASA和Google早期大量使用Python,为什么Python积累了丰富的科学运算库,当AI时代来临后,Python从众多编程语言中脱颖而出,各种人工智能算法都基于Python编写,由其PyTorch之后,Python作为AI时代头牌语言的位置基本确立!
  6. 自动化运维
  问问中国的每个运维人员,运维人员必须会的语言是什么?10个人详细会给你一个相同的答案,它的名字叫Python
  7. 金融分析
  金融公司使用的很多分析程序、高频交易软件就是用的Python,目前,Python是金融分析、量化交易领域里用的最多的语言
  8. 科学运算
  97年开始,NASA就在大量使用Python在进行各种复杂的科学运算,随着NumPy,SciPy,Matplotlib,Enthought librarys等众多程序库的开发,使得Python越来越适合做科学计算、绘制高质量的2D和3D图像。和科学计算领域最流行的商业软件Matlab相比,Python是一门通用的程序设计语言,比Matlab所采用的脚本语言的应用范围更广泛
  9. 游戏开发
  在网络游戏开发中Python也有很多应用。相比Lua or C++,Python比Lua有更高阶的抽象能力,可以用更少的代码描述游戏业务逻辑,与Lua相比,Python更适合作为一种Host语言,即程序的入口点是在Python那一端会比较好,然后用C/C++在非常必要的时候写一些扩展。Python非常适合编写1万行以上的项目,而且能够很好的把网游项目的规模控制在10万行代码以内。
  10. 桌面软件
  虽然大家很少使用桌面软件了,但是Python在图形界面开发上也很强大,你可以用tkinter/PyQT框架开发各种桌面软件!
  作为一种通用的编程语言,Python几乎可以用在任何领域和场合,只是在使用过程中,还要考虑项目的实际情况,选择合适的编程语言,相信,在未来,随着Python功能和性能的完善与拓展,相信Python的应用领域会更加的宽泛。
专业老师指导
培训咨询客服
已点赞:74
大家都在看
更新时间: 09:52:34
  兄弟连教育(以下简称兄弟连)是易第优(北京)教育咨询股份有限公司旗下品牌,致力于高素质软件开发人才的培训与培养。公司成立于2007年,
浏览:2612人
更新时间: 10:47:09
  兄弟连教育(以下简称兄弟连)是易第优(北京)教育咨询股份有限公司旗下品牌,致力于高素质软件开发人才的培训与培养。公司成立于2007年,
浏览:1956人
更新时间: 11:54:51
  兄弟连教育(以下简称兄弟连)是易第优(北京)教育咨询股份有限公司旗下品牌,致力于高素质软件开发人才的培训与培养。公司成立于2007年,
浏览:1455人
更新时间: 10:19:52
  兄弟连教育(以下简称兄弟连)是易第优(北京)教育咨询股份有限公司旗下品牌,致力于高素质软件开发人才的培训与培养。公司成立于2007年,
浏览:1275人
更新时间: 11:03:54
长沙中南信息科技技术学校是一所长沙人社局批准备案的高标准职业教育机构。学校本着“安全办学、规范从事、特色发展”的办学理念和“一切为了学生,为了学生一切,为了一切学生”的育
浏览:1177人
计算机培训城市导航:(IT培训联盟提示您:请勿直接向任何电脑培训学校转账付款,需了解完学校情况再做打算!)
全国统一客服电话
周一至周六 09:00-17:00 接听
IT培训联盟官方公众号
扫描访问手机版51CTO旗下网站
大家都在学的编程语言Python,可以用来干什么?
Python因为简单全面易用而成为近年来大热的编程语言。但是很多人学习了这门余元的语法和基本功能之后却不知道Python能干什么以及怎么做。Realpython.com上面的一篇文章于是把Python可以做的事情以及不适合做的事情进行了总结。
作者:36氪来源:| 15:05
编者按:Python因为简单全面易用而成为近年来大热的编程语言。但是很多人学习了这门余元的语法和基本功能之后却不知道Python能干什么以及怎么做。Realpython.com上面的一篇文章于是把Python可以做的事情以及不适合做的事情进行了总结。更棒的是,里面还列举了如何做这些事情的教程和项目案例,是非常适合上手的资源汇总。
你做到了:你已经完成了一门课程,或者终于看完了一本教你用Python学习编程基础的书。你已经掌握了列表、字典、类,也许甚至还有面向对象的概念。
那么&&接下来呢?
Python是一门非常全面的编程语言,在各个不同领域都有着繁多的应用。如果你已经掌握了Python的基础并且恨不得马上用这门语言做点东西,那现在就是找出下一步应该做什么的时候了。
在本文中,我们提供了若干不同的项目、资源以及教程,你可以利用这些来开始做东西。
别人用Python做了什么
你可能会在想,在现实世界里别人都用Python开发了什么东西呢。那么首先我们先迅速看一下其中一些大的技术公司是怎么使用这门语言的。
Google这家公司从一开始就使用Python了,而且在这家技术巨头的主要服务器端语言阵营中赢得了一席之地。Python的仁慈的独裁者Guido van Rossum甚至还在那里待过几年,负责监管这门语言的开发工作。
Instagram喜欢Python是因为它的简洁。这项服务以运行着&全世界最大的Django web框架部署&著称。而Django完全是用Python写出来的。
Spotify将这么语言用到数据分析和后端服务上。据他们的团队说,Python的易用让他们拥有了一条超快的开发渠道。Spotify要进行海量分析来给用户提供推荐,所以他们需要一个简单又好用的东西。Python正好是救兵!
你还可以看看这篇文章去了解其他公司都用Python干什么。如果你已经被说服的话,我们就开始吧!
你可以用Python做什么
从web开发到数据科学、机器学习等等,Python在现实世界中的应用是无限的。以下一些项目将会辅助你最终将你的Python技能用到正道上。
#1:将乏味的事情自动化
这是一本&针对全新初学者实用编程&的资源。就像标题所述,这本书教你如何将乏味的任务自动化,比如更新电子表格或者重命名计算机的文件。这是想要掌握Python基础的任何人的完美起点。
你将有机会联系自己到目前为止学到过的东西,去创建字典、抓取web,折腾文件,并且创建对象和类。你在这本书遇到的上手应用会为你听过现实世界中的结果,你可以马上就看到。
这一资源有不同的格式,可保证最好的学习体验。你可以到Amazon上面去买实体书或者免费在网上阅读。
#2:随时跟踪比特币价格
这段时间似乎人人都在讲比特币。自从2017年12月价格达到将近20000美元的高点后,加密数字货币已经进入到数百万人的脑海里。它的价格在不断波动,但是很多人都认为这是一笔值得的投资。
如果你正在寻求靠这波虚拟淘金热赚上一笔,想知道什么时候该出手,那就得随时了解比特币的价格。这门教程可以教你如何利用Python技能开发出一项比特币价格通知服务。
这一项目的基础是IFTTT小程序的创建。你讲学会如何利用请求库来发送HTTP请求以及如何利用webhook将你的app与外部服务连接。
这是对加密数字货币感兴趣的Python初学者完美的初始项目。你用这一教程开发的这项服务可以延伸到其他的货币,所以别担心,以太坊也能用上。
#3:创建一个计算器
这个简单的项目是进入GUI编程的一个可靠的办法。开发后端服务是部署的重要部分之一,但是可能也需要考虑前端的事情。创建用户可轻松与之交互的应用就显得无比重要。
如果你对UX和UI感兴趣,那就看看这门教程。从中你会接触tkinter 模块,这是标准的图形化用户界面软件包,通常是跟Python捆绑在一起的。
tkinter 模块是对Tcl/Tk进行封装的wrapper,是Tcl脚本语言与Tk GUI框架扩展的结合。如果你已经安装了Python,那你就应该已经有tkinter框架可用了。一个简单的调用即可唤出:
frim tkinter import
一旦你完成了这一步设置,就可以用Python继续开发你的第一个GUI计算器了。
练习运用tkinter模块,看着你的愿景慢慢在屏幕上实现。然后,一旦你练过手了,就可以拓展学习Python其他的GUI工具包了。更多信息可以看看Python GUI编程的官方文档。
#4:挖掘Twitter数据
感谢互联网以及逐步壮大的物联网,我们现在能访问的数据量之大甚至在10年前都是无法想象的。分析是任何跟数据打交道的领域的很大一部分。大家都在讨论什么?我们从他们的行为中能看到什么模式?
Twitter是获得其中一些问题答案的好地方。如果你对数据分析感兴趣,则Twitter数据挖掘项目就是利用你的Python技能回答有关周围世界的问题的好办法。
我们的Twitter情绪分析教程将用一个docker环境教你如何挖掘Twitter数据并且分析用户情绪。你将学会如何用Twitter注册一个应用,只有这样你才能访问他们的streaming API。
你会看到如何利用Tweepy来过滤想要抓取的推特,用TextBlob来计算哪些推特的情绪,用Elasticsearch来分析他们的内容,以及用Kibana来对结果进行可视化。当你完成这门教程后,你应该就可以深入学习其他利用Python来进行文字处理和语音识别的项目了。
#5:用Flask建立一个微博客
似乎现在人人都有一个博客,但是给自己在网上设立一个中心枢纽不算什么糟糕想法。随着Twitter和Instagram的出现,微博客尤其流行起来。在Miguel Grinberg搞的这个项目里,你会学习到如何搭建自己的微博客。
这门教程叫做&Flask Mega指南&,内容可以说不负其名。整篇教程分为23章,学习完之后你可以对Flask微型web框架拥有深刻了解。到项目最后,你应该就能得到一个功能完整的web应用了。
你不需要了解有关Flask的一切就可以开始,所以对于那些恨不得马上动手尝试web开发的人来说这是非常好的。
这个教程最近还更新了,把有助于你成为更好的web开发者的内容也纳入进来了。你可以在网上免费阅读,或者到Amazon去买一本纸质版,或者在他的在线课程中让作者手把手教你。一旦你做完项目,你就可以继续学Django,甚至开始创建更大规模的web应用了。
#6:建立一个区块链
尽管区块链起初开发出来是作为金融技术使用的,但现在却蔓延到了其他的各个行业。区块链几乎可以用到任何交易上面:从房地产到病历转移等等。
如果自己做一个的话牛就会对它的机制有更好的了解。Hackernoon的教程将辅助你从零开始实现一个区块链。到项目最后,你会对这一交易技术的机制拥有深入的了解。
做区块链需要跟HTTP和request库打交道。一旦你安装了Flaskweb框架,你就可以通过互联网用HTTP请求跟你的区块链进行通信了。
记住,区块链不仅仅适用于加密狂热者。一旦你自己开发了一个区块链之后,可以看看能不能找到有创意的手段在你感兴趣的领域实现这门技术。
#7:Twitter Feed控制
对开发web应用感兴趣但是对开始一个大型项目没有信心?别担心&&我们有东西给你。跟着我们一起学习如何在几个小时内创建一个简单的web app。
Bob Belderbos分享了自己是如何实现第40届PyBites Code Challenge 的,在这项编程挑战中,参与者需要创建一个web应用来更好地在Twitter上控制每日Python提示的新闻流。你可以通读他的实现以及代码了解究竟。
这次你用的不是Flask,而是微型web框架Bottle。Bottle以迅速部署应用的低依赖度解决方案著称。既然它是轻量且易用的,所以你很快就能搭建好你的应用。
你还会用Tweepy模块加载Twitter API的数据。你会将数据保存到 SQLAlchemy 数据库里面,所以你还会练习到SQL查询的编写。Fork这个代码库就可以开始了!
#8:玩PyGames
这个是给喜欢乐子的人准备的!Python可用于对各种电玩游戏、冒险游戏以及益智游戏进行编码,你可以在数天之内完成部署。经典的游戏包括猜单词、一字棋、乒乓球等等,这些都可以用你刚学会的编程技能去做。
Pygame库使得自己开发游戏变得更加容易。它包含了开发游戏所需的几乎一切。
Pygame既是免费的也是开源的。里面包含有计算机图形库和声音库,你可以利用这些可以来给你的应用增加互动功能。
你可以用这个库来开发很多的游戏。不管你选择要做哪一个,请随意把你的东西Pygame社区!
#9:选择你的冒险之旅
如果你更喜欢讲故事,用Python仍然可以开发出很酷的东西来。
这门语言极其容易编写,是创作交互式小说的完美环境。这个免费资源会指导你如何用Python编写一个文本型的冒险游戏的过程。
教程需要掌握一些Python编程的基本知识,但是它能够帮助你弥补自己所了解的知识与如何运用这一知识到应用开发上之间的鸿沟。
如果你希望将你的故事提升到新的水平,可以用类似Ren&Py这样的软件引擎添加声音和图像到你的游戏里面,创作出成熟的可视化小说。(然后你可以把它放到Steam上看看大家的反应!获得对自己作品反馈的最好方式是把它发布到世界上)
#10:对机器学习说&Hell World!&
对于对人工智能感兴趣的任何人来说,机器学习是理解的关键领域。然而,想要开始学习机器是很吓人的,而且这个领域发展很快,总是在变。
幸运的时候,网上有很多资源可以帮助你试水一下再投入到数据科学的海洋之中。Jason Brownlee的这门教程是关于用Python处理机器学习非常精彩的介绍。
从中你将了解到其中一些最常见的机器学习算法,以及可以辅助你做出预测的Python库。
这门教程极其简单而且非常容易学。你可以在几个小时之内完成学习。等你学完之后,就会对如何利用Python进行数据科学工作有了迅速的了解。
如果你确认自己已经准备好进一步深入学习了,可以看看我们的海量数据科学教程,在这里你可以学习如何分析指纹、如何建立可视化,以及如何识别语音和面部,这一切都是用Python来做的。
#11:接受挑战
如果你不确定要冒险尝试上述的一些较大型的项目,而小一点的你又不感兴趣的话,那你可能就会想还有其他可以练手的吗?怎么才能找到令你兴奋的东西呢?
编码挑战可以帮助你联系你的Python技能并且对你可以用Python做到的所有不同事情有初步了解。
简而言之:给你一个问题,你必须用Python找到一个解决方案。
你有机会开发对你有意义的问题的实现,但你也有机会通过提示来深入探究Python语言。这些会告诉你应该导入哪些模块来帮助你解决挑战。
编码挑战是以广度优先的方式尽可能多地学习库、方法、以及框架的好办法。在这里保证你可以找到想要进一步探索的东西。你可能甚至还会回到这份清单里面,并且发现你用来解决其中一个挑战的东西已经激起了你新的兴趣!
以下的挑战你可以试试:
The Python Challenge有20个多个关卡可供挑战。创建小规模的Python脚本来找到相应关卡的解决方案。互联网上到处都有相关解决方案的提示,不过最好还是自己找到解决办法!
PyBites Code Challenges的挑战也有50多个!这些挑战鼓励你通过开发应用完成任务来掌握Python。
如果你打算自己搞定这些挑战而不是按照教程步骤去编码的话,那么找一份可以随时求助的资源总是好的。当你在解决这些挑战时,Python Tricks这本书是非常出色的案头信息源。它会带领你探索Python不那么知名的地方,而那些地方正是你解决问题所需要的。
Python可能不应该干的事情
显然Python是非常全能的语言,你可以用它来做很多事情。但你没法用它来做完所有事情。实际上,有些东西Python就不是很擅长。
作为一门解释性语言,Python跟设备驱动程序这样的底层设备打交道会比较麻烦。比方说,如果你只想用Python来写一个操作系统的话会遇到问题。底层应用最好还是坚持用C或者C++来写。
然而,甚至这一断言恐怕也持续不了多久。作为对Python灵活性的证明,有人正在致力于扩展Python在底层交互中的可用性的项目。MicroPython只是其中之一,其目标就是为Python提供底层能力。
如果我想做的东西没有出现在这份清单里面怎么办?
没关系!这份东西也不是面面俱到的&&用Python你可以开发无数我们没有覆盖到的工具和应用。不要把你自己局限在这份清单里面。这只是一份资源,让你有个地方可以开始。
这个视频可以告诉你Python还适合哪些其他项目。你还可以看看这篇博客文章,了解去哪里寻找更多的Python项目灵感。
最后,该你来做一下调查找到能调动自己兴趣的项目了。如果你不确定从何开始,那就关注我们的Twitter账号吧。我们会定期分享来自读者社区的很酷很有趣的项目。你可能会从中找到自己迫不及待想要做出贡献的一个。
接下来呢?
好了,这就是你从Python初学者发展成娴熟的Pythonista的11条道路。
不管你选择从何开始,必定会找到无数发展编程技能的光明大道。随便选一个然后开始就是了!你的项目想法没有出现在这份清单里面?可以在评论区写出来!提出你的完美项目建议。
如果你还是找不到方向,需要别人推动你一下,可以看看我们关于形成积极学习策略的提示,帮助你回到正轨。
原文链接:https://realpython.com/what-can-i-do-with-python/
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
热点头条关注头条热点
24H热文一周话题本月最赞
讲师:14486人学习过
讲师:6311人学习过
讲师:2178人学习过
精选博文论坛热帖下载排行
本书是数据库系统方面的经典教材之一。国际上许多著名大学包括斯坦福大学、耶鲁大学、得克萨斯大学、康奈尔大学、伊利诺伊大学、印度理工学...
订阅51CTO邮刊有人要为ML定制编程语言,你的Python白学了?_凤凰科技
有人要为ML定制编程语言,你的Python白学了?
用微信扫描二维码分享至好友和朋友圈
原标题:有人要为ML定制编程语言,你的Python白学了? 本文由 【AI前线】原创,原文链接:ht
原标题:有人要为ML定制编程语言,你的Python白学了?
本文由 【AI前线】原创,原文链接:
格林潘思第十定律告诉我们,机器学习发展得越完善,现有的编程语言就会越暴露出与之不协调的缺陷。那么,我们是应该在原有语言的基础上进行改进完善,还是专门为之设计一套语言来得更彻底一些呢?诚然,重新开创一种语言成本很高,但是考虑到机器学习在未来的广阔应用前景,为其在编程语言上花些功夫,磨刀不误砍柴工,未尝不是一个好的办法。如果这种语言真的被创建出来,你辛辛苦苦学的 Python 不是白学了?
随着机器学习(ML)的发展,作为编程语言(PL)学习者和从业者,我们非常关注 ML 模型的复杂性,以及其建模框架的复杂性。最先进的模型看起来越来越象是程序,并开始支持诸如循环和递归等编程构造,引发了很多关于我们用来创建模型所用的工具,也就是编程语言,开始遇到很多有趣的问题。
虽然现在机器学习还没有一门专用语言,但是有人正在尝试通过 Python API 创造一种新语言(如 TensorFlow),而另外一些人将 Python 用作建模语言(如 PyTorch)。问题是,我们是否有必要为 ML 量身定制一套语言?如果是,原因何在?更重要的是,未来理想化的 ML 语言应该是什么样的?
Python 不能直接用,现有语言过于复杂
即使是时下被有些人称为人工智能时代最好的语言——Python,也有一些不可忽视的缺陷:由于 Python 是动态语言,它的执行效率不如 Java;而且 Python 是弱类型语言,编译时需要逐个 check 类型,所消耗的时间很多,速度较慢。另外,与 Java 应用可以在任何可以运行 Java 虚拟机的电脑或者移动设备上运行相比,不管在哪里运行 Python 的程序都需要一个编译器来将 Python 代码转化为特定的操作系统可理解的代码,这一点 Python 的缺陷就更明显了。
因为 ML 模型开始需要编程语言的全部功能,Chainer 等人开始倡导一种“运行时定义(Define-by-run)”的方法,这种方法会将 Python 程序本身用作模型,并通过运行时自动微分(Automatic Differentiation,AD)的方式实现衍生。从可用性的角度来看,这非常难得:如果你想要创建一个在表达树上运行的递归模型,只需把它写下来,剩下的交给 AD 来做就行了!这样做的效果甚至难以用语言来描述,通过这种简洁顺畅的方式尝试各种新颖的想法,也为研究工作贡献了巨大的价值。
然而,让 Python 扩展到满足 ML 所需的庞大计算需求的规模,远比你想象的要困难得多。大量的工作消耗在复制优化的过程中,而 PL 的性能被高估,它根本不能让 Python 的速度快很多。 &Python 的语义也使得这个语言难以进行模型级并行运算,或为小型设备提供编译模型。
MXNet、Gluon 等至少在某种程度上正在设法将两种方式的优势结合在一起,朝着这个目标方向努力。这个想法是将基本的动态 AD 与代码追踪方法结合在一起,获得可优化的“静态子图(Static sub-graph)”。然而,这就是一个不相干 API 大杂烩的方法,效果有限 ; MXNet 不仅将它的图形用于内核级别的优化,而且还用于高级图形调度,例如将模型分散到多个 GPU 上。这种“杂合”的方法如何解决这类问题还不明确,除非为节点可以进行动态计算的图容器添加另一个新的 API。
尽管有着诸多局限,TensorFlow(TF)和其同族技术 [2] 已经成为时下最流行编程语言之一。这种说法可能会让很多人吃惊,但毕竟人们会使用 Python 进行 TF 编程。但是,TF 需要编写 Python 代码,使用内部语言构建表达式树,随后进行评估。
实际上,我们可以用任何语言以“取巧”的方式进行类似 TensorFlow 那样的编程。例如下列 JavaScript 代码,就用这种方式实现了一个 Trivial 函数(add):
此时我们是在进行元编程(Metaprogramming) -——编写用来写代码的代码。在这种情况下,元语言和目标语言相同(JavaScript),但它们也可以是不同的语言(如 C 语言的 C 预处理器),或者可以使用数据结构(一个 AST)来代替字符串(原理不变)。在 TensorFlow 中,Python 可以作为用 TF 编写的图语言(Graph-based language)所用的元语言 [3]。TensorFlow 的图表甚至支持 Variable scoping 和 Control flow 等构造,我们可以通过 API,而不是 Python 语法操纵这些结构。
TensorFlow 和类似的工具以“纯粹的库”的形式存在,但它们实际上非常罕见。因为大多数库只是提供一套简单的函数和数据结构,而不是一个全新的编程系统和运行时。那我们为什么要用这么复杂的方法?
为什么要创造一种新的语言?
构建新语言的核心原因很简单:ML 研究对计算的要求极高,简化建模语言使得添加特征和特征领域优化变得更加容易。训练模型需要大量的硬件支持、足够好的训练数据、较低的解释器开销,还要处理各种类型的并行问题。Python 这样的通用语言可以达到这些要求,TensorFlow 也可以无缝完成。
不过我们还会遇到其他困难。因为这种优化依赖于简化假设(ML 模型不能递归,或者需要自定义梯度,对吧?),因此我们可以更容易地进行优化,或部署到小型设备上。但对于工程师来说,模型的复杂性已经增加了,而研究人员也乐于违反这些假设。现在,模型需要条件分支(已经可以足够轻松地操作了)、重复循环(不太容易,但有可能),甚至是表达树递归(几乎不可能实现)。在 ML 的很多领域,包括神经网络和概率规划(Probabilistic programming,模型正变得越来越像程序,其中包括对其他程序进行推理的程序(例如程序生成器和解释程序),以及包含一些不可微分的组件,诸如蒙特卡洛树搜索(Monte Carlo Tree Search)。构建一个具有灵活性的同时,又能实现最佳性能的运行时非常具有挑战性,但越来越多功能强大的模型需要做到这两点。
(为机器学习使用复杂的树结构数据,例如 Stanford Sentiment Treebank,需要使用可微分的递归算法。)
这种方法暴露的另一个缺点,至少在目前的版本中,是需要使用上述元编程,而且构建和评估表达式树会给程序员和编译器带来额外的负担。因为代码现在有两个执行时间,每个执行时间都有不同的语言语义,单步调试以排除故障等因素,所以推理会变得非常棘手。这可以通过为新运行时创建一种句法语言(Syntactic language)来解决,但这意味着需创建一个全新的编程语言。但是我们有很多数值语言(Numerical language)可用,这么做是否值得呢?
新 ML 语言长什么样?
很少有哪个领域像机器学习一样对语言级设计的问题要求如此之多。但是这也并非首例,在形式推理和验证、集群计算等领域,量身定制全新语言已经被证明是一个有效的解决方案。同样,我们也希望能看到针对 ML 领域数值的、可微分、可并行,甚至是概率性的计算要求产生新的语言,或让现有语言据此进行优化和完善。
ML 语言目前面临的一个较大的挑战,是如何在性能方面实现通用性,而早期的混合方法则有待完善。我们预计,未来的 ML 运行时可以支持任意的混合方法(计算图动中有静,静中有动......),并且需要能够更好地编译动态代码。理想情况下,只需要一个灵活的“图形格式”(或 AST)就够了,这样的 AST 应该有自己的语法,并且能以静态描述动态行为(例如可以写一个“for” 循环)。换句话说,它应该看起来更像一个标准的编程语言。
此外,这个可编程语义(Programmable semantic)的灵活性应该达到新的水平,并且可以通过类似于宏的特征来实现。通过指定代码应该具有纯数据流语义的位置(而不需要使用标准的命令式(Imperative),标准命令语义虽然更灵活,但可能会产生优化不安全的副作用),实现在核心系统之上构建多 GPU 训练等类似功能。它还可以执行概率编程语言所需的各种程序操作,或者 NLP 模型中通常需要手动添加 Vectorisation(批处理)传递。
与 PL 社区一样,ML 工程师也应该密切关注传统的自动微分(AD)社区。ML 的“定制”款语言也许可以从为真正的一流派生物而设计的语言中获得灵感。在不降低性能的前提下,这样的语言可以轻松地将符号与运行时技术结合在一起,混合正向和反向模式 AD(用于改进性能和内存使用),并且区分 GPU 内核 。
ML 研究将越来越需要更强大、用户定义类型和更多扩展方式的系统。用 NVIDIA(R)(英伟达(TM))GPU(图形处理器)Strided 数组提供硬编码支持就已经足够的时代已经过去了;稀疏机器学习(Sparse)等前端技术,TPU、Nervana 和 FPGA 等新硬件,以及 ARM 芯片或 iPhone 的 CoreML 芯片等多样化的部署目标,都需要更高的灵活性。
想象一下,在未来,用户可以很轻松地通过高级代码添加新的硬件支持(或新的数据表示类型),而不需要改变原来的系统。我们预测,ML 系统将从现有的数字计算语言中获得灵感,因为这类语言已经可以轻松地完成此类任务。
类型系统具有安全上的优势,但是当前的类型系统不适合包含大量大数组,并且数组维度有一定意义的代码(例如,图像中的空间、通道,以及批量维度)。这些差异完全出于习惯,而“潦草”的维度变换代码根本无法预防出错,这也导致我们需要更多可感知数组的类型系统。希望动态类型的发展势头能够继续,[4] 这主要是由于编码从业者偏好交互性和脚本,但我们希望能够看到更多的创新,如 CNTK 的可选动态维度等创新。
现在,ML 工程师对传统的软件工程问题越来越感兴趣,比如维护和扩展生产系统。ML 编程模型使得在组件之间创建抽象壁垒和接口更加困难,并且对模型的重新训练会很容易破坏向后兼容性。ML 语言将可能和常规语言一样,把这些问题的解决方案结合起来,但这仍然是一个围绕 shejiu 的开放问题。
(软件工程 2.0?XKCD)
图中对话,从上到下依次为:
这就是你的机器学习系统?
没错!把你的数据倾倒给这一大堆线性代数组成的东西,然后就可以在另一头收集答案了。
如果答案错误怎么办?
那就不停搅拌吧,直到获得看似正确的结果。
所有的新语言都有一个缺点,就是它需要一个新的数据库系统,因为只有为新运行时编写的代码才能从中获益。例如,如果不重复使用 Python,TensorFlow 开发人员就需要用图语言为文件 IO 等任务重新编写数据库,比如他们为 SciPy 等项目所做的大量工作全部白费。虽然这可能是唯一的方法,但 ML 从业者不应该脱离广博的数值型和 HPC 计算社区。一个理想的 ML 生态系统应该是一个数值型社区,反之亦然,这些社区之间的结合将把每个人的努力事半功倍。
我们预期,ML 在以下各方面将会有较大的进步。图形 IR 和 XLA、ONNX、NNVM 等格式将变得越来越复杂,它们可能从传统的语言设计中获得更多启发 [5],甚至通过增加表层语法(Surface syntax)发展成完全成熟的编程语言。TensorFlow 的 XLA 已经开始向专用编译器堆栈的方向发展,目前包括 TVM、DLVM、myelin 和其他正在进行的工程。同时,PyTorch JIT、Gluon 和 Tangent 正在排除万难,让 Python 本身可以成为更优秀的建模语言,不过这一过程还将面临很大的挑战。有人认为,ML 归根结底是一种数值编程语言问题,而 Julia 社区认为,ML 就是试验这些语言级别问题的理想土壤,并将继续推进 Knet、Flux、Cassette、CUDAnative、DataFlow.jl 等项目的进展。
Julia 的起源
2009 年左右,一群拥有各种语言丰富编程经验的 Matlab 高级用户,对现有计算编程工具感到不满——这些软件对自己专长的领域表现得非常棒,但在其它领域却非常糟糕,他们想要寻求一种能够满足他们所有要求的语言,于是他们开始创建一种全新的语言。这些人中有些是 Lisp 黑客,一些是 Python 狂热者,另外一些是 Ruby 主义者,还有一些是 Perl 黑客。用他们的话说,他们创造新语言的动因是因为他们“贪心”不足,想要创造出一种集复杂的编译器、分布式并行执行、数值准确性和广泛的数学函数库于一身的开源软件,它既要像 C 语言一般快速,同时也要拥有如同 Ruby 的动态性;要具有 Lisp 般真正的同像性(Homoiconicity)而又有 Matlab 般熟悉的数学记号;要像 Python 般通用、像 R 般在统计分析上得心应手、像 Perl 般自然地处理字符串、像 Matlab 般具有强大的线性代数运算能力、像 shell 般胶水语言的能力,易于学习而又不让真正的黑客感到无聊;还有,它应该是交互式的,同时又是编译型的。
(从左到右):Julia Computing 公司的几位联合创始人 Stefan Karpinski、Viral Shah、Jeff Bezanson、Alan Edelman、Deepak Vinchhi 和 Keno Fischer。于是,2009 年,Karpinski 与 Viral Shah、Alan Edelman 和 Jeff Bezanson 三人共同创办了 Julia 这个开源项目。由于市场反响极好,几位开发者联同 Deepak Vinchhi 和 Keno Fischer 在 2015 年创办了 Julia Computing 公司。Julia Computing 为客户提供收费的支持、培训和咨询服务,不过 Julia 本身仍可以免费使用。Julia 是 Jupyter 和 Julia 社区的合作项目,为 Julia 提供了一个强大的基于浏览器的图形化 notebook 界面,是一个面向数值计算(numerical computing)的高性能动态编程语言。其语法与其他科学计算语言相似,在许多情况下拥有能与编译型语言相媲美的性能。Julia 的基本库就主要用 Julia 语言编写的,并结合了成熟的开源 C 和用于线性代数、随机数生成、信号处理和字符串处理的公式翻译程式语言库(Fortran)。另外,Julia 开发者社区还正在通过 Julia 的内置包管理器提供一些外部包。
Julia 开源地址
https://github.com/JuliaLang/julia
在国外发展迅猛
Julia Computing 联合创始人 Karpinski 说道:“Julia 是人工智能、机器学习、深度学习和并行计算这些应用的最佳选择,在印度的发展势头非常迅猛。”
此外,Julia 还用于美国航空航天局和劳伦斯伯克利国家实验室的研究,麻省理工学院也专门设有一个致力于研究和发展这种语言的 Julia 实验室,麻省理工学院林肯实验室的工程师们使用 Julia 来计算经过优化的逻辑表中的 65 亿个决策点,以便找出联邦航空管理局新的下一代飞机防撞系统的故障,以及用于为天空调查而设计的统计分析模型 Celeste 项目等,应用范围非常广阔。
虽无法动摇 java 和 C++ 的主导地位,但前景可观
既然 Julia 有这么多优点,按道理说应该有很多人用。实时上也是这样,虽然开源有限,但 Julia 变得越来越受欢迎,成了热门编程语言,Tiobe 排名也逐渐上升。最新数据显示,12 月,Julia 在编程语言中的排名为 Top47。
虽然与 C 语言、Python 等热门编程语言相比还是有很大差距,绘图接口及常用工具包缺失等问题也是阻止用户使用这种语言的原因,但用过 Julia 的编程人员认为,Julia 在速度和语言性能等方面具有优势,作为语言本身比 MATLAB 的脚本更为优雅有趣。
Julia 特征
多派遣:提供跨多种参数类型组合定义函数行为的能力
动态类型系统:用于文件编制、优化和调度的类型系统
高性能,接近于静态编译型语言,如 C 语言,包括用户自定义类型等
有类似 Lisp 的宏以及其它元编程工具
调用 Python 函数:使用 Pycall 包
可直接调用 C 函数(不需要包装或是借助特殊的 API)
有类似 shell 的进程管理能力
为并行计算和分布式计算而设计
轻量级协程
调用许多其它成熟的高性能基础代码。如线性代数、随机数生成、快速傅里叶变换、字符串处理。(还在增加中……)
丰富的用于创建或描述对象的类型语法
用户自定义类型和内置函数一样快速简洁
优雅的可扩展的类型转换 / 提升
支持 Unicode,包括但不限于 UTF-8
MIT 许可:免费和开源
高性能的即时编译器
Julia 基于 LLVM 的即时(JIT)编译器结合语言的设计,使其性能接近 C 语言。为了让 Julia 能够像其他语言一样进行数值计算和科学计算,Julia 社区用多种语言编写了一套微型 benchmark 测试程序数值:C 语言、Fortran、Julia、Python、Matlab / Octave、R、JavaScript、Java、Lua、Mathematica。
(图:相对于 C 语言的 benchmark 时间(越小越好,C 语言性能 = 1.0))
专为并行和云计算而设计
Julia 不会在用户上强加任何特殊的并行性。相反,它为分布式计算提供了许多关键的构建块,使其足够灵活以支持多种并行方式,并允许用户自主添加。下图示例演示了 Julia 如何计算大量并行投币实验中正面朝上的数量:
这个计算是自动分布在所有可用的计算节点上的,在调用节点处得出总和(+)减少的结果。
以下是使用基于网页的交互式 IJulia Notebook 会话截图,JuliaBox 提供了一种在浏览器上按需配置 Docker 沙盒容器来运行 IJulia notebook 的方法。
这为完全基于云的操作铺平了道路,包括数据管理、代码编辑和共享、执行、调试、协作、分析、数据探索和可视化。Julia 的最终目标是让人们不再担心管理机器和管理数据,而是直接解决现实问题。
Gadfly 可以在浏览器中生成各种渲染后端的图形(SVG、PDF、PNG 和其他各种后端)。我们可以通过为图形和图表添加 Interact.jl 包来增强交互性。下面介绍一下 Gadfly 的一小部分功能:
免费、开源、库友好
Julia 应用已经得到 MIT 的许可授权,其核心语言是免费开源的,Julia 环境使用的各种库包括本身的许可,例如 GPL、LGPL 和 BSD。该语言可以作为一个共享库使用,因此用户可以将 Julia 与他们自己的 C / Fortran 代码或专有的第三方库结合起来使用。此外,Juli 让在 C 和 Fortran 共享库中调用外部函数变得非常简单,无需编写任何包装代码,甚至不需要重新编译现有代码。
为了快速了解 Julia,以下是 Mandelbrot 和随机矩阵统计 benchmark 中使用的代码
结论:关于机器学习的推论
机器学习模型已经成为构建更高层次和更复杂抽象的通用信息处理系统 ; 重现、递归、高阶模型,甚至堆栈机器((Stack machine))和语言解释器,所有这一切都是通过基本组件相互组合实现的。机器学习已成为一种全新编程范式,只不过因为其数值型、可微分、并行等特性而显得较为陌生。在所有工程领域,这种可用的工具都将对未来工作的范畴产生深远的影响。
所有这些都要求 ML 系统的设计人员面临着巨大的挑战。尽管如此,还是有一些激动人心的好消息:在过去的几十年中,即使没有被完全解决,语言研究人员已经对这些问题做了深入的研究。为了真正把这个新领域的潜力发挥到极致,机器学习和编程语言必须联合起来,而真正的挑战是如何将两者的专业知识整合在一起。
我们能否建立一套将数值、派生物和并行功能视为第一类特性的系统,而不牺牲传统的编程思想和智慧?这是未来十年,语言编程领域必须回答的基本问题。
[1] 援引格林潘思第十定律(Philip Greenspun)
[2] 此处使用 TensorFlow 作为例子,其实也可以替换为其他“运行前定义(Define-before-run)”的框架,例如 CNTK 或 MXNet。
[3] TensorFlow 的图实际上是一种基于数据流的 AST(抽象语法树)。
[4] 话虽如此,但从内部来说,目前的系统已横跨从完全动态(PyTorch 及其 Aten 后端)到非常静态(TensorFlow 的 XLA 和 MXNet,在图实际运行前所有维度都是已知的)的完整范围。
[5] Google Brain 正在招募编程语言专家,例如 Chris Lattner 目前正在从事相关开发。
文章来源:
https://julialang.org/blog/2017/12/ml&pl#fnref:tf
https://www.tiobe.com/tiobe-index/
https://julialang.org/blog/2012/02/why-we-created-julia
关注我们的微信号"AI前线",后台回复“AI”可获得《AI前线》系列PDF电子书
用微信扫描二维码分享至好友和朋友圈
凤凰科技官方微信
播放数:71189
播放数:32390
播放数:39377
播放数:164428}

我要回帖

更多关于 工业机器人编程语言 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信