Course Syllabus
CIS 006 – INTRODUCTION TO COMPUTER PROGRAMMING
BERKELEY CITY COLLEGE
Course schedule Fall 2021
Instructor: Ben Allen
Course details:
- Credit hours: 5
- Meeting time: 2:00 PM to 5:15 PM
Class time is structured as follows:
- About 1 hour lecture (2:00 – 3:00)
- About 30 minutes lab (3:10 – 3:40)
- About 30 minutes lecture (3:45 – 4:15)
- About 1 hour lab (4:15 – 5:15)
Course overview:
This course is a rigorous introduction to computer programming and computer science. This class does not presume any previous programming experience whatsoever. Although you will learn how to write effective and well-designed programs in the C++ programming in this class, C++ is not the point of the class -- the point is using C++ to get practice in the types of algorithmic thinking that will be useful throughout your careers as computer scientists and computer engineers, whatever languages you may work in or tools may you use.
Even though this is an introductory class, it is not designed to be an easy class. The pace is typically on par with the pace at UC system schools, and only slightly slower than the pace at Stanford. Each part of the class builds on the parts before it. If you fall behind, it will be very difficult to catch up.
You may initially find this material challenging and even frustrating. Programming is difficult at first, but by persevering you will learn many key concepts and skills that will be useful to you in almost all areas of computer science. It is completely normal to find yourself struggling with problems, and to think that these problems are impossible. The feeling of deep satisfaction you'll get when you figure out how to solve them more than makes up for the frustration you experience on the way.
Student Learning Outcomes:
Upon completion of this class, students will be able to do the following:
- Write programs that use conditional statements, loops, arrays, and functions.
- Create, test, and debug computer programs.
- Solve problems by writing algorithms and translating them to computer programs.
Detailed Course Objectives:
In this class, we will learn to:
- Design algorithms using pseudocode
- Write computer programs in a modern programming language.
- We will (mostly) use C++ in this class. - Write programs that use branching statements and repetition
- Meaning “if” statements and loops
- Design solutions which decompose problems into functional units
Write programs that read and write data from files and standard i/o devices - Write programs that use arrays and pointers
- Write programs using recursion
- Begin to learn about to classes and basic concepts of object-oriented program design concepts, including abstraction, encapsulation, information hiding, and composition
- Write computer programs to solve real world problems
- Learn to use compilers and debuggers
Instructor communication, student-to-student communication, and office hours:
I am available via email at benjaminallen@peralta.edu. I will respond to emails sent during the week within 24 hours of the time they’re sent. For emails sent over the weekend, I will respond on the following Monday.
Discord office hours
My formal office hours this semester are from 9:00 AM to 1:00 PM on Fridays. I will be holding these office hours on the class Discord server, and will be available for Zoom meetings by request. Here is the invite link. PLEASE USE THE NAME YOU USE FACE-TO-FACE ON THE DISCORD, AND PLEASE DO NOT SHARE THIS LINK WITH ANYONE NOT IN THE CLASS. I will kick and ban anyone who I don’t recognize as a student.
I repeat:
PLEASE USE THE NAME YOU USE FACE-TO-FACE AS YOUR NICKNAME ON THE DISCORD.
If you do not already have Discord installed on your computer or mobile device, you can get it here. If you are not comfortable with using Discord but would like to schedule an office hours session, let me know and I'll meet with you on Zoom.
I will frequently be on the Discord outside my office hour times – it’s where I coordinate with the TAs – but my scheduled office hours are the only time I can guarantee that I will be online and available. If you cannot make my office hours, please contact me and we will schedule a time that works for both of us.
The Discord will be open 24/7. Feel free to hang out there to discuss assignments and class material, but please keep discussions in the non-social channels more or less on topic -- it's not helpful to your classmates if the class channels are filled up with talk about videogames, movies, and memes.
Note: there are a couple of channels available for off-topic conversation with your classmates:
- #social, for general discussion
- #pets, for pictures and discussion related to adorable animals.
Regardless of the channel you're in, please keep your conversations friendly and inclusive. I will be very annoyed indeed if students on the Discord (or in other class forums) use language or behavior that alienates or excludes your fellow classmates. VERY. ANNOYED. INDEED.
Required Text
Starting Out with C++: from Control Structures to Objects, By Tony Gaddis,
You can use 8th or 9th editions of the book. If you are using a different edition of the book, please make sure that the chapter titles match the weekly subject topics.
PLEASE DO NOT SPEND A HUGE AMOUNT OF MONEY ON THE TEXTBOOK.
THERE IS NO REASON WHATSOEVER TO PURCHASE THIS BOOK NEW.
YOU MAY BE ABLE TO FIND VERY CHEAP USED OR DIGITAL COPIES.
Assignments
Most assignments – everything but the Karel the Robot assignments in the first two weeks – will be distributed over the class Linux server. See the course schedule (linked to at the end of the syllabus) for assignment due dates. All assignments are due on Thursdays at 11:59 PM, unless otherwise noted.
Because learning how to program effectively takes a large amount of practice, there are a relatively large number of assignments in this class. Most weeks after the first two weeks will require you to build three or four relatively complex programs. Toward the end of the semester there are fewer programs assigned, but each of these programs is relatively large.
In short: please only stay in this class if you are prepared to spend a lot of time on the assignments.
Grading
The vast majority – about 85% -- of your grade comes from your scores on the assignments. These assignments all involve writing, testing, and debugging interesting complete programs.
About 15% of your grade comes from your scores on études, which are short exercises (rather than full programs) designed to let you demonstrate your skills with new C++ language concepts.
NOTE: There is no final exam, or any other large test. I don’t find exams to be particularly pedagogically useful – people learn better from building real programs than they do from cramming for tests.
HOWEVER: There is a pair of relatively large projects due at the end of the class: Connect 4, which is due at the end of the last week of regular class sessions, and Game of Life, due at the end of finals week.
Assignment submission and testing
All the assignments (aside from the Karel assignments and the études) can be submitted by running the submit script in that assignment’s directory on the school’s Linux server. You may resubmit any number of times, though only your final submission is graded -- and if your final submission is late, your whole assignment will be graded as late.
When you submit your assignment, the system will report back on whether your program functions correctly. If you would like to test your program’s functionality without submitting it, you can use the test script in that assignment’s directory.
Functionality grading and style grading
60% of your grade on each assignment is derived from your program’s functionality. If the output of your program in all cases matches the output of my version of the program, you will get full credit for functionality.
40% of your grade comes from your code’s adherence to the style guide for the class. As you progress through your career as a programmer, you will find that using good code style makes your programs much, much easier to write, read, debug, and maintain. As such, it is crucial that you write stylistically sound code right from the start.
You will receive instant automated feedback on your program’s functionality grade when you test or submit your program. I will aim to get style grades back to you on the Friday after the assignment is due.
Late policy
Études must be completed the day they’re due.
Other assignments that are turned in a day or more before the due date get a 3% bonus. Projects turned in no more than 3 days after the due date get a 10% penalty. Projects turned in more than three days late get a 20% penalty.
Extensions
Our students come from varied backgrounds and can have widely varying situations and necessities. And, needless to say, we are currently experiencing a global pandemic. If you have any unforeseen or extenuating circumstances that arise during the course and that may prevent you from completing projects in a timely fashion, please reach out to me so that we can discuss your situation.
If you need an extension on an assignment, PLEASE ASK IN ADVANCE. I won't respond to requests for extensions the day the assignment is due. No, really: I’ll just ignore them.
No extensions will be given for études, since I will generally give solutions the class session after they’re due.
Accommodations
- If you are a student with a disability, please let me know about your needed accommodations immediately. If you are a new student and need evaluation or verification of your needed accommodations, please contact BCC's Programs and Services for Students with Disabilities office.
- Consider using other important student support resources.
Academic Dishonesty and Cheating
Please carefully read the policies and contact me if something is unclear.
- It IS reasonable (and a good idea!) to discuss your ideas and your programs with your classmates.
- It is NOT reasonable to directly copy solutions from your classmates.
- To avoid accidentally setting off my plagiarism detector I recommend that you avoid looking directly at each others' code. Talk about how your code works, think up ideas to improve your code, but don't show your code.
- It is NOT reasonable (or a good idea) to copy-paste code from stackoverflow or other similar sites.
- If you must use a short snippet of code from the Internet -- one or two lines at most -- include a comment indicating where you got it from and how it works. I reserve the right to ask questions to make sure you understand the code you've used
- That said, I don't recommend that new programmers use stackoverflow at all. Generally the answers they give to questions are geared toward the needs of working professional programmers, and involve advanced language concept that we will not cover in this class
- If you directly copy someone else's code, the penalties will be severe. If I see multiple students submit identical code or nearly identical code, all involved students will receive a 0 on that assignment. Repeated incidents will result in (at the very least) an F for the entire class.
- If another student is pressuring you to let them copy your code, please let me or the TAs know about it.
- It is not a good idea to copy someone else's code and then make small tweaks to make it seem like original work. To make this type of plagiarism very difficult to do, I will be using a plagiarism detector that implements the algorithm discussed in this paper by Stanford CS professor Alex Aiken
- If you are considering copying work from other students or the Internet, please read that paper and revise your program to evade the plagiarism-detection methods it uses.