Fall 2020
-->

# syllabus

## info

A first class in computer programming and computing skills, and as such a foundation for further work in computer science. Much as a competency with English grammar is required for writing, an understanding of programming is required for nearly all intermediate and advanced work in computing. Topics include program design, boolean logic, input and output, object oriented programming, and some basic computing skills such as code editing, debugging, and practice with the unix command line environment.

Students will learn to design and implement computer programs for tasks such as drawing graphical patterns, transforming and analyzing data files, and responding to user input. The language used will be Python, a general purpose high level scripting language often used in domains such as scientific computing and web development.

A computer (MacOS, Windows, or Linux) onto which Python and related modules and tools may be installed is required.

## learning outcomes

Students will learn fundamental computing concepts and skills including

• computer programming : the ability to read, write, run, debug, and document code, using the python language to understanding and explore topics such as input, output, looping, functions, conditionals, objects, and fundamental data structures.
• a facility with coding tools and concepts including at least files, folders, a unix shell, editors, bits, bytes, ascii, hex.
• practice reading and searching technical documentation.
• experience in implementing solutions to computational problems both individually and in groups.

## format

As an asynchronous online course, we won't typically all be together at the same time, either in person or in a zoom room. Instead, I'll post videos of myself explaining some of the things that I would have explained in a face-to-face classroom setting, and be available regularly via zoom to answer questions and discuss the material.

The course will consist of

• Twice weekly reading, coding, and writing assignments; a total of about a dozen assignments. Many of these will be from Zelle's textbook; a number will also include a self evaluation describing your progress.
• Two more substantial coding projects: a group project near the middle of the course, and final project chosen by each student.
• Multiple opportunities per week to discuss the material, ask questions, and get help in zoom meetings and slack conversations. The specific times will be decided at the beginning of the term.
• We will rely heavily on the "Python Programming" textbook, with additional online materials.

While I've taught this course many times before at Marlboro College, doing it entirely online is new to me, so this plan may well change as we go along. Please do give me feedback about what is and isn't working.

### times and discussion sessions

Assignments will be due twice weekly, Mondays and Thursdays by midnight.

There are multiple discussion zoom sessions with Jim and the CS tutors (Quang, Stacy, and Suman) - currently 13 times per week, 32 hours, seven days a week. See the zoom times for the details.

You don't need to participate in all of these (though if you make it to even half of them in one week and let me know I'll send you some chocolate as a prize) but it would be good to connect up with Jim at least once per week.

We also have a slack channel where you can ask questions.

Learning the fundamentals of computer science is different for everyone and may even differ from topic to topic or problem to problem in terms of how much time and effort is required to master that topic or problem.

Working in a group setting on a larger problem can present a unique challenge in terms of workload - groups will be responsible for dividing work equitably among all partners and holding each other accountable to get tasks done well in a timely manner. Even the best project plans are not perfect, and as such, it should be expected that some weeks may be more intense than others. It is advised that students communicate with each other and the instructor regarding schedule, availability and workload.

In the past, I've taught this course over a 14 week semester, and expected roughly 12 hours of time per week, both in and out of classes.

This semester we will cover the same material in 7 weeks, in an online setting ... which means you should expect to need spend roughly 24 hours per week on all this. Depending on your background, aptitude, and how much you want to get out of all this, your may need less or more than this. But you should expect it to be something like half of a full time job.

• First and foremost, you are expected to act as adults in this class, behaving responsibly and fostering a safe and welcoming environment for everyone.
• You will participate in all required activities. More than two absences (excused or unexcused) will jeopardize your standing in the course.
• You will be an active participant and collaborator in group sessions.
• You will submit all assigned work by their due dates. Late work is usually accepted for reduced credit; however, if too much of the work is late or it is extremely late, it may not be accepted.
• You will seek out help promptly if you are struggling or falling behind.
• Work submitted will be your own, with appropriate references to sources and resources used. Academic dishonesty will not be tolerated, and will be passed along to the appropriate administrative or judicial entity.

A note on attribution, code, and the culture of programming...

The "culture" surrounding programming is one that encourages sharing and collaboration. Open-source software, online communities such as StackOverflow, GitHub/Gist, and the fast-paced nature of the technology world have all led to a vast collection of places where programmers can quickly and easily get help in solving common and not-so-common problems. This is a fantastic and vital part of being a 'programmer', and I encourage you to use and contribute to these communities.

This being said, there are a few important guidelines that MUST be followed in order to strike a balance between collaboration and academic integrity:

• You must provide attribution for ALL ideas you have consumed from sources outside of your own scope of knowledge. This may be done in a variety of ways, but must be noted explicitly - either via code comments, a note at the time of submission, or via some other mechanism that clearly indicates:
• What part of your work, specifically, has been influenced by an outside source, and how.
• What the outside source was - whether another student, a web site, other code, etc.
• Outside contributions to your work must not comprise a substantial portion of the solution to the problem or module you are working on. Your work must be your own and your Google or interpersonal skills, no matter how sophisticated, do not equate to mastery of course material!
• If you provide assistance to others (in individual projects), or other groups (in group work), you must share this information with the instructor. Helping your fellow students learn is an essential and valuable part of the learning experience. However, providing "too much" help by providing answers or clues that substantially undermine the challenge and learning objectives of an assignment is not helpful and, in fact, a violation of academic integrity. Therefore:
• If you assist another student in class, notify the instructor via email or some other mechanism, indicating who was helped, when, and what the nature of the help was.
• It is also expected (per the 'attribution' paragraph above), that the student who was assisted will also indicate that they were assisted.
• Those helping or being helped should feel secure in the knowledge that the exchange of assistance will not negatively or positively impact their grade on the assignment or work in question.

Here's an example of quoting your sources : a lot of the preceding language in this syllabus is from Andrew Cencini's Fall 2019 edition of this course. ("Hi Andrew!")

The overall course grade will be the average of

• a single homework grade for the semester,
• a midterm project grade, and

The homework grade is based on the number of assignments completed and submitted on time.

Project grades will be based on

• how well the project demonstrates your understanding of the material,
• the overall difficulty of the problem,
• the quality and clarity of your code,
• documentation, tests, bibliography, and examples of running it (screenshots, input & output),
• and a written narrative describing what you did, what tools and resources you used.

If circumstances outside of your control - illness, technology issues, your dog ate your homework - get in the way, please do let me know, and we will try to work things out.

## schedule

This is what I have in mind for our schedule of topics but may well change as we go along.

The specifics will be posted in assignments and notes ; this is just an overview and summary.

       Mo | Tu | We | Th | Fr
Sep        1         3     getting started
8        10     input, output, graphics
15        17     strings, lists, functions
22        24     decisions; start group projects
29         1     group projects; simulations;
Oct        6         8     classes, dicts, recursion; start projects
13        15     final project


### planned assignments

   Thu Sep  3        1. umber, jupyter, unix shell lab, about you, hello world

Mon      8        2. chap 2, 3; interest rates & temp conversion
Thu     10        3. python on laptop; zelle graphics; LAB - Sol Levitt

Mon     14        4. chap 5: strings, lists, files : ciphers, debug, docs
Thu     17        5. chap 6: functions, ant song, more debug & docs

Mon     23        6. chap 7,8: decisions, booleans
Thu     24        7. group projects check-in, STOP guess word game

Mon     28        8. group projects due
Thu Oct  1        9. chap 9 : LAB - craps simulation ; propose final project

Mon      5       10. chap 10,11: classes & data collections; cards
Thu      8       11. chap 12: recursion; LAB - peg solitaire

Mon     13       12. final project check-in
Thu     15       13. final project due