为什么人工智能岗位有些招聘C/C++有些招聘Python到底哪门编程语言更重要(设计一个无人驾驶系统分秒必争时C++的作用又一次体现出来了)

说个最夸张的例子。假如我们已知X要预测Y,Python做的工作就是找到Y=aX+b这测关系式,特别是a和b的具体数值最值钱。而除此之外的所有工作,从数据采集,软件架构设计,数据库设计与读写,后台运作,分布式处理一直到前端展示可能都是用的Python以外的技术(比如C++)来实现。Python的工作仅仅是得到a和b,仅此而已!

早起人工智能概念还很模糊的时候,很多人也很不解,为什么莫名其妙的,Python怎么就成了开发人工智能的第一语言呢?

人工智能为什么不用C++

事实上,用什么编程语言跟人工智能完全没有关系,只要你愿意,用C++也没有问题。至于为什么Python成为了人工智能的编程语言,原因有很多,这里简单说一下。

01

谷歌的搜索引擎源自Page和Brin的博士论文,当时他们的程序就是用Python写的,当日他们两就决定让谷歌投入做AI时,首选的语言就是Python。在收购DeepMind之后,谷歌开始发布大量的论文,放出的代码也基本上是基于Python的,所以自然而然……

02

这是由于Python的优点决定的,它具有多平台兼容性,代码简洁、可读性强,丰富的开源库等等。

C++在人工智能方面毫无用处?

恰恰相反,C++在人工智能方面的用处很大。目前机器学习的底层框架和所以来的支持库,几乎都是在使用C++。只是相比之下,Python的需求量更大,并不代表C++就没有市场了。

如果你写的是底层的库,那么C语言是最佳的选择,如果是代码量巨大,且有大量底层库支持,保证速度不至于慢到不能接受的程度,Python还是最佳的选择。

为什么招聘的需求不同?

再看一个例子,你就明白了。来自腾讯人工智能职位的招聘。

招聘岗位有:语言识别/合成研究员,机器学习研究员、自然语言处理研究员、计算机视觉研究员、语音识别开发工程师……

阅读一下这些岗位要求,你会发现一条几乎通用:至少精通一种技术语言,包括但不限于Java、C/C++、C#、Python等。

另外,要么就是要求你同时精通C++和Python。

结合上面对C++和Python的阐述,你应该知道为什么有些企业会招聘C++,有些企业会招Python了吧。

编程语言,谁是核心?

不妨再举个例子,下图是TIOBE编程语言排行榜:

每种编程语言,都有他们的优势和劣势,他们可能因为市场的需求而有了冷热之分。如果你非得分出谁才是最重要的编程语言,我只能告诉你:

“PHP是世界上最好的语言”

——摘自W3Cshool学员的回答

人工智能,就是让机器可以像人一样思考问题。典型的场景有:图像识别、自然语言处理、语音处理、动态物体跟踪、可运动的机器人,等等。

而早期的深蓝下国际象棋,胜过人类,就不能叫智能。因为它基本上是以穷举为主,深蓝的每一步操作都是精确可描述的,是“可知”的,是机器思维而不是人类思维。相反,AlphaGo就连开发者都搞不清楚这机器是怎么运作的。它就是个“黑匣子”。它模拟的是人的“感觉”而不是一堆人类发明的精确围棋算法公式。感觉是无法用语言描述的。

简单算术运算也不是智能,因为人类列算式计算的每一步都是可精确描述的。同样电子计算器在算术运算时的每一个步骤同样也是如此(虽然它用的是二进制计算,数字电路,泰勒级数展开等与人类不太一样的方法)。

人工智能要模拟人的“感觉”,就必须训练,也可以叫做“学习”。比如让它区分猫和狗,就给它几万张猫和狗的图片,让它自己去慢慢学习。在学习前,人类只需要告诉它某张图是猫或是狗,其他信息一概不用多说。比如完全没有必要提醒它有胡子的就是猫。

训练是个反复迭代的过程,就是说需要不断地探索,此路不通,就换一条路,非常艰辛。现实中,往往是不断地调整神经网络的参数,不断地对比训练结果。多数时候还要数据预处理,以及辅助传统的机器学习、传统图像处理、模式识别等技术。

那么,上述过程,谁最擅长?现在公认的就是Python。

Python是解释性语言而,弱类型,用起来很方便,开发效率大大高过C++、JAVA等语言,而且有很多现成的机器学习、深度学习、科学计算库,这些都是它作为人工智能语言的优势。AlphaGo的顶层代码大部分是用的Python,AlphaGo的成功,也对Python起了很大的推动作用。

训练是人工智能的很难的一部分,但是绝对不是人工智能的全部。人工智能还包括前期的数据获取、数据预处理和后期的实际应用。

这时候,C++的作用又一次体现出来了!

这还没完。人工智能的载体可能会很精简。比方说嵌入到人体,嵌入到汽车,这么小的系统,不是Python的天下。还有机器人,是可以运动的,如何驱动机器动,这不还是C++的强项嘛。

另外,还涉及到前期的数据采集和预处理。比如图像、音频、视频,需要实时感知,包括必要的预处理(比如灰度化、关键部位快速定位)。这就要用到音频视频的高效处理,数据通信,物联网等技术。这不还是C++的强项吗?

总之,在人工智能开发的整个过程中,Python主要处理算法模型部分,而具体的前期数据获取和后期与外部设备部分的交互则可以用C++来实现。

不过,从目前来看,人工智能最主要和最难的部分依然是由Python来实现的。

这个问题我有答案,顶我上去。

因为这两个岗位要干的活完全不一样。

第一个要求python和tensorflow说明整个工作主要在设计模型,训练模型,最后可能的输出形式是用模型离线算一批数据或者用GPU在服务器部署;所以不需要太多的C/C++工程能力。

第二个工作要求C/C++,特别有一条要在手机客户端部署,这个要求就高很多了,不只是模型训练,你还需要在手机上实现模型,手机上可没有CUDA生态的GPU,主要是一些协处理器,没法直接上tensorflow。所以此时,比较好的方案就是用C/C++来进行CPU编程实现模型。

这个主要看这个岗位招收的人员是需要进行哪个层次的编程工作。

C++在继承了C语言的优点的同时加入了面向对象的内容。所以C++语言不但可以构建效率较高的底层具体的算法实现,又有良好的扩展性和代码重用性。所以一般在追求高效运行的底层算法中,我们一般使用C或C++来进行构建。

python语言作为一种解释性语言,运行效率比较低。但是python上已经具有了大量构建好的人工智能算法库。所以python语言更适于构建上层框架。这样不但构建效率高,容易调试。因此在上层算法中通常使用python语言构建应用层框架。

通过两种语言的配合方式充分利用了两种开发语言的长处和有点,也利于保持原有语言类型上所进行的原有开发。

因此,在人工智能岗位的招聘中,大一些的公司都会分开来进行招聘。需要底层算法实现的招熟悉C或C++的人,需要高层算法实现的招熟悉python的人。

这么说吧,C++学精了,上手其他编程语言会简单许多,有很多优势,python主要是上手简单,但是精通也不容易。程序语言也没有哪个更重要,只有哪个更适合。人工智能的开发的核心库一般都也是C++写的,只是提供了python程序语言接口,因为它更便捷。在开发过程中遇到性能调优的问题时还是会绕回到C++的。

其实人工智能可以用到很多种语言,不只是Python和C/C++,还有Java,以及lisp,prolog.不过目前来看,还是Python和C++用得更多。

而Python其实是人工智能的首选语言,而且想要入门Python比其他语言都会容易些。当然了,不是说C++在人工智能中就毫无用处了,而是相比Python,它更不适合用在人工智能上。为什么?

看看它的缺点:1.遵循自上而下的方法,语言比较复杂;2.仅仅是更适合实现特定系统或者是算法核心/基础。

而Python呢?优势更多:1.开发速度明显比C++更快;2.有各种各样的库和工具;3.它面向对象;4.它还支持算法测试。

C++是所有语言的基础,现在很多编程语言都是由此衍生过来的,因为精通C++太难了,其语言的繁琐性,很多人都在半路上就放弃了,所以才出现了之后的很多简洁版的编程语言。

所以就当前的学习趋势来看,很多人都会选择Python,不仅仅是因为Python具有强大的数据库,对人工智能技术有着更多的优势,还因为相对于C++语言来说,是简单容易入门,容易上手的!很多零基础的同学也是可以学会的!

平常训练使用python,真正上线的时候用cpp。因为如果用python环境是个问题,一台机器一台机器的搭建paddleortensorflow太麻烦了,况且效率也不高。将预测的代码写成cpp的,只把依赖的库拷贝出来放到每台机器上就行了。

THE END
1.C++招聘招聘C++人才猎聘C++招聘网为您提供大量的C++招聘信息,有超过10000多C++招聘信息任你选寻,招聘C++人才就来猎聘C++招聘网!https://www.liepin.com/career/c2/
2.C/C++开发工程师原型机端到端软件开发(从底软到上层应用软件开发);三、任职要求: 1、计算机、软件、通信、生物医学等相关专业; 2、热爱编程,基础扎实,熟悉掌握但不限于JAVA/C++/C/Python等编程语言中的一种或数种,有良好的编程习惯; 3、具备独立工作能力和解决问题的能力、善于沟通、乐于合作,热衷新技术,善于总结分享,喜欢动手https://cuc.ncss.cn/student/jobs/6hjEXQU5GEzj8FBYgXgbDh/detail.html
3.杭州招聘c++客户端工程师(可年后入职)1.有理想,热爱游戏事业,热爱编程。持续写开源代码和在技术论坛热衷解决问题的优先; 2.计算机及相关专业本科以上学历,在校期间有大量编码经验的优先; 3.精通C++/C#/C某一种程序语言。精通数据结构,DX,OpenGL的优先; 4.可接受应届生。 联系方式:qq253019453,邮箱yuhh1989@126.comhttps://www.w3ctech.com/topic/698
4.厦门人才网招聘职位:C++客户端开发 (1人) No.2688670 招聘单位: 厦门吉比特网络技术股份有限公司 单位资料 招聘期限: 2021-06-18 2021-07-18 16:36 查看招聘发布历史 招聘部门: 研发中心 联系电话: (合则约见、谢绝来电) 职位基本信息 学历要求: 不限 职位性质: 全职 工作经验: 不限 工作地点: 厦门市https://m.xmrc.com.cn/net/info/showjob.aspx?ID=2688670
5.2025校园招聘北京柠檬微趣科技股份有限公司招聘就业信息网招聘人数:6人 薪资范围:15-25K,年包14薪起,SP不设限 2、C++客户端开发工程师 岗位职责: 1、使用c++和cocos2d-x开发ios/ andriod手机游戏; 2、研究、优化cocos2d-x引擎; 3、参与ios/andriod游戏的设计与实现,编写接口文档; 4、与团队其他角色一起协作,保证系统的可用性和稳定性。 任职要求: 1、本科及以上学https://m.haitou.cc/xyzp/3210986
6.2024招聘:哔哩哔哩【招聘岗位】 1、算法工程师(推荐搜索方向)【2024届】 2、研发工程师(推荐搜索方向)【2024届】 3、算法工程师(AI方向)【2024届】 4、C++桌面客户端开发工程师【2024届】 5、Windows客户端开发【2024届】 6、多媒体组件开发工程师【2024届】 7、SRE工程师【2024届】 http://www.isee.zju.edu.cn/2024/0414/c21110a2901157/page.htm
7.年薪50万!北航合肥创新研究院招募研究员!澎湃号·政务6、完成 Windows客户端软件界面开发; 7、辅助进行系统的功能定义,程序设计; 8、根据设计文档或需求说明完成代码编写、调试、测试和维护; 9、分析并解决软件开发过程中的问题。 岗位要求: 1、具有较强的科技创新能力,全日制硕士研究生及以上学历; 2、熟练掌握C/C++,井从事相关开发工作2年以上; https://www.thepaper.cn/newsDetail_forward_4985535
8.NAVERChina韩国最大的搜索引擎和门户网站1 年以上 C++ 开发经验,熟悉 node-gyp 相关; 熟悉Github 工作流和 Devops 相关内容优先; 具备跨平台( Windows / Mac)开发经验优先。 点击查看职位详情 申请内推 Mac开发工程师(Mac Drive) 招聘人数:1人 学历条件:本科及以上 薪水范围:12k-20k 硬性条件:统招本科以上学历,计算机或相关专业; https://maimai.cn/article/detail?fid=1462060735&efid=8HWEZE0ysMSGUIGrLZS3Fw
9.Zoom客户端招聘(工资待遇要求)软视软件(苏州)有限公司Zoom客户端招聘(软视软件(苏州)有限公司):根据算法统计,Zoom客户端工资拿20-30K占80%,招聘经验要求5-10年经验占比最多,要求较高,招聘学历要求本科学历占比最多,要求一般,更多客户端招聘,请上职友集。https://www.jobui.com/company/12108527/salary/j/kehuduan/
10.最高年薪30W,本周武汉这处还有2场招聘会二、C++开发工程师(0.7万 - 1.5万/月) 岗位职责: 1、根据项目和产品需求,完成模块设计、开发编码和测试工作; 2、负责音视频编解码和网络优化,实现推流和拉流功能; 3、编写api接口; 4、负责音视频流媒体服务端和客户端程序的开发和维护; 5、根据公司项目和业务发展特点,研究相关软件前沿技术,参与公司软件开发。https://www.wuhan.gov.cn/sy/whyw/202305/t20230508_2197263.shtml
11.第58?59届中国高等教育博览会2023高校毕业生人才招聘会(线下主C++客户端开发工程师 (重庆) 10 不限专业 投递简历 售前工程师 (北京、上海) 10 不限专业 投递简历 软件测试工程师(重庆) 4 计算机类、金融学类 投递简历 466 重庆中软卓越信息技术有限公司 项目经理 3 不限专业 投递简历 大客户销售 3 不限专业 投递简历 467 重庆优服普创科技有限公司 ERP 实施顾问https://www.cqbys.com/jobfair91/view/id/38676/mark
12.技术美术秋招面经总结+网易雷火内推(uu)6.C++的几个stl的底层实现 7.二叉排序树的了解 8.像素着色器中做了什么(pixel shader,其实就是fragment shader) 9.齐次裁剪空间是什么 10.渲染流水线过程 11.怎么优化着色器 12.了解OpenGL之类的库吗,做过什么 说是客户端开发其实就是做技术美术的事,不过因为聊项目的时候觉得不合适所以直接https://ac.nowcoder.com/discuss/848815?type=2&order=0&pos=28&page=0&channel=-1&source_id=discuss_center_2_nctrack