You Say You Want An Education?
2015-03-23 19:37
330 查看
You Say You Want An Education?
With the recent announcement of 17 new schools participatingin the massive open online course (MOOC) siteCoursera.org,
I thought it would be an interesting exercise to see if it was possible to design a reasonable computer science curriculum using just Coursera courses, where “reasonable” is a curriculum that roughly mirrors the coursework required for a four-year university
computer science degree.
I’ve looked over all of the available Coursera courses as of September 21st, 2012, and created a four-year curriculum. I’ve tried to follow the curricula suggested by real world colleges; in particular I’ve loosely based the approach on MIT’s course 6 curriculum
(specifically, 6-3).
“Semester” is a loose term in this case, as the courses vary in length from 6 to 14 weeks. I’ve assumed it would be possible to take 4 core curriculum courses in the same semester, and that the student would take an additional course that is not computer science
related.
My aim is a computer science education that gives the student a background in:
Algorithms
Control (robotics, other mechanical interactions)
Data structures
Debugging
Electrical engineering
Hardware
Programming language theory
Software architecture & design
Networking
Systems programming
Mathematics, including:
Statistics
Probability
Logic
Calculus
Little time is spent on specific programming languages; once the student is exposed to Python and some other languages in the first semester they are expected to be able to pick up other languages. That will take some work outside of the core course work but
the Internet has so many good resources for learning the specifics of programming languages that I’ve chosen not to include classes on specific languages.
Below is the curriculum. I’ll discuss some of the reasons behind the choices later, but first take some time to click through to the course descriptions and see what you think.
Year 1, 1st Semester
Computer Science 101
Calculus: Single Variable
Statistics One
Learn To Program: The Fundamentals
Year 1, 2nd Semester
Introduction To Logic
Data Analysis
Learn To Program: Crafting Quality Code
Introduction to Systematic Program Design
Year 2, 1st Semester
Algorithms
Fundamentals of Electrical Engineering (first half)
Writing in the Sciences
Introduction to Computer Networks
Year 2, 2nd Semester
Networks, Friends, Money and Bytes
The Hardware/Software Interface
Probabilistic Graphical Models
Introduction to Mathematical Thinking
Year 3, 1st Semester
Fundamentals of Electrical Engineering (second half)
Algorithms Part 2
Control of Mobile Robots
Automata
Year 3, 2nd Semester
Programming Languages
Game Theory
Human Computer Interaction
Digital Signal Processing
Year 4, 1st Semester
Computer Architecture
Cryptography
Pattern-Oriented Software Arch. For Concurrent and Networked Software
Image and Video Processing
Year 4, 2nd Semester
Compilers
Machine Learning
Parallel Computing
Natural Language Processing
The curriculum above is purely focused on computer science and mathematics. I’ve left off the basic science and liberal arts classes, but Coursera offers many options in this regard and the student can pick or choose the classes that best fit the student’s
interests.
It’d be awesome if Coursera had a course in discrete math. I think that would complement the other math courses in my curriculum nicely. Additionally, it’d be cool if Coursera had a course on operating systems development, or possibly another low-level programming
topic like file systems or databases. Frankly, I’m amazed at the depths and breadth of the computer science courses available, and it’s a credit to Coursera that they’ve built such an impressive catalog. In 2012, a student can take the majority of a university
computer science curriculum for free thanks to Coursera. That was not possible in 2011.
Learning Online
I’ve taken a few courses on Coursera and other MOOCs and for the classes I’ve taken the medium works well. Like in-person classes, the Coursera courses have lecture notes, slides, homework assignments, tests and quizzes, and online forums for the students to
discuss the class. However, with a MOOC, the student can fast forward and rewind the lecturer. Online, quizzes and tests are primarily multiple choice, but Coursera randomizes the questions and the order of the answer (and often picks a set of multiple choices
answers from a large pool of answers for a single question). Essay questions are peer graded, which is a process that I think is still evolving – in the class I took with peer graded papers, two of the papers I graded (out of 3) were verbatim copies of Wikipedia
articles-which made grading those easy-but the 3rd paper was original content, and I’m sure I evaluated that content with less skill than a professor would.
In my Compilers class, the professor had a clever online tool that could be used to create proofs, and using this tool was required to complete the homework assignments. I think that more and more tools of this kind will need to be created to deal with assignments
that aren’t multiple choice quizzes or peer graded essays. For the Compilers class our programming assignments were graded by a script that ran a series of unit tests against our compilers. Grading programming assignments this way felt natural to me – after
all, at work my code has to pass a gauntlet of unit tests before the code can go into production.
On the other hand, MOOCs have a few challenges due to their scale (challenges which I’m sure people are working on solutions for). One of these is group projects. As a software engineer I work in groups all the time, and as much as I hated group work in college
it is an important skill for the professional programmer. Public speaking is another important skill that is easy to teach in a classroom setting but hard at scale.
There’s also a set of classes where students can be given the same assignment but produce correct but radically different work, or classes where the deliverables are too complex to be judged by software or other students. For example, MIT’s 6.033 class
has several design projects whose deliverables are complex system designs. What is the
best way to grade such assignments?
Coursera and its kin are evolving rapidly, and there’s been a lot of research into online education. I’m excited to see what learning online looks like next year.
Final Thoughts
I don’t think it will be long before Coursera, Udacity, EdX,
or other MOOCs start grouping courses into curricula. Khan Academy already has a knowledge
map of exercises that build on another, only letting the student progress once they have mastered a required skill for the next level. I hope we’ll see curricula in MOOCs that is created and curated by professors or other education professionals.
What do you think of my computer science curriculum? What would you add or remove? Have you tried a class with Coursera or another MOOC?
相关文章推荐
- Minty Fresh : So You Want To Write An Orchestration?
- So you want to replay an IIS web server log?
- android.util.AndroidRuntimeException Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? com.uethinking.microvideo.manag
- So You Want to Be an Embedded Linux Developer
- 68.You are managing an Oracle Database 11g database. You want to ensure the recovery of the database
- So you want to replay an IIS web server log?
- If you want an office that h
- 69.You are working on an instance started using the SPFILE. You want to move the Flash Recovery Area
- If you want an embedded database please put a supported one on the classpath.
- Don‘t call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
- If you want to follow your dreams, you have to say no to all the alternatives
- ubuntu 14.04 安装 pip出现包依赖问题(This may mean that you have requested an impossible situation or ifyou ar
- You have an error in your SQL syntax
- 真机测试时报 You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated li
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL 完美解决
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
- ios8调用相机报警告: Snapshotting a view that has not been rendered results in an empty snapshot. Ensure you
- 【iOS】CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable
- You get an error when you attempts to save SSIS packages to the MSDB package store if the network packet size >=16388 By