The prerequisites for this class is a good understanding of imperative languages and object-oriented programming, as well as computer organization. You must be able to write and debug non-trivial programs in either C/C++ or Java. You must have a good understanding of basic data structures such as lists, stacks, trees and hashtables.
This is a class on concepts of programming languages. There will be programming assignments designed to make you use and implement various concepts. Programming assignments may involve writing code in C, C++, Java, ML, Prolog and other languages. You do not need to know these languages already.
The lectures will be held Wednesdays from 6-8pm and Fridays, 2-4pm
in John Greene Hall 219.
The Debian GNU/Linux lab is in John Greene Hall 216. In order to get a door code for the Computer Lab please visit the labcode webpage (after signing up for an account). The code is updated on weekly basis.
Programming Languages: A Practical Introduction", by
Adam Brooks Webber, Franklin, Beedle & Associates.
This will be the main textbook for the class covering most
of the material. The textbook also contains various
"Version Control with Subversion", on-line book (no need to buy a copy). You must know how to use subversion as a developer (not as an administrator) in order to submit your assignments. Use this book as a reference if you encounter problems. Basic knowledge of chapters 1-3 should be sufficient.
Specific topics that will be covered:
There will be individual assignments where you will need
to answer some specific questions in prose or with
small fragments of code as well as larger
individual programming assignments that must be turned in
for grading by a certain deadline. For some of the
larger assignments, testcases will be provided. You are
encouraged to write additional testcases and are
specifically allowed to exchange those tests with other students.
Students will also be expected to research and present a programming language in class towards the end of the term. Details about these student presentations will be announced in class. The basic expectation is that you will learn enough about a less common language to give a presentation (with slides, examples and demonstration) on the advantages and disadvantages of that particular language.
Students are encouraged to discuss the materials, homework, and projects together. However, all written assignments and programs must be done individually. Academic dishonesty includes, but is not limited to: plagiarism, cheating in exams, unauthorized collaboration and falsifying academic records. Violation of any of these may result in a grade penalty on assignments, an "F" in the course, dismissal from an academic unit, revocation of admission, suspension from the University as well as being roasted over a slow fire.
There will also be suggested excercises that do not have to be turned in and for these excercises you should feel free to work with other students including exchange of solutions.
Generally, all assignments are due before class on the date specified with the assignment. Exceptions to this rule (allowing later submission) may be announced in class.
The different kinds of assignments are weighted as follows:
|Programming assignments||55 Pts|
|Class Participation||10 Pts|
There are theoretically a total of 119 Pts possible Grades will be given as follows:
|A||> 100 Pts|
|A-||> 90 Pts|
|B+||> 85 Pts|
|B||> 80 Pts|
|B-||> 75 Pts|
|C+||> 70 Pts|
|C||> 65 Pts|
|C-||> 60 Pts|
|D||≥ 45 Pts|
|F||< 45 Pts|
You will need various applications for the class, all of which are freely available
for various operating systems. Personally, I'm using Debian GNU/Linux unstable.
If you have any problems installing the software, you can always use the department's
Debian GNU/Linux machines which have most of the necessary software installed (in
order to get the rest, copy the provided JTB and JavaCC scripts and JAR files into
your home directory, edit the shell scripts to contain the correct absolute path to
the JAR file and make them executable. Finally, add the directory with the shell
scripts to your PATH).
Here is a list of the software programs that you will need if you want to use your own system:
Each student will get access to a subversion
repository. Assignments must be committed to that repository by the respective
deadline. Students are encouraged to use the repository for version control while
still working on the assignment. Only the last version commited before the deadline will
be used for grading.
In order to access your subversion repository, you must first request an account. For this, you first need to generate an encrypted password. On any GNU/Linux or UNIX machine (or even a Microsoft system with Apache) enter
$ htpasswd -nb $USER PASSWORDwhere PASSWORD is your desired password. You will not be able to change the password later. Send the output of the command to email@example.com to request an account. Once your account has been created, you should do an initial check out:
$ svn checkout https://svn.cs.du.edu/courses/comp3351/f2007/$USER $ cd $USERYou should then proceed to create a directory for the first project and commit it:
$ mkdir P1 $ svn add P1 $ svn commit -m "comment"Afterwards, you can add the files to submit just like you added the directory. Make sure to commit the final version with all files (hint: svn status) before the deadline. It is also a good idea to do a seperate checkout and verify that the result works.
$ mv $USER comp3351
Note that existing assignments may still be corrected. Feel free to look at the other assignments if you want to know what the plan looks like. Feedback is welcome.
Grades will be e-mailed to the e-mail address given with the request for creating the subversion account. For how to interpret the e-mailed grades please contact the TA.