com
Preface
At present, Open Courseware (OCW) usually consists of educational material (lecture notes,
videos, slide presentations, assignments, readings, etc) created for a conventional university or
college course and comes without learner support such as expert tuition, contact with fellow
learners or examinations and the prospect of recognized qualifications. iBerry's OCW2 Project project is
attempting to fill the gap between existing OCW and its usability by online learners by bringing together
good Open Courseware, motivational material, subject guides, open textbooks, links to learning
communities, etc. etc. for specific academic topics - all based on Open Educational Resources (OER).
OCW2 Computer Science and Information Technology is the second academic subject to be tackled by
iBerry in this way (the first was OCW2 Maths). What follows is Version 1 - comments and constructive
criticism are very welcome! Another version that includes embedded videos is available at iBerry. Even
if you have no particular interest in Computer Science and IT your comments on form and structure
would still be of value in developing OCW2 for other academic areas. Please contact us!
OCW2 Computer Science and Information Technology
CONTENTS:
1. Introduction
3. Basics
4. Mainstream
5. Programming
6. Software Engineering
7. Learner Support
8. Reference
1. Introduction
Computer Science
This is the study of the theoretical foundations of information and computation and of practical
techniques for their implementation and application in computer systems. It is frequently described as the
systematic study of algorithmic processes that describe and transform information.
Computer science has many sub-fields and some, such as computer graphics, emphasize the computation
of specific results, while others, such as computational complexity theory, study the properties of
computational problems. Still others focus on the challenges in implementing computations. For example,
programming language theory studies approaches to describing computations, while computer
programming applies specific programming languages to solve specific computational problems and
human-computer interaction focuses on the challenges in making computers and computations useful,
usable, and universally accessible to people.
The general public sometimes confuses computer science with vocational areas that deal with computers
or think that it relates directly to their own experience of computer activities such as gaming, web-
browsing, and word-processing. However, the focus of computer science is more on understanding the
properties of the programs used to implement software and using that understanding to create new
programs or improve existing ones.
Information Technology
Information Technology (IT) is the study, design, development, implementation, support or management
of computer-based information systems, particularly software applications and computer hardware. IT
deals with the use of electronic computers and computer software to convert, store, protect, process,
transmit, and securely retrieve information.
Today, the term information technology has ballooned to encompass many aspects of computing and
technology. IT professionals perform a variety of duties that range from installing applications to
designing complex computer networks and information databases. IT professionals may be involved in
data management, networking, engineering computer hardware, database and software design as well as
the management and administration of entire systems.
When computer and communications technologies are combined, the result is information technology, or
"infotech". Information technology is a general term that describes any technology that helps to produce,
manipulate, store, communicate, and/or disseminate information.
"The fact that the entire class is as silent as the? grave whilst he's speaking just goes to show how much
they respect him, and how awesome he actually is."
Note that the book, "Structure and Interpretation of Computer Programs", by Harold Abelson and Gerald
Jay Sussman with Julie Sussman, is also freely available online.
It was created by Karl Fisch, and modified by Scott McLeod (credits also given to Scott McLeod, Jeff
Brenman).
"At its core, the science of computing involves the rigorous study of process, in particular, the study of
processes that can be carried out by the devices we call computers." say H. Conrad Cunningham and
Pallavi Tadepalli of the Department of Computer and Information Science, University of Mississippi
(US).
"Whether we are aware of it or not, we are surrounded by networks through which information flows
constantly. Our notions of time and location are changing – the world seems to have become a ‘global
village’ where distance is no longer a barrier to commercial or social contact."
Being Fluent with Information Technology
- A 128 page committee-written book by the National Academies Press (US) that dates from 1999 but
much of the advice is good today. Look at the Executive Summary first before deciding whether to delve
into the main report.
"Being Fluent with Information Technology sets the standard for what everyone should know about IT in
order to use it effectively now and in the future. It explores three kinds of knowledge intellectual
capabilities, foundational concepts, and skills that are essential for fluency with IT. The book presents
detailed descriptions and examples of current skills and timeless concepts and capabilities, which will be
useful to individuals who use IT and to the instructors who teach them."
3. Basics
The fundamentals of computer systems and programming. This international selection of resources
varies in focus, depth and presentational styles, starting with the very basic and building up in
complexity. Scan all items at first to see what you like and where to start before studying anything in
depth and then use the other items to reinforce and supplement your learning.
Introduction to Computers
- This introduction by Wikiversity has relatively little text but plenty images and some podcasts:
" ... a gentler, lighter survey course without delving too much into technical details. It will also examine
computers from the perspective on how they influence society."
" ... examines how a computer-based society impacts on daily life. You will learn what computers can do
with data to produce information and how computers can be used to work with data and search for it,
control machines, and support commercial operations."
Interactive Learning
" ... multimedia course material with animations to assist learning some key Computer Science topics on
the World Wide Web. The work is presented in eight learning modules: Algorithms, Artificial
Intelligence, Data Structures, Machine Architecture, Number Systems, Operating Systems, Programming
Languages, and Software Engineering. Each module consists of a set of lessons with animations and
interactive components including review questions."
" ... introduces the different parts of computer systems and their use of binary code. Using the examples
of kitchen scales, a digital camera and a computer artwork the unit, with the help of flowcharts, discusses
how computers process data and instructions."
Higher Computing
- Richard Buckland, an award-winning lecturer in the School of Computer Science and Engineering,
University of New South Wales (AU), made this first-year introductory course available to high school
students as part of an innovative online learning project - also available in Chinese and Turkish.
"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."
".... 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. .... Topics include hardware, software, the Internet, multimedia, security, website
development, programming, and dotcoms."
"Introduction to the intellectual enterprises of computer science. Algorithms: their design, specification,
and analysis. Software development: problem decomposition, abstraction, data structures,
implementation, debugging, testing. Architecture of computers: low-level data
representation and instruction processing. Computer systems: programming languages, compilers,
operating systems. Computers in the real world: networks, security and cryptography, artificial
intelligence, social issues."
" ... 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."
(N.B. An ongoing learning community has sprung up around this OCW - see comment.)
" ... covers the same materials as an introductory class for undergraduate computer science majors. Its
curriculum, which includes software, hardware and algorithms, resembles that of a one- or two-semester
first-year college course or the high school Advanced Placement (AP) Computer Science."
Computation Structures
- 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."
" .... 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."
Introduction to Programming
- 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
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.
"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."
" .... 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)
Links are given to individual chapters of the course text, Python for Software Design, How to Think
Like a Computer Scientist. This is a concise introductory open textbook by Allen B. Downey of
Franklin W. Olin College of Engineering.
Topics: Principles of Algorithm Analysis, The Problem of Sorting, Reasoning about Algorithms, ADTS,
Searching, Graphs, Balancing Trees, Computability, Conclusion and Reviews
Computer Architecture, Organization and Design
Computer Architecture
- 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.
Computer Organization
- 33 videoed lectures from the National Programme on Technology Enhanced Learning (NPTEL) (IN) by
Prof S Raman, Department of Computer Science and Engineering, IIT Madras.
Topics: Introduction To Computing & System (Software, Hardware); Processor (Activities, As a State
Machine); Data Path (Architecture, Controller); State Machine & Controller Design; Addressing Modes;
Exercises; Introduction to Memory System; CPU/Memory; Cache (Organization, Interaction); Virtual
Memory; Performance Calculation; Segmentation; Address Translation & Protection; Programmed &
Interrupt Driven I/O; Direct Memory Access; Device Service Routines; Evolution Of I/O; I/O Devices;
Buses; Conclusion.
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.
5. Programming
The emphasis here is on the fundamentals of programming but there are also plenty links to tutorial
material for particular languages. There is considerable duplication of content within items so be
selective!
Computer programming (often shortened to programming or coding) is the process of writing, testing,
debugging/ troubleshooting and maintaining the source code of computer programs. Its purpose is to
create a program, written in a programming language, that results in some desired computer behavior.
Programming often requires expertise in many different subjects, including knowledge of the
applications, specialized algorithms and formal logic. - based on Wikipedia.
"The key is deliberative practice: not just doing it again and again, but challenging yourself with a task
that is just beyond your current ability, trying it, analyzing your performance while and after doing it, and
correcting any mistakes. Then repeat. And repeat again."
" .... attempts to summarize the non-technical things that I wish someone had explained to me at the
beginning of my career as a professional programmer. It is primarily concerned with social situations and
team relationships that occur in typical software development."
Topics include: Introduction to Programming; Program Planning & Design; Data & Operators; Often
Used Data Types; Integrated Development Environment; Program Control Functions; Specific Task
Functions; Standard Libraries; Character Data; Structured Programming; Selection; Loops; String Class,
Unary Positive and Negative; Conditional Operator and Recursion; Introduction to Arrays; File I/O and
Array Functions; Typedef; Pointers; Arrays & Compiler Directives; OOP & HPC; Review Materials
Programming Methodology
- As well as 28 videoed lectures this course by Mehran Sahami of Stanford Engineering includes
handouts, software and assignments and exams with solutions -
"Topics focus on the introduction to the engineering of computer applications emphasizing modern
software engineering principles: object-oriented design, decomposition, encapsulation, abstraction, and
testing. Programming Methodology teaches the widely-used Java programming language along with good
software engineering principles. Emphasis is on good programming style and the built-in facilities of the
Java language. The course is explicitly designed to appeal to humanists and social scientists as well as
hard-core techies."
Programming Abstractions
- A course by Julie Zelenski of Stanford Engineering following on from 'Programming Methodology'
(above) but covering more advanced topics and assuming familiarity with good programming style and
software engineering issues. 27 videoed lectures are available as well as notes, handouts, practice exams
and assignments including solutions.
Topics include: Abstraction and its relation to programming; Software engineering principles of data
abstraction and modularity; Object-oriented programming (fundamental data structures and data-directed
design); Recursion and recursive data structures; Introduction to time and space complexity analysis;
Uses C++ covering its basic facilities.
Programming Paradigms
- And following on again, this more advanced course by Jerry Cain, also of Stanford Engineering, deals
with programming and problem solving at the programming abstractions level. Prospective learners
should know a reasonable amount of C++, be able to write well-decomposed, easy-to-understand code
and understand the value of good variable names, short function and method implementations and
thoughtful, articulate comments.
Topics are: Advanced memory management features of C and C++; Differences between imperative and
object-oriented paradigms; Functional paradigm (using LISP) and concurrent programming (using C and
C++); Brief survey of other modern languages such as Python, Objective C, and C#.
" .... my personal evaluation and comparison of many popular programming languages. It is intended to
provide very high-level information about the respective languages to anyone who is trying to decide
which language(s) to learn or to use for a particular project. You can find similar comparisons from
Google Directory"
C and C++
• Wikiversity - starts at the beginning with the procedure oriented language C as well as structured
and object-oriented programming with, C++.
• C Programming - by Dale Roberts of Indiana University - has over 30 detailed videos plus
slides, projects and exercises.
• Programming Fundamentals in C++ - by Duong Tuan Anh from Connexions is an introductory
course intended for students with no background in computer programming.
• Introduction to C - copious lecture notes, lab assignments and references from Computer
Science at Caltech - also Introduction to C++ and Advanced C++.
Java
• DrJava - lightweight development environment for writing Java programs designed primarily for
students. Created by the Programming Languages Team (PLT) at Rice University, it provides
an intuitive interface and interactive evaluation of Java code. A short tutorial on DrJava is
available from Connexions as part of Principles of Object-Oriented Programming, a course by
Stephen Wong and Dung Nguyen of Rice University.
• Introduction to Programming Using Java - free, on-line textbook (12 Chapters) on introductory
programming by David J. Eck of Hobart and William Smith Colleges (US).
• Java Programming - by Steve Gilbert of Orange Coast College (US) and published by the Sofia
Open Content Initiative covers object-oriented programming in 14 well-documented lessons and
13 assignments.
• Java Preparation for 6.170 - from MIT OpenCourseWare (US) introduces the language,
libraries, tools and concepts of Java and is intended as preparation for MIT's Laboratory in
Software Engineering (see Software Engineering section).
• Developer Resources for Java Technology - comprehensive resources from Sun including
tutorials, articles and learning tools.
Python
xkcd webcomic
• How to Think Like a Computer Scientist: Learning with Python - a comprehensive 13 Chapter
text from the Open Book Project by Jeffrey Elkner, Allen B. Downey and Chris Meyers. A
Spanish version is underway.
• Python Programming Language - The Official Website with news, download, global
community and comprehensive documentation including The Python Tutorial on basic
concepts and features.
6. Software Engineering
" .... the application of a systematic, disciplined, quantifiable approach to the development, operation,
and maintenance of software, and the study of these approaches; that is, the application of engineering
to software." - from Software Engineering - Wikipedia.
"The focus is on developing high quality, working software that solves real problems."
Software Engineering
- 39 videoed lectures by Rushikesh K Joshi, Umesh Bellur and N.L.Sarda of IIT Bombay (IN).
Topics include: What is Software Engineering?; Software Development Life-cycle (requirements, design,
coding, testing, maintenance); Software Requirements Specification (validation, metrics, monitoring,
control); System Design (problem partitioning, abstraction, functional versus object-oriented,
specification and verification metrics); Coding (top-down & bottom-up, structured, information hiding,
style, documentation); Testing (levels, structural, test plane, test cases specification, reliability
assessment); Software Project Management (cost, scheduling, staffing, software configuration, quality
assurance, monitoring, risk)
Laboratory in Software Engineering
- 22 lectures with PDF notes from MIT OpenCourseWare (US) by Srinivas Devadas and Daniel
Jackson introducing concepts and techniques relevant to production of large software systems. There are
also assignments and projects. Chinese, Spanish and Portuguese versions of this course are available.
Topics are: Introduction; Object Semantics; Subclassing; Specifications; Testing; Object Model
Notations; Code Summary; Introduction to ADTs; Representation Invariants; Abstraction Functions;
Dependencies and Decoupling; Exceptions; Equality; Polymorphism; Subtypes and Subclasses; Classes
and Interfaces; Usability 1 & 2; Design Patterns; Design Project Experiences 1 & 2; Lecture on Final
Project; Guest Lecture.
Java Preparation for 6.170, also from MIT, provides some of the necessary background (see
Programming section on Java).
Software Engineering
- 14 interesting videoed contributions from King Mongkut Thonburi University (TH) by an unnamed
(?) lecturer. The videos can be accessed on YouTube.
Topics include: Introduction to Software Engineering; Problem Definition; Solution Design; Object-
Oriented Design; Solution Implementation; Software Configuration Management and Build Automation;
Solution Validation; Solution Deployment and Software Evolution; Software Development Process
Paradigns and Continuous Process Improvement; CASE Tools.
"We assume that they know how to write a computer program and debug it. We do not assume
knowledge of any particular programming languages, standards, or protocols. The most concise statement
of the course goal is that 'The student finishes knowing how to build amazon.com by him or herself.'"
"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."
PDFs cover the following topics: Introducing The Problem; Process and Life Cycle Models;
Requirements and Specification; Design; COTS and Reuse; Metrics and Reliability Assessment; Building
Confidence (Testing, Analysis, QA, Reviews); Selecting a Programming Language; Team Organization
and People Management; Software and System Safety; Putting It All Together.
Everybody Knows:
7. Learner Support
Learning greatly benefits from interaction with other people, whether experts in the field, learners at
the same stage as yourself or anyone else interested enough to share their learning experiences. The
forums below cater for a wide range of computer-related interests and at first sight may seem less than
ideal for 'serious' online learning but if used wisely they can play an important part in reinforcing and
updating your knowledge.
Resist the temptation to start posting right away until you get the feel of a forum. Previous threads might
contain answers that you're looking for and maybe good relations with other members can be established
by responding to their queries first. Posts that are very general ("How do computers work?") are less
likely to attract intelligent responses than questions that are clear, concise and specific and show that
you've made some effort yourself ("Learning C++ but can't understand how pointers are used in the
following code .... ").
Be aware that online learning is not necessarily served by every activity that takes place in a forum!
Always be diplomatic, avoid 'flaming' (hostile and insulting interaction between forum members) and try
to develop the right balance between the strictly social aspects of the forum and your own learning
objectives.
"We welcome science discussion at all levels — from beginners to researchers, covering topics from
biology and physics to computer science and mathematics, and much more."
"Welcome to the IT and computing forum. This is the place to discuss issues around the range and type of
educational resources within the IT and computing section of the LearningSpace."
8. Reference
Most of reference material here is sharply focused on Computer Science and IT and might not be
found in the resource section of the Open Courseware Directory.
Links to Listings of Open-Content Computer Science and IT
Publications
• OnlineComputerBooks.com - details of free computer books, ebooks, programming books,
online books and sample chapters related to Information and Communication Technology,
Computer Science, Internet, Engineering, Business, Marketing, Maths, Electronics, Physics and
Science provided by publishers or authors legally and free of charge.
• Peter Norvig (Director of Research, Google) - technical papers, essays, reports, software and
other materials incuding artificial intelligence books
• TextbookRevolution, Computer Science - links to free online textbooks and other educational
materials
• Tech books for free download - Linux, Java, Microsoft, C and C++, Perl/Python, Science,
Networking, Database, Security, Assembly
• O'Reilly, Open Books Project - books with various forms of "open" copyright: English-
Language Books, Out-of-Print Books, Deutschsprachige Online-Bücher, Polish-Language Books
• Wikibooks, Open-Content Textbooks Collection - Computer Science Books
• Community College Open Textbook Collaborative - Computer Science Open Textbooks
• The Assayer - catalog of books whose authors have made them available for free: Computer
Science
• FreeComputerBooks.com - Free Computer, Mathematics, Technical Books and Lecture Notes,
etc.
Example: To find all OCW items containing videoed material (videoed lectures etc) click on 'Video'.
Otherwise, go to the square corresponding to the intersection of a topic subject row with the required
media type column. Click on ALL inside a square to find items at all academic levels or click on:
Example: To find OCW with exam material (sample exams, old papers etc) in introductory Social
Sciences go to the bottom right hand corner and click on '1'.
Assign-
Topic Notes Video Audio Images Demos Exams
ments
Multidisciplinary
(Computer
Science and IT 123 123 123 123 123 123 123
with Applications ALL ALL ALL ALL ALL ALL ALL
in Other
Disciplines)
Computer
Hardware, 123 123 123 123 123 123 123
Software, ALL ALL ALL ALL ALL ALL ALL
Networks
"The National Academies help change the way people think about computers, information technology,
and public policy. They also advance specific recommendations for action. Additional impact includes
expanding public policy awareness and enhancing insight into information technology."