Distributed 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.

(Click below link to follow Course Videos)

·         Course website

Algorithm Design and Analysis

Course Description:
In this course 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. 

Text: Introduction to Algorithms, Cormen, Rivest, Leiserson.

(Click below link to follow Course Videos)

Object Oriented Program Design and Software Engineering

Course Description:

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. As a final project, students work in groups to develop a Gnutella distributed music-sharing client.

(Click below link to follow Course Videos)

Principles of Software Engineering

Course Description:

 Topics include overview of software engineering requirements specification (informal and formal approaches), design (information hiding, layering, open implementations), quality assurance (testing, verification and analysis, inspections), reverse and re-engineering (tools, models, approaches), Evolution of Software Engineering.

(Click below link to follow Course Videos)
  • Video Lectures: CS584 (University of Washington)

Programming Languages

Course 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.


(Click below link to follow Course Videos)
  • Video Lectures Link: CSEP505 (University of Washington)

Structure and Interpretation of Computer Programs

Video Lectures by InstructorHolly Yanco and John Pezaris

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.

(Click below link to follow Course Videos)

Structure and Interpretation of Computer Programs

Course Description:
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. The accompanying textbook by Hal Abelson, Gerald Jay Sussman, and Julie Sussman is available for purchase from the MIT Press, which also provides a freely available on-line version of the complete textbook.

These twenty video lectures by Hal Abelson and Gerald Jay Sussman are a complete presentation of the course, given in July 1986 for Hewlett-Packard employees, and professionally produced by Hewlett-Packard Television. The videos have been used extensively in corporate training at Hewlett-Packard and other companies, as well as at several universities and in MIT short courses for industry.

Video Lectures by Hal Abelson and Gerald Jay Sussman

(Click below link to follow Course Videos)

Dynamic Web Applications

Course Description:
This course teaches the 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. Crucial to the project is the identification of a client with whom the group must work with throughout the month, designing specifications, implementing them, reviewing and evaluating, and testing. This is a real-life client who intends to host the site for the purposes of building a community.

Text: Philip and Alex's Guide to Web Publishing, P. Greenspun. Lecture notes, ORACLE reference.


(Click below link to follow Course Videos)

Software Engineering for Web Applications

Course Description:

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. Crucial to the project is the identification of a client with whom the group must work with throughout the month, designing specifications, implementing them, reviewing and evaluating, and testing. This is a real-life client who intends to host the site for the purposes of building a community.

Texts: Philip and Alex's Guide to Web Publishing, P. Greenspun. Lecture notes, ORACLE reference.


(Click below link to follow Course Videos)

The Akamai Story

The Akamai Story: From Theory to Practice

Lecture description:

If you have ever wondered what it means for a website to become "Akamaized," this lecture about the company's origins explains much of the mystery. But before there was an Akamai, there were research problems—lots of them.
Nearly 15 years ago, Tim Berners-Lee, architect of the World Wide Web, asked Tom Leighton to think about solutions to future -- and now familiar-- Internet issues: bottlenecks that form when users flood to a particular site, often along a single Internet supply line. Leighton's team generated algorithms (and publications and advanced degrees) while figuring out the fastest means to move information from here to there.
 Along the way, they learned some tricks to outsmart Internet service providers who slow traffic down by bumping competitors' data from their network lines. Akamai (which means clever and cool in Hawaiian) got its start in the MIT 50k competition, and took off when some big name clients decided to give the company a trial run. Paramount, ESPN, Apple, and Microsoft recognized the importance of Akamai's Internet optimization strategy: distributing servers and routing software to the “edge” or end users, rather than centralizing services. Akamai survived the stock market “bubble” and collapse, and now serves a diverse global market.



(Click below link to follow Course Videos)

Cryptography

Cryptography - Science or Magic?


Lecture description:

Examples of the "tricks" that can be performed with modern cryptographic techniques will be presented and each trick explored to see whether it is "science" (i.e., it can be proved to do what it seems to do) or "magic" (i.e., what it seems to do is, or may be, only an illusion). The tricks considered will include no-break cryptography, no-leak secret sharing, no-key cryptography, no-see signatures, no-watch coin tossing, and no-knowledge proofs.




(Click below link to follow Course Videos)

Introduction to Clojure

Introduction to Clojure

·         Clojure Videos

Clojure video description:
Ten videos on Clojure. Presents the big ideas in Clojure, a new dialect of Lisp. Assumes basic knowledge of Java but not Lisp.

Clojure for Lisp Programmers

Clojure for Java Programmers

Clojure Data Structures

Misc. Clojure Video Lectures
·         Clojure Sequences
·         Clojure Concurrency

Computers and the Internet

Understanding Computers and the Internet


Video course description:
This course is all about understanding: understanding what's going on inside your computer when you flip on the switch, why tech support has you constantly rebooting your computer, how everything you do on the Internet can be watched by others, and how your computer can become infected with a worm just by turning it on. In this course we demystify computers and the Internet, along with their jargon, so that students understand not only what they can do with each but also how it all works and why. Students leave this course armed with a new vocabulary and equipped for further exploration of computers and the Internet. Topics include hardware, software, the Internet, multimedia, security, website development, programming, and dotcoms. This course is designed both for those with little, if any, computer experience and for those who use a computer every day.

Course topics:
Hardware - Computation. Overview. Bits and bytes. ASCII. Processors. Motherboards: buses, connectors, ports, slots, and sockets. Memory: ROM, RAM, and cache. Secondary storage: floppy disks, hard disks (PATA and SATA), CDs, and DVDs. Virtual Memory. Expansion buses and cards: AGP, ISA, PCI, PCI Express, and SCSI. I/O devices. Peripherals. How to shop for a computer. History. The Internet - Networks: clients and servers, peer-to-peer, LANs and WLANs, the Internet, and domains. Email: addresses; IMAP, POP and SMTP; netiquette; spam; emoticons; snail mail; and listservs. SSH. The World Wide Web: URLs and HTTP. Blogs. Instant messaging. SFTP. Usenet. Network topologies. The Internet: backbones, TCP/IP, DHCP, and DNS. NAT. Ethernet: NICs, cabling, switches, routers, and access points. Wireless: IR, RF, Bluetooth, and WiFi. ISPs. Modems: dialup, cable, and DSL. Multimedia - Graphics: file formats, bitmaps and vectors, and compression. Audio: file formats and compression. Video (and audio): file formats and compression. Streaming. Security - Threats to privacy: cookies, forms, logs, and data recovery. Security risks: packet sniffing, passwords, phishing, hacking, viruses and worms, spyware, and zombies. Piracy: WaReZ and cracking. Defenses: scrubbing, firewalls, proxy servers, VPNs, cryptography, virus scanners, product registration and activation. Website Development - Webservers: structure, permissions, and implementations. Static webpages: XHTML, well-formedness, and validity. Dynamic webpages: SSIs, DHTML, AJAX, CGI, ASPs, and JSPs. Programming - Pseudocode. Constructs: instructions, variables, conditions, branches, and loops. Languages: interpreted and compiled. Scratch. 




(Click below link to follow Course Videos)

Compiler Optimization

Course description:
This course introduces students to modern techniques in efficient implementation of programming languages. Modern processors and systems are designed based on the assumption that a compiler will be able to effectively exploit architectural resources. This course will examine in detail techniques to exploit instruction level parallelism, memory hierarchy and higher level parallelism. It will examine classic static analysis approaches to these problems and introduce newer feedback directed and dynamic approaches to optimisation.

Course topics:
Scalar Optimisation - Redundant Expressions. Scalar Optimisation - Dataflow Framework and SSA. Code Generation. Instruction Scheduling. Register Allocation. Dependence Analysis. Program Transformations. Vectorisation. Parallelisation. Adaptive and Profile Directed Compilation. Iterative + Dynamic Compilation. Dynamic Compilation. Machine Learning based Compilation.







(Click below link to follow Course Videos)

Data Structures





Data Structures (Berkeley, professor Paul Hilfinger)

Course description:
Fundamental dynamic data structures, including linear lists, queues, trees, and other linked structures; arrays strings, and hash tables. Storage management. Elementary principles of software engineering. Abstract data types. Algorithms for sorting and searching. Introduction to the Java programming language.

Course topics:
Developing a Simple Program. More on Simple Programs. Values and Containers. Simple Pointer Manipulation. Arrays and Objects. Object-Oriented Mechanisms. Interfaces and Abstract Classes. Abstract Methods and Classes, Continued. Examples of Interfaces. Misc. Support for Abstraction; Exceptions. Numbers. Algorithmic Analysis. Collections Overview. Paradox of Voting. Resource Curse. Getting a View - Sublists. Data Structures Exam Review. Trees. Trees, Searching. Generic Programming. Priority Queues, Range Queries. Hashing. Sorting. Balanced Search Structures. Pseudo-Random Sequences. Backtracking Search, Game Trees. Enumeration Types, Threads, and Concurrency. Graphs, Introduction. Graphs, Minimal Spanning Trees, Union-find. Dynamic Programming. Storage Management. Storage Management, Continued, Reflection. Data Structures Course Summary.




(Click below link to follow Course Videos)

Introduction to Computer Science

Course description:
Introduction to Computer Science I is a first course in computer science at Harvard College for concentrators and non-concentrators alike. More than just teach you how to program, this course teaches you how to think more methodically and how to solve problems more effectively. As such, its lessons are applicable well beyond the boundaries of computer science itself. That the course does teach you how to program, though, is perhaps its most empowering return. With this skill comes the ability to solve real-world problems in ways and at speeds beyond the abilities of most humans.

Course topics:
How Computers Work, Binary. Introduction to Programming and Scratch. Threads and Programs with Multiple Scripts. Binary Numbers, Programming Languages, Working in Linux, and Programming in C. Secure File Transfer, Variable Types, and Arithmetic Operators. Standard Input Functions, Boolean Expressions, and Loops. Cryptography, Bugs, Integer Casting, and Functions. Local and Global Variables, the Stack, Return Values, and Arrays. Strings as Arrays, Command-Line Arguments, and more Cryptography. Run Times and Algorithms, Recursion. Sorting: Bubble Sort, Selection Sort, and Merge Sort. Hardware, Processors, and Implications for Software. Greedy Algorithms, Software Design and Debugging. Pointers. Pointers and Arrays, Dynamic Memory Allocation. Pointer Arithmetic, Structures, File I/O. Linked Lists. Inserting and Deleting Elements in Linked Lists, Doubly-Linked Lists. Hash Tables, Dealing with Collisions. Pointers to Pointers, Binary Search Tree, Tries, Heaps. Heapsort, Jeopardy. Huffman Coding Theory. Bitwise Operators, Underneath the Hood - From Code to Executable File. Dangerous Functions, Secure Code. The Internet and Webpages - HTTP and XHTML. Introduction to PHP. User Input, Setting up a Login Page, SQL. Threats. Introduction to LISP. Brief Introduction to System Programming and Machine Organization. Conclusions. 



Introduction to Computer Science (Harvard, professor David J. Malan)

(Click below link to follow Course Videos)


Introduction to Computer Science

Higher Computing (University of New South Wales, by Richard Buckland, COMP1917)


Course description:
This is the introductory course for computer science at UNSW. This course consists of three strands: programming, systems, and general computer-science literacy. The programming strand is further divided into two parts. For the first half of the course we cover small scale programming, in the second half we look at how to effectively use teams to produce more substantial software. In the systems strand we will look at how computers work. Concentrating on microprocessors, memory, and machine code. In the literacy strand we will look at topics drawn from: computing history, algorithms, WWW programming, ethics and law, cryptography and security, and other topics of general interest. The strands will be covered in an intermingled fashion.

Course topics:
Higher Computing. Inside a computer. Machine Code. Simple C Program. Clarity (C programming #2). Solving Problems. Side Effects. A simple recursive function. The Amazing Alan Turing. The Turing Test. Frames. Arrays. Pass by reference. Game design. Everything you need to know about pointers. Sudoku solver. Stack Frames. eXtreme Programming. VS programming. Programming in the Large. Stress. Random Numbers. The Trouble with Concrete Types. Abstract Data Types in C. Blackadder and Baldrick. ADT. Steganography (hidden messages). Don't give up. File I/O. Linked lists. Experimenting with CMOS. Complexity & Trees. Errors, Risks, Snarks, Boojums. Taste of Graphics. Sample Tree Code: loop detection. Ethics. Hamming Error Correcting Code. Professionalism. What makes a good programmer? Learning and Teaching Computing. Coding samples.




(Click below link to follow Course Videos)