Computational Thinking
The CT@VT course, also known as “Introduction to Computational Thinking”, is an introductory computing course aimed at non-computing majors who have no prior computing experience. The course emphasizes a few major topics in computing: Algorithms, Abstractions, and Social Impacts. The entire experience is contextualized through real-world data science, to maximize students’ perception of the authenticity of the learning experience. Although the course teaches some basic programming, the curriculum goes beyond coding to attempt to teach computational thinking.
Try it Yourself!
Interested in checking out our course? Visit the example course on Canvas!
Get the Materials!
Want to use our materials? Contact Dennis Kafura at kafura@cs.vt.edu!
More Information
The Computational Thinking curriculum is organized around several key ideas and practices.
-
Active learning: Each class engages students in discussion, algorithm development, or programming. Students prepare for this work by completing a reading quiz before each class. This quiz ensures minimal awareness of the concepts to be actively explored in class. A short 10-15 lecture at the beginning of class reinforces the concepts allows the new material to be placed in the context of the overall course. While working in class the course staff seeks to monitor the progress of work, helping students past sticking points, and resolving misconceptions as quickly as possible.
-
Collaboration: Students are assigned into small (4-6 person) teams that are called “cohorts”. Cohort members are seated together and are strongly encouraged to act as a small learning community - helping and encouraging each other. Each cohort writes, and the members sign, a “contract” stating the expectations of the cohort’s members. The cohorts are multi-disciplinary; whenever possible no two students in a cohort are from the same academic major. The blending of disciplinary prospects allows students to benefit from the intuitions and motifs of different academic majors while they are engaged in active learning.
- Project-oriented: Projects are the primary means by which students demonstrate mastery of the course concepts and skills. In each project the student selects the data that they will use, defines the question(s) to be answered using this data, and employs the appropriate tools or programming to answer the questions. The answers to the questions are the student interpretations of quantitative measures (e.g. means) or as visualizations (e.g., hisograms). There are four project across the semester. The class time in the last three weeks of the course are devoted to the final project. The final project is presented in the form of a 5-6 video that is graded by a published rubric.
- Core Concepts: The course is grounded in the student of two primary computing concepts: abstraction and algorithms. Abstraction enables a student to “see the world” as a collection of information properties relevant to needs of some problem-solver. By constructing algorithms, students develop the ability to automatically manipulate the abstraction to answer questions about the real world. The following “table of computational elements” concretely defines the computing concepts encountered in the class. In addition, students consider the social impacts of computing by examining how computing technology effects the lives of people and identifying apprpriate ethical principles that could be used to justify alternative uses of the technology.
- Spiral Design: The material in the course is unfolded in a spiral fashion. This organization allows students to see the core ideas - abstraction, algorithms, social impacts - at progressively more refined stages. The spiral structure is tied to the projects. Each cycle in the spiral ends with a (or the last cycle in two) project. An example of the progressive nature of the student’s learning is illustrated by the projects: in the first (nano) project the student uses the algorithms embedded in a visualization tool; in the second (micro) project the student writes comparable algorithms in a block-based language. The in the final two projects (mini and final) the students write similar algorithms in Python.
-
Data Science context: A data science context is used to sustain student motivation. A wide variety data sets is available in the CORGIS library so that students can find data that is relevant to their interests or career needs. These data sets are used throughout the course - in classwork, homework, and the projects. Through student feedback we know that this approach is well-received by the students.
-
Scaffolded Tools: Learning about computing and programming can seem a daunting challenge, especially to non-STEM students who have no prior experience and have a tenuous grasp on quantitative methods. Through the spiral design and carefully crafted tools the learning is incremental, allowing students to build skill and confidence as they proceed. A critical technology used in the course is BlockPy. Using BlockPy students begin programming in a syntactically safe block-based languge and then gradually progress to programming in a carefully selected sub-set of Python.
Learning Objectives
This course addresses four key objectives in the Quantitative and Computational Thinking domain.
- Explain the application of computational or quantitative thinking across multiple knowledge domains.
- Apply the foundational principles of computational or quantitative thinking to frame a question and devise a solution in a particular field of study.
- Identify the impacts of computing and information technology on humanity.
- Construct a model based on computational methods to analyze complex or large-scale phenomenon.
The course explores the social impacts of computational systems using a number of case studies that demonstrate how computation creates new capabilities or influences the decision-making of people, organizations, and governments. Students are asked to identify the potential stakeholders who are affected in the case study and consider the economic, professional, personal, or organizational pressures that may influence their actions. This aspect of the course is intended to address two learning indicators.
- Identify ethical issues in a complex context.
- Articulate and defend positions on ethical issues in a way that is both reasoned and informed by the complexities of those situations.
Testimonials
- “I really enjoyed this course. I felt very respected by my instructors and that they really wanted me to succeed. I really enjoyed how this class was structured with a real focus on learning and not just testing. It allowed me to not have to feel penalized by mistakes and that I really had the freedom to learn without the pressures of exams.”
- “I thoroughly enjoyed this course. I was happy to come to class every Tuesday and Thursday, and I really enjoyed working with my cohort. The work that was done was challenging, but completely doable. The teachers and TA’s offered great help, and answered every question that I had to the fullest.”
- “Computational Thinking might not be my forte, but I sure learned a lot about it throughout this course!”
- “This course is awesome and I have recommended it to all my friends. I felt this course exemplifies how education should work, engaging people in a way that is fun and not too stressful, while still teaching a ton of information.”
- “I originally signed up for it to fulfill Area 5, or one of my Area 5, and also it sounded like fun…I got an email about this class and it sounded really fun, and instead of just fulfilling an Area 5, it was like, “You get to do a project that is in your own major,” and all this kind of stuff you get to do is very individual-based. I really liked the appeal of that so I ended up switching into this one. I feel like it’s good skills to have in an increasingly technological society.”
- “I liked it more than I thought I would!! And the staff was very very helpful.”