如何掌握一门计算机语言
如何掌握一门计算机语言
已经学的或者正在学的语言比较多,有 c/c++, python, matlab, java, go, lua, javascript。想总结一些共性出来,方便自己在多语言之间切换。
代码的基本要素
计算机语言与自然语言很相近,首先从最基本的要素开始,也就是变量、常量、算数运算 & 逻辑运算。
说到计算机,就离不开冯·诺依曼提出的计算机结构,程序存储 & 顺序执行,变量实际上是一种存储的方式,而算数运算 & 逻辑运算则是指令,逻辑控制语句决定下一步如何执行。
代码也是逐渐复杂的过程,先是单个变量,然后做变量之间的算数运算 & 逻辑运算,接着是变量之间的转换。了解上述内容后,基本就可以写出一句完整的代码了。
多行代码之间的关系是什么呢?是一起执行,还是并行执行呢?这就涉及到逻辑控制,也就是 if, switch 等语句,他们可以根据逻辑运算的结果,决定执行哪些语句。
代码复用,有时候一段代码要运行很多次,并且具有明显的循环结构,那么就可以用 for, while, break 等语句完成循环的控制。另外一种,代码实现了一种完善的功能,可以封装为一个函数,函数其实就是把多行代码压缩为一行代码,并且起了一个独特的名字,这样每次只要喊一下它的名字,就会把那些代码执行一遍。
多文件是另一种复用方式。代码太多了,或者说函数之间有明显的关联关系,我们就会把他们放到一个文件中。那么此时就会引入一些问题,比如如何引入这些文件,如何调用之前的函数?在 c 语言中会引入一个头文件,然后就可以使用之前定义的函数了;在 python 中叫做模块,引入后可以复用。
文件内的代码也会有一定的组织形式。比如 c 语言的单个文件是很多函数,而 matlab 的单个文件是一个函数。为了只暴露接口隐藏数据,引入面向对象编程思想,将一个文件内的代码用类组织起来,使用起来会更方便,如 c++,java,go,python。所以封装层次是函数的,一般叫做面向过程;封装层次是类的,一般叫做面向对象。
使用轮子解决实际问题
至此,写代码的能力已经有了,处理问题的能力还差点。写出来的代码最好可以复用,所以我们有了很多轮子,也就是库。这些库通过上述多文件的方式引入到自己的代码中,一般而言,互联网会关注下述库:
  • 文件解析与处理,如纯文本、办公三件套、多媒体
  • 跨语言数据,如 protobuf,thrift, json, xml
  • 网络协议(或网络应用协议)处理,如 tcp/udp, http, rpc
  • 与数据存储的交互,如 mysql、mongdb, redis,
  • 与中间件的交互,如消息系统、配置中心、密钥系统、监控平台
  • 用户交互,如图形绘制
嵌入式可能会关注下述库:
  • 多任务管理,有无多任务框架,实时的还是非实时的
  • 中断管理,有无中断管理
  • 驱动库,最好能支持大部分外设