4 ms·
It's amazing the amount of high-quality material there is out there. However, as a programmer who is currently going back and attempting to master the fundamen
by eric_bullington 12y ago
It's amazing the amount of high-quality material there is out there. However, as a programmer who is currently going back and attempting to master the fundamentals of an undergraduate CS curriculum through self study, what is lacking is:
1. A comprehensive list of the topics covered in the fundamental CS classes (that is, the topics covered in data structures, algorithms, etc. as well as the required math), ideally with links to related online material. Actually, ACM's Joint Task Force on Computing Curricula publishes a report that is an excellent resource (starting on page 59)[1] for this kind of thing. This resource just need to be distilled down into a list of general topics, each with an associated list of the best online education materials for that particular topic.
2. A nice flashcard program to accompany each topic, ideally with SRS, that could help students learn the terms and other concrete facts related to those topics.
3. A way to systematically evaluate and analyze a learner's mastery of these topics. That is, tests. I'm sure there's a lot of great test material out there that could be auto-graded, but it's scattered about.
4. Oh yeah, and a pony.
Does anyone know of a resource like this? I've actually thought about building it, and have started on very minor parts of this vision [2]. But it's a big task, and I'm not sure if there's any demand for this kind of thing.
1. http://www.acm.org/education/CS2013-final-report.pdf http://www.acm.org/education/CS2013-final-report.pdf
2. https://github.com/esbullington/canonicalcards https://github.com/esbullington/canonicalcards
- bcbrown 12y agoOne approach to getting a list of topics is to look at the degree requirements for a couple of universities. I'm wrapping up a similar project, and here's what I included, along with some resources I used: * Algorithms (CLRS, Skiena) * Databases (db-class.org, any text by C.J. Date) * Probability, Statistics, and Combinatorics * Programming Languages (I liked Grossman's course on Coursera) * Linear Algebra (http://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/Syllabus/ http://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebr...) * Natural Language Processing (Coursera has several courses) * Machine Learning/Information Retrieval/Data Mining (I used a couple books, Mining Massive Datasets and Data-Intensive Text Processing with MapReduce being the two I'd recommend) * Networking (Coursera has a good course) * Operating Systems (https://www.youtube.com/watch?v=XgQo4JkN4Bw&list=PL62A66DDD3B3CC0B7 https://www.youtube.com/watch?v=XgQo4JkN4Bw&list=PL62A66DDD3...) * Distributed Systems (I read Tanenbaum's book) * Computability
- eric_bullington 12y agoI appreciate the idea, and that's a good list of broad topics (I'm currently working off a similar one[1]). But I'm actually talking about sub-topics within each of those broad topics. If you take a look at page 59 of the ACM pdf I linked to, you'll see the level of detail I'm hoping for. As just one example among many, see the algorithmic section, core tier 1 of 2 (followed by the corresponding learning objectives): • Simple numerical algorithms, such as computing the average of a list of numbers, finding the min, max, and mode in a list, approximating the square root of a number, or finding the greatest common divisor • Sequential and binary search algorithms • Worst case quadratic sorting algorithms (selection, insertion) • Worst or average case O(N log N) sorting algorithms (quicksort, heapsort, mergesort) • Hash tables, including strategies for avoiding and resolving collisions • Binary search trees o Common operations on binary search trees such as select min, max, insert, delete, iterate over tree • Graphs and graph algorithms o Representations of graphs (e.g., adjacency list, adjacency matrix) o Depth- and breadth-first traversals Learning Outcomes: [Core-Tier1] 1. Implement basic numerical algorithms. [Usage] 2. Implement simple search algorithms and explain the differences in their time complexities. [Assessment] 3. Be able to implement common quadratic and O(N log N) sorting algorithms. [Usage] 4. Describe the implementation of hash tables, including collision avoidance and resolution. [Familiarity] 5. Discuss the runtime and memory efficiency of principal algorithms for sorting, searching, and hashing. [Familiarity] 6. Discuss factors other than computational efficiency that influence the choice of algorithms, such as programming time, maintainability, and the use of application-specific patterns in the input data. [Familiarity] 7. Explain how tree balance affects the efficiency of various binary search tree operations. [Familiarity] 8. Solve problems using fundamental graph algorithms, including depth-first and breadth-first search. [Usage] [1] And yes, I started Grossman's course on PL. It is excellent, and really regret having to drop it, but I was totally overloaded with work at the time
- philipmjohnson 12y agoTo help me structure the courses I teach better, which turns out to address some of your issues, I built the Morea Framework: http://morea-framework.github.io/ http://morea-framework.github.io/ Here's the Morea-based site for the software engineering class I'm teaching starting on Monday: http://philipmjohnson.github.io/ics613s15/ http://philipmjohnson.github.io/ics613s15/ One could imagine a wrapper around a set of courses structured using Morea that would get close to what you desire. Philip