初学者的编程自学指南

关于这份指南

之前有不少同学问我如何学习编程,根据DRY法则(Don’t Repeat Yourself),还是把自己学习过程中的一些经验整理成一篇博客吧。由于本人目前也处在学习的阶段,文章中列出来的内容也并未全部学习过,所以文章的客观性可能存在一些问题,还望读者自行判断。

一、准备

需要的所有工具就是一台可以连接上网络的电脑以及你本人。

1.1学会利用搜索引擎

当了一个学期的助教之后发现,很多的同学其实是没有使用搜索引擎的意识的,遇到问题要么自己死磕,或者就直接求助于他人。这两种都不是很好的办法,正确的做法是在自己思考后没有结果,然后使用搜索引擎查找问题,现阶段,你遇到的所有问题(几乎)都能在谷歌上找到现成的答案,如果没找到,肯定是你搜索的方式不正确。

1.2 英语

你不得不承认,目前为止,编程世界的主流语言还是英文,所以英语能力的好坏决定了你编程能力的上界。中文资料和英文资料相比,实在是太匮乏了,就质量而言,也相对较低。比如我后面提到的很多的课程,都是英文的内容。

值得庆幸的是,阅读编程资料所需要的英文水平并不需要很高,就个人经验来说,基本上四级水平就足够了,可能还会存在一些生词,但是基本上并不妨碍理解。

英文的学习应该一直贯穿于编程的学习之中,作为一门工具语言,只需要花少量时间就可以带来比较大的收益(2/8法则)。 本人的英文水平也不算好,但是基本上能够阅读技术书籍和文档,能够听懂公开课,所以还是有一些简单的经验可以分享一下。

1.3 把系统换成英文的

有些同学可能看到英文就头疼,这很正常,因为在中文的环境下面生活的太久了。为此,可以试着将平常用的系统换成英文的,虽说不能学到几个单词(Copy/Paste 之类的词),但是可以让你不那么排斥英文,顺便还可以提升一下B格(误)。

1.4 安装电子词典

OS X下推荐欧路词典,在APP Store中购买完整版的,因为需要添加外部的词典。

这里推荐一部比较好的词典:《Collins 英汉双解词典》,它是这个样子的:
shiyanlou.com

主要看它的英文解释,一个词看得次数多了也就记住了。

1.5 每天阅读英文的资料

一些个人经常阅读的网站:

  • Quora:一个类似于知乎的问答类网站,可以挑自己感兴趣的内容来阅读。
  • Hacker News:IT资讯,IT界发生的最新的事件都会在上面。
  • PROGRAMMING:Reddit的Programming板块,和Hacker News类似,不过更加专注于技术内容方面。

不要花太多时间在上面,每天浏览一下就行。

1.6 英文学习的总结

英语不是能够速成的东西,也不是三言两语能够讲完的东西,这里只是提供一个简单的指导,具体的学习计划还请自行搜索更加专业的学习指南。

二、编程基础

完成了这一部分内容的学习后你应该具备:

  • 了解什么是Computer Science
  • 基本的计算机数学能力
  • 基本的程序开发能力
  • 基本的算法与数据结构的知识

2.1 计算机科学导论

  • Introduction to Computer Science and Programming:面向无编程基础或者只有一点基础的人群,使用Python作为教学语言。

  • Intensive Introduction to Computer Science Open Learning Course:CS50,哈佛很火的一门课,在网易公开课上可以找到翻译的视频内容。涵盖的主题有算法(设计、应用、分析);软件开发(抽象、封装、数据结构、Debug、测试);计算机体系结构等等。基本上是一门大杂烩的导论课。使用的语言是CPHPJavaScript

  • Programming Abstractions、:介绍了更加高级的编程主题(递归、算法分析、数据抽象等等),使用**C++**作为教学语言。

2.2 数学

  • Mathematics for Computer Science:介绍了学习计算机所需要的一些数学知识,内容包括集合、关系、证明方法、数论、图论等等。

  • Discrete Mathematics:离散数学。

2.3 编程语言

  • Learn to Program: The Fundamentals:面向无编程基础或者只有一点基础的人群,使用Python作为教学语言。

  • Learn to Program: Crafting Quality Code:如何编写高效与正确的代码。

  • The Structure and Interpretation of Computer Programs:经典的SICP的Python版。

2.4 计算理论

  • Introduction to the Theory of Computation

  • Principles of Computing (Part 1):介绍了CS中基本的数学和编程理论,需要有Python基础。

2.5 算法与数据结构

  • Introduction to Algorithms:MIT的算法导论课,用《算法导论》作为教材,网上可以找到视频资源,网易公开课上有老版的翻译。

三、核心课程

学完了「编程基础」部分的内容后,应该已经可以开发一些简单的程序了,「核心课程」的内容将深入学习计算机科学理论的几个重要的内容。

3.1 数学

  • Coding the Matrix: Linear Algebra through Computer Science Applications:线性代数以及在计算机中的应用。

  • Discrete Mathematics and Probability Theory:离散数学与概率论。

3.2 计算理论

  • Theory of Computation - Fall 2011:介绍了机器模型、上下文无关文法、图灵机等,使用的教材是Michael Sipser的Introduction to the Theory of Computation

3.3 算法与数据结构

  • Data Structures and Advanced Programming

  • Efficient Algorithms and Intractable Problems

3.4 操作系统

  • Operating Systems and Systems Programming:UCB经典的操作系统课程,介绍了操作系统的基本概念、系统编程、网络、分布式系统、内存分配、多线程等等。

  • Introduction to Linux:介绍了Linux以及一些简单的命令行使用。

3.5 程序语言理论

  • Programming Paradigms:编程范式。

  • Compilers:Stanford的编译原理课。

  • Principles of Programming Languages

3.6 计算机体系结构

  • Computer Architecture:CMU

  • Computer Architecture

3.7 计算机网络

  • Computer Networks
  • Fundamentals of Computer Networking

四、编程工具

4.1 IDE

  • Python: PyCharm

  • Java:IntelliJ IDEA

  • C/C++: Visual Studio

4.2 编辑器

  • Emacs/Vim
  • Sublime Text 3
  • VS Code
  • Atom

并不一定要用Emacs或者Vim,ST其实已经很强大了,足够做日常简单的编辑工作。(这里黑一下Atom,启动速度太感人了,所以放在最后一个。)

4.3 Git & GitHub

使用版本控制来管理自己平时写的代码。

推荐阅读:

  • git-recipes

  • Pro Git 2nd Edition

  • Git教程 - 廖雪峰

五、如何克服拖延

资料是有了,但是拖延症不去学怎么办?

番茄工作法

方法有了,赶快开始动手吧

文章转载自:http://forrestchang.github.io/self-learning-guide-1.html

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值