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.
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:
- You will learn about algorithms - what an algorithm is, some classic algorithms, etc.
- You will learn about the importance of formal syntax in computing and how to recognize and generate legal text in one or more formal syntaxes.
- You will learn some useful problem solving techniques including defining cases, using conditional statements, and functional decomposition (divide and conquer)
- You will learn about recursion
- You will learn about scope
- You will learn about higher-order functions (procedural abstraction - passing procedures as parameters)
- You will learn not only to program, but also why we write programs, how to communicate with the computer, and some basic things about how a computer works
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.
My office hours for Spring, 2014, are:
- Monday, 10:30-11:30am
- Tuesday, 1-2pm
- Thursday, 3-4pm
- Friday, 2:05-3pm
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:
- The Computer Science labs (Sci 2610, 2630, and 2650)
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
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 McPhee's contact info
|| 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.
|| This is my "official" University web page, which consists primarily of links to my course web pages.
|| Same address as my e-mail above, as I've switched over to the U's new GMail system
|| 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
|| Sci 1315
|| Downstairs at the east end of the Science office wing
| Office phone
|| I don't have voice mail set up, so it'll just ring forever if I'm not there.
| Division office
|| They'll be happy to take a message, but phone, IM, or e-mail is better.
|| 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.
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:
- How to design programs, SECOND EDITION (often abbreviated HtDP2e?)
- This is available freely on-line, and this edition is only available on-line for now: http://www.ccs.neu.edu/home/matthias/HtDP2e/
- Don't buy a printed copy of the first edition unless you really want to. The second edition is very different, and the course really won't make a lot of sense is you've got an old copy of the book.
- By Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi
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:
- Google Code Jam is an excellent set of programming-contest-style problems, and they're language agnostic.
- Project Euler is an excellent, if perhaps a bit math-y, set of practice problems that only checks your answer and so doesn't care what language you use.
- Python Challenge is quite cool and, despite the name, doesn't require the use of Python or any other specific language. That said, it tends to be pretty heavy on text processing, which is something Racket can do just fine, but isn't something our text emphasizes.
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:
- Fri, 7 Spe
- Wed, 19 Sep
- Fri, 26 Oct
- Fri, 16 Nov
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:
- Homework and labs: 40%
- Quizzes: 20% (so 5% each)
- Mid-term: 20% each
- Final: 20%
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.
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)
- A: Represents achievement that is outstanding relative to the level necessary to meet course requirements.
- B: Represents achievement that is significantly above the level necessary to meet course requirements.
- C: Represents achievement that meets the course requirements in every respect.
- D: Represents achievement that is worthy of credit even though it fails to meet fully the course requirements.
- S: Represents achievement that is satisfactory, which is equivalent to a C- or better.
- F (or N): Represents failure (or no credit) and signifies that the work was either (1) completed but at a level of achievement that is not worthy of credit or (2) was not completed and there was no agreement between the instructor and the student that the student would be awarded an I (see also I).
- I (Incomplete): Assigned at the discretion of the instructor when, due to extraordinary circumstances, e.g., hospitalization, a student who is otherwise doing well in the course is prevented from completing the work of the course on time. Requires a written agreement between instructor and student.
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.
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.
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 http://www.morris.umn.edu/services/dsoaac/dso
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 email@example.com
. Additional information is available at the DS website http://www.morris.umn.edu/services/dsoaac/dso
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 http://www.mentalhealth.umn.edu
University policy prohibits sexual harassment as defined by the University of Minnesota Regents' policy: http://www1.umn.edu/regents/policies/humanresources/SexHarassment.pdf
. 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
- 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 |