CSCI 250 - Scalable Software Design and Development
Spring 2012
Course Overview:
This course introduces the
skills needed for writing large programs (on the order of 1000+ lines)
using the Java programming language. Topics will include
human-computer interaction, multithreading, network programming,
parsing, grammars, testing, object-oriented design, and an introduction to
databases and software engineering. There will be several large programming
projects that emphasize integrating these concepts into realistic applications
software.
At the end of the course, you will be expected to be able to:
- Write and thoroughly test a large program (1000 lines minimum)
- Apply incremental development to a large program
- Write and test code as part of a team
- Design usable graphical user interfaces
- Write a Java program that stores data in and retrieves data from
a database using SQL commands
- Design relational database tables
- Use a simple parser generator to write a parser for a formal language
from a grammar
- Write a properly synchronized multithreaded program in Java
- Identify when multithreading is necessary, and avoid it when it is not
- Understand and apply test-driven development
- Design a system by decomposing a problem into multiple interacting classes
- Understand and apply the following design concepts:
- Mutable and immutable classes
- Cohesive methods
- Levels of code abstraction
- Loosely coupled modules
- Cohesive classes
- Information hiding
- Delegation
- Type inheritance
- Implementation inheritance
- Read and understand library API documentation
- Write a program that communicates with another program over a computer
network using a socket
Instructor:
Dr. Gabriel Ferrer
M.C. Reynolds 312
http://ozark.hendrix.edu/~ferrer/
Office Hours:
MRF: 1:30-4:00 pm
Class Web Page:
http://ozark.hendrix.edu/~ferrer/courses/250/
Lecture Time:
A2 (9:10-10:00 am MWF)
Final Exam Period:
Tuesday, May 8, 2012, 8:30-11:30 am
Required Textbooks:
Clean Code: A Handbook of Agile Software Craftsmanship,
Robert C. Martin, Prentice-Hall, 2008.
Effective Java (2nd Edition), Joshua Bloch, Prentice-Hall, 2008.
Grading Criteria:
Programming projects: 55%
Code reviews: 20%
Presentations: 20%
Class participation: 5%
Each programming project will be graded as follows:
- Code correctness: Does the program perform all required functions correctly? Does the program have any bugs?
- Program design and readability: Does the program exhibit a solid object-oriented design? Is the code readable and understandable?
- Code reviews: For each assignment, you will write a code review of your program. They will be graded for accuracy and completeness.
Each assignment will be assigned two letter grades: one for correctness, and
one for design and readability. Each letter grade has associated with it a
percentage grade as follows:
| Letter grade | Percentage |
| A | 95 |
| B | 85 |
| C | 75 |
| D | 65 |
| F | 50 |
Missing grades will be scored zero. Any grade can have a "+" or "-" attached
to it. A "+" is worth +5, and a "-" is worth -4. A grade of "A+" will only
be assigned to work that in some way goes above and beyond the requirements
for the assignment.
For each category above, the total points earned will be divided
by the total points possible to yield a percentage. These percentages will
be weighted as given above. A final average of at least 90 earns an A;
80 earns a B; 70 earns a C; 60 earns a D; below 60 is failing.
Programming Projects:
Most programming projects will be completed in teams. Team size may
vary per assignment. For each assignment, teams may vary slighly in size.
At the end of each assignment, team members will have the opportunity to
evaluate their own performance and that of their peers.
Each team will be awarded a common grade for the project. Based on the
peer evaluations, the instructor may adjust the grade awarded to individual
team members at his discretion.
Each programming project has three deadlines:
- Code Freeze: At the code freeze deadline, coding must
stop. No further modifications are to be made to the code. The source code
(i.e.
*.java files) will be uploaded for evaluation.
- Code Review: The code review deadline will be from 24-72
hours after the code freeze deadline. The code review
is a written assessment of your submitted program that includes a discussion
of the design and the current state of completion. It must be printed out and
submitted at the start of class.
- Code Revision: Once the code and code review have been
graded and returned, students are welcome to revise their programs. Revisions
are limited to the parts of the assignment that were seriously attempted prior
to the code-freeze deadline. The code review must also be revised. The
revised code and review will have a simultaneous deadline.
After the revision is submitted, the instructor will re-grade the project.
The grade for the revision will replace the grade for the
original submission. It follows from this that submitting a revision is
optional.
Presentations: Throughout the semester, readings will
be assigned from the textbooks. For many of these assignments, a student
will be assigned to present the material from the reading to the class.
In each presentation, the student will be expected to:
- Summarize the main ideas from the reading.
- Assess each idea:
- Clarify when the idea is applicable and when it is not.
- Give concrete examples of Java code to illustrate your arguments.
- You are encouraged to use code from your projects for this purpose.
Other students in the class will be expected to ask questions and participate
in a discussion of the reading and the presenter's interpretation of the
reading.
Late Policy:
No late work will be accepted. If a program is not complete, submit whatever
is done by the code-freeze deadline in order to receive credit.
Computer Lab Facility:
You will receive an account that enables you to use the Linux machines
in MCReynolds 316. Be sure to review the lab policy page:
http://ozark.hendrix.edu/linux/policies.html