Prof. David Wilczynski
Prerequisites. CSCI 200.
It is expected that you already know how to do "object-oriented"
programming using C++ and Java.
Software development is about building applications that run on computers. It is much more than algorithm design, selecting a programming language, or coding. Those are important, but for larger applications we need a larger perspective, or system view. And we must worry more about the creation process, often called software engineering.
You will be taught about writing code that is part of a system by immersing you into existing bodies of code. The approach is more like mentoring than teaching. You will be asked to enhance existing projects. The result is to teach you about Software Development in the way you will encounter it in industry. We will cover several theoretical topics, but always as it applies to the systems you are working on. The initial system you will work on is a concurrent application with an animation written in Java.
Then in the second half of the course you will be working as teams to solve a brand new problem. You will have to figure out requirements, do a design, and implement it as a team. You will be using modern tools to help manage the process.
Materials
· Website: http://www-scf.usc.edu/~csci201/
· Materials on Website:
o The class topics: CSCI201Curriculum.htm
o A guide to agents: AgentRoadmap.htm
We won't be covering all the topics in those documents. All reading assignments and code downloads are given at Lectures/Lab . The date shown there is the date a reading should be done by. There is a lot of reading, but you are encouraged to skim where appropriate.
Assignments
Programming assignments are graded on thorough testing, documentation, and style, as well as correctness. All work to be submitted for the class is to be done individually unless an assignment specifies otherwise.
v3.0 and v3.1: 25%
2 midterms:
50% (25% each)
Team
Programming Project: 25%
A = 92% A- = 90%
B+ = 88% B = 82% B-
= 80%
C+ = 78% C = 72% C-
= 70%
Exams will
be scaled to match these ranges.
Extra credit
may be available on assignments for use in deciding borderline cases.
Below are the course outcomes we expect you to have at the end of the course.
i. The ability to
understand the software engineering in terms of requirements, design, and
implementation.
ii. An understanding
of how to use interaction diagrams to
help define requirements
iii. The ability to
produce a software design based on requirements.
iv. The ability to
produce software from a design.
v. The ability to unit
test a module.
vi. An understanding of
concurrency and how it works in computer operating systems.
vii. The ability to
write multi-threaded programs and correctly solve a mutual exclusion problems.
viii. The ability to use
semaphores to solve synchronization problems.
ix. The ability to use
messaging as a communication method.
x. The ability to
refactor code in order to capture similarities and abstractions
xi. The ability to
apply a software engineering process to a large software project
xii. The ability to work
effectively on a team
xiii. An understanding of
the ethical issues in working within a group.
xiv. The ability to
communicate via team meetings, presentations, etc.
These are the outcomes you are expected to have when you have finished your degree:
a) An ability to apply knowledge of computing and mathematics appropriate to the discipline;
b) An ability to analyze a problem, and identify and define the computing requirements appropriate to its solution;
c) An ability to design, implement and evaluate a computer-based system, process, component, or program to meet desired needs;
d) An ability to function effectively on teams to accomplish a common goal;
e) An understanding of professional, ethical, legal, security, and social issues and responsibilities;
f) An ability to communicate effectively with a range of audiences;
g) An ability to analyze the local and global impact of computing on individuals, organizations and society;
h) Recognition of the need for, and an ability to engage in, continuing professional development;
i) An ability to use current techniques, skills, and tools necessary for computing practices.
j) An ability to apply mathematical foundations, algorithmic principles, and computer science theory in the modeling and design of computer-based systems in a way that demonstrates comprehension of the tradeoffs involved in design choices;
k) An ability to apply design and development principles in the construction of software systems of varying complexity.
These outcomes are also posted at on the CSCI website. http://www.cs.usc.edu/current/undergrad/ProgramOutcomes.pdf
Last modified November
23, 2009 by David Wilczynski, dwilczyn@usc.edu