如何学习编程

qc1iu published this page · Last modified:
好友决定转行做码农,这几天我也帮他想了一些入门编程的方法。我一直相信,任何领域只要有一个好的方法论做指导,都可以快速入门并且快速产出。要是肯专注的投入大量时间,也是可以在这个领域成为专家的。参考The Role of Deliberate Practice in the Acquisition of Expert Performance

什么是编程

首先要明白你将要学习的是什么。编程我认为是一门手艺活,就跟裁缝,理发师,厨师一样。完成同样的功能,可能有着千万种方法。但同时,编程的产出不是正确就是错误,没有感性的因素存在,这个是跟其他手艺活不一样的地方。所以从某些方面讲,编程有点极端,不能将就,所以很适合有强迫症的人。如果有学习过其他手艺活,个人认为会在学习方法上对学习编程有很大帮助。

准备

  • 熟练运用搜索引擎
  • 良好的逻辑思维
  • 工科思维,动手能力
  • 高中数学
  • 会翻墙,会英文
  • 以上按照重要性排列,第一条如果不会请放弃编程。

    开始

    学习编程需要从一门程序语言入手。如何选择入门的成语语言比较有争议,国内普遍是用C语言入门。MIT早些时候用的是Lisp,听说最近换Python了。我个人感觉用C或者Python都不错,各有优缺点吧。

    先说说C。好处是关键字少,概念少,不像Java撤出来一堆概念,类,对象,成员变量,继承,接口,抽象类,内部类,匿名内部类,静态内部类...Are you OK? C++就不提了,概念更多。C的所有概念都用一个指针概括了。在入门学习上不太好的地方就是涉及了编程以外的很多其他问题,比如内存管理,ABI,编译,链接等等。这些问题严格来讲属于操作系统的问题,初学编程还应该将重点放在程序逻辑上,所以C在这方面对初学者不是特别的友好。不过,如果能通过经验贴或者老师了解到这些坑,C还是很不错的入门语言。

    Python无非就是概念比C多。动态类型有好有坏吧,不在这里说了。

    C语言入门书籍依个人能力吧。我就提一下K&R,书籍大家随意选,高兴就好。

    选什么语言入门,用什么书入门都不是重点。

    重点是动手

    需要将书上的例题和习题运行起来才重要。刚开始可以选一个可在线编程的网站,比如这个learn-c。随着程序的规模和难度的增长,可以选择一个IDE或者工具链本地调试。初学编程可能会受学习数学时的影响,认为看了答案做题就没有意义了。其实如果是在入门阶段,直接读答案都是很有帮助的,可以帮助建立计算机思维。而对于理解不了的程序片段,最好的方法就是调试。跟画画一样,不满意就会擦掉,再画再擦掉,直到满意为止。程序也需要修改,运行,再修改,再运行,直到结果正确。

    玩溜一门程序语言是编程的开始,编程≠编程语言。这个关系用音乐和乐器的关系比喻再合适不过了。乐器种类那么多,不过最终目的都是为了演奏音乐。而学习乐器的目的也正是为了理解音乐。音乐这种抽象的概念只能通过乐器来具体化。所以没必要纠结哪种程序语言好了,就跟不存在哪种乐器更好一样。个人喜好问题。

    总结

    动手!