Overview
Programming languages are the tools that we use to communicate with
computers to get them to do our bidding. Of the four most well-known
programming language paradigms, only object-oriented programming
(such as in Python and Java) is commonly seen outside of this course
here at Carleton. To better understand other programming language
paradigms, we will program in each of the three other main
paradigms: functional programming (Scheme), imperative programming
(C), and logical programming (Prolog). They key goal is to gain an
understanding of characteristics from each, and to appreciate that
each has made different trade-offs in design reflecting the
creators' goals. Additionally, practice at these dramatically
different approaches to programming help making learn new languages
easier to do.
Instructor Information
- Instructor: Dave Musicant
- Office: CMC 326
- E-mail:
dmusican
- Office phone: (507)222-4369
- Office hours:
check my web page
- Grader: Kohei Shinkawa (shinkawk)
Textbook
- Programming Language Pragmatics (2nd edition), Michael
L. Scott, Morgan Kaufmann, 2006.
Your Grade
- Assignments: 40%
- Exam 1: 30%
- Exam 2: 30%
Homework Policy
- Each assignment will have a specific time for which it will be
due. An assignment turned in late within one day of the due time will
be docked 25%. A program turned in later than one day of the due date
but within two days will be docked 50%. A programming assignment
turned in any time after this until the last day of classes will be
docked 75%. Non-programming assignments can not be turned in any later
than two days following the due date since we may be discussing
answers in class.
Working Together
- Each programming assignment will either be a "team"
problem assignment or an "individual" assignment. I will assign a
partner to each of you so that you can work in pairs on the team
problems. You should work alone on the individual problems. I will
change the partners around occasionally during the term.
- When working on team problems, you and your partner
should engage in the
pair programming model, that is both of you should be sitting
at a single machine, side by side. One of you is "driving,"
i.e. actually using the keyboard and mouse. The other is
actively engaged following along, stopping bugs, and providing
ideas. You should make sure that over the course of an assignment that
you spend roughly the same amount of time each "driving." I will also
ask you to turn in a form rating the work that your partner does.
- If you are determined to work alone on the team
assignments, that's fine. Send me an email and let me know that you
want to work alone, and I won't assign you a partner. I will expect,
however, that you do work of the same amount and quality as those
students with partners. You can change whether or not you work alone
each "cycle" that I assign new partners.
- I will also be assigning occasional problem sets. On
these and on the "individual" programming problems you may collaborate
with others in the class for ideas, but all students should turn in
individual assignments for these. You should be writing up or
programming your own solutions, and not sharing printouts with each
other. You may help each other debug.
Collaboration, Plagiarism, and the Difference Between the Two
There are two different kinds of working together: collaborating
and plagiarism.
Collaborating
- Collaborating is good.
- You are encouraged to collaborate on ideas and program design.
- Programming is often a social effort, and there is much you can learn
by talking out the ideas in this class with each other.
- You can by all means talk to each other, look at each others' programs
to help fix problems, and share ideas.
Plagiarism
- Plagiarism is bad. DON'T DO IT!
- Any programs that you turn in should be your work.
- Even if you work with someone else and share ideas, you must still
writ your own program.
- If a piece of your program utilizes someone else's idea, you must
make sure to give that person credit in program comments.
- Do not hand a printout of your program to other students. I
encourage you to work together to help debug your code, but you
should do so sitting together.
The following are examples of plagiarism:
- Taking someone else's program, changing comments and variable names,
putting your name at the top, and turning it in.
- Finding a similar program on the Internet, changing the variables
and comments around, putting your name at the top, and turning it in.
- Finding a similar program in a book, changing the variables and comments
around, putting your name at the top, and turning it in.
I will be using software to discover plagiarism if it occurs, and I
am compelled by Carleton policy to notify the College if I find
evidence of plagiarism.