如何学习一门语言

how to study a programming language

Posted by 宸笙 on June 28, 2018

缘由

毕业两年来接触了不同的语言,在入门之后和看了很多书之后也有了自己的思考,从第一门语言到工作中需要或是出于兴趣接触的其他语言,会加深对编码的理解和把握。

第一门语言

因为大学接触的第一门是C或C++,可能很多人的路线类似,计算机科班的课程使然。不过笔者觉得处于易学易上手可以使用Java这门静态的语言,如果为了写出简洁的代码的话,兼顾上手难度和语言灵活程度建议选Python。

这个过程中你可能第一次编写,编译或者直接执行脚本成功运行HelloWorld,后续就走上了持续进阶的道路,你会遇到:

  • 基础的变量,常量;
  • 数据类型,原生的或是包装类的;
  • 分支,循环,条件三大结构;
  • 一些语法switch或者一些语法糖foreach
  • 数组,哈希Map(关联数组),集合(元组Tuple),链表等数据结构;
  • 面向对象,那已经司空见惯了的封装继承多态;
  • 权限控制;
  • 抽象表述

    abstract class

    纯虚函数

    特质(trait)

    接口(interface)

    面向协议

  • IO流或文件操作Api,网络操作;
  • 多线程
  • 运行时类型识别–反射;
  • 优雅的写法–注解;
  • 动态语言的Duck Type;
  • 堆栈 or 队列;
  • 指针 or 引用;
  • 一些语言自带强特性,闭包,函数式,MapRedux,尾递归,科里化等;

学习过程

  1. 基本使用
  2. 项目运用
  3. 踩坑解决
  4. 加深理解
  5. Refactoring
  6. Effective Xxx
  7. Inside Language(such as JVM)

编程语言的套路(语言构造与Api)

  1. 变量与内存
  2. 数据类型–对变量类型的抽象
  3. 复合数据–数据结构
  4. 面向对象的世界
  5. 函数(方法)的地位
  6. 构造函数或析构函数
  7. 魔术方法(hook)
  8. 进程,线程和协程
  9. 同步 or 异步
  10. 访问权限控制
  11. 函数式
  12. 闭包和内部类
  13. 语言之下,编译器和解释器是如何执行你的代码的(编译原理)
  14. JVM系列语言
  15. Design Patterns

编程范式

面向对象

  1. 对象
  2. 函数
  3. 方法
  4. IOC
  5. AOP
  6. metaProgramming

小众语言

  1. via JVM

    Scala , Groovy , Kotlin

  2. others

    Ruby, Golang

快速迁移到其他语言(平台)

  1. 快速的举一反三和学习能力

语言背后的思路

  1. OO

    类,对象,方法继承与查找…

  2. 命令式 or 函数式
  3. Api和语法糖

一些技术栈

  1. 客户端
  2. 后端Web
  3. 中间件

例子:Look JS(ES6) And Python or more