【游戏编程扯淡精粹】如何学习编程语言

【游戏编程扯淡精粹】如何学习编程语言

文章目录

  • 【游戏编程扯淡精粹】如何学习编程语言
    • 如果你没有学过编程
    • 如果你只是想提升工作效率
    • 如果你想学习计算机科学与技术
    • 如果你已经是熟悉了一门编程语言
    • 如果你已经工作
    • 如果你想深入理解编程语言
    • 一门编程语言有什么
      • 内嵌语言(DSL)
      • 语法
      • 以Python为例
    • Python CheckList
      • 语法基础
      • 函数
      • 面向对象编程
      • 模块
      • 异常

如果你没有学过编程

学Python/Java

资料很多,问题容易找到回答

如果你只是想提升工作效率

比如你已经上班了,要处理一些Excel表格

但是你并不想学习编程,去成为程序员

那么学习Python,把Excel处理库熟悉即可

不要浪费时间去看C,去看Excel表的VBA

如果你想学习计算机科学与技术

学C,配合《CSAPP》

可以结合C++,从写C with class开始

C语言的规格应该完全掌握,因为这个集合很小,不像C++

比较复杂的关键字是static,学习时应该整理出所有用途

C的关键,不是C的语法(大概能占20%),而是《CSAPP》,理解计算机底层是如何运行的,怎么反应到C的层次上,通过C来控制计算机

如果你已经是熟悉了一门编程语言

你应该学习至少半打编程语言(6个)

覆盖大部分编程范式:

  1. 过程式编程
  2. 面向对象编程
  3. 函数式编程
  4. 声明式编程
  5. 并行编程

学习至少半打的编程语言。包括一种支持类抽象的语言(象Java 或C++),一种支持函数化抽象的语言(象Lisp或ML),一种支持语法抽象的语 言(象 Lisp),一种支持声明规格说明的语言(象Prolog或C++ 的模板),一种支持 共行程序(coroutine)的语言(象Icon或Scheme),一种支持并行的语言(象Sisal)。

作为辅助书籍,有《七周七语言》,含上下两册,一共十四种编程语言,这本书并不深,随便看看


我个人并没有学习全部,面向对象仍然是主流,其他几种语言可以作为补充

如果你已经工作

如果你已经是一个工作的程序员

精通一门语言是最基本的要求

所谓精通,就是要了解这门语言的所有角落和细节,了解每一样语言特性背后的权衡,知道如何用这门语言去解决各种问题

你可以从当前工作要用的语言入手,因为这样反馈最快

如果你想深入理解编程语言

最好不要这么做。。以我个人的经历,我认为收益很低

你应该专注于语言的运行时,这个可能对业务的性能提升有帮助

运行时首先要去阅读相关书籍,比如C#的《C# via CLR》,或者Lua的几篇论文

然后最好能看运行时源码,C#有开源实现,Lua本身是开源的


与运行时相对的是编译时,编译可以和运行时拆分,不影响运行时

编译唯一要解决的问题是编译慢,这里特指C++,编译优化可以单独作为一件事去做

C++服务编译耗时优化原理及实践


如果你是编程语言学的范畴,我不会

一门编程语言有什么

  • 语法
  • 标准库
  • 第三方库

内嵌语言(DSL)

  • Linq(C#)
  • 宏(C)

没有了解过Scheme的宏,暂不评价

语法

  • 基本数值类型(primitive type,numeric type):
    • 规格(精度,大小),默认值,cast,比较;实践中使用时,如何选择
  • 常用集合类型/数据结构:string,list,dict(因为常用所以缓存一下),这几个肯定单独去研究,而且肯定包含了集合的常用机制
  • 控制流:真的简单;condition的真假(每个语言不一样);switch注意一下(至于string是否慢,我觉得你可以不用考虑)
  • 函数:根据作用域不同,全局函数和类函数不一样;lambda自己有闭包,延迟,auto特性;重载resolve规则
  • 作用域:复杂,每个语言的分类机制不太一样;作用域还涉及dector
  • 模块机制:这个和项目也有关,所以很困难;项目文件管理,如何分文件夹,如何保证可以重构(移动文件位置);如何链接其他文件,包括自己的还有3rd party;如何保证3rd party的版本,配置
  • 类:继承机制,多继承,多态的方式;访问修饰符,挺复杂的,怎么指定规范,使得权限合适;
  • 修饰符:修饰符是为了配置某一语义,是语言的语法特性;一般一个一个作为主题,参考也方便
  • 语法糖:一个一个作为主题,参考方便;一般是与核心系统无关的
  • 类型系统/ data model
  • 内存管理,变量生命周期:
    • 有GC的话轻松不少,但是要知道变量生命周期的区别,保证不要出访问错误;
    • C/C++没有GC,指针很复杂,还要考虑前面的作用域

以Python为例

  • Tutorial:略;很大一部分都算入标准库
  • Lib Reference:
    • Built-in
  • Lang Reference:语法(sytax),语言要素
  • Introduction:略
  • Lexical analysis:keyword,literal,operator,(delimiter,id,这两个不太重要)
  • Data model:对象,值和类型,魔法方法,协程(竟然是dm)
  • Execution model:名字的绑定和决策(resolve;即scope)
  • The import system:略,比较琐碎
  • Expressions:operators(主要是基于op介绍exp)
  • Simple statements:exp,assign,其他单行细节的stats
  • Compound statements:控制流和函数,类的定义stats
  • Top-level components:dofile层面(内容很少)
  • Full Grammar specification:BNF
  • HOWTOs:高级主题
  • 安装,部署,C API:略

Python CheckList

语法基础

1.理解Python所有的数据类型及其方法与字面常量的表示。特别注意:
tuple与list的异同
字符串的多种字面常量,及各自用法
字符串中的转义及防转义,及其与C/C++的差异;

2.掌握Python的流程语句,包括赋值.条件.循环等。特别注意:
if/elif/else嵌套
while/else和for/else的用法,理清它们与一般语言的不同

3.Python表达式。特别注意:
value if cond else other的三段式表示
list comprehension
常用操作符的运算优先级,及其与C/C++的差异

函数

1.学习函数定义.参数传递.调用方式及返回值规则。特别注意:
没有显式返回值时的情况
list型及dict型的变长参数传递
参数默认值定义规则
2.理解嵌套函数及闭包的用法。
3.理解变量的作用域及生命周期(globals, locals)。
4.yield语句及Generator的使用。
5.熟悉Python官方的内置函数,如enumerate/eval/hasattr等

面向对象编程

1.类的定义及类的基本协议,如__init__/__str__等。
2.类的继承,多继承及super的用法,特别是多继承下super调用可能引起的特殊情况。
3.理解属性(property)的应用场合及本质
4.理解类命名空间及其访问规则。
5.理解类的动态性。
6.理解方法和函数的异同
7.类的静态方法.类方法及其与一般方法.函数的异同
8.理解命名空间及对象空间,及此模型与C/C++的模型差异。
9.循环引用产生,解环及无法解环时Python的处理方式。

模块

1.理解模块的本质是什么。
2.分清内置模块.标准模块及扩展模块的区别。
3.理解Python模块的加载机制。
4.熟悉Python官方提供的常用模块,如copy/types/os/random/re/gc等

异常

1.理解异常的使用方法及适用范围。
2.异常的栈展开原理
3.常见的异常类

你可能感兴趣的:(游戏编程扯淡精粹,编程语言)