Course Overview
Welcome to CSCI 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 CSCI 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 weekly programming projects, several exams, and weekly
analyses of articles about CS-related issues.
Lecture: | MWF 8:30 a.m. - 9:30 a.m. in Parmly 405 |
---|---|
Lab: | T 8:30 a.m. - 11:30 a.m. in Parmly 405 |
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 and political issues and impacts, such as the digital divide, green computing, ethics and policies.
Instructional Staff
Sara Sprenkle
Office: Parmly Hall 410
Office Hours: Wednesday 2-4 p.m., Thursday 10:30-11:30 a.m. and 1:00-2:30 p.m. or by
appointment
E-mail Address:
How to Email a
Professor
Phone Number: (540) 458-8309 (it is better to email me than to call)
Student Assistants:
- Tim Johns '26
- Ignas Volcokas '25
Course Information
Textbook
- How to Think Like a Computer Scientist: Interactive Edition - requires a login. While the book and registration is free, please consider donating $10 to help with their costs of hosting and development.
- Optional: Python Programming: An Introduction to Computer Science - 3rd Edition John Zelle, ISBN: 978-1590282755
- Optional: Fundamentals of Python: First Programs - K. Lambert
Course Policies
Student Responsibilities
- Attend lectures (see Grading
below). There will be considerable information given in class that
is not available elsewhere.
Attendance in lab is required. We schedule the labs for your benefit so that you can practice with people available for assistance. If you do not attend or if you leave early without approval, you will only get limited help. Therefore, you should make the most of lab time. 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.
- Arrive at lectures and labs promptly.
- Come prepared to class and lab, which includes bringing your notes and handouts. Organize your notes and handouts and refer to them often when solving problems.
- Turn off cellphones.
- Actively participate in the class by asking and answering questions.
- Check check this web page and the schedule for assignments and announcements and check your W & L email frequently.
- 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!
- 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. This is especially important for exams. If you cannot make an exam, you must arrange a time prior to the scheduled exam to take the exam. If you miss the exam period, you will receive a 0 for the exam. If you are ill, you must email me with a phone number where you can be reached and speak with me in person. An email informing me that you are not taking the quiz or test is NOT acceptable. In fairness to your peers taking the exam early or at the scheduled time, you must provide a note from the health center.
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/people. However, sharing a solution, in the form of experimental results or the design or implementation of a program, is an honor violation. For example, if you look at another student's code to find out "how you did that", that is an honor violation. Similarly, a student should not tell another student exactly how they solved the problem, dictating the lines of code. Rather, students should talk through the problem-solving process, asking and answering questions to improve understanding of both parties.
You should not use AI-based assistants (e.g., ChatGPT or GitHub Co-Pilot). You will not have access to AI-based assistants on an exam. While using AI-based assistants can improve productivity of programmers with sufficient levels of experience, you are not at that level.
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, attendance, and professionalism
To receive full credit for class participation, attendance, and professionalism, 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.
You are permitted three sick/personal days for minor illnesses or any other reason (e.g., family occasion). No documentation is needed or requested for these absences. Unexcused absences beyond these will result in deduction in your participation grade. Excused university absences (e.g., for intercollegiate athletics, documented by a note from a faculty or staff member) do not count towards your sick days or personal days.
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.
You are responsible for keeping track of your grades and calculating your grade.
Late policy
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 an additional 10% for each school day it is late. 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.
Extensions are rarely granted. You have three hours in lab to complete the assignment with help from the instructor and student assistants, plus a few days to finish up if you need more time. If you leave lab before the period is over, you will not be granted an extension for any reason.
Academic Accommodations
Washington and Lee University makes reasonable academic accommodations for qualified students with disabilities. All undergraduate accommodations must be approved through the Office of the Dean of the College. Students requesting accommodations for this course should present an official accommodation letter within the first two weeks of the (fall or winter) term and schedule a meeting outside of class time to discuss accommodations. It is the student’s responsibility to present this paperwork in a timely fashion and to follow up about accommodation arrangements. Accommodations for test-taking should be arranged with the professor at least a week before the date of the test or exam.
Students who have approved academic accommodations must make arrangements to use those accommodations directly with the instructor no later than the last day of class. Students approved for extra time will receive that time at the tail end of the morning exam period or before the beginning of the afternoon exam period (for example, ending at 1:30 PM for a morning exam or beginning at 12:30 PM for an afternoon exam).
How to Succeed in This Course
- come to every class prepared (bring questions!)
- actively participate in class by asking and answering questions
- do all the assignments and turn them in on time
- bring your handouts and notes to lab; review these notes before coming to lab; refer to those notes during lab
- if you start to get behind, see me in office hours right away
Grading
Grades for the course will be computed as follows:
- (37%) Programming projects (labs)
- (30%) Two hourly exams
- (20%) A comprehensive final exam
- (5%) Writeups and discussions of CS-related issues
- (3%) Interactive textbook - prelab assignments
- (5%) Participation and attendance