简介

这个章节会是我对于如何学习一门语言的方法论的探索, 也是我面临着要学习从来没有接触的语言scala的过程的记录(并不是完全陌生, 有着Java的底子在, 而scala是个同样运行在JVM上的语言)

学习的过程

我们需要掌握哪些知识可以说我们“学会”了, 又用什么标准来衡量我们已经”掌握“了, 可以迈向下一个阶段, 如果你要学习一门语言, 你可以使用下面的阶段清单来去评估自己所处的阶段和去补足自己

特性熟悉阶段

我在这部分试图给出来一个完整的check list供查漏补缺, 但是这些只是一些不同语言基本都会提供的共性部分, 每个语言都会有自己的差异化的特性, 这部分的特性需要自己查找官方的文档来去补充(这部分的核心特征往往会是这个语言存在的理由)

推荐的资料

  1. 官方的文档: 官方往往会提供一个简明但是又足够概括核心特性的教程

这个阶段你需要知道

  • 语言的基本运行环境

    • 运行起来这个语言需要的基本的环境
  • 基本的语法

    • 类型的详细信息(强弱类型, 基本类型, 引用类型, 占用大小, 如何声明等)
      • 类型推断
      • 类型转换, 隐式转换的规则
    • 运算符
    • 函数
    • 分支控制语法
    • OOP(如果是只面向过程的语言也可以进行检查, 实际上OOP的思想往往也会有在面向过程语言体现出来(比如C语言同样能实现struct继承), 毕竟解耦合的需求无关编程范式)
      • 继承, 多态的语法
      • 抽象类
      • 接口(纯虚类), 这部分的命名因语言而异
    • OPP(现代编程语言中往往会提供函数式编程的额外的特性, 极大地加强了灵活性和可读性, OPP和OOP并不是冲突或者说有高下之分的)
      • lambda表达式
      • else(看具体的语言提供的内容)
    • 错误机制
      • 抛出错误
      • 捕获错误
      • 自定义错误类型
    • I/O
      • 文件I/O
      • 网络I/O
    • 包管理机制

工程化的基础

这个阶段的知识往往是搭建大型应用的时候需要掌握的知识

推荐的资料:

  1. 官方的进阶的资料, 一般来说官方同样会提供进阶的教程, 这些内容基本都是一定会被涉及的
  2. 以这门语言为名字的书籍(一般来说这种教科书性质的书籍都包括下面的内容, 除了测试框架)
  • 主流的测试框架
  • 标准库的使用(Std lib)
    • 集合
    • Map
    • 迭代器
  • 并发编程
    • 内存模型 (在JVM语言里是JMM, 而C等编译型语言往往是直接是操作系统的内存模型)
    • 锁类
    • 原子类
    • 线程(进程/协程)完整的生命周期管理
    • 并发安全集合类
    • 池化技术(线程池等)
    • 内存屏障
    • else
  • 包管理工具
  • 项目管理工具

框架

这部分的内容往往是要视工作内容而定, 将其归为”语言学习“是出于这部分的check list的完整性, 毕竟很少不用框架只做原生开发的工作内容, 但是实际上里面并不是所有的内容都需要掌握, 下面会按框架的种类进行分类

学习资料:

  1. 框架自身的文档, 一般来说能直接搜到, 从下面的这几个方面入手搜就行
  • Web框架: Spring MVC, Django..
  • 通用框架: Spring, vue, react
  • ORM框架: Mybatis, Django…
  • 脚手架框架: Spring Boot

深入了解

这里我们需要深入了解这门语言, 最终的目的是帮助我们写出高质量的符合这个语言特性的代码

  • 源码
    • 集合等容器的源码
    • 并发编程中的各个部分的源码
    • I/O部分的源码
  • 语言从源码到最后的运行状态之间的过程
    • 编译
    • 加载
    • 链接
    • 运行
  • 语言的运行时
    • 虚拟机(有的话)
    • GC
    • 没有GC的话, 内存管理机制
  • 推荐的编程范式

限于笔者水平, 别的等后续拓展, 其中还需要说明的是关于框架的深入学习, 我这里认为那已经是个额外的命题了, 过于脱离“语言学习”本身的范畴