线上CS深度学习攻略

24 Jun 2015

online cs

Obtaining a Thorough CS Background Online

线上CS深度学习攻略

source

I’d like to show you a way to obtain a computer science background that doesn’t involve enrolling in a university program. Maybe you’ve completed an introductory Java course, and now you’d like to pursue a software development position. Or maybe you already have some formal CS training, and you’d like to fill in a couple of knowledge gaps. By utilizing online learning resources, you can obtain that background without incurring the costs of the traditional university approach.

我将告诉你如何通过网络,而不用参加大学课程来获得计算机科学的教育. 或许你已经完成了java入门课程, 想去找一份软件开发的工作. 又或许你已经接受过正规的计算机教育, 想填补知识领域之间的空白. 利用线上的资源, 你可以获取那些教育而不必花费金钱上传统大学的课程.

I started with the core requirements of a typical undergraduate CS program and replaced them with online counterparts from a few different learning providers.

我会先从基础的本科基础课程说起, 并用所对应的一些教育网站的网络课程替代它们.

Types of Online Courses

网络课程的种类

Online courses generally take on one of three styles:

在线课程通常分成三类:

  • Interactive with Deadlines: These courses start and end on specific dates, and each assignment has a deadline that you must meet to receive credit. With interactive courses, you submit your assignments and exams online, and the course automatically tracks your performance and progress through the video lectures as you go.
  • Interactive and self-paced: Interactive, but without deadlines. You can start these courses at any time, and you can complete them at any pace you want.
  • Courseware: These are non-interactive collections of course material for you to work through independently, at your own pace. They still contain well-organized video lectures, but you won’t get any feedback on your work or overall progress. Instead, it’ll be up to you to work through the problem sets and then compare your work with the posted solutions. All the courseware-style material that I’ve included are OpenCourseWare Scholar courses, which MIT has specifically designed for online learning.

  • 带截止日期的交互课程: 这些课程有开课和结束日期, 每个作业都有规定截止时间, 你需要在此之前完成任务来获取学分. 在交互课程中, 你注册并且提交作业和考试, 课程会在你看视频学习时自动记录你的表现和进度.
  • 无限制交互课程: 交互式, 但没有截止时间. 你可以随时开始课程, 也可以在任意时间完成.
  • 课件: 不提供独立学习的交互式课程. 一般包含组织良好的视频讲义, 但不会获得反馈或者全局的学习进度. 相对的, 需要自己来完成作业和作业的评估. 我所介绍的所有课件类型的资源都来自于 OpenCourseWare Scholar courses, 它是由MIT为网络学习特别设计的

Of the three styles, I have a preference for interactive courses with deadlines. Since we already have access to so much information about these topics elsewhere online, I find the interaction (assignment feedback, forum discussion, etc.) to be the aspect that creates a special learning experience. Additionally, the fixed-duration, deadline-based approach gives me the accountability I need to push through and finish the course once I’ve gotten a few weeks in.

上述三种风格中, 我更偏向有截止时间的交互课程. 因为我们早就能在网络上找到这些资料, 而交互式的方式可以创造独特的学习体验. 此外, 固定时间, 带截止时间的方式给我一旦投入了几周时间就得去完成它的责任感.

Curriculum

课程

I’ve divided the curriculum into three sections: Math, Core CS, and Advanced CS. In general, you should finish one section before moving onto the next. The Intro to CS courses are exceptions, though, that have no math prerequisites. Many topics have multiple “offerings”, often with different workloads. I’ve categorized the workload of each offering to help distinguish them. For example, I found four different single variable calculus offerings — two for those with prior calculus backgrounds and two that are more introductory.

我将课程分成三个部分: 数学, 核心CS, 高级CS. 通常来说你需要按顺序一步步来. CS的入门课程是个例外, 他没有数学上的预备要求. 许多主题会给出多个课程, 通常是不同的难度. 我将任务做了分类来帮助你区分. 例如, 我找到了四个单变量微积分的课程, 两个适合有学习背景的, 另两个更偏向入门.

学时表:

  • level 0: < 50
  • level 1: 50 - 80
  • level 2: 80 - 120
  • level 3: > 120

Math

数学

Of all the math listed here, it’s most important to learn about discrete math, so you can deeply understand algorithms later on. Single variable calculus is a prerequisite for this course. Linear algebra is used in graphics, machine learning, and cryptography, but since it’s not immediately essential to understanding core concepts, feel free to skip it. Multivariable calculus and probability are required by the typical CS curriculum, but feel free to skip these too if you’re math-averse.

下面所列出的所有数学中, 离散数学是最重要的, 算法可以之后在深入理解. 单变量微积分是预备课程. 线性代数在图像, 机器学习和密码学中会用到. 但鉴于它对理解核心概念的影响不大, 可以安心跳过. 多变量微积分和概率论是典型CS课程需要的, 不过如果你对数学没那么有爱也可以跳过.

Core Computer Science

计算机核心课程

These are the core topics of CS. Start with an intro class that’s appropriate for you. Then continue with one of the algorithms sequences. A strong background in algorithms is essential to being able to write high-quality software, as well as surviving technical interviews. Computer architecture and CS theory are also crucial topics taken by every CS student that fill in understanding at the low and high levels.

这些是计算机的核心主题. 选一个适合你的入门课程, 然后再从算法系列中挑选一个. 牛逼的算法背景可以写出高质量的软件, 也能在技术面试中幸存下来. 计算机架构和计算机理论也是对每个CS专业学生有挑战的主题, 充满了高层和底层的理解.

From Nand to Tetris is a brilliant offering from the Hebrew University of Jerusalem that guides you through building each layer of a simplified computer system from scratch. I’m currently taking it with two other developers here in Detroit, although no programming experience is needed.

从与非门道俄罗斯方块 是耶路撒冷希伯来大学的一门好课, 指导你搭建一个简单计算机的每一层. 我正在和底特律的两个开发者一起学习, 这门课程不需要编程经验.

Advanced Computer Science

高级计算机科学

After completing the core topics, you have the necessary background to study any of the advanced topics. No student can master all of them, so pursue whatever interests you the most. I’ve tried to arrange the classes from low (toward hardware) to high (toward the abstract) level.

完成核心课程后, 你已经有了学习高级课程所需的知识背景. 无人能掌握所有, 只要追随你最喜欢的便好. 我试着把课程按底层(面向硬件)到高层(面向抽象)的顺序排序

I have two personal recommendations from this list: Cryptography is a fun challenge and helped me look at security in general differently. It’s taught by Dan Boneh, who’s an authoritative figure in the crypto field and also an excellent instructor. Functional Programming Principles in Scala has helped me write better code on a day-to-day basis by combining general functional programming theory with actual knowledge about the Scala language. It’s taught by the designer of Scala, Martin Odersky.

列表中有两个个人推荐: 密码学是个有趣的挑战, 帮助我从不同角度看待安全问题. 该课程由 Dan Boneh 教授, 是密码领域的权威专家, 同时也是出色的导师. 函数式编程-scala 帮助我通过学习scala的函数式编程理论, 在工作中写出更好的代码. 它由Scala之父, Martin Odersky教授.

As a software developer with CS background, I’m excited that courses like these continue to pop up on Coursera and other sites, and I look forward to jumping into one every so often. What about those of you who don’t have that background? I’d love to hear about your experiences learning online.

作为一个CS方向的开发者, 我很乐于见到Cousera和其他网站上类似课程的不断涌现, 我也很想参与其中. 你们是其他领域过来的吗? 我很乐于听听你们线上学习的经历.