序
来源于对码农翻身这篇文章的思考,希望能够一直记录自己学习的过程与收获,详见两年,我学会了所有的编程语言!_码农翻身的博客-CSDN博客
概念一、面向对象
比如说封装、继承、多态,Prototype,mixin,Traits,这些概念在每种语言都一样,仅仅是语法层面有所区分。
概念二、函数式编程
需要弄清楚高阶函数、闭包、惰性求值、递归、不可变状态、无副作用这些概念。
概念三、元编程
Java的动态代理,CgLib这些工具初步具备了元编程的能力,可以在运行时创建类;而Ruby、Python的开放性则给了他们更强的能力,可以在运行时修改现有类,但是想要真正的理解元编程,还得去看Lisp的宏。感受到:代码即数据的强大力量。
概念四、并发模型
Java中主要支持多线程,Python有协程,Go有Go routine,Erlang采用的是Actor。并发模型中,我们需要考虑同步与互斥、锁、死锁、软件事物内存等技术。
4.1 Go routine
对于go语言的go routine来说,可以基于操作系统的内核线程提供多个协程,下图的G就是一种go对协程的实现,可使用多种调度策略,包括:复用线程、利用并行、抢占、全局G队列。
协程之间可以通过通道channel来传递数据,比如将协程1的某个输出的变量传递给协程2进行处理。
概念五、虚拟机和垃圾回收
当代的编程语言很多通过虚拟机来执行,而且垃圾回收也成为了编程语言的标配,JVM垃圾回收则是1个集大成者。
概念六、静态类型、动态类型、类型推导
静态类型的语言在编译器就能确定类型,编译器可以提前发现错误,但是会增加代码量;
动态类型则是在运行期确定类型,非常灵活,发现问题的时机就等到了运行期。
概念七、抽象语法树(AST)
几乎所有的主流编程语言都要转换成AST这么一个形式,有些语言还可以对AST做一些操作。
概念八、指针
指针是C语言的精华,我们仍需要了解指针从而对计算机的底层运行机制加深理解。
概念九、零碎的各种
错误处理
泛型
同步异步
序列化