Once upon a time, there was a bright student who first came to IMACS when he was already in high school. He was interested in learning to program and had heard high praise for our University Computer Science courses. The class began smoothly as teacher and pupil progressed through the principles of computational thinking. This student, who was used to conquering schoolwork with his brain tied behind his back, slayed the early exercises with ease. As the assignments quickly became more challenging, however, he found himself unaccustomed to the effort of intellectual struggle. One day, our earnest student declared to his IMACS instructor that a certain programming problem was simply impossible to solve! Our wise and experienced teacher considered this student with a measured gaze and pointed out, “But you’ve only thought about it for three minutes.” The student, quite politely, seriously, and honestly replied, “Well, yeah.” If only he had started IMACS when he was younger. The moral of the story: The earlier the experience of true intellectual challenge, the stronger the will of the mind to persevere. (In other words, enroll your elementary school child in IMACS today!)
This month the IMACS Blog caught up with Azzara Nincevic, who has been a star student at IMACS for seven years now. Azzara enjoys reading, drawing, and classical ballet. Although she dances at least 12 hours per week and performs throughout the year, she always finds time for IMACS.
“When I began IMACS in first grade, I immediately loved it.” Azzara says. “Having taken an interest in math, I quickly learned the traditional material and was looking for more challenging enrichment. When I attended class at IMACS, all of the problems were thought-provoking.”
As a member of her school’s math team, Azzara attends competitions such as MATHCOUNTS and Mu Alpha Theta where her IMACS background has been an invaluable asset. As Azzara describes it, “The IMACS curriculum helped me to develop logical thinking skills and the ability to quickly solve math problems, which are key to succeeding at math competitions.”
“With the preparation that IMACS gave me, I was able to score a 5 on the AP® Computer Science exam as a seventh grader.”
While Azzara’s achievements in mathematics and ballet, by themselves, are enough to impress anyone, it’s her recent performance on the AP® Computer Science A exam that readers will recognize as a rare feat. Soon after starting IMACS Math Enrichment program, Azzara enrolled in our Computer Enrichment & Virtual Robotics class where she developed a great interest in programming. Over the years, she continued with IMACS University Computer Science (UCS) track, which culminates in our AP® Computer Science: Java Programming course.
AP® exams are typically administered to high school students, but at the time that Azzara was ready for APCS, she was only just entering seventh grade. That didn’t deter her. “After inquiring, my mom and I found out that there is no minimum age requirement for an AP® exam, so I registered. With the preparation that IMACS gave me, I was able to score a 5 on the AP® Computer Science exam as a seventh grader.”
With such a busy schedule, Azzara appreciates that one of the greatest benefits of IMACS is that the computer science and logic programs are accessible online and self-paced. “I was able to excel at my own pace and access the IMACS curriculum anytime and anywhere.”
What does the future hold for Azzara? “I am entering the eighth grade with a greater passion for and interest in math and computer science. IMACS made me realize that I would like to pursue computer science in college and after. The fundamental skills that I have learned in the UCS courses and the logical thinking skills I have learned in the Math Enrichment and Mathematical Logic courses give me the advantage I need to be successful. As such, I plan to continue with IMACS in the upcoming years.”
UPDATE, July 28, 2014: IMACS has completed the update of our AP® Computer Science: Java Programming course to include eight fully-elaborated labs that far exceed the minimum requirements of the College Board. IMACS’ Be Prepared for the AP® Computer Science Exam online course has been updated as well. Students who are enrolled directly through eIMACS in our AP® Computer Science: Java Programming online course receive free access to the Be Prepared course.
Following a recent review of the AP® Computer Science A course and exam, the College Board has decided to replace its case study requirement with a requirement to complete a minimum of 20 hours of hands-on lab experiences. This change, which will take effect for the 2014-2015 school year, is being implemented to more effectively support student learning of core concepts in computer science. IMACS continues to follow closely all communications from the College Board, as well as discussions within the APCS community, on the forthcoming changes and will act accordingly.
From the beginning, IMACS’s philosophy has been to emphasize computational thinking and mastery of foundational ideas in computer science. This approach is reflected in how our Curriculum Development Group has meticulously designed our CS courses and, more importantly, in the success our CS graduates find in college, graduate school and at top tech companies. As such, IMACS fully expects that our AP® Computer Science: Java Programming course will continue to exceed, as it always has, all of the College Board’s requirements and remain College Board-approved.
GridWorld Case Study
Since the 2007-2008 school year, AP® Computer Science A has used the GridWorld Case Study to reinforce lessons on object-oriented programming.* GridWorld provides Java code designed to simulate the behavior of objects (Rock, Flower, Bug and Critter) in a grid. Ground rules such as Rocks cannot move, Critters eat Flowers and Bugs move forward and turn 45 degrees if blocked are part of the initial set-up. Given these starting parameters, students then write additional code that extends these various classes of objects. A student’s understanding of computer science concepts in the context of the GridWorld code is then tested on the AP exam with one free-response question and a handful of multiple choice questions.
College Curriculum Study
In 2011, the College Board undertook a College Curriculum Study in which institutions of higher education were surveyed about the AP® Computer Science A course case study.^ Of the 117 institutions that responded, 91% said they were not likely to change their credit/placement policy for AP® CS A if questions on the case study were not included in the exam. About two-thirds of respondents rated the inclusion of a case study as not important or only somewhat important.
“Although case studies have important benefits, their size and complexity have constrained the AP® CS program in adapting to new course content and pedagogy.”
— AP® CS A Exploration of a Change from GridWorld to Labs
Clearly, GridWorld is now past its prime. As the College Board noted on its website, the case study requirement in AP® Computer Science A needed updating “to stay aligned with the most recent practices in the continually changing field of computer science.”
Labs, Labs, and More Labs
This March, the College Board plans to release details of three sample AP® Computer Science A labs as examples of how the new lab experience requirement may be implemented. One expectation is that their shorter length will make the labs easier to integrate into the course curriculum throughout the school year. Teachers and curriculum developers will have the flexibility to include sample labs or other comparable labs at points they feel are most relevant and pedagogically effective. It is also expected that the sample labs will be more connected to real-world situations, perhaps increasing student interest in taking the course and studying computer science.
Most importantly, labs are expected to support student learning of fundamental ideas in computer science. Whereas the case study questions on the current exam are tied heavily to the context of the GridWorld code, the 2015 AP® Computer Science A Exam will test a student’s understanding of core concepts that are reinforced by hands-on lab experience, not knowledge specific to any particular lab. As an educational institution that has always emphasized foundational concepts in CS over code manipulation skills in the programming language du jour, IMACS is pleased to see the College Board take this important step.
Learn how you can give your child an unfair advantage in computer science. To find an IMACS teaching center near you, visit www.imacs.org. Talented middle and high school students can take university-level computer science online through our eIMACS distance-learning division.
*For readers who may be unfamiliar with object-oriented programming, it’s an approach in which the programmer creates “objects” with specified attributes and behaviors as modular, reusable code.
Abstract reasoning ability entered the national conversation this year as the Common Core State Standards in mathematics were broadly implemented in the United States. In particular, one of the eight Standards for Mathematical Practice is to “reason abstractly and quantitatively.” The so-called STEM subjects — science, technology, engineering and math — are well-known for emphasizing this skill. Given that STEM-related fields are where most high-skilled job growth is predicted, today’s students would do well to develop their ability to think abstractly.
So what is abstract reasoning, and why is it so important? Let’s break it down: To reason is to use logic in piecing together information, usually with the goal of forming an inference or conclusion. Abstract simply means that this process is a thought-based exercise of the mind as opposed to being based in concrete experience. For example, if you know that ice melts at temperatures above 32°F, you can reason abstractly that an ice cube placed on the counter of your room temperature kitchen will melt. You don’t have to take an actual ice cube out of your freezer and observe it for an hour to arrive at this conclusion.
Of the subjects that you could study in order to develop strong abstract reasoning skills, computer science is a natural and practical choice, as well as being a highly creative and exciting area in which to learn and work. The programming aspect of computer science is well-known and is one area where abstract thinking matters a great deal. Programming, after all, is the creation of a set of instructions that a computer can follow to perform a specific task. Such tasks typically involve the manipulation of digital information, decidedly not the kind of stuff you can grab hold of to see how it reacts in the tangible world.
Learning to program well involves developing the ability to think logically and abstractly so that you can anticipate how the computer will react to the instructions you give. Great programmers are actually capable of writing simple code without having to check it with a computer because they have the ability to analyze processes in their minds. If you cannot think abstractly, you may still be able to get your code to “work” with trial-and-error tinkering, but that approach lacks the robustness needed to solve meaningful problems that tend to be more complex.
The rich experience of learning computer science, however, is so much more than coding. When you study computer science, you engage in computational thinking, in which logic, abstraction and creativity come together to help solve intellectually interesting problems. As Professor Jeannette Wing of Carnegie Mellon University argues in her seminal article* on the topic, computational thinking is a skill set from which everyone would benefit no matter their career path.
Why so? Because when you study computer science, your mind learns to grapple with high-level questions such as: How can existing information be used to deduce further information that will help solve the problem? How should a complex system be designed in order to maximize simplicity and usability? How can a complex problem be broken down into smaller pieces that are easier to solve? Can a common approach be devised to efficiently handle similar problems?
If these questions seem like they would be applicable in a wide variety of fields, STEM and non-STEM, it’s because they are. In essence, when you study computer science you learn the valuable skill of thinking abstractly like a computer scientist even if you don’t plan on becoming one.
*Wing, Jeannette M. “Computational Thinking.” Communications of the ACM 49:3 (March 2006) 33-35.
This month the IMACS Blog speaks with IMACS student, Fiona Brady. According to Fiona’s mom, Susan, “IMACS was the first time Fiona had encountered a community of teachers and learners who were excited to hear her ideas and creative ways of problem solving.” After the Brady family moved out of the area, Fiona continued taking courses through our distance-learning program, eIMACS.
Having studied University Computer Science and AP® Computer Science through eIMACS (and scoring a 5 on the AP® exam), Fiona was able to pick up the Python programming language* when she encountered it at a summer mathematics camp at the University of Chicago with students several years older than she.
For students as talented as Fiona, homeschooling and early college courses often make the most sense as they and their families seek educational options that provide enough challenge, flexibility and inspiration to help them reach their highest potential. Let’s hear what Fiona has to say about pursuing this path:
Please tell our readers a little about yourself.
I’m turning sixteen this fall and I’m in tenth grade. I’m a second degree black belt in Tae Kwon Do, and I enjoy figure skating and horseback riding. I don’t feel like this gives a real image of me, but there it is. I enjoy making things with cardboard and duct tape, but definitely not wallets. I’ve made my Halloween costumes for the last few years. The year before last, I was Medusa. I wore a snake hat that I built in my bedroom and needed to turn sideways to get out. I have since learned that on some occasions it is important to get dressed outside of your room. When I’m not doing math, I love reading.
You are homeschooled and also taking college classes at Northwestern University. What is it like to do both? How do you balance the academic workload, extracurriculars and time with friends and family?
Homeschooling is not like regular school because there is no large division between having fun and learning. So I don’t balance it. However, when I have a large assignment due, my mom probably doesn’t see me for two days. My extracurricular activities — skating, horseback riding and Tae Kwon Do — force me to do something active. I also enjoy volunteering at the barn where I ride because they work with children with special needs. Our three dogs keep me pretty busy too, especially my own puppy, Mole (named because the white fur around his nose made him resemble a star-nosed mole when I first got him).
What circumstances led you to take university classes?
I have always liked math, so I started taking more than one math class a year. In my eighth grade year I took five. After that, I sort of ran out of other options. I participate in the University of Chicago’s Young Scholars Program, which is led by Professor Paul Sally. He and others at Chicago gave me advice and helped to set up a meeting with the head of the Northwestern Math Department, Professor Mike Stein. Professor Stein gave me permission to sit in on the courses, and introduced me to the professors.
Which classes are you taking at Northwestern? How did your IMACS courses prepare you for those classes?
Last year I took a course on Abstract Algebra and one on Multivariable Calculus and Linear Algebra. This year I am taking Physics and Analysis. IMACS was the first place where I encountered the idea that to learn something you have to own it; that is, you have to be able to form a picture of it in your head, and you need to be able to construct it from basic principles. In the IMACS computer science classes I took, you really needed to do that, otherwise you would get lost in the middle of writing a program and forget what you were doing. IMACS Logic for Mathematics is a continuation of that because it is constructing the basic principles of mathematics, which are skipped over in most high school classes (but assumed to be known in college courses).
[Editor’s Note: Three years running, Fiona has received the award from the Northwestern Mathematics Department for outstanding achievement in mathematics by a high school student.]
What advice would you give to young students who are thinking about taking university classes before they officially enter college?
Ask your teacher questions. I’ve had people in classes ask me questions, instead of asking the teacher. That’s a really big mistake, and it’s an even worse mistake to make in college because the professors are amazing. One of the things I most admire about the professors I’ve had at Northwestern is the unshakably solid understanding they have of the material. Also, if your professor asks the class a question and you think you know the answer, you should raise your hand. Even if your answer is not correct, that just gives you the opportunity to ask a question and figure out what you don’t understand before you try to learn something that builds on it or have a test.
What do you see yourself doing in the future?
I have three more years before I go to college and I want to keep taking classes and learning more. Being a professor sounds like an interesting career. (Being a stuntman does, too, but I don’t think I’ll pursue that.)
*IMACS added Python to University Computer Science II in November 2012 after Fiona had completed the course.
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 understanding 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. IMACS CS alumni, we look forward to receiving your emails.
This month, IMACS chats with alumnus Daniel “Danny” Vidaud. Danny started taking IMACS math enrichment classes as an elementary school student and progressed through the introductory computer science class. He went on to earn his B.S.E. in Aerospace Engineering from the University of Michigan. Danny is currently in his third year as an engineer with Boeing.
Tell us about your current position at Boeing. What exactly do you do?
I am an aerodynamics engineer working in technology and product development. In a nut shell, I am part of the team of architects for the external shaping of future commercial jet airplanes. We spend our time sketching up new, outside-the-box ideas and bringing them to life!
What were you like as a kid? What kinds of things interested you?
I was a very intuitive child. Very not normal. Constantly absorbing as much as I could about the world around me. I had a tendency to quickly gain a functional understanding of complex ideas. The downside was that this only applied to topics I found interesting. A repetitive spelling assignment, for example, was as interesting to me as watching paint dry in an empty room with no windows. I needed to actively seek ways to challenge my inspiration or I would inevitably fall into a state of no motivation.
I enjoyed music. The piano, I found, was quite versatile at conveying a variety of musical ideas, but I hated studying it. I couldn’t stand the classical books or the structured process. The musical expression was inspiring; the structured training was not. Instead, I decided that mimicking what I heard on the radio was inspiring enough to practice for hours on end. Free improvisation and jazz composition became the new method of study.
Computer games! Fun! Not so fun when they freeze and get choppy, right? So I decided it would be interesting to develop a theory on what made a computer “fast” or “slow” and subsequently exploit that theory to help others in creating new systems or maintaining their old systems to do what they needed them to do.
Physics and all other things I found interesting went along the same lines of thought. The approach was always the same: Take a complicated problem, gain a general intuitive understanding for how it works, then generate as many permutations or original ideas as possible.
Did you know from a young age that you wanted to be an engineer?
Always. I didn’t always know it was called engineering though. I just knew that I liked asking the “Why not?” question a lot. “Why can’t we do something like this?” Challenging the normal. Being weird. It just seemed like more fun to not do what everyone else was doing.
Given that, rocket science seemed like a viable candidate. No one was doing it, everyone said it was impossible, and it seemed like it might be a good place to start if I wanted to get involved in something really complicated that may have high demand and low supply. So I turned 15, applied with a pre-declared major of Aerospace Engineering to the University of Michigan, a few years later developed a powerful network of friends, and then came to work for Boeing in the heart of its commercial think-tank.
How did your IMACS classes prepare you for college? Your position at Boeing?
The teaching philosophy for computer programming at IMACS is not the classical piano book approach. You will not become an expert at solving any kind of existing, well-defined problem with one specific and popular language. You’ll spend a lot of time not learning the computer language that you will be taught in your first term in college.
Instead, you will gather an understanding of what you might call “computer linguistics”. The ability to communicate an idea through the assembly of conceptual components. The skill of decomposing a multipart task into a simple abstract algorithm. At which point you are then free to cut code in the language that would be most efficient for communicating that idea. IMACS computer science provides you with a different way of thinking, not just an add-on to your résumé about how you can write code in an industry favorite language.
At Boeing, we spend time studying new functional aerodynamic shapes to solve a variety of complex problems while keeping in mind the multidisciplinary nature of every component. With every new idea, you walk through the development process to show that it’s viable, or even patentable. Some of the skills I learned at IMACS allow me to draft up a few quick and dirty scripts in languages I had never coded in before. This allows me to save a significant amount of time repeating similar analytical tasks on multiple candidate solutions or parsing out test data in a useful way. After IMACS, you become more comfortable interacting with the machine and make the most of the computational power you have available at your disposal.
You also have some experience teaching. What do you think the US has to do as a nation to improve math, science and computer science education?
I was a substitute teacher at a high school and subsequently a graduate teaching assistant in a first-year programming course for future engineers at Purdue University.
Successful college students today are very aware of the concept of perceived economic value. Students today are more likely to seek out business-related, social science or history degrees rather than physical science or engineering degrees. It demonstrates a general sentiment that the technical degrees are no longer worth their perceived cost (years and/or intensity of training, accrued financial burden, etc.). Science is not the “cool” thing to do anymore as it once was when scientists were in the limelight of the 60’s. The perceived benefit of being in a technical field was much higher. Marketing happened by default on the news every time a rocket launched at the NASA Kennedy Space Center. Unfortunately, the need for technical degrees is inherently difficult to quantify and isn’t always obvious at a cultural or global economic level anymore.
Today, we’ve come to take for granted the engineering and scientific leaps that have been made in the recent past, such as leaps in wireless data transfer, functional nanotechnology and intuitive human/machine interfaces. Advances in biotechnology research (e.g. replacement organs, spray on skin) have unlocked a new approach for healing the infirm.
Unless the general culture regains an appreciation for scientific exploration by raising the perceived benefits and reducing the perceived cost (as was once shown in the 60’s during the Space Race, or during WWI and WWII in aircraft and military weaponry development, or personal computer development in the late 80’s), we will see a general stagnation in “technological advancement” as it has been traditionally defined.
Traditionally defined innovation and scientific exploration is a high-risk, high-expense endeavor. It will only happen when the global market demands it and demonstrates its true value. When the free market price of oil is allowed to inflate beyond the point of affordability without manipulation, the economy will require immediate and immense creativity in alternative energy and fuel technology. The need for scientists and engineers will be made immediately relevant and the market support will demonstrate the true benefit to all who depend on that which they take for granted.
The traditional ambition within transportation advances, for example, in the past century has repeatedly contained the adjectives “faster, farther, higher”. On the ground we went from conventional rail to high-speed rail (e.g. France’s TGV) to magnetically levitated trains (e.g. Japan’s MLX01). In the air we’ve seen US Air Force-funded demonstrators like the Boeing X-51 flying multiple times the speed of sound over the Pacific Ocean.
It seems the general population is now fairly uninterested in the traditional. We are no longer actively pursuing this long-established goal. In a modern culture that is approaching one of perfect information (made possible, in part, by economically accessible, internet-enabled, naturally intuitive smartphones), we have the ability to make more rational purchasing decisions. Now the market tends to instantly reward those who can make a substitute product for a cheaper price. Engineering and science is being redirected to the practical. For example, after you pick your destination, travel websites will automatically sort by price. The name of the game now isn’t “faster, farther, higher” anymore. The commercial business case is just not there for it.
Social awareness is starting to flow into the demand for science and engineering. Privatized venture philanthropy and private humanitarian and community foundation efforts have created a multi-billion dollar industry in the past 10 years. Modern innovation is making commodities such as digitally-based financial services for the poor or basic health services available to the masses that were previously prohibitively expensive.
Science, Technology, Engineering and Mathematics are here to make the world a better place. How we each define “better” will guide innovation and large private capital into the directions that have highest economical demand and true value. The only thing we can do now is try to show the world what we are capable of accomplishing and what they can do as the culture begins to appreciate, once again, how powerful ideas really are.
It’s that time of year when we think about changes and improvements for the new year. Here are three that IMACS would be delighted to see on every educator’s list:
Teach computer science. The opportunity for American students to learn this increasingly important subject in school is woefully rare. If we want future generations to continue to have a high standard of living, we must prepare them for the jobs of tomorrow. While some of these jobs may not even have been invented yet, we are fairly certain that computational thinking learned through studying computer science will be a highly valued skill needed to succeed at them.
Be a guide, not an answer key. Give students time to puzzle through new concepts and problems and the opportunity to discover answers for themselves. Step in when needed to help avoid frustration. More learning will happen, more knowledge will stick, and more confidence will build for the next challenge.
Give children more unstructured time. This is such a challenging goal in today’s busy and competitive world, but it is well worth the effort. Our culture and history have long emphasized industriousness and productivity (for good reason), but we are now coming to understand that unstructured time is also a highly productive time for our brains. These are the moments when insight and unconstrained creativity lead to new ways of thinking and solving problems. Those are the seeds of progress.
Thank you all for a terrific 2012, and best wishes for a wonderful 2013!
This month’s IMACS blog post is by guest author and IMACS alumnus, Steve Krouse. Steve recently sent us the following letter via email and kindly agreed to let us share it with our blog readers. If you would like to learn more about the IMACS Computer Science program that was the turning point in Steve’s academic career, click here.
I’ve been meaning to write this letter for a while now. I’d appreciate it if you could forward it on to Ken [Matheis, Senior IMACS Instructor], who especially helped me become the student I am today.
As you may remember, I was a student at Pine Crest School when I started taking computer enrichment classes at IMACS. I was a pretty awful student in 6th grade. Seventh grade was even worse for me. I got a C in science, B’s in math and blamed my teachers for my academic shortcomings. Around 8th grade I started Scheme, and that’s when things started to click for me. It is often said that to really learn something, you need to teach it. I would argue that computer science allows you to learn things incredibly well because you aren’t only teaching something, you are teaching something to a computer. And when “teaching” computers, you have to be specific, organized and precise.
Computer science changed the way I thought about everything. It helped me organize my thoughts, improved my grades in every subject in school and made me a happier person. IMACS not only gave me a better organized thought process, but it gave me the confidence to take on more and more challenging academic endeavors. I remember the two week period I walked around school in a daze, desperately trying to solve the infamous Scheme problem, “Spin Cycle”, as the first time I was proud of an academic achievement.
I received straight A’s in 8th grade and got the award for the best science student in my grade (a far journey from a C in science the prior year). The summer after 8th grade I took Algebra II to catch up in math (a subject I despised only a few years prior because of my failure to perform in arithmetic timed tests). I received a 99% in the class. In high school, I got straight A’s, a 2340 on the SAT, a 35 on the ACT, received the MIT Book Award my junior year and the Math Career Achievement Award my senior year.
This year is my freshman year at Penn Engineering. I am very happy to inform you that I am the single most advanced freshman in the computer science curriculum at Penn. To illustrate it differently, after next semester, I will have only 2 classes left to complete the core requirements in my computer science major. I guess I’ll get to take a lot of grad school courses and electives. 🙂 Although I haven’t gotten grades back yet, I can report that I have received all A’s so far in my classes, which are: Data Structures and Algorithms, Introduction to Computer Hardware, Introduction to the Theory of Computation, The Art of Recursion, and Introduction to Legal Studies (for a little break).
I’d like to tell you about The Art of Recursion for a moment. My classmates in this class are juniors, seniors and grad students. They have interned at Microsoft, Facebook, and many other high profile tech companies. Two of them even teach courses in computer science at Penn (iPhone Development and Introduction to Python). And as you can imagine, I am totally rocking this Haskell-based course with my IMACS background. I am happy to report that I just got an A+ on the midterm.
I am so incredibly grateful to all of you at IMACS for helping me get to where I am today. I honestly could not have done it without you guys. Your curriculum for education in math and computer science is a model for every educator to follow.
Unless you’ve been hiding under a rock for the past year, you’ll have noticed that the campaign to teach kids (and adults) how to code is everywhere you turn. As parents, politicians, and educators debate how to produce more graduates in technology fields, the push to introduce computing at an earlier age gets stronger. For example, MIT’s Lifelong Kindergarten group is collaborating on programming software aimed at kids in preschool to second grade. There are even board books for babies on HTML and CSS! We suspect that such novelties are more for tech parents’ enjoyment.
IMACS believes these efforts are well-intentioned and some, when implemented, will be well-designed. But before you click over to Amazon to buy your little drool monster a book on Web design, IMACS can offer you a few examples of how to introduce computational thinking to children through easy activities that are familiar to you, even if you think you’re computationally challenged.
Computational Thinking vs. Coding
This short and informative paper by Jeannette Wing, head of the Computer Science Department at Carnegie Mellon University, explains clearly what computational thinking is and is not. The following excerpted quote is a good summary of the focus of this blog post:
Learning to think abstractly is an essential skill if you want to succeed in computer science. It makes solving problems easier, which in turn makes working on those problems more fun. Notably, students can learn to think like a computer scientist without entering a single line of code into a computer. In fact, our experience in teaching CS is that writing computer programs is trivial for students who first develop computational thinking skills. Let’s see where in our daily lives we can show kids relatable examples to help them make the transition to abstract thinking.
Stacks and Queues
In computing, a stack is an object in which data expressions are stored and retrieved in such a way that the first data expression to be stored is always the last data expression to be retrieved. It is an example of a so-called Last-In-First-Out (LIFO) object. The same idea applies to various real-life constructs that young kids encounter, even babies who love board books.
Obviously, you can’t explain LIFO with words to a baby and expect the baby to understand, but you can certainly demonstrate the concept with your actions. Take the classic Fisher-Price Rock-a-Stack, for example. Start with the rings off the cone and then load them on in the intended manner with the blue ring going on first. Try to get just the blue ring off. Can you do it while the other rings are still on the cone? No, you have to take the rings off one by one with the blue ring coming off last.
Older kids can appreciate the same concept with examples they come across in their lives: unloading plates from the dishwasher into the cupboard, setting the table with said plates the next day, selecting a product such as cosmetics from a store shelf, putting said product back if you decide not to buy it. You get the picture.
A queue is similar to a stack in that it is an object used to store data expressions. In the case of a queue, however, the first data expression to be stored is always the first to be retrieved. Queues are examples of First-In-First-Out (FIFO) objects. Kids encounter them every time they go through a checkout line or a drive-thru. Switch that Rock-a-Stack cone for an empty paper towel roll, and you’ve got yourself a baby-friendly queue.
Sorting is one of the oldest problems in computer science. Although the end goal (an ordered list) is conceptually easy to understand, getting there can be complex. Add to that the need for sorting algorithms to be computationally efficient and you’ve got yourself an interesting abstract puzzle.
If your kids are old enough to know or learn how to put words in alphabetical order, then make a project out of sorting the books on their bookshelf. Decide on a sorting key such as title or author’s name. For this example, we’ll use title. For the first shelf, ask your child to try a simple bubble sort. Traverse the shelf from left to right, compare the titles of two books, and swap them if they are in the wrong order. Repeat this process until all books on this shelf are in the correct order.
For the next shelf, you can use a simple insertion sort. Take all the books off that shelf and put them in order one by one in a pile on the floor. Each time that you add a book to the ordered pile, be sure to put it in the right place relative to the books that were previously added.
Now that you have two properly sorted sets of books, you and your child can work together to sort all books. Sounds like a good time to use a merge sort. Move the sorted books off the first shelf into another pile on the floor while keeping them properly ordered and separate from the pile of books from the second shelf. Reshelve the books as follows: repeatedly compare the titles of the two books that are atop the two piles, selecting the one that goes first, and continuing until both piles are exhausted.
Object Oriented Programming
An “object” in computer programming is a complex structure containing data fields and instructions. These objects interact with each other to create even more complex computer programs. The beauty of object oriented programming is that you can reuse objects to do common computing tasks without having to reinvent them each time. Over time, programmers can build up a “library” of useful objects.
The following analogy certainly isn’t perfect, but it will help get the point across about these seemingly mysterious objects. If you’re planning an outing with kids, you’ll need a few things to help keep your sanity: nourishment, entertainment, and possibly a change of clothes. So grab three bags and make some objects! In the nourishment object, you’ll probably need fruits, carb snacks, a protein, and beverages. For the entertainment object, how about art supplies, books, sporting equipment, and portable gaming device? Kids are made to get dirty, and the weather may change, so pack a top, bottom, and outerwear in the clothing object. Throw those “objects” in your huge tote “library” and you’re ready to go!
Think Like a Computer Scientist
Planting the seeds of computational thinking, especially the ability to think abstractly, is really a matter of recognizing the examples in your life that can be used to foster discussion with your children. Like any new endeavor, remembering to look at events in a computational light takes practice. You might just find yourself thinking like a computer scientist when it comes to solving the data problems in your own adult life.
« Newer Posts — Older Posts »