• 人工智能学什么编程语言好?

              当下人工智能是十分火的,自然关注的人也非常的多,大家都想上车,但是小白想入手就会感到茫然: 究竟如何学习人工智能呢?从什么地方开始学习人工智能呢?

              要回答这些问题,首先来看看人工智能的定义吧。人工智能,英文缩写为AI,是指由人制造出来的机器或者程序所表现出来的智能。通常意义上的人工智能是指通过普通计算机程序来呈现人类智能的技术。人工智能之所以热门,是因为随着科学技术的不断发展,人工智能展现出来的潜力越来越大,可以应用的领域也越来越广,工业上的智能制造,金融上的量化金融,医学上的智能看病,这些领域都开始了大规模人工智能应用的尝试,并且取得了不错的应用成果。可以说,人工智能已经是大势所趋了。

              人工智能,除了那些专门研究智能算法的人之外,绝大多数参与人工智能工作的人主要是要将人工智能应用于特定的领域和具体的项目,所以对绝大多数人来讲,学习人工智能学习何种语言,主要看你具体应用的领域或项目,比如数据处理领域的R语言,通用领域的python语言,利用领域内比较成熟的人工智能语言通常可以过得事半功倍的效果。

              最后需要说明一下的是对于当前还没有研究方向的新手,建议还是直接学习python语言,不仅语言简洁,入门较快,而且作为当前最热门的人工智能语言,其应用范围也是最宽泛的,除非以后从事的项目有特别的要求,一般都是可以直接应用python语言到相应的项目上的。




              如何学好一门编程语言?

              学好一门编程语言是十分不容易的,但是如果学会了,它的实用性是很强的,下面我为大家整理了学好一门编程语言的办法,大家可以参考借鉴。


              如何学好一门编程语言? 一、多总结

              多总结才能加深理解、增强记忆。举例,Go 中有 slice、map、channal 类型,它们都可以用 make 生成实例,但 slice 和 map 还可以用以下形式初始化,也是编程规范中建议的初始化方式:

              colors := map[string]string{}

              slice := []int{}

              但注意了,channal 则没有这样的语法:msg := chan string{}

              上面两句是生成实例,表示空集合,但下面两句则表示实例不存在,值为 nil

              var colors map[string]string

              var slice []int

              另外,结构体指针 slice 还可以象下面这样初始化,结构体实例不用明确地指定类型(使用了类型推导)、不用明确地取地址运算(&)。

              type Product struct {

              name string

              price float64

              }

              products := []*Product{{Spanner, 3.99}, {Wrench, 2.49}, {Screwdriver, 1.99}}

              看到没有,如果不经常总结,这一圈学下来会把你整的稀里糊涂的。

              二、多比较

              学一门新语言一定要与你之前已经熟悉的语言经常作比较,找出它们的相同与不同,这样才能加深记忆和理解,否则学完之后脑子里会一片混乱,搞不清谁是谁非了。

              就拿数组来说吧,在 Java、Scala、Go 中定义、实例化、赋值是不一样的。

              //Java

              int[] arr;//定义数组,不可以指定数组长度

              arr = new int[5];//创建数组对象(实例化),指定数组长度

              arr[1] = 8;//赋值

              //Scala

              val arr = new Array[Int](5) //数组在Scala里用的是泛型类,构造函数参数指定数组大小

              arr(1) = 8 //赋值,注意用的是括弧

              //Go

              arr := [5]int{} //创建数组,初始化5个元素都为0,注意如果不指定数组长度,则是另外一种类型Slice

              arr[1] = 8 //赋值

              再比如 Map 在 Scala 与 Go 语言里定义、初始化、访问也是不同的,作了以下比较后印象会非常深刻,把它们记下来,这样以后使用就不会搞混了。

              //Scala

              val capital = Map(France -> Paris, Japan -> Tokyo)

              println(capital.get(France))

              //Go

              capital := map[string]string{France: Paris, Japan: Tokyo}

              fmt.Println(capital[France])

              Go 同时给多个变量赋值在 Scala 里可以用模式匹配做到,如下:

              //Scala(使用样本类的模式匹配)

              case class Tao(name: String, age: Int);

              val Tao(myName, myAge) = Tao(taozs, 18);

              println(myName)

              println(myAge)

              //Go

              myName, myAge := taozs, 18

              fmt.Println(myName)

              fmt.Println(myAge)

              //Scala(使用元组的模式匹配)

              val (myNumber, myString) = (123, abe)

              println(myNumber)

              println(myString)

              //Go

              myNumber, myString := 123, abe

              fmt.Println(myNumber)

              fmt.Println(myString)

              以下是 Scala 和 Go 定义和实现函数的区别:

              //Scala

              val increase: Int => Int = (x: Int) => x + 1

              println(increase(8))

              //Go

              var increase func(int) int = func(x int) int { return x + 1 }

              fmt.Println(increase(8))

              除了在 Scala 和 Go 里都可以类型推导外,在 Scala 里还可以这样定义函数:

              //Scala

              val increase = (_: Int) + 1

              为方便自己将来随时查阅,可以建立下面这样的对比表格,描述不一定要求规范,自己能看懂就行。

              三、转变思维方式,

              学会用这门语言去思考

              学会用语言去思考是关键。如果你以前是学 C 的,转学 Java,你一定要改变以前面向过程的思维,学会用面向对象的思维去分析问题;以前学 Java 的,转学 Scala 则要学会用函数式的编程思维解决问题。

              举一个函数式编程的例子,以下是 Java 语言常用的 for 循环,循环变量从 1 到 10 执行 10 次循环体:

              // 命令式编程

              for (int i = 1; i < 10; i++) {

              // 此处是循环体做10次

              }

              这被称为命令式编程 (Imperative Programming),但学了 Scala 的函数式编程 (Functional Programming) 后,解决同样的问题,我们可以换一种思维:构建 1 到 10 的列表序列,针对列表中的`每个元素分别执行函数,如下:

              //函数式编程

              val autoList = (1 to 10).map(i => /*此处是函数体,针对1到10的每一个分别调用 1次*/)

              已经习惯了 Java 编程的,对 Scala 的函数式编程、样本类、模式匹配、不可变对象、隐式转换等需要一个逐步适应的过程,要渐渐学会用它们思考和解决问题。

              再举个 Scala 与 Go 思维方式不同的例子,要实现对一个字符串里的每个字符加 1 的操作,Scala 里可以这样:

              abc.map(cc => cc + 1)

              abc是一个字符串对象,调用它的方法 map,这是纯面向对象的思维,但在 Go 里就要转变为面向过程的思维:

              name := abc

              second := strings.Map(func(x rune) rune {

              return x + 1

              }, name)

              注意,这里的 strings 是包 (package),调用它的公共函数 Map,被人操作的对象 name 字符串作为函数参数传入。Go 提供的函数 len、cap、append、 等其实都是面向过程的,虽然 Go 也提供有面向对象的支持,已经习惯了面向对象编程的,刚开始学 Go 语言需要特别留意这一点。

              四、多看开源代码

              学一门语言就是学一种思维方式,如今 GitHub 上可下载的开源代码海量级,通过看别人的代码,学习别人是如何解决问题的,养成用该语言思考的习惯,另外还能学习到一些非常有用的技巧,比如我在看一个 Go 语言性能测试框架代码时看到有以下写法:

              func main() {

              defer profile.Start().Stop()

              ...

              }

              这个意思是指刚进入程序时执行 Start( ) 函数,程序退出前调用 Stop( ) 函数,非常好的技巧啊!可以用于需要在程序执行前和程序完成后分别执行一段逻辑的场景。再看 Start( ) 函数是怎么实现的:

              func Start(options ...func(*Profile)) interface {

              Stop()

              } {

              ...

              return &prof

              }

              该函数返回了一个实现了含有 Stop( ) 函数接口的对象,如此才能在调用 Start 调用后连调 Stop。

              五、优先学会使用代码分析工具

              代码分析的工具包括静态检查、测试、测试覆盖率分析、性能分析(内存、CPU)、调试工具等,工具的价值在于它可以有效帮我们发现代码问题,这在我们刚开始学一门编程语言时意义尤其重大。

              例如,以下这句 Java 赋值语句估计没有哪本教科书会告诉你有性能问题:

              String sb = new String(“Hello World”);

              以下这段 Java 代码你也不一定能意识到有多线程问题:

              synchronized public void send(authuserPacket pkt, Thread t, String flowNo) throws IOException

              {

              logger.info(start);

              //连接不可用,直接抛出异常,等待接收线程连接服务器成功

              if (!this.avaliable)

              {

              try

              {

              //如果连接不可用,则等待2S,然后重新检测

              Thread.sleep(2000);

              }

              ... ...

              如果我们及时用 FindBugs 工具检查就会发现上面这些问题,进而你会去分析研究为什么,如此,你对这门语言的了解也会越来越多。

              另外,Go 语言自带的 vet/test/cover/pprof/trace 都是非常有用的工具,一边学一边使用这些工具分析代码,能加深对语言的理解。

              六、多练习、多实践

              就象学自然语言一样,如果只知道语法不去练是没有任何效果的,只有反复地练习,慢慢才能变成自己的一项技能。书本上的例子代码最好能从头到尾亲自敲一遍,多运行、多尝试,另外再找一些题目来练习,如能有机会参与项目开发则更好啦,勤动手、勤实践是最好的学习方法。

              其它的方法还有:

              做好笔记,把学习中遇到的关键点和自己的思考记下来,便于后面复习和对比;

              复习,学习一定要重复、重复、再重复;

              学习贵在坚持,每天学一点(比如坚持每天学 1 小时),日积月累。


              本文原地址:
              郑重声明内容均来自互联网,如果侵犯了你的权利,请联系我们删除!

              标签: 讲解好不好十全十美

                        • 上一篇:孩子拼音老是学不会怎么办?
                          下一篇:孩子不想学钢琴了,怎么办啊?