- Aug 22. Enrolled students should have received an e-mail about joining the Moodle course management system and Piazza discussion forum. If you have not yet received it, please contact the course staff.
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.
Incoming students often expect this course to be what I will call a trip to the Zoo of Programming Languages. While it is certainly interesting to go to the zoo, we seek a more informative and sciencific study of the underlying principles. A more apt analogy is an anatomy course where we will study the "guts" and inner-workings of programming languages. After this course, such an anatomological study will enable us to compare and constrast programming languages in a substantive manner and address the learning goals outlined 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).
The prerequisites for this course are CSCI 2270 (Computer Science 2: Data Structures) and CSCI 2824 (Discrete Mathematics). It is also suggested that one of CSCI 2400 (Computer Systems) or ECEN 2120 (Computers as Components) be either previously taken or be taken in the same semester.
If you have not already taken these courses or if you have any concerns, please talk with the instructor. Proficiency in programming is absolutely expected, though there is no specific language required. This means that you should be able to pick up a new programming language with relative ease. You will be expected to learn new programming languages with guidance but relatively independently in this course.
You will be responsible for the following:
- Lab Assignments (30%). This course is a project-based course, so most of the understanding will come from attacking the lab assignments. Lab assignments will be two weeks in length. Because iteration on lab assignments is the basis for learning in this course, we offer a generous "redo" policy on lab assignments (see below). No late assignments will be accepted, but your lowest lab grade will be dropped.
- Exercises (10%). There will be in-class exercises associated with each unit. There will be no make-ups if you miss an in-class exercise, but your lowest exercise grade will be dropped.
- Midterm Exam (25%). There will be one midterm exam.
- Final Exam (30%).
- Class Participation (5%). 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 lab assignments, exercises, the midterm exam, the final exam, and class participation shown above. There is no predetermined curve (i.e., I hope everyone gets an A based on the level of mastery demonstrated). Cutoffs will be announced after the midterm exam to give you an idea where you stand.
Regrades. Any concern about an error in grading 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).
Redo Policy. This course is project-based, which means the learning is driven primarily by the lab assignments. To encourage iteration until mastery, you may "redo" any assignment via an oral interview with the instructor for a maximum of 90%. A "redo" must be completed within one week of when the assignment is returned. You may request one interview per assignment. However, you may discuss your solutions with the instructors in office hours as much as you like before requesting your regrade. You must submit your lab on time to participate in a "redo".
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. Finding a bug in the course materials that is then adopted is a standing offer for extra credit.
Teams and Pair Programming. Your goal as a team is to help each other successfully complete the course project and the course together. You are asked to work on lab assignments in pairs from your team, enabling pair programming. You are also asked to work with a different partner for each lab assignment, enabling the benefit from the experience of your team. You will select your partner in your lab section in the week before the lab is released. Lab 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 lab 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 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).
Autotesting and Checkpoints. We will use automated testing as way to provide you with quick, iterative feedback on your progress in achieving the learning outcomes. Automated testing will be used minimally for evaluation but will be used as a checkpoint for interview grading.
Interview Grading. The primary feedback mechanism for your lab assignments will be through an interview with a teaching assistant. With your partner, you will choose a single laptop to take the interview and go to the interview slot together. The interviews will then be conducted individually. Please be on-time to your interview slot. Given the large number of students, we cannot offer make up interviews if you miss it nor extra time if you are late.
Workload. CSCI 3155 is a 4-credit course. This translates to the standard expectation of approximately 8 hours of outside of class time per week or 16 hours per two-week lab.
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. The primary reading for the course is the course notes: Principles and Practice in Programming Languages.
The course follows many ideas from a supplemental text: Essentials of Programming Languages, 3rd edition by Daniel P. Friedman and Mitchell Wand. We will take liberty to deviate this text where appropriate, as we will use a different implementation language (Scala instead of Scheme). This book is available as an e-book to all University students.
We also strongly recommend that you get access to Programming in Scala, 3rd edition by Martin Odersky, Lex Spoon, and Bill Venners. This book is an extended tutorial for learning Scala by those directly involved in the language's development.
Two other useful Scala texts: Atomic Scala by Bruce Eckel and Dianne Marsh; Functional Programming in Scala by Paul Chiusano and Runar Bjarnason.
- ECMA-262 standard specification.
- Language Website. The central point for Scala information. The reference implementation for this course is Scala 2.11.8.
- IntelliJ IDEA. You are welcome to use any code development environment, but the course staff will only support IntelliJ. There are many options, including support for Emacs, Eclipse, and NetBeans.
- Scala Style Guide. We will in general follow the Scala style guide.
- An Overview of the Scala Programming Language (2. Edition). This document is a technical overview that assumes background in object-oriented programming.
- The Scala Language Specification. This document is the most detailed specification of the language.
Git. There are many guides and tutorials on using git and Github. Here are some links to start with:
- Hello World from Github Guides.
- Syncing from Atlassian Tutorials.
- Pro Git by Scott Chacon and Ben Straub. This free e-book gives a good basis for understanding git.
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.
Computing. We strongly suggest you use a Unix-based development environment (e.g., Linux or Mac OS). The standardized development environment is the CU CS Virtual Machine. After obtaining the Virtual Machine, you will need to install the following separately:
- The CSCI 3155 package via
$ sudo apt-get update
$ sudo apt-get install cu-cs-csci-3155
- IntelliJ IDEA from https://www.jetbrains.com/idea/download/
Integrity of the Course Materials
The development effort in the course materials, including the lab assignments, the exercises, and the exams, is significant. You agree that you will not share any course materials publicly or privately outside of your teams. The course materials, include your or anyone else's solutions to the lab assignments, exercises, and exams. In particular, you agree not to post your solutions to the lab assignments in a public source code repository, such as public Github repositories. Please use private source code repositories for your work.
Note that there is no conflict with the Collaboration Policy described below. You are welcome and encouraged to support each other in the learning of the material.
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, 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.
Academic Dishonesty Policy. We will go by the Honor Code set forth by the University:
Academic sanctions may include, but is not limited to, a zero for the assignment or a failing grade for the course.
All students enrolled in a University of Colorado Boulder course are responsible for knowing and adhering to the academic integrity policy of the institution. Violations of the policy may include: plagiarism, cheating, fabrication, lying, bribery, threat, unauthorized access, clicker fraud, resubmission, and aiding academic dishonesty. All incidents of academic misconduct will be reported to the Honor Code Council (firstname.lastname@example.org; 303-735-2273). Students who are found responsible for violating the academic integrity policy will be subject to nonacademic sanctions from the Honor Code Council as well as academic sanctions from the faculty member. Additional information regarding the academic integrity policy can be found at honorcode.colorado.edu.
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. The use of notebook computers should be discussed with the instructor and they should be used only for purposes directly relevant to the class discussion. Please notify the course staff if you encounter behavior that distracts from your learning.
We will also go by the policies set forth by the University:
Students and faculty each have responsibility for maintaining an appropriate learning environment. Those who fail to adhere to such behavioral standards may be subject to discipline. Professional courtesy and sensitivity are especially important with respect to individuals and topics dealing with differences of race, color, culture, religion, creed, politics, veteran's status, sexual orientation, gender, gender identity and gender expression, age, disability, and nationalities. Class rosters are provided to the instructor with the student's legal name. I will gladly honor your request to address you by an alternate name or gender pronoun. Please advise me of this preference early in the semester so that I may make appropriate changes to my records. For more information, see the policies on classroom behavior and the student code.
Sexual Misconduct, Discrimination, Harassment and/or Related Retaliation
We will go by the policies set forth by the University:
The University of Colorado Boulder (CU Boulder) is committed to maintaining a positive learning, working, and living environment. CU Boulder will not tolerate acts of sexual misconduct, discrimination, harassment or related retaliation against or by any employee or student. CU's Sexual Misconduct Policy prohibits sexual assault, sexual exploitation, sexual harassment, intimate partner abuse (dating or domestic violence), stalking or related retaliation. CU Boulder's Discrimination and Harassment Policy prohibits discrimination, harassment or related retaliation based on race, color, national origin, sex, pregnancy, age, disability, creed, religion, sexual orientation, gender identity, gender expression, veteran status, political affiliation or political philosophy. Individuals who believe they have been subject to misconduct under either policy should contact the Office of Institutional Equity and Compliance (OIEC) at 303-492-2127. Information about the OIEC, the above referenced policies, and the campus resources available to assist individuals regarding sexual misconduct, discrimination, harassment or related retaliation can be found at the OIEC website.
We will go by the disability guidelines set forth by the University:
If you qualify for accommodations because of a disability, please submit to your professor a letter from Disability Services in a timely manner (for exam accommodations provide your letter at least one week prior to the exam) so that your needs can be addressed. Disability Services determines accommodations based on documented disabilities. Contact Disability Services at 303-492-8671 or by e-mail at email@example.com. If you have a temporary medical condition or injury, see the Temporary Injuries guidelines under the Quick Links at the Disability Services website and discuss your needs with your professor.
Religious ObservancesWe 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. 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 the campus policy regarding religious observances for full details.
This course has benefited from the organization and experience from prior versions of this class taught by Jim Baker, Amer Diwan, Michael Main, William Waite, Martin Hirzel, and Clayton Lewis.