CSC107 Creative Computing

Overview

An introduction to computer science and programming, motivated by examples from digital art, music and sound processing, and generation and manipulation of web files. Introduces students to algorithms, basic data structures, and programming techniques. All computing for the course will be done in the Python programming language.

Required Text

Introduction to Computing and Programming in Python: A Multimedia Approach, 4th Edition, Mark Guzdial & Barbara Ericson, Prentice Hall, 2015.

Student Learning Outcomes

You will learn to program in Python. This requires the learning of the syntax and semantics of the Python programming language, to enable you to solve problems in an endless array of subjects and disciplines. This course focuses on writing code to address challenges in science and engineering, so we’ll cover:

  • fundamental components and operation of a computer
  • data types (integers, floats, strings, lists, dictionaries)
  • repetition and selection
  • files, both reading and writing
  • breaking down complex problems into computational steps
  • using this skills creatively, to make unique visual and audio collages

Common Curriculum: Justice, Equity, Identity and Diversity (JEID)

Algorithms and computational systems increasingly shape the world we live in. Advances in AI and machine learning are in the news on a daily basis. But there is also a growing awareness of the limitations and dangers of these systems. In particular, they often promote biases and inequalities. For example, facial recognition software has been shown to work much less accurately for people of color than for white people, an AI hiring algorithm was found to reject female applicants for technical positions at a higher rate than male applicants, and search results can be full of racial stereotypes.

As an introduction to computer science, this course is the first step that students take to go from being a user of computing to becoming a creator of computing tools. Our goal is to ensure that they understand the many ways in which their choices, as programmers, can include or exclude users, can benefit or harm users.

Throughout the term, students will practice technical concepts by completing programming assignments that are couched in real-world application scenarios. The scenarios will be picked to highlight ways in which the programmer’s implementation decisions impact other people’s experiences, often reinforcing biases and disadvantaging already minoritized groups. Some examples:

  • How the design of algorithms can have societal impact
  • Tne importance of robust testing before system deployment
  • How machine learning can encode systemic bias

Common Curriculum: Perspectives

Data & Quantitative Reasoning (DQR)

Using algorithms, students will implement programs to address scientific challenges and problems. Examples include:

  • AUtomatically solving differential equations
  • Using data to arrive at questions and hypotheses
  • Systematically solving problems
  • Graphing as a way of answering challenges

Students will then critically engage with the results, to understand that the answer is only ever as good as the algorithm that is implemented. The ethics of computation will be discussed throughout the class.

Engineering, Technology & Society (ETS)

Students will learn to programmatically break down larger problems into a series of smaller, computational steps (creating an algorithm). The impact of these algorithms on individuals and societies will be explored. Algorithms will be implemented in Python, to show how problems are solved, and also to more deeply understand the nature of computers themselves. Reference will be made to the ways algorithms can be used both positively and negatively, and that it is the job of the programmer to consider the implications of any code they create.

Assignments & Grades

There are numerous types of assignments for this course - programming is a very hands-on activity and the more you do, and the different ways you think about it, the better you will become at it.

Working together is a great way to more fully explore the concepts of the course. At the same time, independent work is also critical so that you fully understand the material on your own. Thus assignments are designed to balance opportunities to work together and individually. In lab, I am happy for you to work together. PLEASE indicate whom you worked with on your lab cover sheet. It is NEVER acceptable to collaborate for homework assignments.

There will be weekly homework exercises. Homework exercises are for you to play with and reinforce the concepts we talk about in class. Each person must hand in his or her own solution. Where these exercises require python programs, you MUST hand in working code. If a section of code does not work for you, it is ok to comment it out. This will be explained more fully at the appropriate time.

There will be two programming projects. These projects will combine different programming concepts and multimedia techniques, and provide opportunities for creativity. Each student must complete his or her own programming project. You may discuss algorithms with each other, but you may NOT look at each other’s code. To complete these projects on time, it is critical that you start each as early as possible and get help as soon as possible when needed.

At no point in the course, for assignments, labs or projects, may you use code you find from online resources such as stack overflow.

There will be labs where you will work on exercises in-class and receive help from your peers and myself.

There will be one in-class midterm exam, and a final exam that must be completed individually. There may be “pop quizzes” and independent in-class exercises. The intent is not that these be “punitive” in any way, but rather motivate you to keep up and provide feedback on your progress. Learning to program is like learning a foreign language: if you do not speak it during some part of everyday your progress will be quite slow.

Finally, class attendance and participation is a critical component of the course. Please discuss any necessary absences with me (see below).

Handing in assignments: For both homework exercises and programming projects, you will turn in a hard copy of the source code and submit the program electronically using the NEXUS website.

Whether you work on your own computer or on the system at Union, ultimately your programming projects and homework exercises must - so be sure to test it before handing it in. Labs and in-class exercises will also be submitted on NEXUS.