电脑编程好学不,学电脑编程好学吗( 四 )


完成这本书后 , 你会具备坚实的系统基础 , 也具有了学习操作系统 , 编译器 , 计算机网络等内容的先决条件 。当学习更高级的系统内容时 , 翻阅一下此书的相应章节 , 同时编程实现其中的例子 , 一定会对书本上的理论具有更加感性的认识 , 真正做到经手的代码 , 从上层设计到底层实现都了然于胸 , 并能在脑中回放数据在网络->内存->缓存->CPU的流向 。
此外 , 也是时候去接触 UNIX 哲学了: KISS - Keep it Simple, Stupid. 在实践中 , 这意味着你要开始熟悉命令行界面 , 配置文件 。并且在开发中逐渐脱离之前使用的IDE , 学会使用Vim或Emacs(或者最好两者都去尝试) 。
阅读 《UNIX编程环境 》
阅读《UNIX编程艺术 》
折腾你的 UN*X 系统
数据结构与算法基础
如今 , 很多人认为编程(特别是做web开发)的主要部分就是使用别人的代码 , 能够用清晰简明的方式表达自己的想法比掌握硬核的数学与算法技巧重要的多 , 数据结构排序函数二分搜索这不都内置了吗?工作中永远用不到 , 学算法有啥用啊?这种扛着实用主义大旗的「码农」思想当然不可取 。没有扎实的理论背景 , 遭遇瓶颈是迟早的事 。
数据结构和算法是配套的 , 入门阶段你应该掌握的主要内容应该是:这个问题用什么算法和数据结构能更快解决 。这就要求你对常见的数据结构和算法了熟于心 , 你不一定要敲代码 , 用纸手写流程是更快的方式 。对你不懂的数据结构和算法 , 你要去搜它主要拿来干嘛的 , 使用场景是什么 。
供你参考的学习资源:
《算法导论 》:有人说别把这本书当入门书 , 这本书本来就不是入门书嘛 , 虽说书名是 Introduction to Algorithms , 这只不过是因为作者不想把这本书与其他书搞重名罢了 。当然 , 也不是没办法拿此书入门 , 读第一遍的时候跳过习题和证明就行了嘛 , 如果还觉得心虚先看看这本《数据结构与算法分析》
Coursera Algorithms: Design and Analysis [Part 1] & [Part 2]: Stanford 开的算法课 , 不限定语言 , 两个部分跟下来算法基础基本就有了;英语没过关的:麻省理工学院公开课:算法导论
入门阶段还要注意培养使用常规算法解决小规模问题的能力 , 结合前文的SICP部分可以读读这几本书:《编程珠玑 》 , 《程序设计实践 》
编程语言基础
Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut. Additionally, learning many languages is far easier now, thanks to the wealth of freely available software on the Internet- The Pragmatic Programmer
此外还要知道 , 学习第n门编程语言的难度是第(n-1)门的一半 , 所以尽量去尝试不同的编程语言与编程范式 , 若你跟寻了前文的指引 , 你已经接触了:「干净」的脚本语言 Python, 传统的命令式语言 C, 以及浪漫的函数式语言 Scheme/Racket 三个好朋友 。但仅仅是接触远远不够 , 你还需要不断继续加深与他们的友谊 , 并尝试结交新朋友 , 美而雅的 Ruby 小姑娘 , Hindley-Milner 语言家族的掌中宝 Haskell 都是不错的选择 。但有这么一位你躲不开的 , 必须得认识的大伙伴 — C++ , 你得做好与他深交的准备:
入门:C++ Primer
[可选] 进阶:
高效使用:Effective C++
深入了解:《深度探索C++对象模型》;C++Templates
研究反思:The Design and Evolution of C++ ;对于C++这个 Necessary Evil  , 看这本书可以让你选择是成为守夜人还是守日人 。
现实是残酷的 , 在软件工程领域仍旧充斥着一些狂热者 , 他们只掌握着一种编程语言 , 也只想掌握一种语言 , 他们认为自己掌握的这门语言是最好的 , 其他异端都是傻X 。这种人也不是无药可救 , 有一种很简单的治疗方法:让他们写一个编译器 。要想真正理解编程语言 , 你必须亲自实现一个 。现在是入门阶段 , 不要求你去上一门编译器课程 , 但要求你能至少实现一个简单的解释器 。
供你参考的学习资源: