Student Tips And Class Policies
Course Goals and Requirements
The CS161-CS162-CS260 sequence serves as an introduction to computer science, software engineering and programming. It is intended for future Computer Science, Computer Engineering and Electrical Engineering students. Although it counts as an AAOT Math/Science credit, it is NOT a recommended class for non-majors looking for science credits - they should take CS160.
This is a transfer class; thus it must meet the requirements defined by the universities that most students transfer into (OSU, Western, PSU, OIT and UofO). The material moves at a quick pace starting from week 1, be ready to work hard early on in this course; if you get behind, it will be very difficult to catch up.
The Work
Worksheets, Programming Practice
You will be given problem sets to practice with concepts we are learning and to develop critical chunks of code. This work is not collected or graded, but is essential to perform well in the course.
Assignments
This is where you demonstrate an ability to solve problems with algorithms and fluently write clean code. The assignments for this class are of larger scale than those in CS161 or 162 - budgeting time effectively and working well in advance of the due dates is essential.
Assignments that do not compile will not be scored. If they are not already late, they may be fixed and resubmitted as late work.
Assignments generally have multiple parts and each one will print some output to demonstrate that the code you wrote does the job it was supposed to. Code that does not run because of an error in an earlier part of the assignment will generally not be graded. If one part of your assignment causes a crash, comment it out so the rest of your program can run and demonstrate that it works.
You can turn in updated versions of assignments any time before the due date. If I see multiple versions of an assignment,I will grade the one with the latest date on it. Late assignments are worth at MOST 70% of the total, and only for a maximum of one week after the due date.
Assignments are generally graded and returned within one week of the due date. I use electronic (eLearn) grading forms that are available for your review in the eLearn class site as soon as your assignment is graded.
Midterms and Final Exams
These are pen and paper exams that will be taken in class. There are no retakes. Make up/early exams are only allowed for students who have true emergencies or contact me in advance about a scheduling conflict beyond their control.
Study groups and student collaboration
I encourage students to study together and talk about the material in the course. Students are however responsible for doing their own work. Specific advice on what is considered acceptable:
Study groups and student collaboration
I encourage students to study together and talk about the material in the course. Students are however responsible for doing their own work. Specific advice on what is considered acceptable:
- Practice worksheets:
- Fine to work together or to compare notes. However, be mindful of the fact that everyone needs to learn the material. Watching someone else solve a problem or looking at their answer generally does not lead to mastery. Comparing answers and talking through tricky problems or ones you answered differently is a great way to solidify your understanding. Looking at someone else's work so you can see the right answers without talking through them generally leads to a false sense of security.
- Assignments:
- Assignments are to be done individually. You should not share (email, dropbox, github, etc...) with anyone else - either to ask for help or to attempt to provide it. I will use an automatic tool to scan assignments for code that is duplicated in different submissions. If I have doubts about whether you wrote your own program, I may require you to come to office hours for a "code interview" where I ask you to explain the code, its development, and how you might modify it.
Getting and giving help
You should not share your code with anyone other than me, either as part of asking a question, or answering someone else's question. That means you should not ask for help by giving your code to someone (or posting it on the discussion board) and saying "why doesn't this work?". You should never "help" someone by sending them your code and saying "this is how I did it".
So how do you give/get help?
- Talk general strategy:
As a Question:"Hey, I know I need to chop up this string, what functions can I use to do that?"
While giving advice:"I found I had to use two loops so I could solve that problem."
- Point someone to examples from the class/book/other resources:
"Oh, you should check Ch5.8 - it shows how to do that." or I used the StructSample project as a starting point for this project."
- Make up random examples using snippets of code not directly related to the assignment.
If someone asks "How do you know if string.find() can't find what you are looking
for?", you might answer:
It returns -1, something like this:
string foo = "something"; int location = foo.find("q"); if(location == -1) //it is not there
- If you are debugging a syntax error on one line of code, it is reasonable to show/share that
line of code. Example: Why does this line of code give me an error that says "expression is
not assignable"?
4 = x;
- It is permissable to give someone debugging assistance in a live format (face to face or screensharing). During this process, you will quite likely by necessity see their code. That is OK, but you should help them by helping them track down what is going wrong in their program, not by telling them how to fix their code. If someone has a problem you can't help them work through by talking at a general level, that is a sign they have written too much code at once and do not really understand what they have written. Encourage them to back track and focus on a smaller, simpler chunk of work - to find and focus on the first line of code that goes wrong.
Technical Issues
Technical Support
Everyone taking this course needs regular access to a working computer with internet access. If you do not have access to such a computer at home you need to expect to spend a significant amount of time in the open computer lab at Chemeketa.
All of the software used in this course is freely available and can run on Windows, Linux or Macs OS X. Although I am happy to help you troubleshoot software issues in office hours, making sure you have a working development environment is your responsibility.
Development Environment
The code samples provided will be set up as QTCreator projects, but can be built and run from the command line. All work you turn in will be compiled and run in a virtual machine. You will be expected to set up a virtual machine on your computer and test in that environment.
Communication
Class Communication
Communication on all class content related issues (unless they are of a personal nature) are to be done in the class discussion board in eLearn. You are responsible for checking it regularly for announcements. I monitor the board regularly during the week, but if you read a question from another student on the discussion board and think that you can help, please do so!
Do not use email for class related questions unless they are of a personal nature (missing class, your grade, etc...). Any emails I get with general questions will be answered on the discussion board.
That said, the discussion board is not the appropriate place to post your entire program
and ask "what is wrong???" If you want to ask about code you have written for an
assignment, you need to do so without posting
your code. That means asking general questions: "I am trying to do X, but my code keeps doing
Y... anyone else had this problem?", "Anyone remember where I can find an example of X", "I keep
getting this compiler error: BLAH BLAH BLAH...
what does it mean?"
If you need to ask a question specifically about your code,
bring it to office hours or email a question to me.