erlang 新人学习推荐 -- 个人经验

如何入门学习erlang

  • 前言
  • 简单理解代码逻辑与语法
    • 1. 理解代码逻辑,初步的了解语法。
    • 2. 快速理解语言语法
    • 3. erlang特点介绍 -- 快速理解erlang如何运行
    • 4. 接触模板代码
    • 5. 学习模板编程
    • 6. 触类旁通
    • 7. 工欲善其事,必先利其器。

前言

  • erlang作为一门不算热门的语言,在很多学编程人的手里并非是“第一手选择”,尤其是java、python课程满天飞的今天,erlang作为一门”偏门“语言,可能在很多人刚入职的时候才刚刚上手学习。认识如何快速入门到erlang语言的开发,对于erlang语言学习和掌握速度进度具有极快的促进作用。
  • 学习一门新的语言,最直接的方式就是看该语言最经典的模板使用或者简单的源码。如何快速理解erlang,可以从下面一点一点理解。

简单理解代码逻辑与语法

1. 理解代码逻辑,初步的了解语法。

写出能不报错的函数、使用每一种结构例如record tuple map 等,理解了atom、list、变量的区别,这就算是简单的入门。有着编程基础的同学其实可以很快入手

2. 快速理解语言语法

网上寻找erlang语法总结,然后上手编程掌握。erlang在网上有着很多的总结文章,例如博客,笔记等。一般都会将最最常见的erlang语法以及基础的数据结构进行简单的介绍。 推荐网站erlang博客

3. erlang特点介绍 – 快速理解erlang如何运行

对于拥有java、c基础而没有python,shell等脚本语言经验的同学,可能一开始学习一门语言,有一点比较想理解:这个语言的程序入口在哪里
当然,这个问题是很重要的,因为这在其他语言中意味着逻辑的开始,debug的入口。不过在笔者初学erlang的时候,找不到erlang的程序入口,在学习之后才发现,erlang并没有传统意义上的”程序入口“。
erlang的运行方式与其他程序还是有一些区别的。当然,笔者学习的时间还很短,仅学了点皮毛,理解出现错误也很正常。但是我相信,我的理解,可以让一个初学者更加感同身受,所以我记了下来。
每个erlang的程序是运行在节点上的进程。通俗一点的理解就是,当你在window或者linux上通过erl指令调用出shell的时候,erlang的节点就已经运行了,这也就意味着,其实erlang程序入口,已经启动了。(没错这才是我启动的方式啊)
没错,和传统的其他语言不同。其他语言可能需要编写启动逻辑,监听逻辑等,才可以进行完美的程序运行。但是,erlang程序更能理解为,你在这个erlang节点上添加了你所编写的程序进程。你编写了一个模块,在编译后,你通过shell在节点里调用模块里的方法。如果方法有创建进程,则在erlang节点里创建了一个进程,一般这个进程会是无限loop的,节点不关闭,进程不死机(不异常)。
当然,进程的管理和启动也是有模板的,学了opt之后自然就懂了

4. 接触模板代码

  • 先拿到一个最简洁的模板,代码模板里包含了所有回调方法和start方法即可,在书中会教导如何添加逻辑,添加逻辑后跑通即可 这过程可以作为上一个语法学习的验证,通过代码验证最为准确,自己照着打一遍可以找到自己理解出错的地方
  • erlang语法初步拿起来了,虽然不是真正成为了Coder Master,至少也算拿起了自己的武器。这时候我们需要知道,这件武器可以为我们做什么。做游戏的应该明白,适当的时候给予奖励,能够保持学习的动力以及加深学习的效果。所以在初步进行shell编写erlang后,可以尝试理解一下erlang编写的模块代码。在这里推荐学习的是gen_server模块。对这个模块进行编程学习,可以快速得对erlang的进程、回调函数、消息发送接收等进行初步的了解
  • 在学习gen_server的时候,最简单有效的学习方法就是看书。erlang程序设计(第二版)中,有着最简单的gen_server实现模块,简单实现了一些功能。这种时候,能够自己对功能实现一下变种,通过能够跑通,对erlang程序的理解大有帮助。

5. 学习模板编程

到了这一步,相信一个打了一点基础的erlang coder已经能够对自己用erlang编写简单的模块代码具有自信了!这种时候,最好寻找一位导师、或者一位erlang资深爱好者(愿意指导)的人阅读你的代码,同时指出你的代码里出现的问题,最好顺便考察一下对模块的使用理解。因为对模块的使用不代表对模块的使用理解。这里推荐的考察问题包括但不限于

  • 你编写的进程是维护在gen_server模块还是维护在自己的模块
  • gen_server模块与被-behaviour(gen_server)的模块有着什么关系
  • gen_server是如何调用回调函数的
  • 为什么要使用回调函数的方式
  • 3种handle有什么区别
  • 普通模块方法调用与gen_server的回调函数调用最大的区别是什么
  • 同步和异步分别会导致什么问题
  • 什么情况下你分裂出一个进程来进行函数处理、而什么时候是通过mod:fun的方式函数处理
  • 对State字段的操作以及在gen_server behaviour 中所起到的作用

6. 触类旁通

初步会用gen_server后,相信你以及基本理解了erlang程序的编写与使用,下面就是触类旁通的时候了
我一向认为学习最好的方法就是在实践中学习。在上一步学习模板编程中你可能接触到了一些方面没学过的知识,没关系,你可以通过看书,或者上网找到相关的学习方法,当然可能你接触到的更多,没写的是以为我没想到

  • list的操作 --list添加,删除、批量操作、获取元素、添加元素等一系列基本list操作 以及fun匿名函数的使用方法等
  • binary的最简单操作 --最简单的操作莫过于网上找到一段简单的处理2个参数的binary操作方法,可以尝试通过原理做出一个可变参数的binary编码解码函数
  • if case 等方法的使用 --进行最基础的逻辑判断
  • 数据对比 --大于等于小于等大小判断以及 和或与 等逻辑判断
  • tuple 、record 、map 操作 --赋值 获值 值传递 等
  • 预定义,注释, 函数 模块引用 , 进程字典
  • dets ets 操作方式

7. 工欲善其事,必先利其器。

基础的武器拿到手了,也学会了如何打怪。接下来的升级才是需要重视的部分。这个时候再去投入书中的学习,效果会更好。因为一个毫无基础的人按着课本学习,这算是对编程的预习。这种时候很难每一个知识点都通过编写程序加深记忆,因为书本上的知识较多较精细。同时在没有实践印证的情况下很容易会被遗忘。而因为有着一点点基础(初学者)的人,看到了自己使用过的知识点,能够在脑海中回顾并进行对比,起到的是复习的效果,这种时候能够加深对所学东西的印象,在接触未用到的知识点,也会有醍醐灌顶的感觉(为什么之前我不知道,之前知道这么用能编程更方便;这个方法思路很新奇,是我没想到的),而没基础的人只能(啊,我都没学过,什么知识都是不懂的,所以都记下来把)。对比之下效果就显露出来了。
当然上面并不是必先利其器的部分,利其器的部分其实是–找时间具体学习一下erlang书中的知识,并且对之进行记录掌握。最好还是先找自己用过的模块,方法进行查看和理解,之后再触类旁通学习其他知识点,通过写代码学习其他模块 重点是需要进行代码编写进行验证,否则效果不会很好。当然看书的话找dalao给你推荐书籍,我就算了

你可能感兴趣的:(erlang)