Welcome to Concepts of Programming Languages. Until this course, you've probably treated compilers and interpreters for programming languages as if they were magic: you understood what your program did, but you weren't sure how the interpreter made it all work. After you're done with this class, you'll understand all that and more.
Our primary objective in this class is to challenge the notions you have of what a programming language is. These notions have been formed by the programming languages you have used in the past. Almost without exception, these languages represent a very small class of languages and concepts.
In addition, you will
This course will introduce you to the fundamental concepts of programming languages. In particular, we will concentrate on concepts that are not typically found in traditional languages such as Java and C. We will discuss and compare features of several popular programming paradigms such as imperative, object oriented, and functional programming.
This class is not a smorgasbord of different languages. We will not look at the syntax of different programming languages. In general, that approach is too superficial--wasting scarce time on surface issues. Rather, we will explore most of the concepts through a single, very flexible programming language, Scheme. (But don't be fooled into thinking the class is about Scheme! It is about programming language concepts, with Scheme used as a means to that end.)
|
Section 1: Bryan S. Morse morse@cs.byu.edu 3320 TMCB 422-8146 Dr. Morse's Office Hours 9:30-10:45 TTh Instant Messaging (AIM): byumorse |
1058 TMCB (cube #20) Office Hours: See web page |
Data structures and computability theory, and some knowledge of two different programming languages. If you haven't had data structures (CS 235) and some work in push down automata and context free grammars (CS 236 or 252), its hopeless; punch out now! We can work out something if you only know one programming language; please see me.
Section 1: MWF: 10:00 - 11:50 PM in 120 TMCB
You will be graded on the basis of class participation and attendance (10%), homework (20%), two projects (15% each), two midterm exams (12.5% each), and a final exam (15%).
Homework is extremely important. There is a strong correlation between your homework grades and your final standing in the class.
There will be a homework assignment due every class period (except for exam days). You will find that because all of the lecture material is available here on the web, as much of our class time will be spent on discussing homework assignments as on covering new material.
The assignments are designed to help you master the concepts discussed in class. You do not, of course, have to do all the assignments--if you're satisfied with a lower grade, you may skip some of them. Be aware, though, that some of the homework problems build on each other. So skipping one day's homework may mean coming back and doing it later anyway. Skipping an assignment might also mean trouble when that concept appears on a later exam.
Homework is an opportunity to master the material and not just busy work. Therefore if, in the TA's judgment, you put forth a sincere effort but had trouble with some parts, he may give you the opportunity to redo and resubmit the assignment for full credit.
Homework turned in by midnight on the day that it is due is eligible to receive full credit. Homework assignments submitted by midnight on the following class day are eligible for 80% credit. Homework assignments submitted after that are eligible for 60% credit. For example, if HW-3 is due Monday and is submitted before midnight on Monday, it is eligible for full credit. It is eligible for 80% credit until midnight on Wednesday. It will receive no more than 60% credit if submitted any time after that.
You are strongly advised to turn homework in on time. Since the class is very fast-paced, you will have a difficult time understanding lectures without the reinforcement of having done the homework.
Most of the homework will require programming in Scheme. Sometimes you will write functions from scratch. At other times, you will have to load, get running, and modify a fairly large chunk of Scheme code.
Your homework will often be graded by an automated script. Please read the homework guidelines for more information about formatting and submitting homework so that you can get full credit for it.
If you do not receive full credit from the autograder, you may rework your homework and resubmit it up to four more times (five submissions total) before the due date. The last homework submitted (or the fifth one) is the one that will be graded.
You are expected to write your own test cases and verify that your code works before submitting your assignment. Although the homework autograder will provide you feedback, that is not its primary purpose.
If you accidentally submit a homework assignment with the wrong header and overwrite another assignment (for instance, submit HW-4 as HW-3, thereby overwriting HW-3), e-mail the TAs immediately so that they can restore the appropriate submission. For this reason and others, it is a good idea to keep all of the emails that you receive back from the autograder.
Besides the homework there is a mid-semester project and a final project, which will both be discussed later in the semester.
There will be two midterm exams and one final exam. Exams will be open book and open notes. Please note that books and notes may not be shared during the exam, so be sure to remember to bring yours. You may find it impossible to complete the exam without them.
The midterms will be held in the testing center. The final will be in the classroom.
The best way to prepare for the exams is to complete the homework and to think about lectures in a non-passive way. You should continually ask yourself questions like why ...?, what if ...?, and so on as you review your notes and complete the homework assignments. The class requires you to think about the concepts presented in lecture and apply them to the homework problems. Very little memorization is required.
When you are looking for help, don't overlook your fellow students. Your classmates are a valuable resource. We suggest that your classmates be the first people you turn to for help. When you have a question, discuss it with at least one other person in the class before discussing it with the TA or the Professor. Not only will you learn something, but they will as well.
In CS 330, you will likely learn just as much (or more) from your interaction with other students as you will from the TAs or Professors. Since we believe that collaboration fosters a "community of scholars" and is healthy, we encourage you to work in groups and freely discuss your reading, homework, and projects.
Unless otherwise instructed, feel free to discuss problem sets and projects with other students and exchange ideas about how to solve them. There is a thin line, however, between collaboration and plagiarizing the work of others. So that you not cross that line, you are required to compose your own solution to each problem in the homework, even if you worked with others in a group. However, for the mid-semester group project and the end of semester group report, you will turn in one submission per group.
Another way to avoid crossing the line is to give credit to others when you use their ideas. This is common in scientific literature and something you should get into the habit of doing. If you use an idea that was developed by someone else or jointly with some group, be sure to make a note of that in the problem write-up.
Important: Solutions to problem sets and project write-ups are not considered valid places to look for help. You are on your honor not to use solutions from past semesters. Consulting past solutions to homework is considered cheating (at least in this class).
Please reread the honor code and the material relevant to academic honesty. You are responsible for it.
The computers that you use for this class and the network that ties them together are supported by the tithing funds of the church. Thus, BYU and the CS Department take misuse of the computer systems very seriously. Please be sure that any activity you undertake is in keeping with the goals and mission of BYU and the Honor Code.
There is no fixed laboratory for this course. You may use any of the open Linux or Windows labs on the first or second floors of the CS wing of the TMCB.
You can obtain an account on these machines as follows:
You should read the lab orientation materials before beginning the assignments.
A forum (discussion area) is included with the CS 330 web pages. (This is like the discussion groups on Blackboard, but included as part of the same pages.) Feel free to ask questions there, blow off steam, answer questions, whatever. Just remember two things:
Important announcements will be sent to the email address listed in your Route Y profile. Anything announced via email carries the same weight as if it were announced in class.
This class moves at a breakneck speed. There is a lot of reading and a lot of work. You will not finish the class (let alone pass) unless you:
The University has also asked us to include the following information with all course syllabi:
If there are problems with this page, please send mail to <cs330ta@cs.byu.edu>
If you have a comment about the class, please send mail to <seamons@cs.byu.edu>
© 1994-2009, Phillip J. Windley and
Bryan S. Morse. All rights reserved.
Reproduction of all or part of this work is permitted for educational or research use provided
that this copyright notice is included in any copy.
Last updated at 9:44 am on Wednesday, May 03, 2006.