News
- Jan 22. Homework 1 is out and due Mon Jan 30.
- Jan 21. Link to Scala Style Guide added. We will in general follow the style guide.
- Jan 20. Slides, "whiteboards," and code from class are posted on the schedule.
- Jan 19. Room Change: The F 9:00am-9:50am has changed rooms to ECCR 139.
- Jan 19. Update: No class January
24 and26, as Evan will be traveling. Watch recorded lectures instead. There will be class on Tuesday January 24; Huck and Aleks will lead class in Evan's place. Class on Thursday January 26 will remain canceled and replaced by a pre-recorded class. - Jan 19. Office hours have been posted for the TAs. Evan's Thu office hours also have been adjusted so that they are not at the same time of day as on Tue (now Thu 1-2pm).
- Jan 16. Set up your Scala development environment. The Scala IDE for Eclipse site has some useful screencasts: Getting Started and Features Overview.
- Jan 16. Please sign-up on the course Moodle and Piazza discussion forum. If you did not receive an e-mail message from me with directions, please contact me or our TA. After you get signed up on Piazza, your first assignment is to upload a picture of yourself to your profile (to make discussion more lively) and post a note introducing yourself.
Course Overview and Goals
This course is about principles, concepts, and ideas that underly programming languages. But what does this statement mean?
As a student of computer science, it is completely reasonable to think and ask, ``Why bother? I'm proficient and like programming in Ruby. Isn't that enough? Isn't language choice just a matter of taste? If not, should I be using another language?''
Certainly, there are social factors and an aspect of personal preference that affect the programming languages that we use. But there is also a body of principles and mathematical theories that allow us to discuss and think about languages in a rigorous manner. We study these underpinnings because a language affects the way one approaches problems working in that language and affects the way one implements that language. At the end of this course, we hope that you will have grown in the following ways:
- You will be able to learn new languages quickly and select a suitable one for your task.
- You will gain new ways of viewing computation and approaching algorithmic problems.
- You will gain new ways of viewing programs.
- You will gain insight into avoiding mistakes for when you design languages.
We will undertake a careful, step-by-step study of an example, real-world programming language (that ideally is foreign to you). Along the way, we will consider the design decisions made and think about alternatives, and we will study the programming language theory that enable us to reason carefully about them. Our approach will be gradual in that we will initially consider a small subset of our foreign language and then slowly grow the aspects of the language that we consider. We will dive in and write programs in our foreign language to gain intuition and insights into the questions raised above.
The course covers many aspects of using, understanding, and reasoning about programming languages (e.g., syntax, scoping, induction, data types, and typing). We will build up a set of mathematical tools for careful discourse. A significant part is devoted to abstraction, that is, how languages help programming in the large (e.g., subtyping polymorphism, parametric polymorphism, modules, and objects).
This course prepares you for introductory courses on both programming language implementation (e.g., CSCI 4555) and programming language semantics (e.g., CSCI 5535).
Prerequisites
The official prerequisites for this course are CSCI 2270 (Computer Science 2: Data Structures) and one of CSCI 2400 (Computer Systems) or ECEN 2120 (Computers as Components). These prerequisites are not necessarily absolute. Proficiency in programming is expected, though there is no specific language required. Some exposure to discrete mathematics (e.g., from CSCI 2824 Discrete Structures) will be helpful. If in doubt, please talk with the instructor.
Requirements
You will be responsible for the following:
- Homework Assignments (20%). Most homework assignments will be two weeks in length.
- Quizzes (15%). There may be quizzes announced in advance.
- Teaching Project (10%).
- Midterm Exam (25%). There will be one midterm exam.
- Final Exam (30%).
- Class Participation. Participation includes both in-class and online discussion.
- Reading. There will be required articles or book chapters to read. This course will emphasize learning from the resources out of class and actively discussing problems and questions in class.
Grading. Your overall grade will be determined using the ratio for homework assignments, quizzes, project, midterm exams, and the final exam shown above. There is no predetermined curve (i.e., everyone can get an A if everyone achieves that level of mastery). Cutoffs will be announced after an exam to give you an idea where you stand.
Regrades. Any request for reconsideration of any grading on coursework must be submitted within one week of when it is returned. Any coursework submitted for reconsideration may be regraded in its entirety, which could result in a lower score if warranted. To request a regrade, please go to the instructor's office hours with your coursework and an explanation of what you believe the grading error to be.
Make-Up Exam Policy. There will be no special or make-up examinations for any student (except in the case of emergency or the stated special accommodations).
Late Assignment Policy. No assignment deadline extensions will be given (except in the case of emergency or the stated special accommodations). At the same time, we understand that we all have things that come up in our lives, so everyone has an allocation of 3 late days to use over the course of the semester. You may use all 3 late days on one assignment or multiple assignments. We will not look for late submissions, so if you submit late, you must contact your TA. Using one late day is submitting up to 24 hours after the deadline.
Extra Credit and Participation. Extra credit opportunities may be offered during the course semester. Extra credit is recorded separately from normal grades and are only considered after final grades have been calculated. If your final grade is just below a grade cutoff, extra credit may bump you up to the next grade. Participation works similarly. There are no point values assigned for participation, but active participation in class and on the Piazza discussion forum may bump you up to the next grade.
Pair Programming. You are encouraged to work on homework assignments in pairs, enabling pair programming. Homework assignments are the main opportunity to learn material in this course and thus they count for a relatively small portion of your final grade. It is strongly advised that you work on all the problems in a homework assignment together so that you understand all of the material and are prepared for the exam. Everyone will submit assignments, and you must cite your partner explicitly. You may switch partners between assignments, and you are responsible for all assignments individually (e.g., if your partner drops the course midway though an assignment, you still need to submit on time).
Workload. CSCI 3155 is a 4-credit course.
Evaluation
Both your ideas and also the clarity with which they are expressed matter—both in your English prose and your code!
We will consider the following criteria in our grading:
- How well does your submission answer the questions? For example, a common mistake is to give an example when a question asks for an explanation. An example may be useful in your explanation, but it should not take the place of the explanation.
- How clear is your submission? If we cannot understand what you are trying to say, then we cannot give you points for it. Try reading your answer aloud to yourself or a friend; this technique is often a great way to identify holes in your reasoning. For code, not every program that "works" deserves full credit. We must be able to read and understand your intent. Make sure you state any preconditions or invariants for your functions (either in comments, as assertions, or as require clauses as appropriate).
Textbook and Resources
Textbook. There is no required textbook. A work-in-progress set of course notes will be made available whenever possible.
Supplemental Books. The following books are not required. We may make reference to them, and you may find them useful as alternative presentations of similar material.
- Martin Odersky, Lex Spoon, and Bill Venners. Programming in Scala, 2nd edition. This book is an extended tutorial for learning Scala by those directly involved in the language's development.
- Robert W. Sebesta. Concepts of Programming Languages. This book has been used in this course in previous semesters.
Scala.
- Language Website. The central point for Scala information.
- Scala IDE for Eclipse. You are welcome to use any code development environment, but the course staff will mostly use the Eclipse plugin. There are many options, including support for Emacs, IntelliJ, and NetBeans.
- Scala Style Guide. We will in general follow the Scala style guide.
Other.
Tools
Moodle. We will use Moodle for grades and feedback. If you do not already have an account, please create one and join the course moodle. The enrollment key is in the welcome e-mail.
Piazza. We will be using Piazza for online, outside-of-class discussion. Rather than emailing questions to the teaching staff, questions should be posted on Piazza. I encourage you to make class-wide posts whenever possible, but there is an option to send an instructor-private message. You also have the option of posting anonymously.
PL-Detective. The PL-Detective is a tool developed by Prof. Amer Diwan et al. The PL-Detective aims to make learning programming language concepts fun, while attempting to address many of the goals enumerated above. We will use the PL-Detective for assignments and classroom demonstrations.
Computing. For a Linux environment, the following are some resources:
- You can create a CSEL account. CSEL has a lab in ECCS 128 and remote access servers with SSH (elra-01 through elra-04.cs.colorado.edu).
Collaboration Policy
You are welcome and encouraged to work together in learning the material. If you worked with someone on an assignment, or if your submission includes quotes from a book, a paper, or a web site, you should thank the source. Bottom line, feel free to use resources that are available to you as long as the use is reasonable and you cite them in your submission. However, note that copying answers directly or indirectly from solution manuals, web pages, or your peers is certainly unreasonable. If you have any doubts in this regard, please ask the course staff.
We will go by the Honor Code set forth by the University:
All students of the University of Colorado at Boulder are responsible for knowing and adhering to the academic integrity policy of this institution. Violations of this policy may include: cheating, plagiarism, aid of academic dishonesty, fabrication, lying, bribery, and threatening behavior. All incidents of academic misconduct shall be reported to the Honor Code Council and those students who are found to be in violation of the academic integrity policy will be subject to both academic sanctions from the faculty member involved and non-academic sanctions given by the Honor Code Council (including but not limited to university probation, suspension, or expulsion).
Please refer to www.colorado.edu/honorcode/ to view the specific guidelines. If you have any questions related to this policy, please contact the Honor Code Council at honor@colorado.edu.
Classroom Behavior
We trust and expect everyone to behave in a civil and courteous manner.
In class, the course staff promises their undivided attention and reciprocally expects the same from you. In today's world, this promise requires turning off transmitting devices, such as cell phones and wi-fi on notebook computers. Notebook computers should be used only for purposes directly relevant to the class discussion (e.g., taking notes). Please notify the course staff if you encounter behavior that distracts from your learning.
Discrimination and Sexual Harassment
We will go by the policies set forth by the University:
The University of Colorado at Boulder policy on Discrimination and Harassment, the University of Colorado policy on Sexual Harassment and the University of Colorado policy on Amorous Relationships apply to all students, staff and faculty. Any student, staff or faculty member who believes s/he has been the subject of sexual harassment or discrimination or harassment based upon race, color, national origin, sex, age, disability, creed, religion, sexual orientation, or veteran status should contact the Office of Discrimination and Harassment (ODH) at 303-492-2127 or the Office of Judicial Affairs at 303-492-5550. Information about the ODH, the above referenced policies and the campus resources available to assist individuals regarding discrimination or harassment can be obtained at www.colorado.edu/odh.
Special Accommodations
We will make every effort to make special accommodations that are reasonable and fair to all students. Please note that we will accept requests for adjustments during the first four weeks of class.
Disability
We will go by the disability guidelines set forth by the University:
If you qualify for accommodations because of a disability, please submit to the course staff a letter from Disability Services within the first four weeks of class so that your needs can be reasonably addressed. Disability Services determines accommodations based on documented disabilities (303-492-8671, Willard 322).
If you have a temporary medical condition or injury, see these guidelines.
Disability Services' letters for students with disabilities indicate legally mandated reasonable accommodations.
Religious Observances
We will go by the policy for religious observances set forth by the University:Campus policy regarding religious observances requires that faculty make every effort to deal reasonably and fairly with all students who, because of religious obligations, have conflicts with scheduled exams, assignments or required attendance. In this class, we will try to accommodate religious conflicts in a reasonable manner. Please check the exam dates and submit all requests for adjustments within the first four weeks of class.
See www.colorado.edu/policies/fac_relig.html for further details on the policy.
Acknowledgments
This course has benefited from the organization and experience from prior versions of this class taught by Amer Diwan, Michael Main, William Waite, Martin Hirzel, and Clayton Lewis.




