Go up to the CS 2150 documents page (md)
Aaron Bloomfield / aaron@virginia.edu / [@bloomfieldaaron](http://twitter.com/bloomfieldaaron) Office: Rice Hall, room 403 Office hours are M/W 1:30-3:00
Course Description: This course will introduce you to program and data representation from high level concepts to machine level implementation. Data structuring techniques and the representation of data structures during program execution are discussed, as are operations and control structures and their representation during program execution. Representations of numbers, arithmetic operations, arrays, records, recursion, hashing, stacks, queues, trees, graphs, and related concepts are also covered.
Availability: It is important to us to be available to my students, and to address their concerns. If you cannot meet with one of us during our office hours, e-mail and we will find the time to meet. That being said, like everybody else we am quite busy, so it may take a day or more to find a time to meet. And if you have any comments on the course - what is working, what is not working, what can be done better, etc. - we are very interested in hearing about them. There is an anonymous feedback tool through Collab, or you can send one of us an e-mail (please do NOT email the TAs directly). We tend to get bogged down by e-mail as the semester progresses, so seeing one of us in person (right after lecture, during office hours, etc.) is often a good way to get a more immediate response.
Prerequisites: CS 2110 (Software Development Methods) or CS 2220 (Engineering Software); and CS 2102 (Discrete Math), all with grades of C- or above. Note that CS 2102 is allowed as a co-requisite, but see the details for this in the first slide set (specifically, here).
Course objectives: Students who complete the course will:
Grades: Grades will be calculated by the following formula:
We expect that grades will follow the standard decade curve: 90 and above is an A of some sort (A-, A, or A+), 80 and above is some sort of a B, etc. Note: I reserve the right to modify the weighting (changing the curve, adding pop quizzes, etc.), especially if attendance drops off significantly. If this does happen, it will be clearly announced in lecture. Class participation includes such things as random attendance quizzes or in-class quizzes on readings or previously covered topics, using Piazza, useful contributions to the github repo, or otherwise contributing to the course.
Development Environment: In this class, you may NOT use Microsoft Visual Studio, any other Microsoft Windows-based development environment, or any IDE (Integrated Development Environment), such as Eclipse, for any reason. This applies to program development -- obviously, you can use MS Office to edit text documents. The purpose behind this rule is to introduce you to the Unix environment -- thus, all course work in this class is to be done in a Unix environment (Solaris, Linux, FreeBSD, Cygwin, etc.). We will discuss how to access and/or install these environments in the beginning of the course. In order to take this course, you agree to sign an honor pledge that states that you will NOT use a Microsoft Windows-based development environment or IDE for any course work.
Special Circumstances: Students with special circumstances (athletics, extra time required on exams, final exam conflicts, LNEC considerations, etc.) need to let one of us know during the first week of class.
Textbooks: Due to the high cost of textbooks, and their relative low quality, there will be no recommended nor required textbooks this semester. Instead, there will be selected Readings (md) that can be used in lieu of a recommended textbook.
Exams: There will be two midterm exams held during laboratory sessions (combined worth 30% of the final grade) and one final exam (worth 25% of the final grade). Note that we hope (but do not guarantee!) to have the first exam returned before the SEAS drop date of Monday, March 3rd, 2014.
Under NO circumstances will anybody be allowed to take the final exam early. You may ONLY request to take the final exam at a different time if you have a final exam CONFLICT, not a busy final exam schedule.
Laboratories: There will be 11 programming labs this semester, and they constitute 40% of your grade (roughly 4% per lab, although some labs may be weighted more than others). Note that if the number of labs changes, the respective weights for each lab will also be adjusted and announced in class. The total weight of the labs for the final grade will remain 40%, unless a change in the course grading criteria (as above) is announced in class. The majority of the work in this class is through the labs -- there are no separate homework assignments. The labs have different late policies, which will be specified in more detail in the first lab. Your lab submission must compile for you to receive any credit -- this is an advanced programming class, and under no circumstances should you be submitting code that does not compile - the Collab wiki has a page on [compilation issues] to help you if you cannot get your code to compile.
All assignments will be submitted through our custom assignments tool, which can be accessed through Collab. Each assignment has 3 dates: an open date (when you can start submitting the assignment), a due date (when it is due), and a close date (the last point that you can submit the assignment); the close date is 24 hours after the due date, due to the late policy (which is explained in lab 1). Note that the assignment will be available much earlier (typically Wednesday or Thursday of the week before it's due). The dates are listed for the week of the lab - the lab week starts on a Sunday and ends on a Saturday.
The various dates: open dates, due dates, and close dates, are listed on the Lab due dates page (md).
Please note, however, that there are a number of rules that we will strictly follow:
The assignments tool does not handle due dates such as "at the end of your lab session" very well -- indeed, the due date is listed as 10 p.m. on Tuesdays. Note that we have a script that will test the assignment's due date against your lab date, so please be sure to follow the above due dates.
Attendance: Attendance in labs is mandatory; attendance in lecture is not (although not attending lecture may affect your participation grade). Not attending lab will result in a zero for the in-lab. You cannot change labs without prior permission -- we don't have enough computers to accommodate this. Please see the first set of lecture slides about lab attendance, in particular with regards to the fact that there is a lab both the week of Thanksgiving break.
Honor Policy: There have been a large number of honor violations in this class and other low-level CS courses recently. Outside the normal UVa honor policy rules, we have these additional rules:
Any honor violation or cheating will be referred to the honor committee, and will result in an immediate failure for the course, regardless of the outcome of the honor trial or your other grades. No exceptions! I am very strict on this, and one have successfully raised honor charges against students in the past due to violations of this policy.