如何自学编程

上传人:人*** 文档编号:568200679 上传时间:2024-07-23 格式:PDF 页数:5 大小:368.33KB
返回 下载 相关 举报
如何自学编程_第1页
第1页 / 共5页
如何自学编程_第2页
第2页 / 共5页
如何自学编程_第3页
第3页 / 共5页
如何自学编程_第4页
第4页 / 共5页
如何自学编程_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《如何自学编程》由会员分享,可在线阅读,更多相关《如何自学编程(5页珍藏版)》请在金锄头文库上搜索。

1、启蒙启蒙学编程应该学哪门语言?这经常是初学者问的第一个问题,但这是一个错误的问题,你最先考虑的问题应该是哪些东西构成了编程学习的基础?编程知识的金字塔底部有三个关键的部分:1. 算法思想:例如怎样找出一组数中最大的那个数?首先你得有一个maxSoFar 变量,之后对于每个数2. 语法:我怎样用某种编程语言表达这些算法,让电脑能够理解。3. 系统基础:为什么 while(1) 时线程永远无法结束?为什么 int *foo() int x =0; return &x; 是不可行的?启蒙阶段的初学者假设选择 C 语言作为第一门语言会很困难并且枯燥,这是因为他们被迫要同时学习这三个部分,在能做出东西前

2、要花费很多时间。因此,为了尽量最小化语法与系统基础这两部分,建议使用 Python作为学习的第一门语言,虽然 Python 对初学者很友好,但这并不意味着它只是一个玩具,在大型项目中你也能见到它强大而灵活的身影。熟悉Python 后,学习 C 语言是便是一个不错的选择了:学习 C 语言会帮助你以靠近底层的视角思考问题,并且在后期帮助你理解操作系统层级的一些原理。下面给出了一个可供参考的启蒙阶段导引,完成后你会在头脑中构建起一个整体框架,帮助你进行自顶向下的探索。下面的材料没有先后顺序,如果卡壳的话可以考虑换另一份材料。1. 完成麻省理工:电脑科学和 Python 编程导论。虽然该课程的教学语言

3、为 Python,但作为一门优秀的导论课,它强调学习电脑科学领域里的重要概念和范式,而不仅仅是教你特定的语言。如果你不是科班生,这能让你在自学时开阔眼界;课程内容:计算概念,Python 编程语言,一些简单的数据结构与算法,测试与调试。2. 完成 Harvard CS50x 哈佛大学:电脑科学。同样是导论课,但这门课与 MIT 的导论课互补。教学语言涉及 C, PHP, JavaScript + SQL, HTML +CSS,内容的广度与深度十分合理,还能够了解到最新的一些科技成果,可以很好激发学习电脑的兴趣。支线任务:阅读编码3. 完成 Python 教程。入门入门结束启蒙阶段后,初学者积累

4、了一定的代码量,对编程也有了一定的了解。这时你可能想去学一门具体的技术,诸如 Web 开发, Android 开发,iOS 开发什么的,你可以去尝试做一些尽可能简单的东西,给自己一些正反馈,补充自己的推动力。但记住别深入,这些技术有无数的细节,将来会有时间去学习;同样的,这时候也别过于深入特定的框架和语言,现在是学习电脑科学通用基础知识的时候,不要试图去抄近路直接学你现在想学的东西,这是注定会失败的。那么入门阶段具体该做些什么呢?这时候你需要做的是反思自己曾经写过的程序,去思考程序为什么 (Why) 要这样设计?,思考怎样 (How) 写出更好的程序?试图去探寻理解编程的本质:利用电脑解决问题

5、。学习文档 仅供参考设想 :X = 用于思考解决方案的时间,即解决问题 部分Y = 用于实现代码的时间,即利用电脑部分编程能力 = F(X, Y) XY要想提高编程能力,就得优化 X,Y 与函数 F(X, Y),很少有书的内容能同时着重集中在这三点上,但有一本书做到了Structure and Interpretation ofComputer Programs (SICP)电脑程序的构造和解释,它为你指明了这三个变量的方向。在阅读 SICP 之前,你也许能通过调用几个函数解决一个简单问题。但阅读完 SICP 之后,你会学会如何将问题抽象并且分解,从而处理更复杂更庞大的问题,这是编程能力巨大的

6、飞跃,这会在本质上改变你思考问题以及用代码解决问题的方式。此外,SICP 的教学语言为 Scheme,可以让你初步了解函数式编程。更重要的是,他的语法十分简单,你可以很快学会它,从而把更多的时间用于学习书中的编程思想以及复杂问题的解决之道上。Peter Norvig 曾经写过一篇非常精彩的 SICP 书评,其中有这样一段:To use an analogy, if SICP were about automobiles, it would be for the personwho wants to know how cars work, how they are built, and how

7、one mightdesign fuel-efficient, safe, reliable vehicles for the 21st century. The peoplewho hate SICP are the ones who just want to know how to drive their car onthe highway, just like everyone else.如果你是文中的前者,阅读 SICP 将成为你衔接启蒙与入门阶段的关键点虽然 SICP 是一本入门书,但对于初学者还是有一定的难度,以下是一些十分有用的辅助资源:1. Udacity CS212 Desi

8、gn of Computer Program:由上文提到的 Google 研究主管 Peter Norvig 主讲,教学语言为 Python,内容有一定难度。2. How to Design Programs, Second Edition:HtDP 的起点比 SICP 低,书中的内容循循善诱,对初学者很友好,如果觉得完成 SICP 过于困难,可以考虑先读一读 HtDP。3. UC Berkeley SICP 授课视频以及 SICP 的两位作者给 Hewlett-Packard 公司职工培训时的录像中文化项目4. Composing Programs:一个继承了 SICP 思想但使用 Pyth

9、on 作为教学语言的编程导论其中包含了一些小项目5. SICP 解题集:对于书后的习题,作为初学者应尽力并量力完成。完成了这部分学习后,你会逐步建立起一个自己的程序设计模型,你的脑子里不再是一团乱麻,你会意识到记住库和语法并不会教你如何解决编程问题,接下来要学些什么,在你心里也会明朗了很多。这时候才是真正开始进行项目实践,补充推动力的好时机。关于项目实践:对于入门阶段的初学者,参与开源项目还为时过早,这时候应该开始一些简单的项目,诸如搭建一个网站并维护它,或是编写一个小游戏再不断进行扩展,如果你自己的想法不明确,推荐你关注 炼瓜研究所 ,或者从 Mega Project List 中选取自己喜

10、欢的项目。如果你觉得 SICP 就是搞不定,也不要强迫自己,先跳过,继续走常规路线:开始读 The Elements of Computing Systems 吧,它会教会你从最基本的Nand 门开始构建电脑,直到俄罗斯方块在你的电脑上顺利运行。 具体内容不学习文档 仅供参考多说了,这本书会贯穿你的整个编程入门阶段,你入门阶段的目标就是坚持完成这本书的所有项目包括一个最简的最简的编译器与操作系统。为了完全搞定这本书,为了继续打好根基。为了将来的厚积薄发,在下面这几为了完全搞定这本书,为了继续打好根基。为了将来的厚积薄发,在下面这几个方面你还要做足功课注意:下面的内容没有绝对意义上的先后顺序:个

11、方面你还要做足功课注意:下面的内容没有绝对意义上的先后顺序:电脑系统基础电脑系统基础有了之前程序设计的基础后,想更加深入地把握电脑科学的脉络,不妨看看这本书:Computer Systems: A Programmers Perspective, 3/E深入理解电脑系统。这里点名批评这本书的中译名,其实根本谈不上什么深入啦,这本书只是 CMU 的电脑系统导论的教材而已。CMU 的电脑科学专业相对较偏软件,该书就是从一个程序员的视角观察电脑系统,以程序在电脑中如何执行为主线,全面阐述电脑系统内部实现的诸多细节。如果你看书觉得有些枯燥的话,可以跟一门 Coursera 上的 MOOC: TheHa

12、rdware/Software Interface,这门课的内容是 CSAPP 的一个子集,但是最经典的实验部分都移植过来了。同时,可以看看 The C ProgrammingLanguage,回忆一下 C 语言的知识。完成这本书后,你会具备坚实的系统基础,也具有了学习操作系统,编译器,电脑网络等内容的先决条件。当学习更高级的系统内容时,翻阅一下此书的相应章节,同时编程实现其中的例子,一定会对书本上的理论具有更加感性的认识,真正做到经手的代码,从上层设计到底层实现都了然于胸,并能在脑中回放数据在网络-内存-缓存-CPU 的流向。数据结构与算法基础数据结构与算法基础如今,很多人认为编程特别是做

13、web 开发的主要部分就是使用别人的代码,能够用清晰简明的方式表达自己的想法比掌握硬核的数学与算法技巧重要的多,数据结构排序函数二分搜索这不都内置了吗?工作中永远用不到,学算法有啥用啊?这种扛着实用主义大旗的码农思想当然不可取。没有扎实的理论背景,遭遇瓶颈是迟早的事。数据结构和算法是配套的,入门阶段你应该掌握的主要内容应该是:这个问题用什么算法和数据结构能更快解决。这就要求你对常见的数据结构和算法了熟于心,你不一定要敲代码,用纸手写流程是更快的方式。对你不懂的数据结构和算法,你要去搜它主要拿来干嘛的,使用场景是什么。供你参考的学习资源:1. 算法导论:有人说别把这本书当入门书,这本书本来就不是

14、入门书嘛,虽说书名是 Introduction to Algorithms,这只不过是因为作者不想把这本书与其他书搞重名罢了。当然,也不是没方法拿此书入门,读第一遍的时候跳过习题和证明就行了嘛,如果还觉得心虚先看看这本数据结构与算法分析2. Algorithms: Design and Analysis Part 1 & Part 2: Stanford 开的算法课,不限定语言,两个部分跟下来算法基础基本就有了;如果英文不过关:麻省理工学院:算法导论3. 入门阶段还要注意培养使用常规算法解决小规模问题的能力,结合前文的SICP 部分可以读读这几本书:编程珠玑,程序设计实践 学习文档 仅供参考编

15、程语言基础编程语言基础Different languages solve the same problems in different ways. By learningseveral different approaches, you can help broaden your thinking and avoidgetting stuck in a rut. Additionally, learning many languages is far easier now,thanks to the wealth of freely available software on the Inte

16、rnet- The Pragmatic Programmer此外还要知道,学习第 n 门编程语言的难度是第 (n-1) 门的一半,所以尽量去尝试不同的编程语言与编程范式,假设你跟寻了前文的指引,你已经接触了:干净的脚本语言 Python, 传统的命令式语言 C, 以及浪漫的函数式语言 Scheme 三个好朋友。但仅仅是接触远远不够,你还需要不断继续加深与他们的友谊,并尝试结交新朋友,美而雅的 Ruby 小姑娘,Hindley-Milner 语言家族的掌中宝 Haskell 都是不错的选择。至于 C+ ,喜欢的话学学也无妨。现实是残酷的,在软件工程领域仍旧充满着一些狂热者,他们只掌握着一种编程语

17、言,也只想掌握一种语言,他们认为自己掌握的这门语言是最好的,其他异端都是傻 X。这种人也不是无药可救,有一种很简单的治疗方法:让他们写一个编译器。要想真正理解编程语言,你必须亲自实现一个。现在是入门阶段,不要求你去上一门编译器课程,但要求你能至少实现一个简单的解释器。供你参考的学习资源:1. 程序设计语言-实践之路:CMU 编程语言原理的教材,程序语言入门书,现在就可以看,会极大扩展你的眼界,拉开你与普通人的差距。2. Programming Languages:课堂上你能接触到极端 FP 函数式的SML,中性偏 FP 的 Racket,以及极端 OOP 面向对象的 Ruby,并学会问题的 F

18、P 分解 vs OOP 分解、ML 的模式匹配、Lisp 宏、不变性与可变性、解释器的实现原理等,让你在将来学习新语言时更加轻松并写出更好的程序。3. Udacity CS262 Programming Language:热热身,教你写一个简单的浏览器其实就是一个 JavaScript 和 HTML 的解释器,完成后的成品还是很有趣的;接下来,试着完成一个之前在 SICP 部分提到过的项目:用 Python 写一个Scheme Interpreter其他其他编程入门阶段比较容易无视的几点:1. 1 学会提问:学习中肯定会遇到问题,应该学会正确的使用搜索引擎。当单靠检索无法解决问题时,去 Sta

19、ck Overflow 或知乎提问,提问前读读这篇文章:能有效解决问题的提问方法。2. 2 不要做一匹独狼:尝试在 CoCode 与他人交流想法。尝试搭建一个像这样简单的个人网站。试着在博客上记录自己的想法。订阅自己喜欢的编程类博客,推荐几个供你参考:Joel on Software, Peter Norvig, Coding Horror3. 3 学好英语:英语是你获取高质量学习资源的主要工具,但在入门阶段,所看的那些翻译书信息损耗也没那么严重,以你自己情况权衡吧。小结小结学习文档 仅供参考以上的内容你不应该感到惧怕,编程的入门不是几个星期就能完成的小项目。期间你还会遇到无数的困难,当你碰壁

20、时试着尝试费曼技巧:将难点分而化之,切成小知识块,再逐个对付,之后通过向别人清楚地解说来检验自己是否真的理解。当然,依旧会有你解决不了的问题,这时候不要强迫自己很多时候当你之后回过头来再看这个问题时,一切豁然开朗。此外不要局限于上文提到的那些材料,还有一些值得在入门阶段以及将来的提升阶段反复阅读的书籍。这里不得不提到在 Stack Overflow 上票选得出的程序员必读书单中,排在前两位的两本书:Code Complete:不管是对于经验丰富的程序员还是对于那些没有受过太多的正规训练的新手程序员,此书都能用来填补自己的知识缺陷。对于入门阶段的新手们,可以重点看看涉及变量名,测试,个人性格的章

21、节。The Pragmatic Programmer :有人称这本书为代码小全:从 DRY 到 KISS,从做人到做程序员均有涉及。这本书的作者 Dave ,在书中开篇留了这样一段话:Youre a Pragmatic Programmer. You arent wedded to any particularYoure a Pragmatic Programmer. You arent wedded to any particulartechnology, but you have a broad enough background in the science,technology, bu

22、t you have a broad enough background in the science,and your experience with practical projects allows you to choose goodand your experience with practical projects allows you to choose goodsolutions in particular situations. Theory and practice combine to makesolutions in particular situations. The

23、ory and practice combine to makeyou strong. You adjust your approach to suit the current circumstancesyou strong. You adjust your approach to suit the current circumstancesand environment. And you do this continuously as the work progresses.and environment. And you do this continuously as the work progresses.Pragmatic Programmers get the job done, and do it well.Pragmatic Programmers get the job done, and do it well.这段话以及他创立的 The Pragmatic Bookshelf 一直以来都积极地影响着我,因此这篇指南我也尽量贯彻了这个思想,引导并希望你们成为一名真正的Pragmatic Programmer学习文档 仅供参考

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号