该文首秀于个人网志,会在时评里面并行预览。
有关这本手册
之前有不少学长学长问我怎样自修程式设计,根据DRY自然法则(Dont Repeat Yourself),却是把他们自修过程中的许多经验整理成一则网志吧。由于生前目前也处在自修的阶段,该文中附注的文本也并未全部自修过,因此该文的合理性可能存在许多难题,还望听众另行判断。
这本手册会定期预览,有好的建议也能回帖或是寄出电子邮件。
准备
须要的大部份辅助工具就是两台能相连玩游戏络的笔记本电脑以及你生前。
自然科学玩游戏
很可是,即使是现在,绝大部分自修计算机系统的学生却是不能自然科学玩游戏。在当前的互联网环境下,不能自然科学玩游戏,意味着你无法用GoogleU31KB815SG,无法再Reddit看最新的资讯,须要承受间歇式的GitHub,若非。然而,自然科学玩游戏本身却是一件成本极低的事情,不想提心吊胆的话,一年花个几千元钱买个整套的服务;有提心吊胆精神的人,能买个伺服器他们假定铺设玩游戏辅助工具。这一步很重要,无法埃唐佩县,否则后面手册中的许多文本对你来说只能是404了。
有关自然科学玩游戏的具体文本,就不再多说了,给你一个关键字:Lantern。
专业委员会采用Google搜寻
专业委员会了自然科学玩游戏,你就能采用Google了,为什么并非Baidu?相信你用了Google后就自然明白了。
当了一个学年的讲师后发现,很多的老师其实是没有采用浏览器的意识的,碰到难题或者他们死磕,或是就直接迁怒于别人。这两种都并非较好的办法,恰当的做法是在他们思索后没有结果,然后采用浏览器搜寻难题,眼下,你碰到的大部份难题(几乎)都能在Google上找出整套的标准答案,假如没找出,肯定是你搜寻的方式不恰当。
采用Google的基本搜寻功能就能解决绝大部分问题了,当然,假如想自修更加高级的基本功,这里有一份手册:怎样用好Google等浏览器?。
英语
你不得不承认,为止,程式设计世界的非主流语言却是英语,因此英语潜能的优劣决定了你程式设计潜能的原函数。英语资料和英文资料相比,实在是太匮乏了,就质量而言,也相对较低。比如我后面提到的很多的课程,都是英语的文本。
值得庆幸的是,阅读程式设计资料所须要的英语水平并不须要很高,就个人经验来说,基本上四级水平就足够了,可能还会存在许多生词,但是基本上并不妨碍理解。
英语的自修应该一直贯穿于程式设计的自修之中,作为一门辅助工具语言,只须要花少量时间就能带来比较大的收益(2/8自然法则)。
生前的英语水平也不算好,但是基本上能阅读技术书籍和文档,能听懂公开课,因此却是有许多简单的经验能分享一下。
把系统换成英语的有些老师可能看到英语就头疼,这很正常,因为在英语的环境下面生活的太久了。为此,能试着将平常用的系统换成英语的,虽说无法学到几个单词(Copy/Paste 之类的词),但是能让你不那么排斥英语,顺便还能提升一下B格(误)。
安装电子词典OS X下推荐欧路词典,在APP Store中购买完整版的,因为须要添加外部的词典。
这里推荐一部比较好的词典:《Collins 英汉双解词典》,它是这个样子的:
主要看它的英语解释,一个词看得次数多了也就记住了。
每天阅读英语的资料许多个人经常阅读的网站:
Quora:一个类似于知乎的问答类网站,能挑他们感兴趣的文本来阅读。Hacker News:IT资讯,IT界发生的最新的事件都会在上面。PROGRAMMING:Reddit的Programming板块,和Hacker News类似,不过更加专注于技术文本方面。不要花太多时间在上面,每天浏览一下就行。
英语自修的总结
英语并非能速成的东西,也并非三言两语能讲完的东西,这里只是提供一个简单的指导,具体的自修计划还请另行搜寻更加专业的自修手册。
程式设计基础
完成了这一部分文本的自修后你应该具备:
了解什么是Computer Science基本的计算机系统数学潜能基本的程序开发潜能基本的算法与数据结构的知识计算机系统自然科学导论
Introduction to Computer Science and Programming:面向无程式设计基础或是只有一点基础的人群,采用Python作为教学语言。Intensive Introduction to Computer Science Open Learning Course:CS50,哈佛很火的一门课,在网易公开课上能找出翻译的视频文本。涵盖的主题有算法(设计、应用、分析);软件开发(抽象、封装、数据结构、Debug、测试);计算机系统体系结构等等。基本上是一门大杂烩的导论课。采用的语言是C、PHP、JavaScript。Programming Abstractions:介绍了更加高级的程式设计主题(递归、算法分析、数据抽象等等),采用C++作为教学语言。数学
Mathematics for Computer Science:介绍了自修计算机系统所须要的许多数学知识,文本包括集合、关系、证明方法、数论、图论等等。Discrete Mathematics:离散数学。程式设计语言
Learn to Program: The Fundamentals:面向无程式设计基础或是只有一点基础的人群,采用Python作为教学语言。Learn to Program: Crafting Quality Code:怎样编写高效与恰当的代码。须要有Learn to Program: The Fundamentals的基础。The Structure and Interpretation of Computer Programs:经典的SICP的Python版。计算理论
Introduction to the Theory of ComputationPrinciples of Computing (Part 1):介绍了CS中基本的数学和程式设计理论,须要有Python基础。算法与数据结构
Introduction to Algorithms:MIT的算法导论课,用《算法导论》作为教材,网上能找出视频资源,网易公开课上有老版的翻译。核心课程
学完了「程式设计基础」部分的文本后,应该已经能开发许多简单的程序了,「核心课程」的文本将深入自修计算机系统自然科学理论的几个重要的文本。
数学
Coding the Matrix: Linear Algebra through Computer Science Applications:线性代数以及在计算机系统中的应用。Discrete Mathematics and Probability Theory:离散数学与概率论。计算理论
Theory of Computation – Fall 2011:介绍了机器模型、上下文无关文法、图灵机等,采用的教材是Michael Sipser的Introduction to the Theory of Computation。算法与数据结构
Data Structures and Advanced ProgrammingEfficient Algorithms and Intractable Problems操作系统
Operating Systems and Systems Programming:UCB经典的操作系统课程,介绍了操作系统的基本概念、系统程式设计、互联网、分布式系统、内存分配、多线程等等。Introduction to Linux:介绍了Linux以及许多简单的命令行采用。程序语言理论
Programming Paradigms:程式设计范式。Compilers:Stanford的编译原理课。Principles of Programming Languages计算机系统体系结构
Computer Architecture:CMUComputer Architecture计算机系统互联网
Computer NetworksFundamentals of Computer Networking程式设计辅助工具
IDE
Python: PyCharmJava:IntelliJ IDEAC/C++: Visual Studio编辑器
Emacs/VimSublime Text 3VS CodeAtom并不一定要用Emacs或是Vim,ST其实已经很强大了,足够做日常简单的编辑工作。(这里黑一下Atom,启动速度太感人了,因此放在最后一个。)
Git & GitHub
采用版本控制来管理他们平时写的代码。
推荐阅读:
git-recipesPro Git 2nd EditionGit教程 – 廖雪峰怎样克服拖延
资料是有了,但是拖延症不去学怎么办?
番茄工作法