http://zhuanlan.zhihu.com/xiao-jing-mo/19959253
【finish】“启蒙”部分之前的内容,中英、视频全都认真看完。
“启蒙部分”:
①【jump】已经学会一门语言的可以跳过 Learn Python The Hard Way 。②【jump】计算机专业学生可以跳过 MIT 计算机导论课。
③ 【wait】 Harvard CS50有利于 激发学习计算机的兴趣。
④ 支线任务:【wait】
- 阅读《编码的奥秘》
- 完成《C语言编程》
- [可选] 如果你的目标是成为一名 Hacker:阅读 Hacker's Delight
“入门”部分
SICP是一本「入门书」,但对于初学者还是有一定的难度,以下是一些十分有用的辅助资源:- Udacity CS212 Design of Computer Program): 由上文提到的Google研究主管Peter Norvig 主讲,教学语言为 Python,内容有一定难度。
- How to Design Programs, Second Edition:HtDP的起点比SICP低,书中的内容循循善诱,对初学者很友好,如果觉得完成SICP过于困难,可以考虑先读一读HtDP。
- UC Berkeley SICP授课视频以及 SICP 的两位作者给 Hewlett-Packard 公司员工培训时的录像(中文化项目)
- Composing Programs:一个继承了SICP思想但使用Python作为教学语言的编程导论(其中包含了一些小项目)
- SICP 解题集:对于书后的习题,作为初学者应尽力并量力完成。
为了完全搞定这本书,为了继续打好根基。为了将来的厚积薄发,在下面这几个方面你还要做足功课(注意:下面的内容没有绝对意义上的先后顺序):
Ⅰ《深入理解计算机系统》同时,可以看看 The C Programming Language
完成这本书后,是时候去接触 UNIX 哲学了: KISS - Keep it Simple, Stupid. 在实践中,这意味着你要开始熟悉命令行界面,配置文件。并且在开发中逐渐脱离之前使用的IDE,学会使用Vim或Emacs(或者最好两者都去尝试)。
- 阅读《UNIX编程艺术 》
- 折腾你的 UN*X 系统
Ⅱ 数据结构与算法
- 《算法导论 》:有人说别把这本书当入门书,这本书本来就不是入门书嘛,虽说书名是 Introduction to Algorithms,这只不过是因为作者不想把这本书与其他书搞重名罢了。当然,也不是没办法拿此书入门,读第一遍的时候跳过习题和证明就行了嘛,如果还觉得心虚先看看这本《数据结构与算法分析》
- Coursera Algorithms: Design and Analysis [Part 1] & [Part 2]: Stanford 开的算法课,不限定语言,两个部分跟下来算法基础基本就有了;英语没过关的:麻省理工学院公开课:算法导论
Ⅲ 编程语言
仅仅是接触远远不够,你还需要不断继续加深与他们的友谊,并尝试结交新朋友,美而雅的 Ruby 小姑娘,Hindley-Milner 语言家族的掌中宝 Haskell 都是不错的选择。但有这么一位你躲不开的,必须得认识的大伙伴 — C++,你得做好与他深交的准备:- 入门:C++ Primer
- [可选] 进阶:
- 高效使用:Effective C++
- 深入了解:《深度探索C++对象模型》;C++Templates
- 研究反思:The Design and Evolution of C++ ;对于C++这个 Necessary Evil ,看这本书可以让你选择是成为守夜人还是守日人。
- 《程序设计语言-实践之路》:CMU编程语言原理的教材,程序语言入门书,现在就可以看,会极大扩展你的眼界,拉开你与普通人的差距。
- Coursera 编程语言MOOC:课堂上你能接触到极端FP(函数式)的SML,中性偏FP的Racket,以及极端OOP(面向对象)的Ruby,并学会问题的FP分解 vs OOP分解、ML的模式匹配、Lisp宏、不变性与可变性、解释器的实现原理等,让你在将来学习新语言时更加轻松并写出更好的程序。
- Udacity CS262 Programming Language:热热身,教你写一个简单的浏览器——其实就是一个javascript和html的解释器,完成后的成品还是很有趣的;接下来,试着完成一个之前在SICP部分提到过的项目:用Python写一个 Scheme Interpreter
Ⅳ 其他
编程入门阶段比较容易忽视的几点:- 学好英语:英语是你获取高质量学习资源的主要工具,但在入门阶段,所看的那些翻译书信息损耗也没那么严重,以你自己情况权衡吧。此外英语的重要性更体现在沟通交流上,Linus Torvalds一个芬兰人,一口流利的英语一直是他招募开发者为Linux干活的的法宝,这是你的榜样。
- 学会提问:学习中肯定会遇到问题,首先应该学会搜索引擎的「高级搜索」,当单靠检索无法解决问题时,去Stack Overflow 或知乎 提问,提问前读读这篇文章:What have you tried?
- 不要做一匹独狼:尝试搭建一个像这样简单的个人网站,不要只是一个孤零零的About页面,去学习 Markdown 与 LaTeX,试着在Blog上记录自己的想法,并订阅自己喜欢的编程类博客。推荐几个供你参考:Joel on Software, Peter Norvig, Coding Horror
“小结”部分
不要局限于上文提到的那些材料,还有一些值得在入门阶段以及将来的提升阶段反复阅读的书籍。这里不得不提到在 stackoverflow 上票选得出的程序员必读书单中,排在前两位的两本书:Code Complete :不管是对于经验丰富的程序员还是对于那些没有受过太多的正规训练的新手程序员,此书都能用来填补自己的知识缺陷。对于入门阶段的新手们,可以重点看看涉及变量名,测试,个人性格的章节。
The Pragmatic Programmer : 程序员入门书,终极书。有人称这本书为代码小全:从 DRY 到 KISS,从做人到做程序员,这本书教给了你一切,你所需的只是遵循书上的指导。
这本书的作者 Dave ,在书中开篇留了这样一段话:
You’re a Pragmatic Programmer. You aren’t wedded to any particular technology, but you have a broad enough background in the science, and your experience with practical projects allows you to choose good solutions in particular situations.Theory and practice combine to make you strong. You adjust your approach to suit the current circumstances and environment. And you do this continuously as the work progresses. Pragmatic Programmers get the job done, and do it well.
这段话以及他创立的 The Pragmatic Bookshelf 一直以来都积极地影响着我,因此这篇指南我也尽量贯彻了这个思想,引导并希望你们成为一名真正的 Pragmatic Programmer 。
【end】