This year IMACS celebrates 20 years of educating talented, young students in mathematics and computer science. In all this time, we have never wavered in our philosophy that providing children with a deep and strong foundation in logical reasoning would enable them to take on virtually any intellectual pursuit with ease and confidence.
In mathematics, we continue to receive regular confirmation of our approach. Recent IMACS graduates often write to tell us of how advanced they are compared to their college math classmates, even at elite universities.
Non-IMACS students who were so deftly skilled at applying formulas and algorithms in high school suddenly found themselves in college turning to our graduates for help in proving why these formulas and algorithms worked.
It seems this phenomenon is steadily growing in computer science.
As strong advocates of K-12 computer science education, we are heartened by the broad realization that teaching children about this amazing and empowering field is of great importance. At the same time, IMACS urges parents, educators, and policy makers to understand the difference between coding and computational thinking, as well as the consequences of promoting one path over the other.
As CS education decisions are made, we must not repeat the ruinous mistakes of math education policy lest we end up with computationally illiterate generation after generation as well.
Learning to Code Isn’t Enough
In a recent article titled Learning to Code Isn’t Enough, computer scientist Shuchi Grover offered the most articulate and convincing argument we’ve read on the shortcomings of the “learn to code” craze. In particular, Ms. Grover notes that the cognitive benefits gained through the process of good programming often fail to develop in online coding academies:
“Decades of research with children suggests that young learners who may be programming don’t necessarily learn problem solving well, and many, in fact, struggle with algorithmic concepts especially if they are left to tinker in programming environments, or if the learning is not scaffolded and designed using the right problems and pedagogies.”
“While the fun features afforded by these programming environments make for great engagement, they often draw away focus to the artifacts, many of which employ relatively thin use of computational thinking.”
The IMACS Approach
At IMACS, we have taken a considerably different approach to teaching computer science than the trendy, new organizations. Most importantly, we focus on universal thinking and problem-solving skills. That’s really what any programming exercise comes down to: thinking clearly about how to solve a particular problem. As Ms. Grover points out:
“If the goal is to develop robust thinking skills while kids are being creative, collaborative, participatory and all that other good stuff, the focus of the learning needs to go beyond the tool, the syntax of a programming language and even the work products to the deeper thinking skills.”
In our introductory computer science classes, IMACS deliberately uses programming languages that have trivial amounts of easily-mastered syntax. As a result, our students are able to concentrate their mental energy on learning the core concepts in computer science instead of on memorizing rules of syntax.
Rather than focusing narrowly on ideas that only apply to a specific environment, IMACS classes develop computational thinking skills that can be applied to any programming situation.
Learning to Think with Logo
Children may begin taking IMACS Computer Enrichment classes as early as 3rd grade. Computer Enrichment uses Logo, an easy-to-learn language with a strong graphical component, to introduce students to programming ideas. Using a language with graphical components allows even our youngest students to understand and master advanced programming and problem-solving techniques.
IMACS Computer Enrichment places a heavy emphasis on computational thinking — thinking about logic, thinking about processes, thinking about good design. (All this takes place in a fun-filled class that incorporates interesting puzzles and problems.) A working program is not the main goal; rather, it is to understand how and why a program works or doesn’t.
With a firm foundation rooted in computational thinking, IMACS students as young as 11 or 12 are well-prepared to move up to our university-level classes in computer science.
University-Level Computer Science
The IMACS curriculum continues with our Modern Computer Science track comprised of three university-level classes. The first course, UCS1, teaches the fundamental principles of computer science using Scheme. Scheme’s expressive yet simple syntax allows students to focus on learning universal concepts applicable in any programming language, even future languages not yet invented.
The second course, UCS2, begins in Scheme, but by the end students are programming in Haskell and Python. One reason that we introduced these additional languages into UCS2 was to show our students just how easy it is for them to learn new languages given their solid foundation.
The third course is our College Board-approved Advanced Placement Computer Science course in Java. This summer IMACS will be updating our APCS course with a new section on how to write Android phone apps. Although app development is not part of the AP® Computer Science curriculum, the new component will allow IMACS students to gain experience in developing real applications.
The IMACS Advantage
While it sounds impressive to say that students who complete the entire IMACS computer science curriculum will graduate with significant experience in five diverse programming languages, what matters is that they leave us with something even more highly-prized: the ability to succeed in virtually any coding environment.
Incidentally, whether or not IMACS graduates go on to study or pursue careers in computer-related fields, they gain an unfair advantage over their peers throughout their lifetimes thanks to their unmatched ability to dissect problems and articulate solutions.