You are on page 1of 20

Image from unprofound.

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

A route map for the online learner

1. Introduction

2. About Computer Science and IT

3. Basics

4. Mainstream

5. Programming

6. Software Engineering

7. Learner Support

8. Reference

1. Introduction

What is Computer Science and Information Technology?

The terms, "Computer Science" and "Information Technology" tend to be used rather loosely. Computer
Science in its purest form is the study of the theoretical foundations of information and computation but it
is often taken to include large parts of Information Technology (IT) more concerned with the design and
development of computer-based information systems. "OCW2 Computer Science and IT" aims to cover
both of these areas, focusing on the fundamentals as taught by universities and colleges at degree level
rather than "tips and tricks" for particular programming languages or specific software or hardware
implementations. However, basic principles are best illustrated by practical examples and this is certainly
true for the Open Courseware that we recommend.

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.

- Based on Computer Science in Wikipedia

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.

- Based on Information Technology in Wikipedia

Structure and Interpretation of Computer Programs

"What is Computer Science ?" is the first question Hal Abelson addresses in this first lecture of a classic
MIT course. He answers, "... not a science!", "... not really very much about computers!" and, "... has a lot
in common with magic!" Judging by the positive comments on YouTube he must be onto something and
as one commenter remarks:

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

2. About Computer Science and IT

This section is concerned with Computer Science and IT itself including career information - rather
than technical details.
Globalization & The Information Age
- A quick and lively overview, popular with school teachers. No need to read over 3,000 comments on
YouTube to see that not everyone agrees with some of the statistics and predictions. "So what does it all
mean?" is the ending refrain - and evidently a favorite subject for set essays!

It was created by Karl Fisch, and modified by Scott McLeod (credits also given to Scott McLeod, Jeff

Pathways in Computer Science

- Explore the pathways in this presentation by Washington University (US), Computer Science and

What is Information Technology ?

- More about attractive careers in Information Technology from the University of Technology, Sydney
(UTS) (AU).

Outline of Computer Science

- This is Wikipedia's overview and topical guide to computer science citing numerous links under main
headings such as, "Mathematical foundations", "Branches of computer science" and "Basic computer
science concepts". These in turn point to the Wikipedia articles on more specialized sub-topics such as
"Artificial Intelligence" or "Object Oriented".

What is Computer Science All About?

- This illustrated 14 page PDF gets into some of the interesting detail.

"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

Information and Communication Technologies (ICTs) in

Everyday Life
- A short course from the Open University (UK) on the "network society" and how ICTs impact on
everyday life.

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

Starting Points for Beginners

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

An Introduction to Data and Information

- A 20 hour introductory course by the Open University (UK):

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

Animations to Assist Learning Some Key Computer Science

- Lessons and review questions with embedded interactive components by the Department of Computer
Science at Virginia Tech (US)

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

A Selection of First Courses

Computers and Computer Systems

- A further 20 hour course from the UK's Open University, now focused on the the principal hardware
components and basic operation of computer systems:

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

Introduction to Computer Science

- A course from Connexions by Huong Nguyen of Hanoi University of Technology (VN) introducing
basic concepts and the C programming language. Topics include:

Data Representation in a Computer, Operating Systems, Computer Networks, Introduction to C (Data

Types and Expressions, Control Flow, Pointers and Arrays, Functions, Strings, Structures, Files)

Introduction to Computer Science using Java

- Covering hardware and software fundamentals, Bradley Kjell of Central Connecticut State University
provides notes, quizzes and reviews in 87 "Chapters" and uses a simple programmed learning technique,
asking questions after each lesson to reinforce concepts. Audio and German and French translations are
also available.

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

Understanding Computers and the Internet

- Basic material in 14 wide-ranging and entertaining lectures by David J. Malan and a group of teaching
assistants at Harvard College. A large number of brief videos on practical matters are also available such
as "Upgrading RAM", "Macs versus PCs", "Digital Photography" etc. as well as fun topics such as "Geek
Chic" and "Socializing Online".

".... 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 Computer Science I

- 32 videoed lectures (via Academic Earth), again by David J. Malan of Harvard College but now right
into the detail. Problem sets, notes, slides, quizzes with answers etc. can be found here.

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

Introduction to Computer Science and Programming, Fall 2008

- This recent course of 24 videoed lectures from MIT OpenCourseWare (US) by Profs Eric Grimson and
John Guttag comes with problem sets, quizzes and readings.

" ... 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.)

Introduction to Computer Science

- A complete course from Wikiversity:

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

Open Courseware Directory - search for introductory OCW

• Open Courseware with tags "introductory" and "Computer Science" - Search
• As above but "video" only - Search
• Open Courseware with tags "Introductory" and "Computer Hardware, Software, Networks" -
• As above but "video" only - Search
4. Mainstream
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.

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

Computer System Engineering

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

Programming, Data Structures and Algorithms

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

Lessons: About Programming, Programming Languages, How a Program is Organized, Variables (Part 1,
2 and 3), Control Structures, Sub-Programs, Scope

Structure and Interpretation of Computer Programs

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

How to Design Programs - An Introduction to Computing and

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

A Gentle Introduction to Programming Using Python

- 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)

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.

Data Structures and Algorithms

- 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

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.

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

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.

Computer Organization and Design Fundamentals

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

Computer Architecture and Engineering

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

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

Teach Yourself Programming in Ten Years

- Peter Norvig's (Director of Research at Google) brief but authoritative article - learning to program is
fun but real expertise can take years. (Translations of this article available in several languages.)

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

How to be a Programmer: A Short, Comprehensive and Personal

- Interesting and openly subjective 55 page essay by Robert L Read (Samizdat Press) -

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

Programming Fundamentals - A Modular Structured Approach

using C++
- Written by Kenneth Leroy Busbee of Houston Community College, Texas, this course from Connexions
covers 3 divisions of programming fundamentals: Modular/Structured, Object Oriented and Data

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

Programming Language Comparison

- By Jason Voegele, software engineer for Terracotta

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

Programming Language Tutorials

The following items link to some of the best tutorials for languages commonly used for learning
purposes. There is much duplication of content - find the style and level of presentation that suits you!

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

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


• A Gentle Introduction to Programming

Using Python and Introduction to
Computer Science and Programming -
links to previously described items.
• Non-Programmer's Tutorial for Python
2.0 - featured book on Wikibooks - with
substantial content. Available as LaTeX,
HTML, PDF, and Postscript and in
Korean, Spanish, Italian and Greek.
• Hands-on Python Tutorial - by Andrew N.
Harrington of Loyola University, Chicago
(US). Browse online or download a 139
page PDF.
• A Python programming tutorial - online
course in 11 Chapters by John W.
Shipman of New Mexico Tech includes
68 page illustrated PDF.

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.

Language Tutorials - Listings

• - over 300 programming language tutorials, lessons, and how-

• - large collection of lecture notes and tutorials.
• Google Code University, Programming Languages - video-taped lectures: Advanced
Concepts in C++, Advanced Concepts in Java, Programming in Python

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.

Introduction to Software Engineering in Java

- A very recent short course from MIT OpenCourseWare (US) by Evan Jones, Olivier Koch and
Philippe Cudre-Mauroux. It covers concepts useful to a later MIT course: Elements of Software
Construction. (Unfortunately, some parts of this latter course are not open but there are lecture PDFs and
quizzes.) There are PDF lecture notes, assignments and related resources. A Thai version of this course is

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

Software Engineering for Internet Applications

- An open textbook of 17 Chapters by Eve Andersson, Philip Greenspun, and Andrew Grumet intended
for juniors and seniors in computer science and others such as software developers building online
communities or other multi-user Internet applications.

"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 by him or herself.'"

Foundations of Software Engineering

- A foundation course by Kevin Amaratunga at graduate level from MIT OpenCourseWare (US) on
modern software development techniques for engineering and IT. There are lecture notes, recitations,
assignments, projects and exams with solutions.

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

Software Engineering Concepts

- A further graduate level course from MIT OpenCourseWare (US): by Nancy Leveson.
".... 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."

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.

Software Engineering - Reference

Category:Software engineering - Wikipedia - Lists Subcategories (29) and over 60 Wikipedia Pages in
the "Software engineering" category.
Surfing the Net for Software Engineering Notes - A detailed article by Mark Doernhoefer (MITRE
Corporation, McLean, VA), published by ACM.
Google Directory - Software Engineering. - Free Online Computer Science and Programming Books, Textbooks, and Lecture
dmoz Open Directory Project - Software Engineering.
Guide to the Software Engineering Body of Knowledge (SWEBOK) - By the IEEE Computer Society,
this is the 2004 edition; a revised edition is set for 2010.

Software Engineering Proverbs

A diverse collection by Tom Van Vleck (What I always say is, "You learn something every day, unless
you're careful.")

Everybody Knows:

• Discipline is the best tool.

• Design first, then code.
• Don't patch bugs out, rewrite them out.
• Don't test bugs out, design them out.

His "Software Engineering Stories" are also apt.

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. - Computer Science

This is the Computer Science forum; one of around 40 available forums, mainly on science topics. There's
much activity, a wide range of questions that usually attract at least 1 response as well as a sub-forum for
discussing computer problems. The single thread on "What's a good programming language to learn?" has
been running since April 2009 and with over 60 replies is an education in itself!

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

xkcd - Analytical Engines

Run by the webcomic xkcd, the forums under this heading include a computer 'Help Desk', 'Coding'
(implementation and style of computer programs), 'Computer Science' (science of computers and
programs from algorithms to computability), 'Hardware' and, intriguingly, 'Religious Wars'. Very few
queries stay unanswered and some quite serious and thoughtful discussions can be found. There's a nerdy
but friendly atmosphere with some good expertise in evidence.

Open University (UK), LearningSpace - IT and Computing forum

A steady trickle of queries on a wide range of topics including Open University (OU) matters. Activity is
moderate to low with some questions left unanswered. Expertise is available although it's difficult to tell
whether OU teaching staff are involved, if at all. Note that each LearningSpace IT and Computing course
has its own associated forum but these do not seem to be very active.

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

S.O.S. Mathematics CyberBoard - Computer Science

As its name suggests this forum is more focused on mathematical aspects so there are plenty of questions
on maths functions, numerical methods and so on as well as the usual programming language and
computer problems. Some really helpful and friendly experts are around dealing patiently with a wide
variety of questions at all levels.

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
• - 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
• 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
• - Free Computer, Mathematics, Technical Books and Lecture Notes,

Computer Science and IT - Open Courseware Directory

Click on one of the Topics in the left column of the table below to find all OCW items for that topic.

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:

1 - for introductory (university first year undergraduate level - or equivalent)

2 - for intermediate (university undergraduate level but excluding first year - or equivalent)
3 - for advanced (university graduate level - or equivalent)

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

Topic Notes Video Audio Images Demos Exams

Science and IT 123 123 123 123 123 123 123
with Applications ALL ALL ALL ALL ALL ALL ALL
in Other

Computer 123 123 123 123 123 123 123

Science & IT

Hardware, 123 123 123 123 123 123 123

Computer Science and IT - Miscellaneous Resources

• Open Courseware Directory: Computer Science Resource Page - links to information and
directory sites, focusing on significant and up-to-date portals providing links to specialized topics.
• Google Code University (US), Programming Languages - video-taped lectures: Advanced
Concepts in C++, Advanced Concepts in Java, Programming in Python
• Wolfram Demonstrations Project (US), Computation - free open-code resource of interactive
• Boston University (US) - archive of electronic material useful for teaching CS courses
• Artificial Intelligence Resources - by Marcus P. Zillman for monitoring AI resources
• VideoLectures.Net, Computers - Networking (9), Operating Systems (3), Programming (15),
Social Networking (2), Software (3), Telecommunications (1)
• Wikipedia, Category: Theoretical Computer Science - 18 Subcategories
• Academic Blogs Wiki, Computer Science - direct links to blogs and wikipages about them (if
• W3C, Tutorials and Courses - learn about W3C technologies.
• MIT OpenCourseWare (US), Free Online MIT Course Materials - Electrical Engineering and
Computer Science listings
• Imperial College (UK), FOLDOC - Free Online Dictionary of Computing

National Academies Press, Computers and Information Technology - publications on issues of

science, engineering, and health. Several open content books are available.

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