# CSCI 5106: Programming Languages Fall 2019

### Exam Dates and Times

Note: Location for the final exam has been determined

Midterm Exam: October 22, 2019, 14:30 -- 15:45, Akerman Hall 209

Final Exam: December 19, 2019, 10:30 -- 12:30, Akerman Hall 209

## New Information

12/17/2019
• hw7 can be collected from Sanfer during his office hours today.
• Solution sketches for hw8 problems have been posted.

• I calculated an aggregate based on the work that has been graded up to this point using the formula
```aggr := (hw1 * 3/28) + (hw2 * 7/42) + (hw3 * 7/27) + (hw4 * 5/11) + (hw5 * 9/29) + (hw6 * 5/14) + (hw7 * 9/50) + (hw8 * 5/ 30) +  mid/5
```
This represents the following weights for the different homeworks: 3 points for hw1, 7 points each for hw2 and hw3, 5 points each for hw4, hw6 and hw8, and 9 points each for hw5 and hw7. Looking at the distribution I saw, I would put a cutoff at around 65 for some kind of A (i.e. A or A-), at 54 for some kind of B (i.e. B-, B or B+), and 38 for some kind of C (i.e. C-, C or C+). If your aggregate is below 38, you will have some catching up to do in the final exam. That exam counts for 30 more points and you will need a final aggregate of around 52.5 points to pass the course.

• A reminder that I am still expecting you to get at least 50% in each homework.

12/16/2019

• Comments on the grading of hw7 have been posted. You may pick your graded homeworks up during office hours tomorrow, i.e. between 11:30 and 12:30.

12/15/2019

• A sample problem set that you might find useful in preparing for the final exam has been posted.

09/03/2019

• We will use the course web page extensively, especially for communication between lectures. Make sure to look at it regularly, perhaps every day. Any new information that has not been mentioned in class will be announced briefly here. However, you still have the responsibility of attending lectures to keep abreast of all that is going on in the course.

• We will use Piazza through the link provided above as a medium for conducting class discussions. Please read the comments on etiquette for interactions that I have posted here and get ready to participate in discussions via Piazza as quickly as possible.

• Any code written for this course has to be submitted electronically as an accompaniment to hard copy submissions. Details on the protocol for submissions appear on the homeworks page. Sites will be set up for submitting the electronic components of homeworks as they become relevant during the semester.

## Contact Information

• Lecture Times and Place: TTh 14:30 - 15:45, Akerman Hall, Room 209.

• Instructor: Gopalan Nadathur (ngopalan atsign umn dot edu), KH Keller Hall 6-215, 612-626-1354.
Office Hours: T 12:30 - 13:30, Th 16:00 - 17:00.

• Teaching Assistant: Sanfer D'souza, (dsouz039 atsign umn.edu)
Office Hours: M 10:00-11:00, W 15:00-16:00
Room: KH Keller Hall 2-209, 612-626-7512

## Course Prerequisites

The formal prerequisite for this course is CSci 4011 or instructor consent. The conceptual prerequisites are that you should have programmed significantly in at least a couple of different kinds of programming languages (for example, Scheme and Java would be a reasonable combination) and that you should have enjoyed this activity. This is a course in which you will learn to think abstractly about programming and programming languages. Please read the course objectives below to understand what this means in terms of course content. You need to be mentally prepared for this kind of introspective thinking. CSci 4011 and its prerequisite---CSci 2041---would have prepared you for this, but you could have got such a preparation from other courses as well.

## Required Text and Other References

The required text is Programming Languages: Concepts and Constructs (Second Edition), Ravi Sethi, ISBN 0-201-59065-4.

We will be reading a few research/expository papers during the term. These will be made available via the password protected papers and handouts page. Occasionally, when I cannot get an electronic copy of a paper, I will distribute xerox copies in class.

Textbooks are expensive and sometimes unnecessarily so. Before buying a book, I encourage you to search a little on the web to see if you can find it at discounted prices somewhere. If you have done the search and have found some other good place to get the text book from, do think of helping your colleagues. You can post information about any legal means of obtaining the book to the folder in the Piazza page that has been set up for social interactions, for example.

## Course Description and Objectives

This course provides an introduction to the area of programming languages. The focus will be on conceptual issues. Aspects relating to the structure, usability and implementation of a variety of programming languages and paradigms will be studied. Case studies from existing programming languages such as Pascal, C, C++, Java, ML, Scheme, Haskell and Prolog will be used to motivate and ground discussions at various points. Some programming in each of these languages will be needed in order to clearly understand the issues that we will study. However, the eventual purpose of the course is not to learn to program in a variety of different languages. Rather, the objective is to obtain a general understanding of the idea of a programming language; such an understanding might be useful at a later stage in quickly assimilating information about any new language that is encountered and in making judgements about its implementability and usefulness for specific programming tasks. Also, while you will not necessarily be ready at the end of this course to design or implement new programming languages, you should be adequately prepared for advanced courses that address these aspects.

## Outline of Topics

The intention is, roughly, to cover the material in the first five parts of the text. Here is a list of topics I plan to cover:

• Introduction. The nature of programming languages and the forces that shape them. (Chapter 1.)

• Dealing with syntax. The description of syntax, the extraction of syntactic structure from text and the computer encoding of such structure. (Chapter 2.)

• Imperative programming. Computation based on state change, the need for structured control flow constructs, reasoning about programs with such constructs; data types; procedures, parameter passing mechanisms and scope rules, implementation issues; data abstraction, information hiding and modularity. (Chapters 3--6.)

• Object-oriented programming. The notion of an object, object-oriented thinking, issues such as inheritance and classes, information hiding. (Chapters 6--7.)

• Functional programming. Model of computation based on expression evaluation. Higher-order programming, approaches to expression evaluation, lazy evaluation and infinite structures, polymorphic typing, type checking and type inference. (Chapters 8-10, material from Chapter 14.)

• Logic Programming. Programming through specifying and enquiring about relationships. Unification and search as mechanisms for computing. Applications of the paradigm. Procedural issues related to search, aspects such as cut and negation-by-failure. (Chapter 11.)

• Concurrent Programming. Issues in concurrency and their reflection in programming language constructs. (Chapter 12.)

The text is a little superficial in its coverage of some important topics and so we will supplement it through lecture material and research papers. Also, going the other way, the syllabus indicated above is a little ambitious and time constraints may not permit us to cover all the topics in the mentioned parts of the text; in past offerings, discussions of object-oriented programming and concurrency have been casualities of time pressures.

There are four components to the required work: reading assignments, class participation, homeworks and exams.

You will be responsible for having read and understood all the material in the parts of the text described earlier. I will in addition make papers that supplement class discussions available to you periodically. You will be responsible for reading all of these materials even if they are touched only briefly or not at all in the lectures; if you have questions about them, raise them in class or via the discussion forums, the latter perhaps being the better way to get a careful discussion started on the topic.

Lectures will often cover material not directly available from the book or in the assigned papers. You will be responsible for this material as well. Attending lectures and keeping abreast of discussions is therefore very important. Students who have skipped lectures have had difficulty with the course in the past. Be warned about this and note that there will be no reprieve after the fact.

Half the grade for the course will be determined by homework assignments and the other half by exams. An aggregate will be calculated based on these aspects of your work and then a curve will be plotted and used to translate the aggregate into a letter grade. Note that while the reading assignments and class participation do not contribute directly to the grade, they will still have an important impact: whether or not you do the reading assignments will show up in the quality of your responses to questions in the homeworks and exams and I will take class participation into account in determining borderline issues when translating an aggregate into a letter grade.

Assignments will be given roughly every other week. These must be completed and turned in before the start of class on the due date. Every homework will have a hard copy component. When we expect you to write programs for the homework, we will also need you to provide us an electronic version of the programs via a suitable canvas or github interface that will be set up. While we expect timely submissions, situations sometimes arise that prevent us from meeting deadlines. To accommodate for this, we will give each student a cumulative grace period of 5 days for all the homeworks. Note that the available grace time may be sharpened for any given homework if we have to provide solution sketches or we have to return graded homeworks early, as we might have to do just before exams. Note also that once this time has been exhausted, you will not get credit for any further late homework. For this reason, be very judicious about how you use the grace period. The weightage for each homework will be determined towards the end of the term, depending on the relative difficulty of each. While each homework will contribute a specific amount to the final grade, you are expected to turn in all of them and exhibit reasonable effort (read: at least a 50% score) on each to obtain a passing grade in the course. Note that this requirement holds even if you have exhausted the grace period and will not be getting credit for the homework.

There will be two exams, a mid-term and a final. These will account respectively for 20% and 30% of the overall grade. The mid-term exam is scheduled for October 22, 2019 during class time and the final exam will take place on December 19, 2019 10:30 - 12:30 hours. The exams will be open book; the text can be used but no other material or notes will be permitted.

Note that the exam dates are firm: No changes or makeup exams will be considered except in the case of serious and documented illness. Also note that if, for any reason, a makeup exam will have to be considered, it will be an oral exam.

Issues such as presentation elegance, clarity and conciseness of expression and the insights offered are essential aspects of submitted work, not just optional ones. As such, these will be taken into account in grading. The Web page for homeworks discusses these points in more detail and also explains matters of protocol.

A word about collaboration and outside help. Insofar as this serves to improve your understanding of the course material, it is actually encouraged. However, you are expected to do all the work that counts towards your grade completely independently. Note that if you have consulted outside sources, such as resources available over the web, in developing your solution, you need to provide this information clearly in the work you turn in. Not doing so counts as plagiarism, one of the worst forms of cheating in the academic context. Once you have provided the sources used, we can look them up and determine how much this should impact on your grade. Note also that there are lots of simple yet effective ways to check if you have used such sources, so it can be dangerous not to acknowledge such help upfront.

This course will expect most of you to learn new things. In particular, you will encounter new languages and new ways of thinking about programs. Moreover, the focus will be on things that have a long term impact on your understanding. For example, we will not really be discussing how to program in Java, C++ or some other language but, rather, how to think about programs and the devices available in these and other languages. You may feel diffident at times doing this---all of us have an initial desire to stay with familiar things---but it can be very rewarding in the end. Also, know that the TA and the instructor are quite passionate about the subject and are more than willing to give you assistance. However, such assistance can be useful only if you have made the initial efforts to understand and if you keep a positive attitude towards learning despite the obstacles you may have encountered along the way.

At the outset, you are strongly encouraged to discuss material in the course with others in the class. Using the discussion forums is a great way to do this. Discussions of this sort benefit everyone: they can clear up bottlenecks in understanding and explaining things to others also sharpens your own understanding.

This being said, any work that you turn in for a grade is expected to be representative of your independent thinking. You may discuss assignments with each other to the extent that this clarifies your understanding of what is being asked, but this discussion must stop before it gets anywhere near the details of a solution. If you need help at this point, you should seek this from the instructor or the teaching assistant who are in a better position to decide what is and is not appropriate. In a similar vein, it is not acceptable to simply reproduce solutions to problems that you obtain from someone outside of class.

There will be penalties for breaches of this policy, ranging from no credit for the work in question to a failing grade in the course. To ensure fairness and in keeping with University policy, suspected breaches of the policy will be reported to the Office of Community Standards. On a more personal note, this kind of dishonesty interferes seriously with your own ability to learn and so there is no benefit to it in the long run.

One final comment on a related point. For those of you who seem to be understanding the material in the course well and are enthused by this, I would like to encourage your being helpful to others. However, please be aware that there is a point beyond which such help is in breach of the academic honesty policy and can invoke all the described sanctions. More personally, note that such help can be detrimental to someone else's learning. One particular situation to be aware of is when you respond to queries on the discussion fora. Give thought to whether or not you will be letting out solutions to problems that your colleagues should have a chance to think through for themselves. The instructional staff will try to monitor this aspect towards guiding you in deciding when responses and help you provide has the danger of crossing the boundary of legitimacy, but we will need you to be cooperative and responsible as well.

Note: The department has a default set of policies regarding academic conduct that you will find here. These policies are effective for anything that is not explicitly covered above.

## The Disability Resource Center

The University of Minnesota is committed to providing all students equal access to learning opportunities. The Disability Resource Center (DRC) is the campus office that works with students who have disabilities to provide and/or arrange reasonable accommodations.

• Students who have, or think they may have, a disability (e.g. mental health, attentional, learning, vision, hearing, physical or systemic), should contact DRC to arrange a confidential discussion at 612-626-1333 (V/TTY) or ds@umn.edu.

• Students registered with DRC and who have a letter requesting accommodations, are encouraged to talk to the instructor early in the semester to discuss accommodations outlined in the letter.

If you feel this information is relevant to you please don't hesitate to follow up; it must be our joint goal to get the best out of every one and having the right environment to perform is important towards this end.

## Mental Health Resources

As a student you may experience a range of issues that can cause barriers to learning, such as strained relationships, increased anxiety, alcohol/drug problems, feeling down, difficulty concentrating and/or lack of motivation. These mental health concerns or stressful events may lead to diminished academic performance or reduce your ability to participate in daily activities. University of Minnesota services are available to assist you with addressing these and other concerns you may be experiencing. You can learn more about the broad range of confidential mental health services available on campus from the Student Mental Health website.

Last modified: Dec 17, 2019. Page maintained by ngopalan atsign umn dot edu.

The views and opinions expressed in this page are strictly those of the page author(s). The contents of this page have not been reviewed or approved by the University of Minnesota.