- Dec 7. Homework Assignment 10 has been posted. It will not be collected but contains practice problems for the final two skill sets.
- Nov 27. Homework Assignment 9 has been posted and is due Thu Dec 3.
- Nov 12. Homework Assignment 8 has been posted and is due Thu Nov 19.
- Nov 8. Homework Assignment 7 has been posted and is due Thu Nov 12.
- Oct 24. Homework Assignment 6 has been posted and is due Fri Oct 30.
- Oct 17. Homework Assignment 5 has been posted and is due Thu Oct 22. The code for exercise 4 will be posted after the Project 1 deadline tomorrow.
- Oct 5. Midterm 1 scores have been posted on the moodle.
- Oct 1. Project 1 has been posted and is due Thu Oct 15. A checkpoint is due Thu Oct 8.
- Sep 24. You may bring one 8.5"x11" single-sided sheet of notes created by you to the midterm on Thu Oct 1. Please remember to bring blue books.
- Sep 17. Homework Assignment 4 has been posted and is due Thu Sep 24.
- Sep 13. Resources on SML have been posted.
- Sep 11. A copy of the 9th edition of the textbook is now on reserve in the Engineering Library.
- Sep 10. Homework Assignment 3 has been posted and is due Thu Sep 17.
- Sep 3. Homework Assignment 2 has been posted and is due Thu Sep 10.
- Aug 27. Homework Assignment 1 has been posted and is due Thu Sep 3.
- Aug 26. The textbook is now available at the CU Bookstore. Thanks Dain for the update!
- Aug 25. The reading for Thursday has been posted on the moodle.
- Aug 25. Slides from today have posted on the schedule. In general, materials from class will be posted on the schedule.
- Aug 23. The first "homework" is to sign up on the course moodle and introduce yourself by Thursday, August 27.
- Aug 23. There will be no recitation section on August 25. The first recitation will be on September 1.
Course Overview and Goals
This course is designed to acquaint you with important concepts behind modern programming languages, including the object-oriented and functional paradigms. Ultimately after taking this course, you should be able to do the following:
- Understand better the strengths and limitations of the languages you use already;
- Teach yourself new languages with relative ease; and
- Evaluate the suitability of a language for a given task.
We focus on concepts of programming language design and then use existing languages to illustrate the concepts. As the landscape and popularity of programming languages is ever changing, you will learn many skills that enable you to more easily learn and evaluate whatever programming languages you encounter during your career.
The course covers many aspects of using and understanding programming languages (e.g., syntax, scoping, data types, control structures, typing). A significant part is devoted to types (e.g., what they are, subtyping, inclusion and parametric polymorphism). We also look closely at important programming paradigms: object-oriented (using C++ and Java as example languages) and functional (using SML as an example language).
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. Some prior programming experience is expected, ideally familiar with more than one programming language. If in doubt, please talk with the instructor.
You will be responsible for the following:
- Class Participation (10%). Participation includes both in-class and online discussion.
- Homework Assignments (25%). The homework will be mostly week-long assignments, though some larger ones will last two weeks.
- Midterm Exams (40%). There will be two midterm exams.
- Final Exam (25%).
- 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 class participation, homework assignments, midterm exams, and the final exam shown above. Letter-grade cutoffs will be announced after each exam to give you an idea where you stand.
Approximately 80% of the points on the exams and assignments will come from the identified skills. In other words, if you master all of these skills, you will get 80% of the points (likely to be in the B- to B+ range). The remaining points will be based on synthesis questions, that is, questions that combine multiple topics and are not necessarily tied to a single skill.
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.
Late Assignment Policy. No late assignments will be accepted unless in the case of emergency (in which case appropriate documentation is expected). We all have things that come up in our lives, so you have one assignment grade that can be dropped. If you complete all assignments, the lowest grade will be dropped prior to the calculation of your final semester score.
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).
Both your ideas and also the clarity with which they are expressed (i.e., your English prose) matter.
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.
Textbook and Resources
Textbook. Robert W. Sebesta. Concepts of Programming Languages, 9th edition. While the class will use the 9th edition, it should be fine to use the 8th edition if you already have access to it. One copy of the 8th edition and one copy of the 9th edition of the textbook is on reserve in the Engineering Library.
- Robert Harper. Programming in Standard ML. We will use this textbook for the functional programming unit.
- Michael R Hansen and Hans Rischel. Introduction to Programming using SML. This book is an introductory text to programming in SML that might be a helpful supplement. It is on reserve in the Engineering Library.
- Standard ML Basis Library. This link points to the reference manual for the standard libratry.
- Standard ML of New Jersey (SML/NJ). Go here to install SML/NJ on your machine. As an alternative, it is already installed on CSEL.
- SML-mode (documentation, download). SML-mode is an Emacs editing mode for SML, which gives you some IDE-like features. It has also been installed on CSEL.
- Riccardo Pucella. Notes on Programming Standard ML of New Jersey. These notes provide some more details about the SML/NJ environment.
Moodle. We will use Moodle for online discussion and assignment submission. If you do not already have an account, please create one and join the course moodle.
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. Go ahead and play with the PL-Detective.
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).
- You can download and install the CU Computer Science Virtual Machine.
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).
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.
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.
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 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. 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.
Potential H1N1 Flu Outbreak
If there is a serious outbreak of H1N1 on campus, unfortunately, alterations in course content and/or structure may be necessary.
The University is emphasizing that if you become ill with flu-like symptoms, you should not come to class or have close contact with other students (e.g., study groups). You should not return to class until 24 hours after fever has abated. The course staff will follow the same guidelines.
If you will be absent because of flu-like illness, notify the course staff immediately by e-mail so that we can try to find the best course of action.
Note that the Honor Code set forth by the University applies in case of abuse of this absence policy.
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.