Computing has changed the world in profound ways. It has opened up wonderful new ways for people to connect, design, research, play, create, and express themselves. However, just using a computer is only a small part of the picture. The real transformative and empowering experience comes when one learns how to program the computer, to translate ideas into code.
This course will teach students how to do exactly that, using Python, one of the most taught introductory programming languages at top US universities 1. Python is also one of the top programming languages desired in the high-tech industry 2. It's a general-purpose, high-level language, emphasizing readability, conciseness, and compact programs 3.
But this course is far more than just learning to program. We'll focus on some of the "Big Ideas" of computing, such as abstraction, design, recursion, concurrency, simulations, and the limits of computation. We'll show some beautiful applications of computing that have changed the world, talk about the history of computing, and where it will go in the future. Throughout the course, relevance will be emphasized: relevance to the student and to society. As an example, the final project will be completely of the students' choosing, on a topic most interesting to them. The overarching theme is to expose students to the beauty and joy of computing.
Key features in a learner-centered programming language 4
A language which can provide a great creative and productive programming experience on day-one
A language that is applicable and useful both in a web and desktop environment and context
A language providing knowledge and experience which is relevant and potentially marketable in the job market
A language with a welcoming, vibrant programmer community
Python meets all of these! (see Why Python? for more)
Key Computer Science "Big Ideas" explored in this course are: Computing as a creative human activity, Levels of abstraction, Dealing with data (Big and small), Algorithms and heuristics, Programming, Computing devices and the Internet, The impacts of computing on our lives and on society.
Key Computer Science practices and skills emphasized in the course are: Connecting computing to the real world, Creating innovative computer artifacts, Abstracting, Analyzing and evaluating problems and artifacts, Communicating with the aid of computing, Collaborating effectively.
Finally, this course has the potential to serve as a stepping stone for a new College Board Advanced Placement CS course (AP Computer Science Principles), which could have significant national impact.
(See Computer Science Principles - CSP)
Big Idea 1: Creativity. Computing is a creative activity.
Big Idea 2: Abstraction. Abstraction reduces information and detail to facilitate focus on relevant concepts.
Big Idea 3: Data and information. Data and information facilitate the creation of knowledge.
Big Idea 4: Algorithms. Algorithms are used to develop and express solutions to computational problems.
Big Idea 5: Programming. Programming enables problem solving, human expression, and creation of knowledge.
Big Idea 6: The Internet. The Internet pervades modern computing.
Big Idea 7: Global Impact. Computing has global effects on individuals and society.
Practice 1: Connecting computing (Making connections to and from the real world; making connections within CS)
Practice 2: Creating computational artifacts
Practice 3: Abstracting
Practice 4: Analyzing problems and artifacts
Practice 5: Communicating
Practice 6: Collaborating
Use computing tools and techniques to create and analyze computational artifacts.
Use computing tools, techniques and programming for creative expression.
Describe the combination of abstractions used to represent data, and use multiple levels of abstraction in computation.
Develop computational abstractions.
Use computers and programs to process information to gain insight and knowledge.
Use models and simulations to raise and answer questions.
Develop algorithms to solve computational problems.
Connect problems and potential algorithmic solutions.
Review other students' code, predict the end results, and critique the work.
Use abstraction to manage complexity in programs.
Employ appropriate mathematical and logical concepts in programming.
Evaluate programs for correctness.
Connect computing with innovations in other fields.
Connect computing within economic, social, and cultural contexts.
1 - Per a survey published at the Communications of the ACM (Association of Computing Machinery).
- see also Why not Java?
2 - Per the annual Spectrum Survey of the IEEE (Institute of Electrical and Electronics Engineers).
3 - "The most important thing to understand: The choice of programming language is far from the most important thing in designing a course...For a course, what you want is a crystal-clear language that highlights the computer science ideas without hiding them in a cloud of syntax or library details." - from Brian Harvey's comments on Scheme vs. Python (vs. Java, C, C++, etc.).
4 - Inspired by a blog entry on Trinket.