最好直接用英文教程,减少翻译书信息损耗
尽可能多的获取每个层级的信息
推动力:每天不停地编码
编程直觉
编程能力提高的速度
- 能力公式
- X = 用于思考解决方案的时间
- Y = 用于实现代码的时间
- 编程能力 = F(X, Y) (X>Y)
- 要想提高编程能力,就得优化 X,Y 与函数 F(X, Y)
- 编程能力飞跃
- 反思自己曾经写过的程序,去思考程序为什么 (Why) 要这样设计?,思考怎样 (How) 写出更好的程序?
- 现有的库做不到的事 记住库和语法并不会教你如何解决编程问题
- 编程思想
- 探寻理解编程的本质:利用计算机解决问题
- 最重要的通用方法:why(为啥这么做、为啥会出故障)、How
- 复杂庞大问题的解决之道(处理流程) 思考问题以及用代码解决问题的方式 如何将问题抽象并且分解
实践与项目实践
- 积累了一定的代码量
- 练手:从 Mega Project List 中选取自己喜欢的项目。
- 能写点小程序 具体的技术,诸如 Web 开发 开始一些简单的项目,诸如搭建一个网站并维护它
- 参与开源项目
理论
自底向上的打基础 拾起那些最基础的部分
算法思想
语法
系统基础
- 理解操作系统层级的一些原理
- 底层的视角思考问题:学 C 语言-
- 「迭代」与「递归」的概念
初级阶段:整体框架 自顶而下的探索 对编程也有了一定的了解 重要概念和范式 数据结构与算法 测试与调试 最新的一些科技成果
- [MIT 6.00.1x麻省理工:计算机科学和 Python 编程导论
- Harvard CS50x
- 哈佛大学:计算机科学
- 《编码》
- Python 教程
能力进阶:逐步建立起一个自己的程序设计模型 开始写小项目 - Structure and Interpretation of Computer Programs (SICP):编程能力 = F(X, Y) Scheme 函数式编程
- 《计算机程序的构造和解释》
- SICP辅助资源:
- Udacity CS212 Design of Computer Program Google 研究主管 Peter Norvig 主讲,教学语言为 Python,内容有一定难度。
-
[HtDP How to Design Programs, Second Edition](http://www.ccs.neu.edu/home/matthias/HtDP2e/Draft/index.html):起点比SICP低,书中的内容循循善诱,对初学者很友好,如果觉得完成SICP过于困难,可以考虑先读一读 HtDP。 - UC Berkeley SICP 授课视频以及 SICP 的两位作者给 Hewlett-Packard 公司员工培训时的录像中文化项目
- Composing Programs:继承了SICP思想,但使用Python作为教学语言的编程导论(其中包含了一些小项目)
- SICP 解题集:对于书后的习题,作为初学者应尽力并量力完成。
- 比SICP更轻松的路径-
- The Elements of Computing Systems从最基本的 Nand 门开始构建计算机,直到俄罗斯方块在计算机上运行。
- 具体内容
- 贯穿你的整个编程入门阶段
- 坚持完成书中所有项目
- 包括一个最简的编译器与操作系统
- The Elements of Computing Systems从最基本的 Nand 门开始构建计算机,直到俄罗斯方块在计算机上运行。
打好根基
厚积薄发
Computer Systems: A Programmer’s Perspective, 3/E《深入理解计算机系统》
计算机科学的脉络
程序设计的基础
CMU 的「计算机系统导论」的教材
程序在计算机中如何执行
计算机系统内部实现的诸多细节
Coursera 上的 MOOC: The Hardware/Software Interface,这门课的内容是 CSAPP 的一个子集,但是最经典的实验部分都移植过来了。同时,可以看看 The C Programming Language,回顾一下C语言的知识
系统基础
学习操作系统,编译器,计算机网络等内容的先决条件
编程实现其中的例子
更高级的系统
经手的代码,从上层设计到底层实现都了然于胸
回放数据在网络->内存->缓存->CPU 的流向
这个问题用什么算法和数据结构能更快解决
流程
对常见的数据结构和算法
对你不懂的数据结构和算法,你要去搜它主要拿来干嘛的,使用场景是什么
《算法导论》
读第一遍的时候跳过习题和证明
《数据结构与算法分析》
Algorithms: Design and Analysis [Part 1] & [Part 2]: Stanford 开的算法课,不限定语言,两个部分跟下来算法基础基本就有了;如果英文不过关:麻省理工学院:算法导论
注意培养使用常规算法解决小规模问题的能力
《编程珠玑》,《程序设计实践 》
The Pragmatic Programmer
「干净」的脚本语言 Python, 传统的命令式语言 C, 以及浪漫的函数式语言 Scheme
美而雅的 Ruby 小姑娘,Hindley-Milner 语言家族的掌中宝 Haskell 都是不错的选择。至于 C++ ,喜欢的话学学也无妨。
写一个编译器。要想真正理解编程语言,你必须亲自实现一个。
至少实现一个简单的解释器
《程序设计语言-实践之路》:CMU 编程语言原理的教材,程序语言入门书
会极大扩展你的眼界,拉开你与普通人的差距
Programming Languages:课堂上你能接触到极端 FP (函数式)的 SML,中性偏 FP 的 Racket,以及极端 OOP 面向对象的 Ruby,并学会问题的 FP 分解 vs OOP 分解、ML 的模式匹配、Lisp 宏、不变性与可变性、解释器的实现原理等,让你在将来学习新语言时更加轻松并写出更好的程序。
Udacity CS262 Programming Language:热热身,教你写一个简单的浏览器——其实就是一个 JavaScript 和 HTML 的解释器
用Python写一个 Scheme Interpreter
学会提问
学习中肯定会遇到问题,应该学会正确的使用搜索引擎
去 Stack Overflow 或知乎提问
尝试在 CoCode 与他人交流想法
订阅自己喜欢的编程类博客,推荐几个供你参考:Joel on Software, Peter Norvig, Coding Horror
不是几个星期就能完成的小项目。期间你还会遇到无数的困难,当你碰壁时试着尝试「费曼」技巧:将难点分而化之,切成小知识块,再逐个对付,之后通过向别人清楚地解说来检验自己是否真的理解
依旧会有你解决不了的问题,这时候不要强迫自己——很多时候当你之后回过头来再看这个问题时,一切豁然开朗。
Code Complete:不管是对于经验丰富的程序员还是对于那些没有受过太多的正规训练的新手程序员,此书都能用来填补自己的知识缺陷。对于入门阶段的新手们,可以重点看看涉及变量名,测试,个人性格的章节。
The Pragmatic Programmer :有人称这本书为代码小全:从 DRY 到 KISS,从做人到做程序员均有涉及。
have a broad enough background
your experience with practical projects
Theory and practice combine
choose good solutions in particular situations
do this continuously
Pragmatic Programmers get the job done, and do it well.
The Pragmatic Bookshelf
非计算机专业,计算机如何入门? - 浪无痕
我只想成为一名合格的程序员
知乎《编程入门指南v1.3》思维导图
怎么成为一个优秀的程序员,而不是一个优秀的码农?
计算机本科应届毕业生要有怎样的能力才算比较好的?
想进入微软,本科该如何努力?
大四学生,想通过两到三年的积累去Google工作,请问应如何准备?
我觉得你得先找到一个技术方向,树立一个以此技术方向为首要目标的原则,做好这个方面的事情,对这个方面的所有技术细节都务求深入了解。然后呢
文科生如何转行当程序员?
找一本《计算机导论》类的书籍看看,了解一下行业大致情况
去维基百科翻一下历年图灵奖得奖情况,粗略了解一下行业历史.
有哪些适合程序员读的人文书籍?
在学习编程的过程中如何权衡寻求方法工具和埋头苦干?
新手关于如何看编程经典书的一些疑惑?
计算机方面的经典书籍,不做或少做习题会对学习效果造成多大影响呢?
有哪些老鸟程序员知道而新手不知道的小技巧?
改bug是程序员的任务里比较低贱的工作内容吗?
如何辨别一个程序员水平的高低?
如何去学习程序员的三大浪漫,编译原理,图形学,操作系统?
数据库、操作系统、编译原理应该以怎样的的顺序学习?
如何在六个月的时间内完成一个简单的操作系统,应该要学些什么?
计算机系大四学生如何在六个月的时间内完成一个编译器?要学些什么?
算法到底应该怎么学?
WEB 开发还有前途吗?
嵌入式开发还有前途吗?