人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学,涉及到计算机科学、心理学、哲学和语言学等学科,最初是在1956 年Dartmouth学会上提出的alexa搜。
而如今,不管我们是否愿意,形形色色的人工智能(Artificial Intelligence,简称AI)早已深入日常生活,这些人工智能产品将人们从种种无趣的体力alexa搜、脑力劳动中解放出来,同时也带来了众多机遇和挑战。
那么问题来了,人工智能这么火,你知道它是怎么做出来的吗alexa搜?原理是什么?
人工智能依靠的是并不是真的人脑,而是各种数学算法和大数据。另外,科学家们也想了各种办法,让人工智能能够像人一样思考。科学家利用数学分析中的知识,借鉴人脑的部分结构,设计了特殊的神经网络结构,还有配套的高速并行学习算法,利用大型计算机、显卡以及专用芯片提供的大量计算能力,训练出优秀的神经网络以供应用。只要向训练好的神经网络输入数据,它就能输出相应的计算结果。
不过,尽管人工智能现在已经能解决很多问题,但对它的研究才刚刚开始。所有实现人工智能的方法,全都需要处理海量的数据,但反观人类自身,我们能举一反三,不需要阅读整个互联网的数据,就能学会一种语言或者一门学科。如何将这种触类旁通的能力移植到机器上,是对人类智慧的又一个挑战。
Go语言为什么没有流行起来?
Go语言似乎并没有不流行,在各大榜单盘点最流行的编程语言时,Go语言都是榜上有名。
1.优势:简单
谈到Go语言大家的第一反应可能就是简单,当然这也是Go语言的一大优势,一个有经验的程序员一个晚上就可以掌握,而其他新语言如Swift它的相关文档就得有几百页厚。
简单带来的另一个优点就是更易于阅读,Go语言规范,有其他语言基础的程序员也能迅速上手,由于学习曲线平缓,团队之间的差距更小,更利于合作,另外Go 自带完善的工具链,大大提高了团队协作的一致性。
劣势:简陋
当然,在晚上学习一门语言是很好的,但Go是舍弃了很多现代抽象的功能才实现了简单性,舍弃了这些功能也就意味着你不能依靠更复杂语言的力量来对抗Bug。所以对于复杂性和抽象的爱好者来说,Go语言不是进步反而是倒退。
除此之外,每个程序员都有自己的编程想法,有的人想要泛型,有的人想要可扩展性......但Go语言的使用往往会让程序员有一种绑住手脚的感觉,无法大展拳脚。
2.优势:自动化节省时间
Go集成了很多方便快捷的功能,如自动声明变量,它看起来是一个很小的功能,但是却为程序员带来了很多便利,毕竟没有人希望一直在写“int”吧。另外,Go语言的GC机制也是一个很大的优势,因为每个人都对malloc和free函数感到厌烦了吧。
劣势:自动化可能是危险的
相信每个程序员都对编程语言的自动化的缺点感同身受:如果你采用GC机制来自动回收内存,那么可能会在错误的时间被触发;自动声明可能会导致嵌套作用域中使用相同的变量名,从而导致错误;另外,现在人们对于数据管理系统更加谨慎,所以自动化对我们来说可能不是优势反而是劣势。
3.优势:无虚拟机
在过去的几十年里,基于虚拟机的语言都是爆款,二进制代码可以在不同的芯片架构之间轻松移动,而且虚拟机在执行优化时可以实施一些安全规则,所以在VM中整合了很多好的想法。
但是启动虚拟机需要一些时间,但是Go语言就不用担心这一点,它可直接编译成机器码,除了glibc外没有其他外部依赖,部署十分方便。这使得Go语言在开发和调试过程中的速度都非常快。
劣势:无虚拟机
Go语言有独立的二进制文件,但是它们内存占用都非常大,例如你写一个“hello world”的示例,它就接近于2MB。二进制文件之所以会这么大,有一部分原因是它需要执行虚拟机的大部分功能,。
针对这一问题,Go 1.7做了一些努力,减少了编译器所使用的内存量并且在连接时间方面也有所提升,据悉,相对于Go 1.5.3它能够将总的编译时间降低大约20-30%。虽然这一变化让问题改善了很多,但是当服务器打开了数百个代码版本时,RAM仍会被阻塞。
4.优势:与C类似
Go语言带有强大的C基因,所以在支持底层代码方面毫无压力,1.5版本中完成的并发GC使得Go语言程序在响应时间方面有了质的飞跃,在软件开发效率和运行效率之间做出了绝佳的权衡。
劣势:与C类似
类C语言有很多,从显而易见的C#,C ++和Objective-C到Java、Rust、Swift,它们涵盖了很多有趣的功能,如果你想要完成一个项目,你可以很多选择,Go语言并不是唯一。
5.优势:无回调语法
许多程序员都从Node.js的深坑跳到Go,为什么呢?因为他们之前要做很多回调。回调结构对于Web页面上的JavaScript代码来说是很有意义的,它有助于通过Node提供服务器端开发的速度,但是它很难保持直线,尤其是在有三四层嵌套的情况下。
劣势:无回调语法
使用Go语言你不需要考虑嵌套方法,但是你仍然需要考虑以相同的方式编码交互。Node.js的嵌套虽然有些烦人,但是它能够让你在大脑中清晰的形成一个架构图,而Go语言由于不需要考虑嵌套,所以很有可能会出现失误。
6.优势:逐渐丰富的库
Google为用户创建服务器应用程序提供很多重要的库,尤其是网络库非常强大。
劣势:库缺乏
这个咋一听来好像是自行矛盾,但其实也很好理解,虽然Google对于Go语言给予了大量的支持,但毕竟Go语言还很年轻,所以标准库少也是在所难免的。JAR是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件,使用可执行的 JAR 文件,我们可以不用提取它或者知道主要入口点就可以运行一个应用程序。可执行 JAR 有助于方便发布和执行 Java 应用程序。Clojure,Scala,JRuby,Kotlin和许多其他的新语言被编译为JVM的字节码,它们可以与所有Java库一起使用。
7.优势:前景可期
Go语言之所以能够飞速发展,很大一部分原因是Google的支持。Google是一家重视未来的公司,我们可以从一些蛛丝马迹中发现与谷歌阅读器相比,Google似乎更致力于Go语言,目前Google在无人驾驶汽车和其它新奇特的东西投入了大量的精力,这也为Go语言的发展提供了助力。
劣势:在利基范围之外未能完全实践承诺
Go语言的上升令人印象深刻,但是能否继续上升,我们可能要打一个问号。企业对于代码的要求除了效率,还有稳定,要让企业将项目的未来从现有的语言突然变向押宝在另一种语言上,似乎不太可能。另外,Google对于Go语言的支持是优势也是掣肘,一旦Google风向有变,放弃Go语言转向一个更好的版本,那么对Go语言来说可能是灭顶之灾。
Java是AP计算机科学语言,C是Unix语言,Python更受社会科学家青睐,PHP非但没有死亡,反而越来愈好......每一种语言都有自己的使用场景,并且在自己的领域发展很好,如果Go语言不能尽快找好自己的定位,那么未来的发展可能会有影响。