Course Syllabus
S.1 Course Description and Prerequisite
CS 1C is the study of advanced data structures and algorithmic analysis required of all Java-based CS degree programs and vocations. You will get extensive training and practice in the theory, language and coding techniques known to all professional computer scientists. You will learn how to use the many java.util collection classes (like ArrayLists, HashSets and LinkedLists) to implement higher level abstract data types (like trees, hash tables and graphs). You will also become versed in the implementation of various sorting and searching algorithms, and be able to analyze a problem from many new points of view so you can choose the best solution for the problem at hand.
A working facility with simple algebra as well as good written English comprehension skills are both strong advisories.
S.2 Instructor
My name is Dr. Baba Kofi Weusijana
Pronounced: Bah-bah Co-fee Way-ou-see-jah-nah
Please call me "Dr. Weusijana" or "Baba"
Office Hours: Mondays 10am-11am & Wednesdays, Noon-1:20pm in FH 4131, except I will be an hour late on April 18th & 25th and on May 9th.
I can also meet students by appointment in room FH 4131 or via Canvas Conferences or ConferZoom. I'm often online Saturday afternoons and Sunday mornings.
Contact Info:
The best way to contact me is through Canvas from the relevant assignment. Otherwise you should ask questions through the Discussions forums or the private Canvas Inbox and only use email if you have trouble logging in. If you use the Canvas Inbox, or e-mail, I might miss your message and might not have the proper context for it. I might take 3 business days to respond to Canvas Inbox and e-mail messages.
To contact Dr. Weusijana anonymously use this form:
S.3 Text and References
The FREE and online text for the course is "Open Data Structures : An Introduction" (latest Java edition), by Pat Morin and is available at http://opendatastructures.org/ .
You can also access this book in various formats from Foothill's Library at:
https://ezproxyfh.fhda.edu/login?url=http://search.ebscohost.com/login.aspx?direct=true&db=e000xna&AN=638956&site=eds-live
S.4 Compilers
You will need a (free) software package called a compiler. In this class we will be using a product that runs on Linux, Windows and Macs called Eclipse. If you are facile on another Integrated Development Environment (IDE), you are welcome to use that, instead. However, my assistance in the forums regarding compiler specifics will be limited to Eclipse.
S.5 Communication
Public Forums
Questions and comments should be posted to the Discussions Tool (DT) which you can reach by clicking on Discussions on the left menu. I will usually reply within a few hours. Unless a question is of a private nature (i.e. grades, registration issues), please use the public Discussions. Also, feel free to answer your fellow student questions even if you only have a guess as to what the answer is. It's great to engage in conversation with each other in this manner.
Steps needed to post your public questions and comments for this course can be found on the Canvas Discussion Instructions Page.
No points are awarded for contributions, and there are no weekly requirements, but it's good collegial form to participate, inquire and assist. Also, you must post an introduction in the first week of class or you will be dropped as a "no show" according to the college requirements.
Do Not Post Homework CodeWhether you have a question or suggested answer, never post exact homework code to forums. Create a separate small program to display your issue or illustration.
Private Messages
Please use public DT for any question or comment that involves understanding the modules, tests or assignments. If you have a confidential question (grades or registration) use the Message Tool (MT) by first clicking on Inbox at the far left, then selecting this course and your intended recipient (usually me.)
Steps needed to post your public questions and comments for this course can be found on the Canvas Inox Instructions Page.
Posting Program Code
You can post code to the public discussions that is not directly from your assignment. If you have an assignment question, translate that into a piece of code that does not reveal your answer or submission, exactly.
When posting code fragments (i.e., portions of your program) into questions, make sure these code fragments are perfectly indented and that they are properly formatted. For details see the required resource module Pasting Code into Questions.
Do not post entire programs and ask "what's wrong?" or "is this good?" That's frivolous and indicates you have not tried to narrow down the problem. Find exactly what you want to know about and post only that part of the code.
STEM Success Center
If the online forums here are not enough, please visit the STEM Success Center page and click View tutoring schedules by subject and then on CS Lab. These experts are qualified to help you with assignments or modules without giving you an answer that will short-circuit your discovery process. Let them know that you are not to receive actual assignment solution code or even fragments. They probably know this already, but it's your responsibility to avoid submitting something that was written by a tutor or another person.
S.6 Where Everything Happens
Access the various areas of your course by first selecting this course through the Canvas Courses choice in the far left ...
... then examining our course choices menu, also on the left side of the screen, but slightly to the right of Courses:
- Assignments: submitted through the Assignments Tool (AST).
- Tests: taken through the Quizzes Tool (QT).
- Questions or comments: posted using the Discussions Tool (DT).
- Other areas: You'll find the names self-explanatory, and you can investigate them on your own.
S.7 Grades
Take responsibility for your own learning and please make an A grade your goal!
Name: |
Range:
|
||
---|---|---|---|
Please note that the grades of A+ and C- are NOT available.
Exams:
The exams will be cumulative: any topic covered from the beginning of class till the time of the exam is fair game for questions. The exams will include and will emphasize problem solving, and utilization of what you’ve learned in class.
For written (on paper) exams, fewer points will be deducted for conceptually unimportant syntax errors (e.g., incorrectly capitalizing the word "if"), while more points will be deducted for important syntax errors (e.g., leaving the "extends Robot" off of a new class declaration).
Students must take both the Midterm Exam and the Final Exam in order to pass this course. Students who do not take both exams will receive a failing (F) or not passed grade.
In general, the final exam in this class will NOT be returned to students. You may request to view your completed, graded exam for a reasonable, short amount of time in the instructor’s presence, but you will not be given the final, nor may you make copies of the final exam.
Class Time:
Class time will be used not just for lecture time, but also for various in-class activities that you will be expected to participate in. Thus, you should consider attendance to be mandatory; roll call will be done at the start of each class. If you show up on time for all classes, stay for the entire class, and actively participate in the in-class activities and do well on the quizzes, you should receive the full points allotted to this category.
Class attendance will be assessed in the following manner: at the beginning of class there will be a short quiz on the contents of the previous day. Attendance is usually taken while the quiz is given. If you are often late or absent you will loose out on course participation points.
Missing Days and Make Ups:
If you notify the instructor at least one week prior to an exam or quiz, it may be possible to take the exam or quiz at a different time than the scheduled date – this different time will be on the same day if possible, or typically on a day prior to the exam otherwise. No make-ups will be given for exams, presentations, or other such graded events, that were missed without prior notification to the instructor. In any case, the notification of absence must be given at least 2 days before the exam/quiz/event. The only exceptions are documented medical and school emergencies (you can forward text messages to the professor's email.
Grading Disagreements:
Any disagreements about your grade should be brought to the instructor's attention immediately (waiting is always a sad mistake).
Unless stated otherwise, all work should represent your own original, independent thinking. Unless stated otherwise, all out-of-class assignments are not meant to be group projects. While in the classroom working on exercises, you are encouraged to either seek help or to offer help from those around you. It’s a programming party!
It is okay to talk with classmates to clarify conceptual understanding necessary to complete assignments. However, copying another person’s work in whole or in part, either manually or electronically, it not acceptable; nor is copying and slightly modifying another person’s work acceptable. Type your own code! You are here to increase your own knowledge and understanding and your exams' scores will be based only on your own knowledge and understanding, so type your own code. In the event copying should occur: all participants in the plagiarism (both the person plagiarizing, and the person whose work was taken) will receive:
1. A grade of zero for the first offense, and
2. For a 2nd (and final) offense, all parties will be given the option of either withdrawing (if the drop deadline hasn't been passed) or taking a "0.0" for the term.
Second (and later) offenses include offenses from prior terms. A description of all such incidents shall be forwarded to the Dean of Students office, where a file of such occurrences will be maintained.
Group projects are learning exercises like individual projects: every individual in the group is expected to understand all the material as if each person had done the entire assignment individually. Therefore, it is fair game to ask any person in a group to explain any aspect of the assignment that the group has done.
If you accept help from someone who is not trained to teach without giving away the answer, it will short-circuit your learning process -- you will actually learn less. For those of you wishing to give help, please do not give away the answer. Either tell the person where they can look to find the solution, give them a general idea or ask them to ask me. Don't post actual assignment code. Do not look for answers on cheater web sites or pay-for-help web sites.
Electronic Submission:
I would like you to electronically submit all assignments. You should type all assignments & homework answers into the computer (including essay questions), make sure it runs correctly, and submit the files for any given assignment. More details will be given in class how to submit assignments.
Today’s technology is inherently unstable: Your network might go down, your Internet Service Provider might be down, the public library might not be open, you might be unable to get Microsoft Word to do exactly what you want. While you might have this happen to you, it’s not an excuse for handing in an assignment late! Knowing this, you should include time in your schedule to compensate for possible technological snafus. For assignments having a hard deadline, no leeway will be given for failing to hand in work because of technological problems.
Attendance:
You are responsible for what goes on in class whether present or not. You are responsible for making up any work, assignments, quizzes, etc., for missed classes.
Attendance is very important, since the course is structured to require active involvement and participation on the part of the student. Missing a class means missing material that is difficult to make up. Daily attendance records will be kept.
If you must miss a class, you will have to arrange to get the class notes and any other information from another person. Get to know some people in the class and stay in contact via the Canvas Inbox so if you do miss a class you can obtain assignments, quiz information, etc., for the following class.
Other Notes:
The number of projects and the points possible for exams, projects and activities are subject to change depending on the circumstances of the class. I reserve the right to modify any and all aspects of the course, any time, without prior notice, including this syllabus.
Classroom Conduct and Courtesies
Following these simple guidelines will help me to offer an enjoyable teaching environment for you. You are expected to come prepared to class and on time as scheduled. Coming late and/or unprepared is disrespectful and disruptive both to me and the other students in class, and may result in point deductions. If you must come in late, take out your supplies or notes before coming into the classroom and quietly enter the room without speaking to anyone. If you have any personal concerns, please feel free to talk to me at the end of class.
Please remember to respect the following list for me and the students around you.
* Please remember to respect other students and your instructor by not using inappropriate language.
* Please silence your mobile devices such as cell phones.
* Do not play computer games or visit gaming websites during class times.
* No chat or messenger programs during class times.
* Do not use personal audio devices such as MP3 players or cell phones during class times.
* No Internet surfing, texting, or other mobile device activity that will distract students or the instructor.
Withdrawals: If you decide to drop, it is your responsibility to submit an official drop to the Admissions Office. Do not assume that you will be dropped automatically.
Proactivity and Self-Starting
Rule #1: If you want to learn programming you MUST do the reading and you MUST do the exercises and you MUST take advantage of whatever resources and sources are available in order for you to deeply understand it. Programming does not come magically or trickle into your head by osmosis. You cannot skate. It takes work. You must dedicate hours each day reading about code, writing code, researching code, puzzling out code, working the code again and again, and wrestling it into place. Eventually you might even find yourself dreaming about code, and then waking up in the morning with a “solution” to the problem you went to bed with. There is no other way to learn it.
Rule #2: Google it! Answers from Stackoverflow.com are usually great if you read the whole page.
Rule #3: Be resourceful, energetic, proactive, flexible, a self-starter, self-reliant, self-disciplined, and show drive and initiative! Show a friend (they don't even need to know how to program) how your program works and often you will realize the cause of your problem before you even finish your explanation! You are expected to do this in class.
Rule #4: Don’t get frustrated. Take breaks. Walk away from your code for an hour or two, and then come back to it refreshed and rejuvenated. It works!
Rule #5: Search for it again! And again! And again! Maybe you are in a Filter Bubble, so try another search service like StartPage.com or DuckDuckGo!
Undocumented Students
The Foothill-De Anza Community College District Board of Trustees unanimously adopted this Resolution in Support of Undocumented Students. Resources for the undocumented can be found at:
- https://ready-california.org/resource/
- http://www.cccco.edu/ResourcesforUndocumentedStudents.aspx
- https://foothill.edu/dreamers/
- https://www.deanza.edu/students/undocumented.html
S.8 Drops and Withdrawal
For a complete reference of all withdrawal dates and deadlines refer to the Foothill College registration page at the college web site here:
https://foothill.edu/calendar/winter2018.html
To stay enrolled in this class, you must participate regularly in your lab assignments and exams. This is part of the class participation that online classes must possess in order to maintain their transferability and accreditation.
You will be dropped by me for any of the following:
- Missing a scheduled test without prior notice will result in an automatic drop.
- If you do not login for nine (9) consecutive days I will drop you. (See exception below.)
- If you receive a zero on any two lab assignments, I will drop you. (See exception below.)
- If you do not post an introduction in the first week, you will be dropped for non-participation.
- If you do not completely attend 4 or more classes you will be dropped for non-participation or you will receive a failing (F) grade (See exceptions below).
Exception to Above Policies:
If the non-participation that has just been described occurs partially beyond the last date to drop, I may not be able to drop you, and you may receive whatever grade that your points dictate. Therefore don't assume that you can simply stop participating late in the quarter and you will be dropped. If you intend to drop please do so yourself, so you don't accidentally end up with an unintended "F."
If you decide to drop the class, please let me know. I cannot allow anyone who has dropped to continue to have access to the material.
Missing Days and Make Ups:
If you notify the instructor at least one week prior to an exam or quiz, it may be possible to take the exam or quiz at a different time than the scheduled date – this different time will be on the same day if possible, or typically on a day prior to the exam otherwise. No make-ups will be given for exams, presentations, or other such graded events, that were missed without prior notification to the instructor. In any case, the notification of absence must be given at least 2 days before the exam/quiz/event. The only exceptions are documented medical and other emergencies (you can forward text messages to the professor's email). Detailed information about Foothill's Health Services are available at the Health Services website.
S.9 Collaboration
Working together on individual homework = ZERO + Dean of Student's Office.
Spouses, roommates, and friends taking the course together: don't discuss ungraded individual homework with each other outside the public forums. Instead, direct all of your questions to the public forums where everyone can comment and I can moderate the discussion. Do not look for answers on cheater web sites or pay-for-help web sites.
Any variation of collaborating or copying individual programming lab assignments is prohibited. The general rule of thumb is to type your own code! An individual assignment must be 100% your own work. Changing a few variables around to make them look different won't fool me. And if it does fool me, you probably had to change so many things that you knew enough to do it yourself in the first place.
You can talk about the modules all day long off-line if you wish. This rule only applies to individual lab assignments. There is a place to ask for help with homework: the Public Discussions labeled for that purpose or the STEM Success Center. I will spend hours helping you each week, both individually, and in groups. You can even answer each other's questions in the Public Discussions. If I think you are giving too much information away, I'll edit your post. So there is no reason to ask your fiancée or your cousin's neighbor's lead guitarist.
If you accept help from someone who is not trained to teach without giving away the answer, it will short-circuit your learning process -- you will actually become a worse programmer. Now, you don't have to agree with me - but you do have to follow the rule. In this class we do most assignments in groups, but for individual assignments, you are agreeing to do them on your own or with help from us, here, in this course's public forum.
For those of you wishing to give help, please do not give away the answer. Either tell the person where they can look to find the solution, give them a general idea or ask them to ask me. Don't post actual assignment code.
S.10 How to Ask a Question
All relevant questions are welcome, just make sure your question is asked well in a good format: Make it specific. An example of a badly asked question is, "My program doesn't work. Here it is. Would you please see if you can tell me what I am doing wrong?" An example of a asking a question well is, "My program doesn't work. Through trial and error I have determined that the problem lies in the following five lines, but I can't seem to narrow it down any further. Can you help?" The second students' question made an attempt to organize and isolate the problem prior to asking for help. When they get my answer, they are sure to remember it because they are prepared to hear exactly what they need to know.
Another example: BAD: "I don't understand the assignment. I'm lost. Please help. Jackie." The reason this is a bad question is that there are a million things I might say to get Jackie on the right track, but I can't know which ones to focus on because I don't know where Jackie's misunderstanding lies. Jackie hasn't helped be help Jackie. GOOD: I understand the homework description up until you say 'XYZ'. But I'm not sure what you mean by 'XYZ'. In the lectures 'XYZ' seems to be ... but here it seems to mean something different. From that point on, things get hazy because of this mismatch. Would you resolve this apparent difference for me? Jackie." Here, Jackie has told me exactly the first point at which Jackie is confused so I know what to tell Jackie.
I am not discouraging questions: I want you to ask. Through them, I get a chance to communicate with you. But narrow down the question. Show me you have tried to answer it and have made some progress. Show me exactly where you seem to be faltering so I can know how to help you. The same holds true if you are posing your question to a fellow student or to the whole class.
S.11 To Obtain Disability-Related Accommodations ...
Please contact Disability Resource Center (DRC) at the start of the quarter or as soon as you become disabled. To contact DRC, you may:
-
Visit DRC in Room 5400
-
Email DRC at adaptivelearningdrc@foothill.edu
-
Call DRC at 650-949-7017 to make an appointment
More information is available at https://foothill.edu/drc/ .
If you already have an accommodation notification from DRC, please contact me privately to discuss your needs.
S.12 Expanded Content
The course will provide full theoretical explanation, code examples and student programming assignments for each of the following topics: java.util STRUCTURES and INTERFACES: ArrayLists, LinkedLists, Maps, Sets, Stacks, HashSets, TreeSets, Deques, and user-designed alternatives to all of these templates. TIME COMPLEXITY: big-oh and theta algorithm times. TREES: User-defined trees, binary search trees, AVL trees, rotation and top-down splaying. HASHING: hash tables, hash functions, linear and quadratic probing. PRIORITY QUEUES: binary heap implementation of priority queues. SORTING: insertion sort, Shellsort, in-place heapsort, mergesort, quicksort and critical analysis of each sorting technique. GRAPH THEORY: graph data structures, shortest path algorithms (dijkstra), minimum spanning trees (kruskal) and maximum flow problems.
- Week 1 - Introduction to the world of advanced computer science. Review of ArrayLists and Java generics. Introduction to time complexity. Comparative analysis of ArrayLists and arrays. The "subset sum problem." The iTunesEntry data set.
- Week 2 - In-depth analysis and implementation of ArrayLists, LinkedLists and Iterators. Stacks and sparse matrices.
- Week 3 - Time complexity, big-oh, little-oh, omega, and theta analysis of algorithms. Linear, logarithmic, quadratic and other growth rates. Binary searching, proper and improper uses of recursion and the RECONS data set of stars near Earth.
- Week 4 - General trees and binary search trees. Full and lazy deletion. Analysis of tree algorithms. The Project Gutenberg data set.
- Week 5 - Tree balancing, AVL trees, rotation and top-down splaying. Inheritance applied to class templates.
- Week 6 - Hash tables, hashing functions, open addressing, linear and quadratic probing, the use of prime numbers in hashing functions.
- Week 7 - Priority queues and binary heaps. Complete tree implementation of binary heaps. Percolate up and percolate down. Heap sort.
- Week 8 - Insertion sort, Shellsort, in-place heap sort, merge sort and time analyses of these sorting algorithms.
- Week 9 - Quick sort and indirect sorting. Review of java.util Maps, Sets, HashSets, TreeSets, PriorityQueues Deques and Stacks.
- Week 10 - Introduction to graph theory. Vertices, edges, adjacency lists, paths and graph data structures. Shortest path algorithms and the dijkstra technique.
- Week 11 - Minimum spanning trees and the kruskal technique. The maximum flow problem.
- Week 12 - Final exam and closing remarks.
You can access the official course outline of record for all CS courses here:
From that page, select Dept: Computer Science → Search, and from there, select any CS course whose official outline you want to review.
Student learning outcomes for this and other CS courses can be found
S.13 Weekly Activities
Every week you have two lessons, or Modules, to study and one Lab Assignment to turn in. There are exceptions (see calendar, below), but this is the basic drill. This course is a lot of fun, and a lot of work. To pass it you have to make time to do both of these activities.
Weekly Time Estimate
- Module Reading - about six hours. This includes pasting code into your compiler and trying it out.
- Lab Assignment - about 10 hours. This varies greatly with individuals. Some students take five hours, some take 20 hours.
Typical Week
Here is the day-by-day breakdown of a typical week. Some weeks differ, but this will help you understand approximately what you are facing on a daily basis.
Monday (first 2 or 3 weeks only) | Read resource module R |
Tuesday | Read module A |
Wednesday | Assignment due (2 PM) |
Friday | Read module B |
S.14 Other Activities: Discussions, Announcements, Tests
Discussions
You can ask me or other students questions in the Discussion area. I hope you will be active in this area. Read through the recent Discussions posts every time you log in to make sure you gain the benefit of other students' questions.
Other than the first week's introduction, you are not required to post every week. However, if you are having difficulty, you should reach out and ask questions.
No Exact Homework Code AllowedPlease phrase questions in plain English or use non-homework code examples to demonstrate you question or suggested answer when posting.
Follow Module 3R When PostingCode fragments must be formatted according Module 3R to receive an answer. Otherwise, we'll ask you to fix the formatting and we'll check back to answer the question once the formatting is achieved.
You must also post an introduction in the first week to avoid being dropped as a no-show.
Announcements
You will see an Announcement area in the Canvas course tools menu on the left. Check that area every time you login for late-breaking news.
Tests
There is a midterm exam on Friday of the sixth week, and there is a Final Exam on Tuesday of the 12th week. These tests will be available for exactly 18 hours starting 6 AM on the due date and be due by midnight. You must take the tests in that 18 hour period. I will not accept late midterms or final exams. You are to take the midterm in a single one-hour sitting and the final in a single two-hour sitting. Details about whether or not the test will automatically submit and lock-you-out an hour (or two) after you begin it will be disclosed in the announcement area prior to the exam date.
S.15 Next Steps
Now that you have the idea, you can look up and see that in the first week you are supposed to read:
- Monday - This syllabus and resource R1
- Tuesday - Week 1A
- Friday - Week 1B
S.16 Tentative Official Calendar
Your professor reserves the right to change the assignments, activities, and their due dates. No late assignments accepted after Friday, June 29: Last day of spring Quarter. Also, the Final Exam is not accepted late. You have three months to prepare for these deadlines.
Course Summary:
Date | Details | Due |
---|---|---|