[UMN logo]

CSci 2041: Advanced Programming Principles
Spring 2020

Important End-of-Term Information

Some information that has already been communicated to you via email is highlighted below:

News Flash: Online discussion using Piazza

Table of Contents

New Information







      Useful information from the past

Teaching Personnel

Relevant Locations

Course Prerequisites

The formal prerequisite for this course are CSci 1913 or 1933 and CSci 2011.

It is probably more important to understand what the prerequisites mean conceptually, and hence what will be assumed in this course.

If you have not taken the mentioned courses and/or are unsure of your preparation, please talk to me early in the term so that we can assess together what should be done.

Course Text

There is no textbook for the course: the way we are going to study the subject matter is relatively new to computer science curricula and a textbook for it has yet to be written. Don't let this intimidate you, though, and embrace the excitement of being at the forefront of learning.

I realize nevertheless that it is often reassuring to read material that you have seen in class from some other source. Towards this end, I will periodically put up readings from sources available on the web, I will try to write up notes from time to time, my lecture slides will be posted on the course website and all of us---the instructor and the graduate and undergraduate teaching assistants---will work with you to make the learning experience enjoyable and rewarding.

Course Description and Objectives

This is a course to be taken by computer science majors around the end of the sophomore year. It will use a functional language to introduce a high-level approach to programming over complex data. It will emphasize a view of such data that abstracts away from their representation, using types as a vehicle for organizing them as values and for structuring computations over them. Advanced programming techniques that use ideas such as recursion, higher-order functions, lazy and eager forms of evaluation and infinite data objects will be explored. The possibility of exploiting parallelism arising from pure forms of expression evaluation will be examined. Other techniques and principles to be studied include search-based programming, modularity and concurrency. Programming projects that focus on symbolic computation will be used to impart the core ideas in the course; such projects may include writing parsers, type-checkers and interpreters for suitably circumscribed programming languages, and applications of search-based techniques.

Course Content

Listed below are the topics that I plan to cover during the term. Don't read this as a weekly or even a linear schedule: the topics are interrelated and so we may often cover them in parallel. To ground our discussions, we will need to write programs in a real programming language. The language we will used is called OCaml.

Something to realize with regard to the list of topics above: these are topics that several of my colleagues and I concluded a few years ago would be great to provide you exposure to at this stage of your learning but not all of them have to be covered to make this a successful course. We will make some decisions as the semester moves along about what to focus on more sharply and, correspondingly, what to leave out to create more time for the selected topics. In making these decisions, I will take into account what absolutely must be covered and also where I sense the interests of the class to lie.

Required Work

The different components of the work that you will have to do in this course are listed below.

Grade Determination

Different components of the required work will contribute as follows to the final grade. Note that the translation to a letter grade will be based on a curve. Don't read this as putting you in competition with each other. The reason why I prefer to use this method is that it makes it possible to give you interesting problems in the homeworks and exams. If these turn out to be too difficult, they will be so for your classmates too, and there will be an automatic correction.

I will put information up about possible locations of cutoffs towards the end of the term. The one helpful thing I might say right now: based on experience with other courses I have taught, you should get a C- or higher grade if your aggregate from all the work is over 55%.

Finally, towards ensuring accuracy, make sure to track the scores on different components of the required work that we will post regularly to your github repository for the course.. Questions about grading and errors in grade entry must be reported no more that 2 weeks after the scores have been posted and the feedback has been provided.

Policy on Lateness

I reiterate below the points made earlier about missed exams and lateness:

Academic Honesty

At the outset, you are strongly encouraged to discuss material in the course with others in the class. Using the Piazza 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. It is also possible that homeworks contain errors or ambiguities and discussions can help clear such matters up.

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 assistants 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. Note in particular that copying someone else's work from the web without proper attribution constitutes plagiarism, a rather serious offense in academic work.

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 for 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.

Two further comments on this subject. First, in a course that involves programming, there is sometimes the temptation to make superficial changes to programs obtained from someone or somewhere else in the hope of camoflaging the source and to turn it in as one's own work. Lots of tools have been designed to detect this kind of behaviour and they really work! We will certainly be using them in this course. To keep things simple both for you and for us, resist such temptations should they arise.

Finally, 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 TAs amd the instructor 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.

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: May 9, 2020. 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.