Free Computer Science Video Lecture Courses – Part 1

Computer Science

Here is a list of video lectures in computer science I had collected over the years.
This list is only two-thirds of all links I have in my bookmarks, I will go through the rest of links later. Check back.

For formal computer science education here is an overview of a bachelor degree in computer science.

Web Applications

Teaches basics of designing a dynamic web site with a database back end, including scripting languages, cookies, SQL, and HTML with the goal of building such a site as the main (group) project Emphasizes computer-human interface and the graphical display of information.

Structure and Interpretation of Computer Programs

Structure and Interpretation of Computer Programs has been MIT’s introductory pre-professional computer science subject since 1981. It emphasizes the role of computer languages as vehicles for expressing knowledge and it presents basic principles of abstraction and modularity, together with essential techniques for designing and implementing computer languages. This course has had a worldwide impact on computer science curricula over the past two decades.

Structure and Interpretation of Computer Programs (a different course)

An introduction to programming and the power of abstraction, using Abelson and Sussman’s classic textbook of the same name. Key concepts include: building abstractions, computational processes, higher-order procedures, compound data, data abstractions, controlling interactions, generic operations, self-describing data, message passing, streams and infinite data structures, meta-linguistic abstraction, interpretation of programming languages, machine model, compilation, and embedded languages.

Structure and Interpretation of Computer Programs (a different course)

  • Video Lectures: CS61A (Berkeley)
  • Course website

The CS 61 series is an introduction to computer science, with particular emphasis on software and on machines from a programmer’s point of view. This first course concentrates mostly on the idea of abstraction, allowing the programmer to think in terms appropriate to the problem rather than in low-level operations dictated by the computer hardware. The next course, CS 61B, will deal with the more advanced engineering aspects of software on constructing and analyzing large programs and on techniques for handling computationally expensive programs. Finally, CS 61C concentrates on machines and how they carry out the programs you write.
In CS 61A, we are interested in teaching you about programming, not about any particular programming language. We consider a series of techniques for controlling program complexity, such as functional programming, data abstraction, object-oriented programming, and query systems. To get past generalities you must have programming practice in some particular language, and in this course we use Scheme, a dialect of Lisp. This language is particularly well-suited to the organizing ideas we want to teach. Our hope, however, is that once you have learned the essence of programming, you will find that picking up a new programming language is but a few days’ work.

Data Structures

The CS 61 series is an introduction to computer science, with particular emphasis on software and on machines from a programmer’s point of view. CS 61A covered high-level approaches to problem-solving, providing you with a variety of ways to organize solutions to programming problems: as compositions of functions, collections of objects, or sets of rules. In CS 61B, we move to a somewhat more detailed (and to some extent, more basic) level of programming. As in 61A, the correctness of a program is important. In CS 61B, we’re concerned also with engineering. An engineer, it is said, is someone who can do for a dime what any fool can do for a dollar. Much of 61B will be concerned with the tradeoffs in time and memory for a variety of methods for structuring data. We’ll also be concerned with the engineering knowledge and skills needed to build and maintain moderately large programs.

Machine Structures

The subjects covered in this course include C and assembly language programming, how higher level programs are translated into machine language, the general structure of computers, interrupts, caches, address translation, CPU design, and related topics. The only prerequisite is that you have taken Computer Science 61B, or at least have solid experience with a C-related programming language.

Programming Languages

Goals: Successful course participants will:
• Master universal programming-language concepts (including datatypes, functions, continuations, threads,
macros, types, objects, and classes) such that they can recognize them in strange guises.
• Learn to evaluate the power, elegance, and definition of programming languages and their constructs
• Attain reasonable proficiency programming in a functional style
• Find relevant literature somewhat more approachable.

Principles of Software Engineering

Study of major developments in software engineering over the past three decades. Topics may include design (information hiding, layering, open implementations), requirements specification (informal and formal approaches), quality assurance (testing, verification and analysis, inspections), reverse and re-engineering (tools, models, approaches).

Object Oriented Program Design

The concepts of the Object-oriented paradigm using Java. The basic principles of software engineering are emphasized. We study how to design and think in an object oriented fashion.

Algorithms

The design and analysis of algorithms is studied. Methodologies include: divide and conquer, dynamic programming, and greedy strategies. Their applications involve: sorting, ordering and searching, graph algorithms, geometric algorithms, mathematical (number theory, algebra and linear algebra) algorithms, and string matching algorithms.

We study algorithm analysis – worst case, average case, and amortized, with an emphasis on the close connection between the time complexity of an algorithm and the underlying data structures. We study NP-Completeness and methods of coping with intractability. Techniques such as approximation and probabilistic algorithms are studied for handling the NP-Complete problems.

Introduction to Algorithms

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.

Systems

Topics on the engineering of computer software and hardware systems: techniques for controlling complexity, system infrastructure, networks and distributed systems, atomicity and coordination of parallel activities, recovery and reliability, privacy of information, impact of computer systems on society. Case studies of working systems and outside reading in the current literature provide comparisons and contrasts.

Computer System Engineering

  • Video Lectures: 6.033 (MIT) (first 3 lectures don’t have videos)
  • Course homepage

This course covers topics on the engineering of computer software and hardware systems: techniques for controlling complexity; strong modularity using client-server design, virtual memory, and threads; networks; atomicity and coordination of parallel activities; recovery and reliability; privacy, security, and encryption; and impact of computer systems on society. We will also look at case studies of working systems and readings from the current literature provide comparisons and contrasts, and do two design projects.

Graduate Computer Architecture

This course focuses on the techniques of quantitative analysis and evaluation of modern computing systems, such as the selection of appropriate benchmarks to reveal and compare the performance of alternative design choices in system design. The emphasis is on the major component subsystems of high performance computers: pipelining, instruction level parallelism, memory hierarchies, input/output, and network-oriented interconnections.

Computer Architecture

The purpose of this course is to give you a broad understanding of the concepts behind several advanced microarchitectural features in today’s microprocessors and to illustrate those concepts with appropriate (usually modern) machine examples. We will cover the rationale for and the designs of strategies for instruction sets, dynamic branch prediction, multiple-instruction issue, dynamic (out-of-order) instruction scheduling, multithreaded processors, shared memory multiprocessors, and, if there is time, dataflow machines. Some of these topics require some understanding from what is normally thought of as undergraduate material; for these, we’ll briefly review that material, and then go on from there.

You will augment your knowledge of the architectural schemes by doing experimental studies that examine and compare the performance of several alternative implementations for a particular feature. Here you will learn how to design architectural experiments, how to choose metrics that best illustrate a feature’s performance, how to analyze performance data and how to write up your experiment and results – all skills computer architects, and, actually, researchers and developers in any applied subfield of computer science, use on a regular basis.

Operating Systems and System Programming

The purpose of this course is to teach the design of operating systems and other systems. Topics we will cover include concepts of operating systems and systems programming; utility programs, subsystems, multiple-program systems; processes, interprocess communication, and synchronization; memory allocation, segmentation, paging; loading and linking, libraries; resource allocation, scheduling, performance evaluation; I/O systems, storage devices, file systems; basic networking, protocols, and distributed file systems, protection, security, and privacy.

How Computers Work

Includes the basics of digital logical design, computer organization and architecture including assembly language, processor design, memory hierarchies and pipelining. Students examine the detailed construction of a very simple computer. A higher level view of a modern RISC architecture is studied, using the Patterson and Hennessey introductory text, from both the programmer’s point of view and the hardware designer’s point of view. The distinction between RISC and CISC architectures is emphasized.

Performance Analysis

  • Video Lectures: CSE 597 (University of Washington)
  • Course website

This course is intended to provide a broad introduction to computer system performance evaluation techniques and their application. Approaches considered include measurement/benchmarking, stochastic and trace driven simulation, stochastic queueing networks, and timed Petri

Database Management Systems

A more formal approach to Relational Database Management Systems, compared the way they were covered during Web Applications. Database systems are discussed from the physical layer of B-trees and file servers to the abstract layer of relational design. Also includes alternative and generic approaches to database design and database management system including relational, object-relational, and object-oriented systems, SQL standards, algebraic query languages, integrity constraints, triggers, functional dependencies, and normal forms. Other topics include tuning database transactions, security from the application perspective, and data warehousing.


Database Management Systems

Databases are at the heart of modern commercial application development. Their use extends beyond this to many applications and environments where large amounts of data must be stored for efficient update and retrieval. The purpose of this course is to provide an introduction to the design and use of database systems, as well as an appreciation of the key issues in building such systems, and working with multiple database systems.
We begin by covering basis aspcts of SQL, and illustrating several data management concepts through SQL features (e.g., views, constraints and triggers). Next, we study conceptual database design and normalization theory. We then study management of XML data, and cover the XPath and XQuery languages. We consider the issues arising in data integration from multiple databases, and more generally, issues in managing meta-data. Finally, we cover the basic aspects of the internals of database systems.

Transaction Processing for E-Commerce

Course covers Database Concurrency Control, Database Recovery, Basic Application Servers, Two-Phase Commit, Queuing, Replication, Application Servers.

Practical Aspects of Modern Cryptography

Course covers Symmetric Key Ciphers and Hashes, Public Key Ciphers, Analysis of Block Ciphers, AES and Attacks on Cryptographic Hashes, Certificates, Trust & PKI, Public Key Cryptography, Digital Rights Management, The Politics of Cryptography

Theory of Computation

A theoretical treatment of what can be computed and how fast it can be don. Applications to compilers, string searching, and control circuit design will be discussed. The hierarchy of finite state machines, pushdown machines, context free grammars and Turing machines will be analyzed, along with their variations. The notions of decidability, complexity theory and a complete discussion of NP-Complete problems round out the course.

Artificial Intelligence (4 lectures)

An quick overview of AI from both the technical and the philosophical points of view. Topics discussed include search, A*, Knowledge Representation, Neural Nets.

Applications of Artificial Intelligence

Introduction to the use of Artificial Intelligence tools and techniques in industrial and company settings. Topics include: foundations (search, knowledge representation) and tools such as expert systems, natural language interfaces and machine learning techniques.

Here is a list of video lectures in computer science I had collected over the years.
This list is only two-thirds of all links I have in my bookmarks, I will go through the rest of links later. Check back.

For formal computer science education here is an overview of a bachelor degree in computer science.

Web Applications

Teaches basics of designing a dynamic web site with a database back end, including scripting languages, cookies, SQL, and HTML with the goal of building such a site as the main (group) project Emphasizes computer-human interface and the graphical display of information.

Structure and Interpretation of Computer Programs

Structure and Interpretation of Computer Programs has been MIT’s introductory pre-professional computer science subject since 1981. It emphasizes the role of computer languages as vehicles for expressing knowledge and it presents basic principles of abstraction and modularity, together with essential techniques for designing and implementing computer languages. This course has had a worldwide impact on computer science curricula over the past two decades.

See Part 2 here

(via: freescienceonline)

Additional Resources

Comments

  1. Rafieferana Faly says:

    I would like to partner with you with the Online University I am planning to establish in the rural communiies of Madagascar.
    Best regards,
    Faly

  2. I’m glad this free service is available. Computer science skills are a hot commodity, but two few people have the means to pay for the education. This will help a lot of people get jobs.

Speak Your Mind

*