CS-121: Intro to Computer Programming
Office Hours
- 200-D, Riley Hall
- Tuesday and Thursday, 4:30pm to 5:30pm
- Email: mjohnson8@furman.edu
Objectives
This course is a hands-on, project-based introduction to computer science using the Python programming language.
By the end of the term, you should be able to:
- Break down a problem into a programmable solution
- Read and write simple code in Python
- Document, test, and debug your programs
- Understand how programming is used to solve real-world problems
Course Format
This course is a hybrid course, with both in-person and online components.
Classes and labs will be focused on:
- Learning new concepts
- Reading and writing code
- Giving and receiving feedback
Schedule
Lecture: Tuesdays and Thursdays, 3:00pm - 4:15pm, Riley Hall 204
Lab: Wednesdays, 2:30pm - 4:30pm, Online (Discord) and in-person (RLY-201)
Projects are due weekly by 3 pm on Thursday’s before class starts.
Labs are due by the lab period on Wednesdays at 4:30pm.
If you ever wonder about what is due and when, check your course path.
Grading
Your grade will be determined by your ability to write code, run code, and communicate about code.
The breakdown of your grade is as follows:
Projects (50%)
The bulk of the course grade is based on projects. The projects are designed to be interesting, engaging, and challenging.
Exam Projects
Exam projects will be given approximately every unit (5 weeks) to assess your ability to apply the concepts you have learned in class to a new problem without external help. Exam projects are taken offline using paper handouts and a code editor.
Final Project & Exam Projects Grading
Your final project and exam projects may be weighted up to 4x higher than other projects.
Practice (25%)
Practice is done in labs and, if necessary, as homework.
Every week, you will complete a lab that covers the material needed to complete the project for that week. Labs are completion-based. In order to receive credit for a lab you must attend the lab, commit and push working lab code. You are not required to finish the full lab assignment but you must have made progress and submitted working code by the end of the lab period to receive credit.
We will take advantage of many freely available resources on the internet.
From time to time, we will have practice exams and test projects to help you prepare for the final exam and mid-term projects.
Professionalism (25%)
Professionalism includes the following components:
- Code Quality: Code is clean, easy to read, and well-documented.
- Communication: Students communicate clearly and effectively with the instructor and other students.
- Participation: Students actively participate in class and engage with the material.
Behaviors that will negatively impact your professionalism grade include:
- Late work
- Skipping class or leaving early
- Creating distractions during class
- Not participating in class discussions or focusing on other things during class time
Grade Scale
| Grade | Numeric |
|---|---|
| A+ | 100 |
| A | 95 |
| A- | 92 |
| B+ | 88 |
| B | 85 |
| B- | 82 |
| C+ | 78 |
| C | 75 |
| C- | 72 |
| D+ | 68 |
| D | 65 |
| D- | 62 |
| F | 50 |
Your unit grade is calculated as a weighted average of the three categories above, converted back to the nearest letter grade using this scale.
Logistics and Policies
If you have any questions about the course, please ask. I am here to help you succeed.
How to get help
Use class and the lab as your first and primary resource for help. If you need help outside of class, you can email me or one of the TAs, and we will do our best to help you.
Late work
Late work will not be generally be accepted*. If you do not complete a project on time, you will not receive credit for that project.
* If you have a legitimate reason for not being able to complete a project on time, please let me know as soon as possible, and we can work something out.
Collaboration & Integrity
Collaborating with other humans is allowed and encouraged under reasonable conditions. You are encouraged to ask your classmates, the TAs, or me for help. You may also use online resources like Stack Overflow, online documentation, or any other resource you find helpful.
"Googling" is a critical skill for software developers, and I encourage you to use the internet to help you solve problems, however, do not just copy and paste the solution; you must understand and implement the solution yourself.
If you do use an external resource to build your solution, you must document the resource and how it was used.
You must both author and understand any code you submit. You may be asked to explain your code to me or the TAs on-demand at any time. If you cannot explain your code in a satisfactory manner, you will not receive credit for it.
A note about AI tools
For the first part of the course, you may not use resources that will solve the problem for you, as this circumvents your learning process. This means that tools like ChatGPT, Copilot, Claude or others that are tuned to reveal final code solutions will not be allowed in the initial portion of the class while we are learning basic concepts.
We will use these tools later in the class once we've learned the basics ourselves. These tools are very helpful but you are cheating yourself out of knowing how to code yourself if you use them before you first understand the code they output.
Attendance
Attendance for class periods and labs is required. If a circumstance out of your control prevents you from attending a class or lab, please let me know as soon as possible.
Furman’s attendance policy states that you cannot pass a course if you miss more than one-quarter of the class meetings.
If you miss a test project, you will earn a score of zero unless your absence is excused.
If you know in advance that you cannot take a test, please let me know as soon as possible so that you can take it early. Otherwise, if you are absent from a test due to an excused absence, then your final exam project grade will substitute for that project’s score.
Travel plans are not an acceptable excuse for absences.
Schedule*
*This schedule is subject to change based on the needs of the class.
This 15-week course is divided into three unis (each 5 weeks long):
- Unit 1 (Weeks 1 - 5): Programming fundamentals
- Unit 2 (Weeks 6 - 10): Programming for real-world application, Data structures, File I/O, and more.
- Unit 3 (Weeks 11 - 15): Final project work
Unit exams will be held in the final (5th) week of each unit.
How to Succeed
Conventional learning resources like quizzes, tests, and textbooks are not the focus of this course. Instead, you will learn by doing, with a focus on projects and labs.
The best way to learn is to do, and do a lot.
We will learn by…
- Writing code, running code, debugging code, and writing more code.
- Making mistakes, fixing those mistakes, and making new mistakes.
- Working with your classmates, helping each other, and learning from peers.
Computer science is fundamentally about problem-solving.
First, you must understand the problem in a way that you can articulate in your own words.
A problem well-stated is half-solved.
Next, you should plan your solution. Write down your thinking in a structured, logical way before diving into code.
Once you understand the problem and have planned your solution, it's time to start writing code.
Write the minimal amount of human-readable code possible to execute your plan. Be sure to comment on your code carefully so you or others can remember what each part is for.
Finally, test your code. Does it solve the problem in all its permutations? If no, revise, retest, and repeat until your program solves the problem under every testable condition.