读《半小时漫画计算机》最后一章有感
当前环境下,面临着各种计算机语言的崛起,学习其中的编程概念,在后期学习不同语言时,更得心应手
1.面向对象
比如封装、继承、多态、Prototype、Mixin、Traits、Duck Typing等,这些概念在每个语言都一样,只是语法层面有所不同
2.函数式编程
需要搞明白高阶函数、闭包、惰性求值、递归、不可变状态、无副作用这些概念
3.元编程
Java的动态代理,CgLib这些工具初步具备了元编程的能力,可以在运行创建新的类;而Ruby、Python的开放性让他们的元编程强一些,但是想要真正地理解元编程,害得去看Lisp的宏,尤其是,你要感受到代码即数据的强大力量
4.并发模式
Java主要是对线程做支持,还要学习其他并发模型,比如:Python有协程,Go有Go routine,Erlang采用的是Actor,在这些并发模型中,害得考虑同步和互斥、锁、死锁、软件食物内存等技术
5.虚拟机和垃圾回收
现在很多编程语言都是通过虚拟机来执行的,理解了虚拟机的实现,就能非常透测地理解编程语言,为了解放程序员,垃圾回收几乎成为编程语言的标配,你一定得了解!而JVM垃圾回收是个集大成者,可以它为突破口
6.静态类型、动态类型和类型推导
静态类型的语言:在编译期就能确定类型,编译器能帮忙发现错误,做些优化,但是会增加代码量
动态类型:是在运行期间确定类型,非常灵活,但是在运行期才能发现错误,所谓“动态一时爽,重构火葬场”。如Javascprit是动态执行的解释型语言
类型推导:Java10就引入了
7.抽象语法树
几乎所有主流编程语言,都要转换成AST这个形态,有些语言还可以对AST做一些操作
8.指针
指针是C语言的精华,虽然现在的Java、Python、Ruby等编程语言已经把指针干掉了,但是理解指针对理解计算机的底层运作有很大好处