Syllabus for CSci 1301, Fall 2012

This is the course syllabus for Nic McPhee's Fall 2012 Problem solving and algorithm development (CSci 1301) course at the University of Minnesota, Morris. For additional information (e.g., events and assignments) see the course Moodle site.

This is a 4 credit course which meets MWF 10:30-11:35am, in Sci 1030. There are no pre-requisites for this course and we will not assume any prior experience with computer programming.

Course description

The course description from the catalog:

Introduction to different problem solving approaches, major programming paradigms, hardware, software, and data representation. Study of the functional programming paradigm, concentrating on recursion and inductively-defined data structures. Simple searching and sorting algorithms.

We're all used to what we might call informal problem solving. A problem presents itself, and we work out a rough idea of a solution that's sufficient for our understanding; we know what we mean, and we don't bother to work out the details in advance. If we're working on a team we sometimes need to provide a little more detail to ensure that all the team members are on the same page, but there's typically still an awful lot that we don't spell out, assuming that the shared experiences of the team will allow people to fill in the blanks.

When working with computers, however, we're no longer able to skip over "little" details and assume the computer will "fill in the blanks". Computers have never walked, eaten cereal, or knit a sock. They've not read Harry Potter or watched Lawrence of Arabia. People and computers have effectively no shared experience, and consequently you have to spell out pretty much every step in the solution to a problem.

This course will provide an introduction to the concept of algorithms, which are essentially just a type of formalized solution that's still human readable, but much closer to something that could be run on a computer. Algorithm development, however, turns out to be a quite powerful problem solving tool in a variety of contexts, not just in computer programming; ancient Babylonians developed a host of practical, important algorithms, and Euclid's algorithm for computing the greatest common divisor of a pair of numbers is still widely used today even though he developed it two thousand years before the invention of electronic computers. Given this framework, programming is that final step, where we express an algorithm in a formal notation (known as a programming language) that can be executed by a computer. Note, however, that (as the example of Euclid suggests) the concept of algorithms is important and interesting even without computers to run them; the existence of computers, on the other hand, is key to the economic value of much of programming and the reason that companies like Google make money hand over fist.

Course goals and learning objectives

Some of the key learning goals in this course include:

We should be able to cover the bulk of the first six chapters of the course text. There is no expectation in this course that you've had any prior programming experience. We'll do most of the programming in this class using the Racket programming language, but may also dip our toes into another language like Clojure, Ruby, or Python at some point.

Nic's Fall 2015 office hours

My office hours for Fall, 2015, are:

I'll typically start my office hours in my office (Sci 1315), but I may well move to a lab if, for example, a group has a question about a project they're working on. The lab I'd be most likely to go to is:

If I leave the office during office hours I'll try to leave a note on my door telling you where I am, but you should always feel free to check the labs if you're looking for me.

Those times almost certainly won't work for everyone. You're always welcome to just drop by (see my complete schedule), and I'm happy to make appointments anytime I'm free. You may also find my contact info useful.

If these times work very badly for you (e.g., you have class conflicts all of these hours) then please let me know. If it turns out that a lot of folks have major conflicts then I'll want to reconsider my choices.

Nic's contact info

Nic McPhee's contact info
E-mail mcphee AT morris DOT umn DOT edu This is the preferred method of contact, but be warned that I get a lot of e-mail and bits get dropped now and then. Phone or IM is often better if it's critical or you need immediate feedback.
Web This is my "official" University web page, which consists primarily of links to my course web pages.
Chat/messaging Same address as my e-mail above.  
Twitter My name as a WikiWord, i.e., "Nic McPhee" without the space Make sure you identify yourself if your Twitter username doesn't obviously relate to the name on my course list smile
Office Sci 1315 Downstairs at the east end of the Science office wing
Office phone 320-589-6320 I don't have voice mail set up, so it'll just ring forever if I'm not there.
Division office 320-589-6300 They'll be happy to take a message, but phone, IM, or e-mail is better.
Fax 320-589-6371 I don't get faxes very often, so you should probably warn me (e.g., via e-mail) so I'll make a point to check for a fax.

Mailing address:

Nic McPhee
Division of Science and Mathematics
University of Minnesota, Morris
600 E. 4th Street
Morris, MN 56267-2132

I use the U's Google calendar to manage my calendar. Google may be the Evil Empire of the next decade, but they make a fine on-line calendar tool. If you're using Google calendar, feel free to use that to invite me to events/appointments.

Texts and other materials

This course has 1 required text:

I'm experimenting this semester with posting screencasts on YouTube where I demonstrate key ideas or work through important or illustrative examples. You'll have to let me know if and when these are helpful or not.

Since this course is ultimately about problem solving, having other sources of problems to play with can be helpful. There are quite a few good on-line problem repositories that will check your work for you; unfortunately many of them are wired to one or more specific programming languages, and Racket (the language we're focusing on here) typically isn't on their list. There are a few nice exceptions that are language agnostic (they only check your answer instead of your code), however:

Course outline

See the course Moodle site for the calendar and outline of the course.

Course work and grading

There will be four in-class quizzes, one mid-term exam (which will probably be a combination of in-class and take-home), and final (which may also combine in-class and take-home). The quizzes will be on:

The in-class portion of the mid-term will be on Monday, 1 Oct. The take-home portion (if there is any) will be handed out that day and due Friday, 5 Oct. The in-class finals period is Monday, 10 Dec, from 4-6pm. If there's a take-home portion of the final, that will be handed out during the last week of classes and due at the start of the finals period.

There will also be a combination of labs and problem sets throughout the semester at roughly one a week.

There will be a set of ungraded on-line quizes on Moodle that you can use to test your understanding and study for quizzes and exams.

The breakdown of these activities is:

Key elements for any work in this course (and arguably any work in most any area of computing) include:

Many of the assignments and test questions will come with a set of instructor (or TA) generated test cases that you can use as a self-assessment tool before you turn in your work. If your programs don't pass our tests, then you should assume something's broken and seek assistance. Note, however, that simply passing all of the given tests is no guarantee of full marks. It's possible, e.g., that the given tests don't cover all possible cases (either accidentally or deliberately). The other issue is that readability, clarity, and organization are all key properties we want all programs to have since you're communicating with other people as much as you're communicating with the computer, and none of these properties can easily be assessed via tests.

Grades will be entered on the course Moodle site and can be checked there throughout the semester. If you have any questions or concerns, please bring them up right away when it's much easier to address them.

ALERT!If you're visiting this syllabus after the semester has ended, the link to the course Moodle site may no longer work. They archive old courses almost immediately, which puts them at a new URL; try this URL instead. Failing that, please contact me if you need access to any of that information.

Grading standards (definition of grades)

Senate academic workload policy

For undergraduate courses, one credit is defined as equivalent to an average of three hours of learning effort per week (over a full semester) necessary for an average student to achieve an average grade (a C) in the course. For example, an average student taking a four credit course that meets for four hours a week should expect to spend an additional eight hours a week on course work outside the classroom in order to get a C in that course.

General information

Student privacy

Federal law protects your right as a student to keep your work and identifying information confidential. Public discourse, however, is crucial to the intellectual and academic process, whether it be within the course or in the broader world. Information such as grades will be protected and confidential, but our our use of technologies such as Moodle, wikis, and Google Docs will sometimes make students' names and U of M Internet IDs visible to other people in the course and, potentially, to the wider Internet. If you have concerns about the visibility of your Internet ID, please contact me for further information.

Academic assistance

The Academic Assistance office on campus provides free tutoring for a variety of introductory courses, and well as general assistance in a host of areas (e.g., study skills, careful reading, and time management). The Writing Room can be an excellent source of assistance with writing assignments.

Accessibility and institutional support

The University of Minnesota is committed to providing all students equal access to learning opportunities. Disability Services is the campus office that works with students who have disabilities to provide and/or arrange reasonable accommodations. Students registered with Disability Services who have a letter requesting accommodations, are encouraged to contact the instructor early in the semester. Students who have, or think they may have, a disability (e.g. psychiatric, attentional, learning, vision, hearing, physical, or systemic), are invited to contact Disability Services for a confidential discussion at 320-589-6163 or freyc AT umn DOT edu. Additional information is available at the DS web site at .

The University of Minnesota is committed to providing all students equal access to learning opportunities. Disability Services is the campus office that works with students who have disabilities to provide and/or arrange reasonable accommodations. Students registered with Disability Services, who have a letter requesting accommodations, are encouraged to contact the instructor early in the semester. Students who have, or think they may have, a disability (e.g. psychiatric, attentional, learning, vision, hearing, physical, or systemic), are invited to contact Disability Services for a confidential discussion at 320-589-6163 (320-589-6178 V/TTY) or . Additional information is available at the DS website .

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


University policy prohibits sexual harassment as defined by the University of Minnesota Regents' policy: In general, harassment or intimidation of others in the class for whatever reason is unacceptable (and hardly conducive to a successful learning environment).

Regarding academic integrity

Scholastic honesty is of fundamental importance to the functioning of any community of scholars. Although the pursuit of knowledge is always a communal project, individual academic achievement must be the result of a person's own efforts and abilities. Members of an academic community are responsible for their own personal and academic development and for fostering an academic climate in which all members draw from and give back to the community. The University is charged with implementing those policies which will help bring about such an academic climate. However, the ultimate responsibility for creating a community of scholars, in which mutual self-respect flourishes, lies with the individual members of the community. Each member must, therefore, act according to the highest standards of academic honesty.

-- from the preface of UMM's Student Academic Integrity Policy

Academic integrity is essential to a positive teaching and learning environment. All students enrolled in University courses are expected to complete coursework responsibilities with fairness and honesty. Failure to do so by seeking unfair advantage over others or misrepresenting someone else?s work as your own, can result in disciplinary action. The University Student Conduct Code defines scholastic dishonesty as follows:

Scholastic Dishonesty: submission of false records of academic achievement; cheating on assignments or examinations; plagiarizing; altering, forging, or misusing a University academic record; taking, acquiring, or using test materials without faculty permission; acting alone or in cooperation with another to falsify records or to obtain dishonestly grades, honors, awards, or professional endorsement.

Within this course, a student responsible for scholastic dishonesty can be assigned a penalty up to and including an "F" or "N" for the course. If you have any questions regarding the expectations for a specific assignment or exam, ask.

For more information see:

Regarding classroom conduct

Students are expected to interact with the instructor and other students with respect and courtesy. Students should attend every class session prepared to learn and work. Participation in class is expected, which includes both speaking up and listening. Give class your full attention while here. Complete all assignments, including the reading, in a timely fashion. Turn off cell phones and other electronic distractions during class so we may all better focus on the material. Students whose behavior is disruptive either to the instructor or to other students will be asked to leave. Students whose behavior suggests the need for counseling or other assistance may be referred to counseling services. Students whose behavior violates the University Student Conduct Code will be subject to disciplinary action.

Some relevant University Senate statements and policies

-- NicMcPhee - 22 Aug 2012

SyllabusForm edit
Name Problem solving and algorithm development
Discipline CSci
Course # 1301
Term Fall
Year 2012
Num credits 4
Days and time MWF 10:30-11:35am
Location Sci 1030
Pre-requisites None
Course URL
Moodle course # 9883