Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Addition of extra courses that students might find useful from MIT ocw. With Inforamtion about these courses and prerequisites. Graduate and undergraduate courses. Useful for people who want to broaden their knowledge even if you don't add it to the curriculum. (long) #1081

Open
1404Damel opened this issue Oct 6, 2022 · 2 comments

Comments

@1404Damel
Copy link

1404Damel commented Oct 6, 2022

Why and What

https://github.com/1404Damel/MITocw made a github for this
I mainly did this to supplement my knowledge because my university is not that good (they don't even give programming assignments!). I also have to do a bachelor thesis at the end of my degree and this seems like a useful way to get information about what I should do. And I started to enjoy just collecting the information. And I hope this helps some people.

This includes some of the courses I find would be useful. I don't know what you're specifically looking for or even if you want to add the extra graduate courses. But I think this would be helpful for people looking to broaden their knowledge with the graduate courses. And you can decide if the undergraduate courses are worth adding. I think even making this discussion available and add it in extra resources or something would be useful to people.
They come with lecture notes and sometimes lecture videos, sometimes programming assignments, sometimes projects and sometimes written assignments and others. They don't always have solutions to these but sometimes show examples of things like projects and programming assignments.
I will first go through the graduate courses then the prerequisites then the extra courses then others that I found that would be useful.
There was also advanced algorithms and advanced data structures but I didn't include those.
I will list what it includes but assume it has lecture notes and I'll specify if it doesn't (One doesn't).

(these are prerequisites [These are prerequisites for the prerequisites] -> [These are prerequisites for those]) + for multiple
I'll probably get lazy and just say look above pr below sometimes

If you see SC
OCW Scholar courses are designed specifically for OCW’s single largest audience: independent learners. These courses are substantially more complete than typical OCW courses, and include new custom-created content as well as materials repurposed from previously published courses.

Courses

Graduate

1.124J Foundations of Software Engineering (1.00 Introduction to Computers and Engineering Problem Solving [18.01 Single Variable Calculus])
(Has programming assignments with solutions, exams with solutions and written assignments)
This is a foundation subject in modern software development techniques for engineering and information technology. The design and development of component-based software (using C# and .NET) is covered; data structures and algorithms for modeling, analysis, and visualization; basic problem-solving techniques; web services; and the management and maintenance of software. Includes a treatment of topics such as sorting and searching algorithms; and numerical simulation techniques. Foundation for in-depth exploration of image processing, computational geometry, finite element methods, network methods and e-business applications. This course is a core requirement for the Information Technology M. Eng. program.
https://ocw.mit.edu/courses/1-124j-foundations-of-software-engineering-fall-2000/

1.264J Databases, Internet, and Systems Integration Technologies (none)
(Has programming assignments with examples, exams with solutions, written assignments with examples)
This course addresses information technology fundamentals, including project management and software processes, data modeling, UML, relational databases and SQL. Topics covered include internet technologies, such as XML, web services, and service-oriented architectures. This course provides an introduction to security and presents the fundamentals of telecommunications and includes a project that involves requirements / design, data model, database implementation, website, security and data network. No prior programming experience required.
https://ocw.mit.edu/courses/1-264j-database-internet-and-systems-integration-technologies-fall-2013/

6.263J Data Communication Networks (6.041 Probabilistic Systems Analysis and Applied Probability [18.02 Multivariable Calculus] -> [18.01 Single Variable Calculus])
(Nothing extra)
6.263J / 16.37J focuses on the fundamentals of data communication networks. One goal is to give some insight into the rationale of why networks are structured the way they are today and to understand the issues facing the designers of next-generation data networks. Much of the course focuses on network algorithms and their performance. Students are expected to have a strong mathematical background and an understanding of probability theory. Topics discussed include: layered network architecture, Link Layer protocols, high-speed packet switching, queueing theory, Local Area Networks, and Wide Area Networking issues, including routing and flow control.
https://ocw.mit.edu/courses/6-263j-data-communication-networks-fall-2002/

15.564 Information Technology I (none I can find)
(Nothing extra)
Information Technology I helps students understand technical concepts underlying current and future developments in information technology. There will be a special emphasis on networks and distributed computing. Students will also gain some hands-on exposure to powerful, high-level tools for making computers do amazing things, without the need for conventional programming languages.
https://ocw.mit.edu/courses/15-564-information-technology-i-spring-2003/

6.823 Computer System Architecture (6.004 Computation Structures [Some programming + 6.002 Circuits and Electronics])
(Problem sets with solutions and exams with solutions)
6.823 is a course in the department’s “Computer Systems and Architecture” concentration. 6.823 is a study of the evolution of computer architecture and the factors influencing the design of hardware and software elements of computer systems. Topics may include: instruction set design; processor micro-architecture and pipelining; cache and virtual memory organizations; protection and sharing; I/O and interrupts; in-order and out-of-order superscalar architectures; VLIW machines; vector supercomputers; multithreaded architectures; symmetric multiprocessors; and parallel computers.
https://ocw.mit.edu/courses/6-823-computer-system-architecture-fall-2005/

6.824 Distributed Computer Systems (none I can find)
(Includes exams)
This course covers abstractions and implementation techniques for the design of distributed systems. Topics include: server design, network programming, naming, storage systems, security, and fault tolerance. The assigned readings for the course are from current literature. This course is worth 6 Engineering Design Points.
https://ocw.mit.edu/courses/6-824-distributed-computer-systems-engineering-spring-2006/

6.828 Operating System Engineering (6.033 Computer System Engineering [6.004 Computation Structures -> programming [for example 6.001 Structure and Interpretation of Computer Programs] + [6.002 Circuits and Electronics]] + [6.170 Software Studio] + [6.004 Computation Structures [Look above for prerequisites]])
(Includes exams with solutions, projects with examples and programming assignments)
This course studies fundamental design and implementation ideas in the engineering of operating systems. Lectures are based on a study of UNIX and research papers. Topics include virtual memory, threads, context switches, kernels, interrupts, system calls, interprocess communication, coordination, and the interaction between software and hardware. Individual laboratory assignments involve implementation of a small operating system in C, with some x86 assembly.
https://ocw.mit.edu/courses/6-828-operating-system-engineering-fall-2012/

6.830 Database Systems (6.006 Introduction to Algorithms [programming for ex 6.01 + 6.042J Mathematics for Computer Science -> [18.01 Single Variable Calculus]])
(Includes exams with solutions and programming assignments)
This course relies on primary readings from the database community to introduce graduate students to the foundations of database systems, focusing on basics such as the relational algebra and data model, schema normalization, query optimization, and transactions. It is designed for students who have taken 6.033 (or equivalent); no prior database experience is assumed, though students who have taken an undergraduate course in databases are encouraged to attend.
https://ocw.mit.edu/courses/6-830-database-systems-fall-2010/

16.355J Software Engineering Concepts (Some programming will help)
(Nothing extra)
This is a reading and discussion subject on issues in the engineering of software systems and software development project design. It includes the present state of software engineering, what has been tried in the past, what worked, what did not, and why. Topics may differ in each offering, but will be chosen from: the software process and lifecycle; requirements and specifications; design principles; testing, formal analysis, and reviews; quality management and assessment; product and process metrics; COTS and reuse; evolution and maintenance; team organization and people management; and software engineering aspects of programming languages.
https://ocw.mit.edu/courses/16-355j-software-engineering-concepts-fall-2005/

MAS.962 Common Reasoning for Interactive Applications (I don't know, probably some programming introduction)
(Nothing extra)
This course will explore the state of the art in common sense knowledge, and class projects will design and build interfaces that can exploit this knowledge to make more usable and helpful interfaces.
https://ocw.mit.edu/courses/mas-962-common-sense-reasoning-for-interactive-applications-fall-2006/

6.884 Computability Theory of and with Scheme (6.001 Structure and Intrerpretation of Computer Programs + 6.042 Mathematics for Computer Science [see below])
(Does include readings just not lecture notes, and problem sets)
6.844 is a graduate introduction to programming theory, logic of programming, and computability, with the programming language Scheme used to crystallize computability constructions and as an object of study itself. Topics covered include: programming and computability theory based on a term-rewriting, “substitution” model of computation by Scheme programs with side-effects; computation as algebraic manipulation: Scheme evaluation as algebraic manipulation and term rewriting theory; paradoxes from self-application and introduction to formal programming semantics; undecidability of the Halting Problem for Scheme; properties of recursively enumerable sets, leading to Incompleteness Theorems for Scheme equivalences; logic for program specification and verification; and Hilbert’s Tenth Problem.
https://ocw.mit.edu/courses/6-844-computability-theory-of-and-with-scheme-spring-2003/

6.820 Fundamentals of Program Analysis (6.035)
(Includes Programming assignments)
This course offers a comprehensive introduction to the field of program analysis. It covers some of the major forms of program analysis including Type Checking, Abstract Interpretation and Model Checking. For each of these, the course covers the underlying theories as well as modern techniques and applications.

Required for Graduate Courses (Undergraduate)

1.00 Introduction to Computers and Engineering Problem Solving (none)
(Includes Exams, programming assignments with examples and instructor insights)
This course presents the fundamentals of object-oriented software design and development, computational methods and sensing for engineering, and scientific and managerial applications. It cover topics, including design of classes, inheritance, graphical user interfaces, numerical methods, streams, threads, sensors, and data structures. Students use Java{{< sup “®” >}} programming language to complete weekly software assignments.
How is 1.00 different from other intro programming courses offered at MIT?
1.00 is a first course in programming. It assumes no prior experience, and it focuses on the use of computation to solve problems in engineering, science and management. The audience for 1.00 is non-computer science majors. 1.00 does not focus on writing compilers or parsers or computing tools where the computer is the system; it focuses on engineering problems where the computer is part of the system, or is used to model a physical or logical system.
1.00 teaches the Java programming language, and it focuses on the design and development of object-oriented software for technical problems. 1.00 is taught in an active learning style. Lecture segments alternating with laboratory exercises are used in every class to allow students to put concepts into practice immediately; this teaching style generates questions and feedback, and allows the teaching staff and students to interact when concepts are first introduced to ensure that core ideas are understood. Like many MIT classes, 1.00 has weekly assignments, which are programs based on actual engineering, science or management applications. The weekly assignments build on the class material from the previous week, and require students to put the concepts taught in the small in-class labs into a larger program that uses multiple elements of Java together.
https://ocw.mit.edu/courses/1-00-introduction-to-computers-and-engineering-problem-solving-spring-2012/

6.001 Structure and Interpretation of Computer Programs (none)
(Includes online textbook, exams, projects and lecture videos)
This course introduces students to the principles of computation. Upon completion of 6.001, students should be able to explain and apply the basic methods from programming languages to analyze computational systems, and to generate computational solutions to abstract problems.
https://ocw.mit.edu/courses/6-001-structure-and-interpretation-of-computer-programs-spring-2005/

6.002 Circuits and Electronics (none)
(Includes lecture videos, simulations, problem sets and exams)
The course introduces the fundamentals of the lumped circuit abstraction. Topics covered include: resistive elements and networks; independent and dependent sources; switches and MOS transistors; digital abstraction; amplifiers; energy storage elements; dynamics of first- and second-order networks; design in the time and frequency domains; and analog and digital circuits and applications.
https://ocw.mit.edu/courses/6-002-circuits-and-electronics-spring-2007/

6.004 Computation Structures (programming for ex 6.001 + 6.002)
(Includes problem sets with solutions and exams with solutions)
6.004 offers an introduction to the engineering of digital systems. Starting with MOS transistors, the course develops a series of building blocks — logic gates, combinational and sequential circuits, finite-state machines, computers and finally complete systems. Both hardware and software mechanisms are explored through a series of design examples.
https://ocw.mit.edu/courses/6-004-computation-structures-spring-2009/

6.005 Software Construction (none I can find)
(Includes problem sets, exams with solutions, online textbook and programming assignments)
6.005 Software Construction introduces fundamental principles and techniques of software development, i.e., how to write software that is safe from bugs, easy to understand, and ready for change. The course includes problem sets and a final project. Important topics include specifications and invariants; testing; abstract data types; design patterns for object-oriented programming; concurrent programming and concurrency; and functional programming.
The 6.005 website homepage from Spring 2016, along with all course materials, is available to OpenCourseWare users.
https://ocw.mit.edu/courses/6-005-software-construction-spring-2016/

6.006 Introduction to Algorithms (6.01Introduction to EECS 1 - Some other introduction will be fine + 6.042J Mathematics for Computer Science [18.01 Single Variable Calculus])
(Includes lecture videos, recitation videos, problem sets with solutions, exams with solutions and programming assignments with examples)
This course provides an introduction to mathematical modeling of computational problems. It covers the common algorithms, algorithmic paradigms, and data structures used to solve these problems. The course emphasizes the relationship between algorithms and programming, and introduces basic performance measures and analysis techniques for these problems.
https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/

6.033 Computer System Engineering (6.004 Computation Structures [See above] + 6.005 Software Construction)
(Includes written assignments, projects with examples and instructor insights)
This class covers topics on the engineering of computer software and hardware systems. Topics include techniques for controlling complexity; strong modularity using client-server design, operating systems; performance, networks; naming; security and privacy; fault-tolerant systems, atomicity and coordination of concurrent activities, and recovery; impact of computer systems on society.
https://ocw.mit.edu/courses/6-033-computer-system-engineering-spring-2018/

6.092 Java Preparation for 6.170 (none)
(Includes projects)
This course focuses on introducing the language, libraries, tools and concepts of Javaᵀᴹ. The course is specifically targeted at students who intend to take 6.170 in the following term and feel they would struggle because they lack the necessary background. Topics include: Object-oriented programming, primitives, arrays, objects, inheritance, interfaces, polymorphism, hashing, data structures, collections, nested classes, floating point precision, defensive programming, and depth-first search algorithm.
https://ocw.mit.edu/courses/6-092-java-preparation-for-6-170-january-iap-2006/

6.42J Mathematics for Computer Science (18.01 Single Variable Calculus)
(Includes online textbook, lecture videos, problem sets and exams)
This subject offers an interactive introduction to discrete mathematics oriented toward computer science and engineering. The subject coverage divides roughly into thirds:
Fundamental concepts of mathematics: Definitions, proofs, sets, functions, relations.
Discrete structures: graphs, state machines, modular arithmetic, counting.
Discrete probability theory.
On completion of 6.042J, students will be able to explain and apply the basic methods of discrete (noncontinuous) mathematics in computer science. They will be able to use these methods in subsequent courses in the design and analysis of algorithms, computability theory, software engineering, and computer systems.
This course is part of the Open Learning Library, which is free to use. You have the option to sign up and enroll in the course if you want to track your progress, or you can view and use all the materials without enrolling.
https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-science-spring-2015/

Introduction to Algorithms (SMA 5503) (6.006 Introduction to Algorithms + 6.001 Structure and Interpretation of Computer Programs)
(Includes lecture videos, problem sets with solutions, exams with solutions and programming assignments with examples)
This course teaches techniques for the design and analysis of efficient algorithms, emphasizing methods useful in practice. Topics covered include: sorting; search trees, heaps, and hashing; divide-and-conquer; dynamic programming; amortized analysis; graph algorithms; shortest paths; network flow; computational geometry; number-theoretic algorithms; polynomial and matrix calculations; caching; and parallel computing.
https://ocw.mit.edu/courses/6-046j-introduction-to-algorithms-sma-5503-fall-2005/

6.170 Software Studio (Can do 6.092 - not required)
(Includes projects)
This course on software engineering covers design and implementation of medium-scale software systems, using web applications as a platform. In the course, students learn the fundamentals of structuring a web application and writing modular code, with an emphasis on conceptual design to achieve clarity, simplicity, and modularity. Topics also include functional programming, relational databases, and security.
https://ocw.mit.edu/courses/6-170-software-studio-spring-2013/

18.01SC Single Variable Calculus (none)
(Includes exams with solutions, lecture videos, problem sets with solutions and simulations)
This calculus course covers differentiation and integration of functions of one variable, and concludes with a brief discussion of infinite series. Calculus is fundamental to many scientific disciplines including physics, engineering, and economics.

18.02SC Multivariable Calculus (18.01 Single Variable Calculus)
(Includes simulations, exams with solutions, problem sets with solutions and lecture videos)
This course covers differential, integral and vector calculus for functions of more than one variable. These mathematical tools and methods are used extensively in the physical sciences, engineering, economics and computer graphics.
The materials have been organized to support independent study. The website includes all of the materials you will need to understand the concepts covered in this subject.
https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/

Extra (undergraduate)

6.00SC Introduction to Computer Science and Programming (none)
(Includes lecture videos, recitation videos, problem sets with solutions, exams with solutions, online textbook and programming assignments with examples)
This subject is aimed at students with little or no programming experience. It aims to provide students with an understanding of the role computation can play in solving problems. It also aims to help students, regardless of their major, to feel justifiably confident of their ability to write small programs that allow them to accomplish useful goals. The class will use the Python programming language.
https://ocw.mit.edu/courses/6-00sc-introduction-to-computer-science-and-programming-spring-2011/

6.031 Software Construction (none)
(Includes a project, problem sets, quizzes and solutions and other semesters courses with readings (haven't checked them out)
Software construction is a software engineering discipline. It is the detailed creation of working meaningful software through a combination of coding, verification, unit testing, integration testing, and debugging. It is linked to all the other software engineering disciplines, most strongly to software design and software testing.[1]
https://web.mit.edu/6.031/www/sp22/

6.087 Practical Programming in C (none)
(Includes projects and programming assignments with examples)
This course provides a thorough introduction to the C programming language, the workhorse of the UNIX operating system and lingua franca of embedded processors and micro-controllers. The first two weeks will cover basic syntax and grammar, and expose students to practical programming techniques. The remaining lectures will focus on more advanced concepts, such as dynamic memory allocation, concurrency and synchronization, UNIX signals and process control, library development and usage. Daily programming assignments and weekly laboratory exercises are required. Knowledge of C is highly marketable for summer internships, UROPs, and full-time positions in software and embedded systems development.

6.088 Introduction to C Memory Management and C++ and Object-Orientated Programming (none)
(Includes programming assignments)
Ever hang your head in shame after your Python program wasn’t as fast (LOL) as your friend’s C program? Ever wish you could use objects without having to use Java? Join us for this fun introduction to C and C++! We will take you through a tour that will start with writing simple C programs, go deep into the caves of C memory manipulation, resurface with an introduction to using C++ classes, dive deeper into advanced C++ class use and the C++ Standard Template Libraries. We’ll wrap up by teaching you some tricks of the trade that you may need for tech interviews.
We see this as a “C/C++ empowerment” course: we want you to come away understanding
why you would want to use C over another language (control over memory, probably for performance reasons),
why you would want to use C++ rather than C (objects), and
how to be useful in C and C++.

6.035 Computer Language Engineering (6.170 Software Studio)
(Includes Lecture videos and projects)
6.035 is a course within the department’s “Computer Systems and Architecture” concentration. This course analyzes issues associated with the implementation of high-level programming languages. Topics covered include: fundamental concepts, functions, and structures of compilers, basic program optimization techniques, the interaction of theory and practice, and using tools in building software. The course features a multi-person project on design and implementation of a compiler that is written in Java® and generates MIPS executable machine code.
https://ocw.mit.edu/courses/6-035-computer-language-engineering-sma-5502-fall-2005/

6.S095 Programming for the puzzled (none)
This class builds a bridge between the recreational world of algorithmic puzzles (puzzles that can be solved by algorithms) and the pragmatic world of computer programming, teaching students to program while solving puzzles. Python syntax and semantics required to understand the code are explained as needed for each puzzle.
https://ocw.mit.edu/courses/6-s095-programming-for-the-puzzled-january-iap-2018/

6.S096 Effective Programming in C and C++ (none, maybe some other programming language experience)
This course is a fast-paced introduction to the C and C++ programming languages, with an emphasis on good programming practices and how to be an effective programmer in these languages. Topics include object-oriented programming, memory management, advantages of C and C++, optimization, and others. Students are given weekly coding assignments and a final project to hone their skills. Recommended for programmers with some background and experience in other languages.
https://ocw.mit.edu/courses/6-s096-effective-programming-in-c-and-c-january-iap-2014/

Other

11.52 Research Seminar on Urban Information Systems (none)
(includes written assignments and presentation assignments)
Seminar participants and invited guests will lead critical discussions of current literature and ongoing research. Each student will be responsible for identifying, reviewing, and presenting one structured discussion of articles from the current literature that are relevant to their research topic. The remaining time will be spent working on individual projects or thesis proposals. This fall, the seminar will focus on the following core issues that underlie most implementations of urban information systems and decision support tools: the sustainable acquisition and representation of urban knowledge; the emergent technological infrastructure for supporting metropolitan decision-making; and the innovative organizational and institutional arrangements that can take advantage of modern urban information systems.
https://ocw.mit.edu/courses/11-522-research-seminar-on-urban-information-systems-fall-2005/

21W.789 Communicating with Mobile Technology (1.00 Introductions to Computers and Engineering Problem Solving + 6.005 Software Construction)
Students work in small collaborative design teams to propose, build, and document a semester-long project focused on mobile applications for cell phones. Additional assignments include creating several small mobile applications such as context-aware mobile media capture and games. Students document their work through a series of written and oral proposals, progress reports, and final reports. This course covers the basics of J2ME and explores mobile imaging and media creation, GPS location, user-centered design, usability testing, and prototyping. Java experience is recommended.
https://ocw.mit.edu/courses/21w-789-communicating-with-mobile-technology-spring-2011/

RES.6-033 Principles of Computer System Design: an Introduction
(Online textbook, problem sets and no lecture notes)
Principles of Computer System Design: An Introduction is published in two parts. Part I, containing chapters 1-6, is a traditional printed textbook published by Morgan Kaufman, an imprint of Elsevier. Part II, containing chapters 7-11, is available here as an open educational resource.
This textbook, an introduction to the principles and abstractions used in the design of computer systems, is an outgrowth of notes written for 6.033 Computer System Engineering over a period of 40-plus years. Individual chapters are also used in other EECS subjects. There is also a web site for the current 6.033 class with a lecture schedule that includes daily assignments, lecture notes, and lecture slides. The 6.033 class Web site also contains a thirteen-year archive of class assignments, design projects, and quizzes.

If you want to see my progress in making this (Don't judge my spreadsheet skills:

A collection of all the courses that could be interesting. Useful to view in obsidian -
[deleted link]

All the courses I thought people would enjoy -
[deleted link]

The courses I'm going to do -
[deleted link]

Thanks for reading Hope this is useful

@waciumawanjohi
Copy link
Member

Hi @1404Damel
It looks like you have a great learning journey ahead of you! OSSU is always happy to bring together learners that are interested in free online education. And that enjoy geeking out on finding great resources. Definitely drop into the Discord and say hello.

I don't know what you're specifically looking for or even if you want to add the extra graduate courses.

In terms of what OSSU recommends there are a couple of things:

Courses must:

We're always happy to have contributors who are interested in evaluating the courses available and how well suited they are for OSSU. If you'd like to help with that effort in the future, take a look at our contributing guide.

Aside: I've edited your post to remove links to Dropbox files. If you'd like to share spreadsheets I recommend using Google Sheets, as it does not require users downloading files to their individual machines.

@Choubs01
Copy link
Contributor

After going through the curriculum students will already be aware of all these resources and OSSU effectively covers CS curriculum. The link provides a nice comprehensive list of courses so perhaps add it to courses.md in extras folder (https://github.com/ossu/computer-science/blob/master/extras/courses.md)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants