The Open Courseware here deals with mainstream topics in some length and detail but since many of the same topics appear again and again it is not at all necessary (or realistic!) to study everything exhaustively. First select the courseware you want to study in detail and then refer to any other resource to clarify and reinforce concepts. If you are inexperienced keep to one programming language at first (Python is a popular choice), focusing on courseware that uses the same language.
- Intended as required material for understanding and ultimately designing digital systems, this course of 25 lectures by Steve Ward (MIT OpenCourseWare (US)), includes lecture slides, lab assignments, tutorial problems and quizzes with solutions as well as "A Student's Guide to the Digital World" (12 page PDF) by Margaret Chong. Learners should feel comfortable using computers and a rudimentary knowledge of programming language concepts and electrical fundamentals is assumed.
" .... 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."
- Building on material from the last half of "Computation Structures" (see above) these 22 videoed lectures by Hari Balakrishnan and Samuel Madden (MIT OpenCourseWare (US)) take off at a substantially faster pace.
" .... 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."
- An introductory course by Wikiversity. There is no focus on any one programming language and examples are taken from a number of languages or given in a pseudocode. No prior experience with programming is assumed but basic computer literacy and some familiarity with high school algebra is advisable.
Lessons: About Programming, Programming Languages, How a Program is Organized, Variables (Part 1, 2 and 3), Control Structures, Sub-Programs, Scope
- No apologies for mentioning again this classic MIT course from 1986 - 20 videod lectures by Hal Abelson and Gerald Jay Sussman. On completing the course learners 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."
Note that Building Programming Experience given by Benjamin Vandiver, also of MIT, is a 4 week course providing an "aggressively gentle introduction to programming for those students who lack background in the field" and acts as a "lead-in" to the course above.
- Online version of the book (MIT Press - Contents) by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt and Shriram Krishnamurthi. PLT Scheme is used as a programming language including the freely available DrScheme programming environment.
"In this book, we will learn to design computer programs, and we will learn to understand how they function. Becoming and being a programmer is fun, but it is not easy. .... programming languages are primitive; especially, their grammar is restrictive. And unfortunately, computers are stupid. The smallest grammatical mistake in a program is a fatal stumbling block for a computer. Worse, once our program is in proper grammatical shape, it might not perform the computations as intended."
- Short course by Mihir Kedia and Aseem Kishorefrom from MIT OpenCourseWare includes readings, assignments and projects.
" .... for highly motivated students with little or no prior experience in programming computers. The course will focus on planning and organizing programs, as well as the grammar of the Python programming language."
Topics: Variables and types, Functions, basic recursion, Control flow (Branching and repetition), Introduction to objects (Strings and lists), Project 1 (Structuring larger programs), Python modules, debugging programs, Introduction to data structures (Dictionaries), Functions as a type, anonymous functions and list comprehensions, Project 2 (Working in a team)
- This course by Richard Buckland, (award-winning lecturer in the School of Computer Science and Engineering, University of New South Wales (AU)), follows on from his more basic "Higher Computing" described before. In Lecture 1 on Algorithm Analysis a group of his students act out the steps of a sorting algorithm. "This is one of best tutorial i have ever found in internet." writes an enthused YouTube learner.
Topics: Principles of Algorithm Analysis, The Problem of Sorting, Reasoning about Algorithms, ADTS, Searching, Graphs, Balancing Trees, Computability, Conclusion and Reviews
- Fundamentals of computer architecture and organization, from Connexions by Nguyen Thi Hoang Lan - 16 modules and with exercises and notes. The notes can be downloaded as a single illustrated PDF of over 150 pages.
Topics: Introduction to Organization and Architecture of Computer; Overview of Computer Organization; Computer Arithmetic; Instruction-set Architecture; CPU Structure and Function; Control Unit Operation; Micro-Programming; Instruction Pipelining; Multilevel Memories; Cache Memory; Internal Memory; External Memory; Input/Output; Operating System Support; Virtual Memory; Advanced Architectures
- Examining Computer Hardware from the Bottom to the Top. A freely downloadable 408 page textbook by David Tarnoff of East Tennessee State University covering the basic design principles of the modern digital computer as well as a top-level examination of its architecture.
- 29 videoed lectures by Dave Patterson of UC Berkeley covering the inner-workings of modern digital computer systems and tradeoffs present at the hardware-software interface.
Topics: Instruction set design; computer arithmetic; controller and datapath design; cache and memory systems; input-output systems; networks interrupts and exceptions; pipelining; performance and cost analysis; computer architecture history; survey of advanced architectures;
More information about this 2003/2004 course can be found here but see the updated 2009 version given by Krste Asanovic - no videos but copious PDF notes and illustrations.
Post new comment