Course Overview
Welcome to CS 111, Fundamentals of Programming I! In this course, you'll do more than just computer programming: you'll learn the fundamental problem-solving ideas in computer science.
This course is appropriate for all students who want to learn how to write computer programs and think like computer scientists. It is the usual first course for computer science majors. A deeper coverage of these topics will be presented in CS 112.
Course Description
This course will cover
- the design and implementation of algorithms for solving problems
- an introduction to syntax, semantics, and pragmatics of the Python programming language, an interpreted language known for its ease of use
- a survey of programming applications such as numerical computation, text processing, graphics, image processing, and networking
- an introduction to the use of the Linux operating system
- systematic techniques for testing and debugging programs
Structure
Classroom work will consist of lecture, discussion, and lab
experimentation. Written work will consist of several programming
projects and exams as well as analysis of articles about CS-related issues.
Objectives
After taking this course, you should be able to
- Apply your problem-solving skills and knowledge of data structures to a wide variety of computational problems
- Understand the fundamentals of the syntax and semantics of Python programming language
- Describe a program's functionality in plain English, typically using comments
- Expose, diagnose, and fix errors in a program, using systematic testing and debugging techniques
- Understand the fundamentals of using the UNIX operating system
- Understand the design issues of computer science, including the tradeoffs in efficiency, as well as larger social issues and impacts, such as the digital divide, green computing, ethics and policies.
Instructional Staff
Sara Sprenkle
Office: Parmly Hall 410
Office Hours: Wednesday 3:30-4:30 p.m., Thursday 12:30-3:30 p.m., or by appointment
E-mail Address:
Phone Number: (540) 458-8309 (it is better to email me than to call)
Student Assistant: Nicole Carter
Course Information
CS 111, Section 02
Lecture: MWF 2:30 p.m. - 3:25 p.m. in Sci Add G14
Lab: T 2:30 p.m. - 5:35 p.m. in Parmly 405
Textbook
An Introduction to Computer Science with Python by Dr. Lambert is available online to students in this course under password protection. Ask Professor Sprenkle if you haven't received the password.
Course Policies
Student Responsibilities
- It is very important that you attend lectures (see Grading below). There will be considerable information given in class that is not available elsewhere. Attendance in lab is required. Family and medical emergencies and conflicts with University-recognized extra-curricular activities are the only reasons to request that work be rescheduled. If you must miss a lab for some reason, make arrangements for a make-up session in advance.
- You are expected to arrive at labs and lectures promptly.
- Please turn off cellphones.
- Actively participate in the class by asking and answering questions.
- Check your W & L email frequently and check this web page and the schedule for new information.
- Throughout this class (and life in general), keep in mind a cowboy's wisdom: "Good judgement comes from experience." You may ask, "How do I get experience?" Bad judgement works every time. My point? Don't be afraid to make mistakes in this class, but make sure you learn from them!
Instructor Responsibilities
I will try to
make this course and its material as exciting for you as it is for
me. I will be respectful of student questions and misunderstandings.
I will give prompt, constructive feedback from assignments. I will
be available during office hours and by appointment. I will do my
best to respond to questions via email within 24 hours.
Honor System
You may discuss programming assignments informally with other students.
However, sharing a solution, in the form of experimental results or the
design or implementation of a program, is an honor violation. Students
should know where to draw the line between getting legitimate outside
assistance with course material and outright cheating. Students who obtain
too much assistance without learning the material ultimately cheat
themselves the most. If you have any uncertainty about what this means,
consult with me before you collaborate. All written assignments should
be done individually.
Participation and attendance
To receive full
credit for class participation and attendance, you must have less than
three unexcused absences from lecture and lab and you must be actively
engaged in the classroom by answering and asking questions each class when
appropriate and by being respectful of other students. The average grade
for participation is a B.
The schedule, including important dates, is posted at the beginning of the semester. You should plan accordingly. If there are acceptable conflicts, tell me at the beginning of the semester and then remind me about a week in advance.
General grading policies
Programs
turned in with syntax errors will receive no credit. "Roll
back" your program (often by commenting out the new trouble
spots) into a state where it does not have syntax errors.
Late policy
All assigned work is due on
the date specified. Any assignment turned in after the due
date/time but on the same day will be penalized 10%. Any
assignment turned in after the day on which it is due will be
penalized 50% of the total value for that assignment. No
assignment will be accepted that is more than three school
days late. If you turn an assignment in late, you must
indicate this on the top of the paper.
Grading
Grades for the course will be computed as follows:
- Programming projects (40% of the grade)
- Two hourly exams (30% of the grade)
- A comprehensive final exam (20% of the grade)
- Writeups and discussions of CS-related issues (5% of the grade)
- Participation and attendance (5% of the grade)
Programming Style
Programming is not a dry mechanical process but an art form. Well-written code has an aesthetic appeal while poor form can make other programmers and instructors cringe. Programming assignments will be graded based on correctness and style. Good programming practices usually include many of the following principles:
- A comment at the top of the program that includes
- Program authors
- Date or Dates
- A brief description of what the program does
- Concise comments that summarize major sections of your code
- Meaningful variable and function names
- Well organized code
- White space or comments to improve legibility
- Avoidance of large blocks of copy-pasted code