Spring 2021
-->

# 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.

## schedule

This is a tentative schedule which is subject to change. The specifics will be posted in assignments and notes as we go along.

 Feb         18
22   25       umber, jupyter, shell, hello_world
Mar     1    4       chap 2, 3 : strings, lists
8            chap 4 : graphics - sol lewitt lab
15   18       chap 5 : strings, lists, files
22   25       chap 6 : functions, ant song
29    1       chap 7 & 8 : decisions & loops
Apr          8
12   15       chap 9: simulation ; start group project
19   22       group projects : STOP  game
26            chap 10 : defining objects
May     3    6       chap 11 : data structures ; start final project
10   13       chap 12 : recursion
17   20       final project - first draft
24   27       final project - final draft


## format

The course will consist of

• Twice weekly online classes.
• Weekly reading and coding assignments - about a dozen over the semester. Many of these will be from Zelle's textbook; a number will also include a self evaluation describing your progress.
• Two coding projects: a group project near the middle of the course and final project chosen by each student.
• Regular tutoring and office hours discuss the material, ask questions, and get help in zoom meetings and slack conversations.
• We'll rely heavily on the "Python Programming" textbook, along with additional online materials.
• 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.

As a 4 credit course, you should expect to spend roughly 12 hours of time per week on this course, including class time.

• 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.