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


那么入门阶段具体该做些什么呢?这时候你需要做的是反思自己曾经写过的程序 , 去思考程序为什么(Why)要这样设计? , 思考怎样(How)写出更好的程序?试图去探寻理解编程的本质:利用计算机解决问题 。
设想 :
X = 用于思考解决方案的时间 , 即「解决问题」 部分
Y = 用于实现代码的时间 , 即「利用计算机」部分」
编程能力 = F(X, Y) (X>Y)
要想提高编程能力 , 就得优化 X , Y 与函数 F(X, Y) , 很少有书的内容能同时着重集中在这三点上 , 但有一本书做到了——Structure and Interpretation of Computer Programs(SICP)《计算机程序的构造和解释》 , 它为你指明了这三个变量的方向 。在阅读SICP之前 , 你也许能通过调用几个函数解决一个简单问题 。但阅读完SICP之后 , 你会学会如何将问题抽象并且分解 , 从而处理更复杂更庞大的问题 , 这是编程能力巨大的飞跃 , 这会在本质上改变你思考问题以及用代码解决问题的方式 。此外 , SICP的教学语言为 Scheme , 可以让你初步了解函数式编程 。更重要的是 , 他的语法十分简单 , 你可以很快学会它 , 从而把更多的时间用于学习书中的编程思想以及复杂问题的解决之道上 。
Peter Norvig 曾经写过一篇非常精彩的SICP书评 , 其中有这样一段:
To use an analogy, if SICP were about automobiles, it would be for the person who wants to know how cars work, how they are built, and how one might design fuel-efficient, safe, reliable vehicles for the 21st century. The people who hate SICP are the ones who just want to know how to drive their car on the highway, just like everyone else.
如果你是文中的前者 , 阅读SICP将成为你衔接启蒙与入门阶段的关键点
虽然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 解题集:对于书后的习题 , 作为初学者应尽力并量力完成 。
完成了这部分学习后 , 你会逐步建立起一个自己的程序设计模型 , 你的脑子里不再是一团乱麻 , 你会意识到记住库和语法并不会教你如何解决编程问题 , 接下来要学些什么 , 在你心里也会明朗了很多 。这时候才是真正开始进行项目实践 , 补充推动力的好时机 。
关于项目实践:对于入门阶段的初学者 , 参与开源项目还为时过早 , 这时候应该开始一些简单的项目 , 诸如搭建一个网站并维护它 , 或是编写一个小游戏再不断进行扩展 , 如果你自己的想法不明确 , Mega Project List 中选取项目 。总之 , 务必在这时拿下你项目实践的第一滴血 。
与此同时 , 别忘了继续打好根基 。为了将来的厚积薄发 , 在下面这几个方面你还要继续做足功课(注意:下面的内容没有绝对意义上的先后顺序):
计算机系统基础
有了之前程序设计的基础后 , 想更加深入地把握计算机科学的脉络 , 不妨看看这本书:《深入理解计算机系统》 Computer Systems A Programmer's Perspective 。这里点名批评这本书的中译名 , 其实根本谈不上什么深入啦 , 这本书只是 CMU的「计算机系统导论」的教材而已 。CMU的计算机科学专业相对较偏软件 , 该书就是从一个程序员的视角观察计算机系统 , 以「程序在计算机中如何执行」为主线 , 全面阐述计算机系统内部实现的诸多细节 。
如果你看书觉得有些枯燥的话 , 可以跟一门 Coursera 上的 MOOC: The Hardware/Software Interface , 这门课的内容是 CSAPP 的一个子集 , 但是最经典的实验部分都移植过来了 。同时 , 可以看看 The C Programming Language , 回顾一下C语言的知识 。