Advanced Topics in Computer Science

Course Policies

Read Me

Apologies in advance for the length of this document, but there are a number of qualities about this course that make it different from most courses that you have taken in the past. We'll be mentioning most these course policies during our classroom discussions, but please take the time to make sure you understand them here.

Course Description

From the Polytechnic School Course of Study:

Advanced Topics in Computer Science Course Description

The single-semester Advanced Topics in Computer Science course offers highly motivated students the opportunity to expand on the topics covered in the Introductory and AP Computer Science courses. Subjects of study include sorting and searching, algorithm analysis with "Big-O notation," stacks, queues, and linked lists, recursion, trees, and graphs. Development of these theoretical topics is reinforced by assignments, projects, and assessments that are handwritten and/or coded on computers using the Python language (prior experience with the Python language is helpful but not mandatory). In class, each student needs a laptop computer with an Apple, Microsoft, or Linux operating system installed. Some class time is available for working on assignments, but students also spend significant time working on projects outside of class.

The material in this course is more abstract than that of the Intro or AP computer science courses, and most students find the material quite a bit more challenging. :)

Code of Conduct

The instructor of this course is dedicated to providing a respectful, harassment-free community for everyone. We do not tolerate harassment or bullying of any community member in any form.

A fine line

Hackers, coders, nerds, and geeks, have a counter-culture tradition that celebrates a piratical "us vs. them" mentality. Good natured teasing and "shenanigans" are all part of the fun when sharing a private joke with friends, but in a classroom, misunderstandings can develop quickly. Be especially sensitive to how your remarks and behavior—perhaps even meant to be helpful but expressed in an agressive, critical, or demeaning way—may be misunderstood.

Harassment includes

Participants asked to stop any harassing or bullying behavior are expected to comply immediately.

If a participant engages in harassing behavior, representatives of the community may take reasonable action they deem appropriate including warning the offender and reporting the behavior to school administrators.

If you are being harassed, notice that someone else is being harassed, or have any other concerns, please act to intercede or ask for help from the instructor or any school teacher or administrator.

This Code of Conduct has been adapted from the one at PyLadies.com and is licensed under a Creative Commons Attribution-Share Alike 3.0 Unported license.

Course Resources

This course will makes use of the following resources:

The course website most notably includes a daily schedule for our class, online lectures that you will be asked to refer to before and after presentations in class, and copies of assignments and other resources used in the course.

Computers

You will need to bring a laptop for use in this course—any Apple or PC laptop running Windows, OS X, or Linux will work. Make sure that your laptop's battery is capable of holding a charge for the duration of class. (If your battery no longer holds a charge, buy or order a new one now so that you'll have it in time for school—you won't usually have the opportunity to plug in your laptop during class.)

You will need to have access to a computer and the internet at home as well.

You will need to install software for this course, including MiniConda and git. Information on how to install these packages is given provided via those links.

Notebook

A computer science class is not only about coding on the computer—we make use of paper documents in here as well. This class in particular will include drawing and diagramming of data structures. Have pen and paper handy for making sketches, and be prepared to scan your work to PDF form for uploading to the server.

Homework

You will have homework for this class, during which you may be reading the text, writing solutions to problems, coding on the computer, taking an online quiz, etc.

It may be the case that you occasionally find yourself stumped by a particular homework assignment. In these cases, you are encouraged to:

Using Solutions and Answer Keys

Although you will sometimes have access to solutions and/or answer keys, avoid working on programs and homework with the solutions readily available. Part of the learning process is getting your brain to think about a problem for a little while. You don't sit down to work on a crossword or soduku problem with the answer key available. The point of working on the puzzle is to... figure out the puzzle. Looking at the answers before your brain has had a chance to really wrestle with the problem may help you in the short term, but it doesn't help you learn the material.

If you do elect to consult with an external reference, do not copy-paste from another program, ever. Not even a snippet. Our primary goal here is to help you learn how to think about problem-solving, and learn how to create programs. You're trying to train your brain, and copy-pasting sidesteps that whole process.

NOTE: The "no copy-paste" policy is not advice—it's a rule in this course. See Academic Integrity below for further information.

Python Style Conventions

In order to assist you in writing, reading, and understanding the programs that you'll be working on in here, you'll be asked to follow a number of style conventions. These include:

  1. Initial Python path, the first line of the program
    #!/usr/bin/env python3
  2. Initial Comment for every program includes 5 lines of code, as shown in the example below.
    """
    quadratic_solver.py
    This program defines a class QuadraticSolver that identifies roots
    for quadratic equations.
    Written for the 2021 Advanced Topics in Computer Science course at Poly.
    """
    
    __author__ = "Richard White"
    __version__ = "2021-01-24"
  3. Capitalization convention in code
    • variables and methods are written in all lowercase / snake_case.
    • Classes are written in lowercase but begin with a capital letter.
  4. Width of program
    Lines in a program should be a maximum of 120-characters in width.
  5. Indented blocks
    Blocks of code will be indented 4 spaces. Do not use the Tab key to indent unless your text editor has been configured to "auto-expand" tabs a width of 4 spaces.

We'll be developing additional conventions as the course proceeds.

Procrastination

Thanks to your intelligence and excellent pattern recognition skills, you have become well trained at Poly in the fine art of putting things off till the last minute. In many of your classes, your ability to procrastinate has served you well.

Programming doesn't work like that.

(Of course all your teachers tell you that, but this time I'm serious.)

The skills you'll be developing in here require time to sink in. Trying to fit a one-hour assignment into 15 minutes, or a ten-hour assignment into an hour-and-a-half, simply will not work.

Think of creating a piece of art. Whether it's a small or large, the work that you're creating takes time to develop—there aren't any shortcuts, and there are inevitably problems (see next section, Technical Glitches).

My advice:

Again, due to your wonderful pattern recognition skills I have every confidence that you'll figure this out early on, but I wanted to give you a heads-up on it.

You're welcome.

Technical Glitches

You can almost certainly anticipate a wide range of technical glitches that will conspire to impede your progress in here.

None of these are excuses for turning in late work, with the possible exception of sudden illness on the day a homework assignment is due, and even then, there's this thing called The Internet. Maybe you've heard of it? ;)

Plan for the unexpected, and try not to panic when your emergency plans fail. A missed homework assignment here or there won't be a problem for anyone, but a pattern of missed smaller assignments, or a major assignment that's not completed on time, will quickly become a problem. I'd encourage you to do what you can to avoid finding yourself in that situation.

Turning in assignments

You'll have a number of different types of assignments in here, most of them involving writing programs in Python, and most of these programs will be written on your computer, often at home. In order to "turn in" these assignments, you'll need to upload them via SFTP or SCP to a directory on the course server reserved for such purposes.

Unless stated otherwise, programs assigned on a given day are due that evening by 12:00 midnight. At that time, the programs will be automatically evaluated by testing software, so you can't afford to turn in assignments late. You are strongly encouraged to get your work done on these assignments early, so as to avoid any last-minute problems: the assignment was difficult, your connection was down, etc.

Assignment Evaluation

Evaluation of your work depends on the nature of the assignment. Tests and larger computer-based projects will be evaluated in a fairly traditional manner. Daily written homework assignments are worth fewer points but are an important aspect of your learning the material.

Daily programming assignments are going to be evaluated via a qualitative system used at Stanford. There are a number of different qualities any given program is evaluated on: efficiency, legibility, correctness, completeness, comments, etc. Although the correctness of your program will be established using a suite of tests, these assignments will be graded on the following scale:

GradeEvaluationScore
++An absolutely fantastic submission of the sort that will only come along a few times during the quarter. Rarely awarded, but well-earned.7/5 points
+A submission that exceeds our standard expectation for the assignment. To receive this grade, a program often reflects additional work beyond the requirements or gets the job done in a particularly elegant way.6/5 points
✓+A submission that satisfies all the requirements for the assignment. It reflects a job well done.5/5 points
A submission that meets the requirements for the assignment, possibly with a few small problems.4/5 points
✓–A submission that has problems that cause it to fall short of the requirements for the assignment.3/5 points
A submission that has extremely serious problems, but nonetheless shows some effort and understanding.2/5 points
––A submission that shows little effort and does not represent passing work.1/5 points
0Assignment not submitted on time.0/5 points

Grading

Your grade will be based on a weighted percentage, according to the following scale:

A93% and above
A-90-92%
B+87-89%
B83-86%
B-80-82%
C+77-79%
C73-76%
C-70-72%
D+67-69%
D63-66%
D-60-62%
Fless than 60%

The approximate weighting of assignments in the course will be as follows:

Programming Homework20%
Activities and Projects50%
Quizzes / Tests20%
Other10%

Academic Integrity

In addition to assisting students with learning material, teachers are often responsible for assessing their progress. In order to do this, students may be given a number of different types of assignments: homework, quizzes, tests, in-class activities, laboratory experiments to conduct, research papers, individual and group projects, presentations, etc.

It is understood that for some of these assignments, students may collaborate with one another. Four lab partners may perform an experiment as a group and share data. A student team may design and present a project together. Students might consult each other to find out how to solve a homework problem. In these cases, collaboration is accepted and even encouraged.

Collaboration ≠ Copying

The term "collaboration" refers to discussing a problem and sharing ideas on how to solve it. It does not consist of simply copying someone else's work.

In many cases, however, the teacher desires an individual assessment of the student, ie. an answer to the question: "How much progress has the student made in mastering the material?" These assessments, usually in the form of quizzes and tests, are to be performed without assistance from any other sources or students.

There are many ways that a student may cheat, but they all fall into one of three categories:

  1. giving or receiving unauthorized information on tests, examinations, or other work (including programming exercises)
  2. using any unauthorized aids on tests, examinations, or other work (including programming exercises), or
  3. copying someone else's work, in whole or in part, and submitting it unattributed as your own.

Thus, looking at someone else's test paper to copy the answer to a problem, discussing a test problem or sharing its solution with another student, copying test problems or answers and sharing them with another student, stealing a test, stealing the answers to a test, and using notes during a test that have not been expressly allowed by the teacher are all prohibited.

What about Chat-GPT?

Exciting new developments in AI-Machine Learning have resulted in the widespread availability of neural networks that can solve problems for you, write paragraphs or essays, etc. in response to your prompts. These tools are fascinating and deserve to be experimented with! Although this software may serve useful purposes in some contexts, these tools should not be used for generating work you do for this class. Submitting work as your own that has been generated by one of these systems is not permitted, and will be treated as a case of academic dishonesty.

If you have any questions about this policy, the instructor is happy to discuss them with you.

The penalties for cheating vary, depending on the institution, the department, the teacher, and the nature of the infraction. Commonly, a student caught cheating will receive a failing grade on the assignment and be subject to disciplinary action, including suspension and a letter being placed in the student's file. A friend of mine who is a professor states that at her university, there are a total of ten disciplinary actions possible in response to cheating, including: "expulsion, suspension (withdrawal from the University for a given period of time), mark reduction on the assignment or exam, reduction in the final course grade, a grade of F in the course, conduct probation, written reprimand, suspension of any degree already awarded, rescinding any degree already awarded."

Copy-paste is NOT allowed

In your science classes, you use a common lab protocol with the entire class, usually perform labs within a class, and usually share data with at least one other lab partner. When it comes time to report those results, your work is to be completely your own: Your own writing of results, analysis, conclusions, your own calculations, your own percent error, etc. You are allowed to talk to others about your results, and with your lab partner even to talk about your results, confirm your percent error, etc. You should not be "talking and writing at the same time," or copy-pasting results. Your work is your own, and the teacher knows it's not your own by comparing what s/he sees on your paper with what others in the class have done. If the numbers/results are similar, that's as it should be. If the calculations/writing are exactly the same, we know you cheated. It's pretty easy.

In computer science, the temptation to use others' work as a source for your own is often powerful. There are a large number of references readily available on the Internet, and searching for these references is extraordinarily easy. And yet, you mustn't do this!

The purpose of this class is not for you to produce programs. This purpose of this class is for you to learn how to write programs, and you do that, in large part, by developing both your programming and problem-solving abilities. Neither of these are aided, at all, by copy-pasting from code that others have written.

There is a place for copy-pasting in computer science and computer programming, and if you go on to work with computers for a living, you will find yourself using other people's work quite a bit. This class, for the most part, is not about that. This class is about working to develop experience with the fundamental skills of creating algorithms to solve problems.

In introductory physics programs, the professor is not interested in seeing you find answers—the answers to the problems that you're solving are already known! The professor is interested in seeing you develop the problem-solving skills that can be used to produce the answers. Learning how to "think physics" is what those classes are about.

And learning how to write programs is what this class is about.

So... don't copy-paste in here. It's against the rules, and it is of no use in helping you learn programming. Despite my efforts to discourage you from this habit, you may find yourself tempted anyway. Don't. Copy-pasting is considered cheating—"academic dishonesty"—and is treated as such, with the accompanying consequences: zero on the assignment, meetings with the deans/parents, a letter in your file, etc. You should know that it's enormously easy for me to identify when you've copy-pasted. I employ tools that compare your work with that of other students in the class, and compare your programs with those available online.

Don't do it.

Use your powers for good, not for evil.

SPECIFIC EXPECTATIONS AND CONSEQUENCES AT POLY

Expectations

  1. In a testing situation, you will write your own answers, without using any notes, preprogrammed calculators or the like, unless you have been given express permission from the instructor to use such resources. Specifically:
    • You will not look at another student's paper during a test, quiz, or other individual assessment.
    • You will not allow another student to look at your paper during such an assessment.
    • You will not discuss the test, quiz, or assessment in the presence of any student who has not yet taken it.
    • You will not help any student study for a test, quiz, or assessment which you have taken but they have not.
    • You will not ask other students for information about a test, quiz, or assessment that you have not yet taken.
  2. If you collaborate with other students on a programming exercise, you are permitted to share ideas, algorithms, and specific programming advice.
  3. You are permitted to use the solutions posted on this website for the purposes of better understanding the problem and completing the assignment.
  4. You will not copy-paste code from other websites, other students, or the instructor and submit it as your own code.
  5. Regardless of the type of assistance, each student must physically enter his/her own program via keyboard, test and debug the program himself/herself, and submit his or her own work.

Consequences

If you fail to meet these expectations there will be consequences for you, depending on the severity of your failure. These consequences will include a zero on the assignment, and notification of the incident to parents, deans, and the Upper School Director.

Polytechnic School's Responsible Use Policy

In addition to these course policies, by using computers and the computer network at Poly you are tacitly agreeing to abide by the school's Responsible Use Agreement, which you are strongly encourage to read and understand. Violation of this policy may result in your loss of access to school technology, which is going to have a devastating effect on your ability to participate in this class. :)