CS 143: Software Engineering I

Course overview, policies



About
Announcements
Lectures
Coursework
FAQ


Java 1.6 API
Java 1.4 API

  • Instructor: Prof. Rahul Simha

  • Time/place:
    • Class: Wednesdays, 3.30-6.00pm, Tompkins 411.
    • Lab: (1) Mondays, 9-10.15, Tompkins 411; (2) Mondays, 2.20-3.35, Tompkins 411.

  • Office Hours: Tuesdays 3-5pm, Phillips 717.

  • TA: Ingrid Mihai (ingrid AT gwu DOT edu).

  • TA Office Hours: 10-12pm Tuesdays, 12-2 Fridays, Phillips 725.

  • Course CRN's: Class (72373), Lab CS143-30 (72374), Lab CS143-31 (72375).

  • Prerequisites: CS 133 or equivalent (See undergraduate curriculum).

  • Course description: In this course, students will learn how to write object-oriented code using Java. Concepts will focus on object-oriented thinking, software composition, inheritance and polymorphism, and design patterns. Programming techniques, assignments and lab exercises will focus on Java, specifically, the language and its core libraries. The course will be conducted lab-style with a mix of lecture, lab assignments and projects. The course will also cover an elementary introduction to the C programming language.

  • Learning outcomes: By the end of this course, students will be able to:
    • Design Java classes for a challenging problem involving multiple classes.
    • Demonstrate skill in problem solving by going from complex word description to implementation.
    • Understand objects: static and dynamic classes, interfaces, abstract classes, inheritance, polymorphism, constructors, Java's object features and syntax, memory representation of objects.
    • Experience programming in C.
    • Understand application development: front-end, back-end, threads, networking.
    • Understand the relationship of language features to static and dynamic memory.

  • Textbook: Given the vast amount of on-line documentation (including lecture material for this course), FAQ's and tutorials, there is probably no need for either a C or Java textbook. Also, given the sheer size of the Java language, no single book really does justice. However, you will find the "Nutshell" book (see below) useful. Additional books and references are suggested in the Resources section below
    • This body of lecture material and examples.
    • The book Java in a Nutshell, 3rd Edition by David Flanagan, O'Reilly Publishing. This book is a handy reference that contains a (rather terse) overview of the language, tools and API's. Initially, a beginner will find it difficult to read, but it's probably the only book you will continue to use even after becoming a Java expert.
    • Book for the C programming language: Simple C by J.McGregor, R.McGregor and A.Watt.
    • Suggested companion book: Core Java 2, Volume 1 by C.Horstmann and G.Cornell (Prentice-Hall, ISBN 0-13-081933-6). This book, a introduction to Java for programmers, starts from scratch, has plenty of examples and comparisons with other languages. Use this book beyond the course material to get a different take on the same material.
    • See this link for an annotated list of Java books.

  • Some C books:
    • C Pocket Reference by P.Prinz and U.Kirch-Prinz (O'Reilly). A small, inexpensive ($12 !) and useful C reference. Includes C99.
    • C for Engineers by B.Bramer and S.Bramer (Arnold Pub.). Intro-level text with lots of examples and detailed coverage of elementary and intermediate level C. Does not include C99.
    • The C Workbook by S.Menon (McGraw-Hill). A lighter read than the Bramer book above and solid introductory book.
    • The C Programming Language by D.A.Troy and J.D.Kiper (Scott/Foresman). As comprehensive and detailed as the Bramer book.
    • Practical C Programming by S.Oualline (O'Reilly), Third Edition. Between the Bramer and Menon books in terms of language coverage, but also covers debugging and program development, a good option for students.
    • C for Professional Programmers (2nd Ed) by K.Tizzard (Ellis-Horwood). A faster paced and therefore thinner book for programmers with some nice examples.
    • C: A Reference Manual (5th Edition) by S.P.Harbison and G.L.Steele (Prentice-Hall). More a reference than a textbook, with complete coverage of the language including C99.

  • Java references:
  • C references:
  • Programming load: The course will be moderately programming-intensive, comparable with CS133. If you are taking TWO OTHER programming-intensive courses, you could be in for a rough semester. Stop by and discuss the issue with me.

  • Coursework:
    • In-class quizzes: 2-3 unannounced quizzes.
    • Small programming exercises : 4-5 exercises.
    • Programming assignments: 4 assignments.
    • Exams: 2 in-class exams.

  • Approximate grading:
    • 10 points: quizzes, about 3-5 points each.
    • 20 points: small programming exercises, about 5 points each.
    • 50 points: 4 programming assignments, 10-15 points each.
    • 20 points: two exams, about 10 points each.
    • Total: 100 points.

  • Assignment submission and late work policy:
    • All assignments will be submitted via your Unix accounts. Create a (Unix) subdirectory called submit/ and make it accessible. All your submissions (source code) should be placed here in encrypted form as described in the submission instructions.
    • Select a single 8-letter encryption key to be used for the entire semester. Mail this key to the TA and do not reveal it to anyone else.
    • No late submissions will be accepted for the small programming exercises.
    • The larger programming assignments may be submitted late, but points will be taken off: 20 percent for each 24-hour period after the due-date. These points will not be pro-rated hourly. Thus, if an assignment is due 5pm Oct 19th, a submission at 5.05pm Oct 19th loses 20 percent.
    • The submission time will be determined by the file-date of your crypt file. Hardcopy late submissions must be initialled with the submission time by one of the secretarial staff if I am not available.
    • If you have been ill and have a doctor's certificate to prove it, you will be eligible to take a missed quiz, provided you submit this certificate (during my office hours) reasonably soon after recovering from the affliction.

  • Email policy: You can send email to my GW email address. I will answer most class email during specific times set aside during the week for this purpose - so do not expect an instantaneous response. Since this is an advanced class, you may not perform "debugging by email". That is, do not send me code snippets and ask me to identify the problem. If you want me to look at your code, you have to stop by in person during office hours and bring along hardcopy. Email is typically used for clarification regarding coursework. If there is a TA assigned to the course, you ought to try to email the TA assignment-related questions before emailing me.

  • Academic Integrity policy:
    • In this course, you will be expected to work on all assigned coursework by yourself, unless otherwise specified by instructions on this page. If you have any questions whatsoever regarding these policies, see me during office hours.
    • Do not exchange course-related code with anyone (including anyone not registered in the course), or download code for use in your assignments or exercises without permission. Likewise, you may not look at anyone else's code or show your code to anyone else. Protect your work: for example, be careful not to leave your printouts around.
    • If using a tutor, you may not show your CS143 homework-related code to your tutor nor use code shown or written by your tutor. All tutors for CS143 need to first register with me, by meeting me during office hours.
    • If you use material in your assignments that are from outside the course material, then you should be prepared to explain that material. The instructor and TA's reserve the right to question you on your use of extraneous material. Failure to answer such questions might be viewed as grounds for an integrity violation.
    • The Academic Integrity Code will apply to this course. Please read through the code carefully.
    • Penalties for violating the code or the policies described here include failing this course, and are elaborated in the Academic Integrity Code.

  • If you have a disability that may effect your participation in this course and wish to discuss academic acommodations, please contact me as soon as possible.

  • Coding standards:
  • Having completed CS-133, you are expected to submit well-written code:
    • Comments must be substantive.
    • Select readable variable names and method names.
    • Use consistent indentation (preferred: two or four spaces).

  • Useful tips for working at home:
    • Download and install Cygwin, which provides a Unix-like command-line for Windows machines. Cygwin comes with associated Unix command-line tools, including the gcc compiler, provided you tell the installation procedure to download those tools.
    • Mac users can install xcode, which comes with gcc.
    • If you've been learning programming in an IDE (such as BlueJ or Eclipse) it's probably a good idea to learn how to work at the command-line and to use editors like Emacs. Later, you can use a combination of both, as appropriate.
    • When logged into hobbes (via SSH), use pico as your editor, if you haven't used a Unix editor before.