8 minute read


Welcome to CS 135: Programming Languages! In this course we will explore principles and paradigms of programming languages, giving special attention given to functional programming and contrasting it with imperative and object-oriented programming.

As seen on the Schedule page, the course is more-or-less divided into two parts. The first-half of the semester will be dedicated to learning functional programming using Haskell as a vehicle. The second-half of the semester will be dedicated to learning core programming language principles, including syntax, names, types, and semantics. In-between the two halves of the semester, we will survey a broad range of programming languages and contrast their features and uses.

After taking this course, students will be proficient in the functional programming paradigm and be familiar with a variety of programming languages. Students will also have an understanding of programming language design and implementation issues which will serve as a foundation for learning and using new languages and technologies in the future.


There is no required textbook for the course. Assigned readings will be primarily based on the free open-source textbooks.

Activities / Grading

Your grade in this course is determined by:

Labs 25% Presentation 20%
Assignments 25% Final Exam 30%
Participation ±5%    

The grading scale for the course is as follows.

A 93–100% C+ 77–80%
A- 90–93% C 73–77%
B+ 87–90% C- 70–73%
B 83–87% D 60–70%
B- 80–83% F 0–60%

Note: Grades will not be curved in this course; however, I reserve the right to change the above scale in your favor. This is to avoid punishing students for making an exam too long, etc.

Grades will be posted on codePost rather than Blackboard. Assignment 1 guides you through setting up your codePost account.


A portion of many class meetings will be devoted to a lab. Labs consist of a set of exercises to help you practice the concepts you are learning. Labs are to be completed with an assigned pair-programming partner and will usually include a component that you must turn in before the next class period.

Labs will be especially prominent during the first half of the semester. The second-half of the semester will focus primarily on weekly assignments.


During the second-half of the semester, assignments will be assigned approximately weekly. These assignments will be announced in class and posted to the course schedule and assignments pages.

Some assignments will be group assignments and may be completed with a pair programming partner. If you are working on an assignment as a group, you are expected to complete the group assignment together with your partner and only submit one solution.

Note: Whenever working in groups—either on a lab or an assignment—you cannot divide up the work and complete the parts independently. All code submitted must be authored by all members of your group. I expect you to work on group assignments together in a Zoom or Microsoft Teams call.


All students are required to prepare and give a 10-minute presentation on a particular programming language and prepare a reference card, or “cheat sheet,” for the language. These talks will be given during class in teams of two. More information on the presentations will be announced several weeks into the course.

Final Exam

There will be a take-home final exam due during final examination week. The exam will be open notes, open computer, and open instructor. However, because I intend the final exam to assess your own individual understanding of the material, collaboration on exams is not permitted. You should not talk to anyone (except me) about take-home exams before they are graded and returned. You should not discuss the exam problems (nor your answers) with anyone else. You should not give any information about your progress on the exam (e.g., which problems you have completed or which you found difficult), and neither should you ask others about their progress. If you have any doubt about what is and is not permissible, ask the instructor.


Your participation in the course is key to you fully grasping the material. Thus, your participation grade will be calculated based on the following factors:

  • coming to class on time,
  • coming to class prepared,
  • asking questions when appropriate,
  • making positive contributions to class discussion,
  • staying on task during lab exercises, and
  • working effectively with your lab partner(s).


Attendance is mandatory in this course. In-class activities will include completing the lab with your pair programming partner, so any absence not only negatively affects you but also your partner.

Warning! Every unexcused absence will result in a -1% penalty to your final grade. If you are sick or must miss class for any reason, you must notify your instructor as soon as possible.

Note: Your first unexcused absence penalty will be waived.

Course Policies


Deadlines in this course are firm. However, I do recognize that there are exceptional circumstances due to health, family emergencies, etc. I am willing to work with you through these situations and grant extensions if it is appropriate. Please reach out to me immediately if such a circumstance arises.

Accommodations for Students with Disabilities

Drake University is committed to providing equitable access to learning opportunities for all students. The Disability Services office (107 Old Main) collaborates with students who have disabilities to provide and/or arrange reasonable accommodations. If you have, or think you may have, a disability (e.g., mental health, attentional, learning, autism spectrum disorders, chronic health, traumatic brain injury and concussions, vision, hearing, mobility, or speech impairments), please contact

to arrange a confidential discussion regarding equitable access and reasonable accommodations.

Academic Integrity

Drake University has high standards for academic integrity, and you are expected to read the Academic Dishonesty Policy from the College of Liberal Arts and Sciences.

Below is a particularly relevant excerpt from the statement:

Academic dishonesty is an all encompassing term involving any activity that seeks to gain credit for work one has not done or to deliberately damage or destroy the work of others. Academic dishonesty includes, but is not limited to, plagiarism, cheating, fabrication, and knowingly helping another to commit an act of academic dishonesty.

Below are some examples of how Drake’s policy applies to this course:

  • When you explicitly work as part of a group or team, you need not identify the work of each individual in the group (unless I specify otherwise).
  • You may discuss concepts (algorithms, ideas, approaches, etc.) described in the readings, lab exercises, or during class with anyone.
  • All the work you submit (code, experimental data, journals, etc.) must be your own or that of your group. You must appropriately cite any code or documentation you copy or modify, including code provided by the instructor. Furthermore, each member of your group must understand and be able to individually explain all aspects of the work. If you cannot explain your solution, you are in violation of this policy.
  • You must cite all non-syntax consultations (i.e., ideas about algorithms, help with debugging) from any source, including the readings, labs, provided code, and internal or external language references.
  • You must acknowledge and attribute any conceptual contributions by individuals not in your group. That is, you must give specific attribution for any assistance you receive. (This includes the instructor, teaching assistants, and tutors.) The suggested acknowledgment format is: “[Person X] helped me to do [thing Y] by [explaining Z].”
  • You are responsible for safeguarding your work from being copied by others.

Getting Help


Feel free to reach out to me at any time. The quickest way to get a hold of me is to message me on Microsoft Teams. You may also schedule an appointment with me on Calendly.

My office hours are virtual and by appointment only. They are also generally limited to 2:00–5:00 PM CT on Mondays and Wednesdays.

Academic Success Resources

Check out the Academic Success website. It includes a page for Skills for Success with excellent tips for management classwork. You may also find the following resources useful:

COVID-19 Policies

Camera Use

A significant part of your learning in this course will depend on your active and attentive engagement in class discussions and other collaborative learning opportunities. I encourage you to turn on your camera during online collaborative exchanges to help sustain a sense of community and co-presence as we learn together. However, doing so is not required; if you have reservations about doing so (or an inconsistent, slow internet connection, etc.) having your camera turned off is also completely acceptable.

If You Test Positive

If you test positive for COVID-19 or have been exposed and need to isolate yourself, please send an email to from your Drake email account and include your full name and student ID along with information about your situation. College and schools’ deans’ offices will then contact your professors, who will work with you to provide fully virtual learning opportunities during your quarantine and/or recovery.

Self-Monitoring and Symptoms

Please carefully monitor your own health and wellbeing throughout the semester, including frequently taking your own temperature. If you experience COVID-19 symptoms or a fever, even if you do not test positive, please do not come to an in-person class meeting. Fill out your information using the following Drake self-monitoring form:

Additional Information

Here’s a good resource for other questions/concerns regarding COVID: