COMPFOR 101

The Transistor Disruption: How a Tiny Tool Transforms Society and Science

Meets the LSA Distribution for Math and Symbolic Analysis (MSA) 

Modern humans live in two worlds – the physical and the digital – but considering the arc of human history this duality emerged in a flash.  What happened?  In large part, a simple switching device invented in the 1940s – the transistor – is responsible for disrupting how we live and how science advances.  Transistors shrank exponentially in both size and cost since their creation, to the point where a single computer chip today has 15 times as many transistors as there are people on planet Earth.  

This introductory survey course reveals The Pattern on the Stone, the foundational elements of digital computing explained in a book of the same name by Danny Hillis, a pioneer in computing education and parallel computing.  Students are introduced to logic gates and their hierarchical organization to create computing circuits and communication networks.  Topics surveyed may include: early analog and human computers, systems and models, interoperability and standards, scaling and parallel computing, encryption and cryptography, heuristics and algorithms, Turing machines, machine learning, quantum computing, and the politics of computer chips.  Along the way, Michigan’s roles in development of computing will be highlighted.  The close relationship between computing and mathematics is revealed through a few specific examples such as the sine, power-law, and sigmoid functions.  Students will learn through readings, in-class exercises and discussions, quizzes aimed at reinforcing readings, and essays.  No prior experience with computing is needed, but prior experience with the digital is a given.

COMPFOR 111

Computation’s Impact on Justice: From Text to the Web.

Meets the LSA Distribution for Interdisciplinary (ID) and Quantitative Reasoning (QR/1)

Computing has had a significant global impact. To study and critique that impact, students need to understand the fundamentals of computing, framed in this course as manipulation of text, creation of algorithms, and generation and analysis of Web pages. Students learn computational concepts, write programs with a focus on purpose (not memorizing syntax), and develop the skills to understand and communicate with software developers. Students will explore the justice implications of computing concepts, algorithms, participants, programs, and skills. The course takes a critical stance on computing.


Students program in this course. Some of the programming is in special-purpose languages (called teaspoon languages) designed to be easy to learn and conceptually focused. Most student programming is in Snap, a programming language in which many common programming errors are impossible. No prior computing background is expected, and no additional mathematics knowledge besides basic high school algebra is necessary. Lecture/lab sessions will be structured around active learning, including peer instruction (which will be used to determine participation), live coding, and group-based practice in programming activities. There are bi-weekly on-line, open-book/note/Web quizzes, with no exams. Most weeks will include a reading (or video) with a written reflection. Most weeks will have a homework activity that will involve some kind of programming activity in a scaffolded programming environment, like generating computational poetry, building a chatbot, training a gesture recognizer, and downloading a log file and detecting trends in it. There are three projects, such as: Building a game in Twine, generating a website from a database using a template, and visualizing data. There are several ebook-based homeworks where students transfer knowledge from in-class scaffolded programming to professional text programming (e.g., in Python).

 

Computing has had a significant global impact. To study and critique that impact, students need to understand the fundamentals of computing, framed in this course as manipulation of text, creation of algorithms, and generation and analysis of Web pages. Students learn computational concepts, write programs with a focus on purpose (not memorizing syntax), and develop the skills to understand and communicate with software developers. The computing concepts, programs, and skills will be framed around a goal for justice and taking a critical stance on computing.

This course involves students programming in Snap, a programming language in which many common programming errors are impossible. No prior computing background is expected, and no additional mathematics knowledge besides basic algebra is necessary. Lecture/lab sessions will be structured around active learning, including peer instruction (which will be used to determine participation), live coding, and group-based practice in programming activities. There will be weekly on-line, open-book/note/Web quizzes, with no midterm. Some weeks will include a reading with a written reflection. Most weeks will have a homework activity that will involve some kind of programming activity in a scaffolded programming environment, like generating computational poetry, building a chatbot, and downloading a log file and detecting trends in it. Three projects, such as: Building a game in Twine, generating a website from a database using a template, visualizing data, and training a recognizer – twice, once to generate a biased result purposefully. Every other week ebook-based homework where students to support transfer from in-class scaffolded programming to professional text programming.

COMPFOR 121

Computing for Creative Expression.

Meets the LSA Distribution for Creative Expression (CE) and Quantitative Reasoning (QR/1)

Computing provides new ways for humans to express themselves, interact, and communicate. Students in this course study the ways in which computing has been used to create and express, and then learn how to use computation to create pictures, sounds, videogames, language, and Web pages. They will learn how to generate and control these modalities through user interactivity in order to blend these in video games and Web pages. Students will learn computational concepts and write programs with a focus on purpose and meaning.


Students program in this course. Some of the programming is in special-purpose languages (called teaspoon languages) designed to be easy to learn and conceptually focused. Most student programming is in Snap, a programming language in which many common programming errors are impossible. No prior computing background is expected, and no additional mathematics knowledge besides basic high school algebra is necessary. Lecture/lab sessions will be structured around active learning, including peer instruction (which will be used to determine participation), live coding, and group-based practice in programming activities. There are bi-weekly on-line, open-book/note/Web quizzes, with no midterm or final exam. Some weeks will include a reading (or video) with a written reflection. Students will design/sketch, and implement a computational artifact from that unit. These will be shared in an on-line gallery, and students will be required to provide feedback on each others’ artifacts. There will be homework/project activities involving some kind of programming activity in a scaffolded programming environment, like generating aural scenes,building a chatbot, inventing image filters, making dynamic art, and creating a videogame and Web page. Students will do Ebook activities to transfer knowledge from in-class scaffolded programming to professional text programming.

Computing provides new ways for humans to express themselves, interact, and communicate. Students in this course study the ways in which computing has been used to create and express, and then learn how to use computation to create pictures, language, and sounds. They will learn how to generate and control these modalities through user interactivity in order to blend these in video games and new Web structures. Students will learn computational concepts and write programs with a focus on purpose and meaning.

This course involves students programming in Snap, a programming language in which many common programming errors are impossible. No prior computing background is expected, and no additional mathematics knowledge besides basic algebra is necessary. Lecture/lab sessions will be structured around active learning, including peer instruction (which will be used to determine participation), live coding, and group-based practice in programming activities. There will be bi-weekly on-line, open-book/note/Web quizzes, with no midterm or final exam. Some weeks will include a reading with a written reflection. At the end of each unit, students will design/sketch, then implement a computational artifact from that unit. These will be shared in an on-line gallery, and students will be required to provide feedback on each others’ artifacts. Every other week will have a homework/project activity that will involve some kind of programming activity in a scaffolded programming environment, like generating computational poetry, building a chatbot, inventing image filters, inventing new musical instruments, and creating a videogame and Web page. Ebook activities where students transfer knowledge from in-class scaffolded programming to professional text programming.

Computing provides new ways for humans to express themselves, interact, and communicate. Students in this course study the ways in which computing has been used to create and express, and then learn how to use computation to create pictures, language, and sounds. They will learn how to generate and control these modalities through user interactivity in order to blend these in video games and new Web structures. Students will learn computational concepts and write programs with a focus on purpose and meaning.

This course involves students programming in Snap, a programming language in which many common programming errors are impossible. No prior computing background is expected, and no additional mathematics knowledge besides basic algebra is necessary. Lecture/lab sessions will be structured around active learning, including peer instruction (which will be used to determine participation), live coding, and group-based practice in programming activities. There will be bi-weekly on-line, open-book/note/Web quizzes, with no midterm or final exam. Some weeks will include a reading with a written reflection. At the end of each unit, students will design/sketch, then implement a computational artifact from that unit. These will be shared in an on-line gallery, and students will be required to provide feedback on each others’ artifacts. Every other week will have a homework/project activity that will involve some kind of programming activity in a scaffolded programming environment, like generating computational poetry, building a chatbot, inventing image filters, inventing new musical instruments, and creating a videogame and Web page. Ebook activities where students transfer knowledge from in-class scaffolded programming to professional text programming.

Student Project Examples

The short video illustrates the concepts students learned in Fall 2022. Most of the students had no prior programming experience. Students learned how to use computation to create pictures, sounds, videogames, and language, and wrote programs with a focus on purpose and meaning.

Computing provides new ways for humans to express themselves, interact, and communicate. Students in this course study the ways in which computing has been used to create and express, and then learn how to use computation to create pictures, language, and sounds. They will learn how to generate and control these modalities through user interactivity in order to blend these in video games and new Web structures. Students will learn computational concepts and write programs with a focus on purpose and meaning.

This course involves students programming in Snap, a programming language in which many common programming errors are impossible. No prior computing background is expected, and no additional mathematics knowledge besides basic algebra is necessary. Lecture/lab sessions will be structured around active learning, including peer instruction (which will be used to determine participation), live coding, and group-based practice in programming activities. There will be bi-weekly on-line, open-book/note/Web quizzes, with no midterm or final exam. Some weeks will include a reading with a written reflection. At the end of each unit, students will design/sketch, then implement a computational artifact from that unit. These will be shared in an on-line gallery, and students will be required to provide feedback on each others’ artifacts. Every other week will have a homework/project activity that will involve some kind of programming activity in a scaffolded programming environment, like generating computational poetry, building a chatbot, inventing image filters, inventing new musical instruments, and creating a videogame and Web page. Ebook activities where students transfer knowledge from in-class scaffolded programming to professional text programming.

COMPFOR 131
Python Programming for the Sciences

Meets the LSA Distribution for Math and Symbolic Analysis (MSA) and Quantitative Reasoning (QR/1)

Computation plays an increasingly important role in all scientific disciplines, and a general working knowledge of programming is a critical tool for scientists and engineers. Additionally, learning how to translate basic mathematical and programmatic concepts into algorithms is an important problem solving and reasoning skill. This course is designed to address these issues and introduce early undergraduate students to programming concepts through the use of the Python programming language. 


Instructor-led presentations will introduce basic programming concepts that are bolstered by student work on structured coding exercises designed to introduce students to basic programming concepts that can be applied across programming languages and computing environments. These exercises are gamified to incentivize students to master each concept at their own pace and depth. The course is organized as a working laboratory with students working individually and in teams on instructor driven exercises with the possibility of student initiated projects. This course introduces students to the Python programming language using a hands-on,  interactive format.  Students gain foundational programming literacy skills in topical areas that  include: numerical analysis, the structure, organization and manipulation of data, sound coding practices, and visualization of scientific information.