如何开始学习编程? 最近有几个朋友私信问我如何学编程 。 我上知乎基本就是随便写点代码来着 , 这种误人子弟的问题我真的不敢乱说 。 也罢 , 找个问题随便谈谈吧 , 聊胜于无 。 千万不要当真 。
我觉得SICP作为第一本编程书非常合适 。 SICP可以让我们从零开始建立起整个对于程序语言和程序语言如何被解释的粗浅认识 。
知道什么是数据 , 数据结构如何用一个小小的cons组织起来 , 什么是过程 , 过程可以接受过程做参数并且返回过程 , 还有和解释器息息相关的囿变量、自由变量、环境 , 等等这些重要的概念 。
然后我们需要接触机器相关的知识了 。 我建议学汇编 。 8086汇编就行了(硬核的话 , 或许可以学PDP-6汇编) 。 注意一开始从最基础的move , add , lea开始 。
然后引入栈的push和pop指令 , 有了栈就可以很方便的复用过程了 。 栈一定要好好理解 , 这是过程在机器里面如何抽象的关键 。 然后引入call和ret两个语法糖 。 学会汇编写二叉树就够了 。
因为用汇编写二叉树 , 一大堆dword , lea , 肯定迷糊死了 。 这个时候可以上C语言了 。 看TCPL就行 , 简单了解C语法就够了 。
C语言有指针和int等基础类型 , 用C写一遍二叉树 , 明显能体会到类型的好处 。 另外 , C是汇编语言的又一层抽象 , 这里可以结合SICP里的数据抽象和过程抽象好好理解 , C到底是怎么抽象汇编的 。
写过一些C之后 , 了解类型的好处了 。 这个时候可以看TAPL 。 结合SICP就知道scheme基本上就是λNB的少糖形式 。 TAPL也是SICP这种从零开始逐渐复杂的结构 , 非常适合萌新看 。 完全弄懂λ cube和subtype就够了 。 TAPL里面还有很多细节 , 萌新看的时候可以忽略 。
到这 , 编程基本上就入门了 。 对机器底层感兴趣的去学体系结构;对数据结构和算法感兴趣的去打ACM;对PLT感兴趣的继续看ATTAPL , SF;对钱感兴趣的忍着自己对C++语法的恶心去学C++;对John McCarthy感兴趣的去学ML , 等等 。 安排的明明白白 。
想学编程怎么开始 熟悉以下关键东西 , 可以边学边做 , 定期训练 , 经常思考 , 长期积累:
1、语法 。
2、基础理论(数学、数据结构、算法等) 。
3、设计方法(编程原则、设计模式、框架设计等) 。
4、库(核心、基础、UI、扩展、游戏引擎等) 。
5、计算机相关(操作系统、网络、图形学等) 。
6、领域知识(游戏设计、网站设计等) 。
7、开发工具(编辑器、IDE、自动部署等) 。
8、项目管理(进度管理、分工协作、Bug管理、版本控制等) 。
最普遍也是最重要的能力:创造力 。 努力分析并理解好做什么以及怎么做 。 要知道上面那些东西一开始都是不存在的 。
具体方法包括:
1、快速阅读入门教程和书籍 , 适合学习语言和基础库 。 比如我学Java读的《Java编程思想》 , 练习题做过一点 , 然后学ActionScript就没读过书 , 只读过Adobe官方文档《ActionScript 3.0编程》 。
2、阅读库的文档、实例、源码 。 比如Flash、Flex开发 , 熟悉官方API很重要 , 很多细节要具体使用时才注意到 , 这时候最好做个笔记 , 虽然我从没看过我的笔记 。
3、做一个自己感兴趣或熟悉的小项目 , 比如我就以黑白棋游戏作为多个语言的试水项目 , 一样的逻辑 , 便于把关注点放在语言特点上 。
4、自己动手丰衣足食 。 厨师有菜谱 , 程序员可没菜谱 。 比如我做游戏 , 最关键的游戏编程知识全部是动手学出来的 , 很少有专门针对某个业务领域(如游戏)的编程书籍 , 要么是入门书 , 要么是模式书(如算法)、理论书(图形学) , 很少有书籍教你如何开发一个45度角地图系统加编辑器的 , 全靠自己思考 , 以及看前人的代码 , 需要时找些网络资料 。 关键是 , 可以培养最重要的创造力 。
推荐阅读
- 学习知识|孩子学习不好家长如何教导
- 学习知识|三岁小孩不听话如何教育,3岁孩子不达目的一直哭闹
- 学习知识|如何查询体育中考成绩,2021中考体育成绩查询
- 学习知识|如何快速学习拼音
- 娱乐知识|宝哥是谁,扒爷说的宝哥是谁
- 娱乐知识|jojo是谁,jojo全人物实力排名
- 娱乐知识|我是谁表情包,猜猜我是谁黑影图片
- np 娱乐知识|是谁杀了我,是谁杀了我?
- 娱乐知识|小霸王是谁,有几个人有小霸王外号
- 娱乐知识|是谁嗯嗯在我的头上,是谁嗯嗯在我的头上书籍