Did you know that eIMACS serves students in over 10 countries around the world? This week, our blog post features current student, Hossain Md. Jihad Turjo. Turjo is a talented 11th grader at Mastermind School in Dhaka, Bangladesh. In addition to excelling in his eIMACS courses, he has also earned top marks from other prestigious online programs for bright students, including Johns Hopkins Center for Talented Youth (CTY) and Stanford’s Education Program for Gifted Youth (EPGY). When not immersed in his studies, Turjo enjoys reading novels and has even had three published book reviews for CTY’s Imagine magazine:
• “Guns, Germs, and Steel: The Fates of Human Societies” by Jared Diamond
• “H.I.V.E.: Higher Institute of Villainous Education” by Mark Walden (Click on the ‘Preview’ button to read Turjo’s review.)
• “The Boy Who Harnessed The Wind” by William Kamkwamba and Bryan Mealer
How did you first become interested in computer science?
My first programming experience of any sort was at school in 8th grade – we had the basics of Visual Basic as part of our coursework curriculum. There were quite a few incidents which hooked me to programming during the six months or so that I had Information and Communication Technology (ICT) at school as part of my curriculum. An example of such a case would be when we were learning to program a calculator for adding numbers with the digits 0, 1 and 2. The “calculator” would have virtual “buttons” labeled +, 0, 1, 2 and =, and would have a screen for displaying the numbers typed in or the result.
Of course, the very thought was horrid to me – the numbers lacked 70% of the digits, and I could only do addition. At the moment, our teacher was not inclined to be very explorative either. So I decided I could do better, and pretty soon I had a calculator with all the digits, an operation display alongside a numbers display, all the operations instead of simply addition, and functions for taking nth roots, raising numbers to any exponent and reciprocating numbers.
That was the kind of small trivial thing that later snowballed into a massive interest in computer science and programming – and eIMACS was perfect for it.
Residing in Bangladesh, how did you find eIMACS, and what made you decide to take one of our online computer courses?
I found eIMACS while browsing the net for computer science courses that are on offer for young and talented students. So I made an inquiry about what courses might be on offer for me, considering that I was a complete amateur in the field of computer science. The next day, I spoke on the phone with a senior IMACS instructor who suggested that I start off with University Computer Science I, that apparently being a very good beginner’s course. So I took the Aptitude Test, managed a good enough score, and started the course that very day. I guess the main deciding factors in what made me choose eIMACS was the promptness and enthusiasm of the instructor’s reply, the fact that he offered to be my instructor even though I was a novice, and the course description on the IMACS Web site.
As a student who has taken or is taking several online courses in math and science from different vendors, how did your experience with eIMACS compare?
In addition to UCS1 from eIMACS, I have taken Honors Chemistry, Honors Biology, and AP Calculus BC from CTY and AP Physics C: Mechanics from EPGY. I am now continuing AP Statistics from Northwestern University’s Center for Talent Development (CTD).
The courses from eIMACS and CTY were all self-paced allowing me to work on the lessons and the tests at whatever time suited me most, contrasted against a fixed course in which lessons are taken by an instructor, normally during his office hours. That was a thing I really liked about eIMACS and CTY – the self-paced option, seeing that a fixed course would be extremely hard for me to keep up with due to the huge time zone gap. Also the quality of presentations for both the eIMACS and CTY courses was really high.
CTD’s AP Statistics course, which has been a satisfactory experience thus far, is next best, and then EPGY’s Mechanics course after that.
UCS1 from eIMACS is the clear winner when it comes to the best course among these. It started at a very basic level in a way that made it extremely easy for me, a novice to understand. I loved the user interface and the way computer science code was introduced to the rookie. The course got progressively more challenging and, I might add, more fun. An awesome thing about UCS1 was the way the tests were taken entirely online. I mean, it is kind of tedious to have to write out answers on a give question paper, scan it and then e-mail it, the way I did it with CTY. But given that one was a math course, where steps and working are extremely important, I guess that was the most suitable option for CTY.
As to instructor availability, I think it’s reasonable enough to say my IMACS instructor was the one I had the most contact with. He was simply more cheery, more communicative and more encouraging than my instructors from the other programs. I’m not saying the others didn’t have those qualities, but my IMACS instructor had it to a great extent.
UCS1 is taught using the programming language Scheme, whereas many introductory courses take students straight into Java, especially since the College Board’s Advanced Placement exam is currently in Java. What’s your view on the eIMACS approach?
I felt that UCS1 did an awesome job in introducing me to the field of computer science. The approach of using Scheme seems to me to be much better. I have seen Java code for web pages a few times, and it did look quite a degree more complex than Scheme. Hence I would say the IMACS approach in using a simpler language (simple is a relative term) as a beginning language is all the more effective for its simplicity. I found I was able to focus on learning the programming concepts instead of worrying about whether I was getting the syntax right. And if anyone was very interested in Java, they can always take the AP Computer Science course from IMACS. So I would say that the IMACS approach is a very effective method.
Your goal is to major in computer science at a US university. What would you like to do after that? Do you have a career vision in mind?
I would simply love to become a top programmer or “Head Game Designer” at someplace like Microsoft or Sega. There are some pretty awesome games out there and someday I want to be the one bringing to life better themes than those games did, coupled with a much better game-playing experience. Sky Target and The House of The Dead series are classics that are impossible to forget – both Sega productions. Someday I hope I can do better.
IMACS delivers flexible and high-quality online computer science courses anywhere in the world. Register for our free aptitude test. Play along with our weekly IMACS logic puzzles on Facebook.
Originally published in the May 1992 issue of The Computing Teacher, this essay by IMACS alumna Natasha Chen brought much needed attention within computer science education circles to the debate over teaching computer programming for beginners. Amazingly, almost 20 years later, the key issue raised by the article – how to teach fundamental computing concepts in a way that is effective, engaging and empowering – remain unresolved. Many students still find themselves in syntax-driven classes that focus on a short-term ability to “make apps now!” in the language du jour rather than being taught strong fundamentals that enable success throughout college and career, regardless of which programming language is used. At a time when the US faces a huge gap between technical job positions and qualified individuals to fill them and the UK is grappling with a need for true computer science in its national curriculum, IMACS revisits this issue with a renewed urgency.
A Bad Beginning In BASIC
My first experience in computer programming classes was an elective course in BASIC back in sixth grade. I chose that class because I thought that computers were powerful and capable of doing many interesting things. Electives usually have a reputation for being fun, but my classmates and I heard stories about the difficulty of this course and how only one or two kids ever got A’s. I thought to myself, “Maybe they just weren’t interested in computers. But I am, so how bad could it really be?”
Pretty bad! Forget learning anything that encouraged us to think, wonder and explore. We were asked to study the history of computers, memorize the names of hardware, and master the rules of syntax. We were sixth graders. We weren’t about to enter the high-tech world of programming. All we wanted was to see what neat things we could do with the computer. The class wasn’t difficult at all; memorization is hardly a challenge if you take the time to do it. There were so few A’s because no one cared to do busy work, and that’s all that was offered.
Swamped By Syntax
After my sixth grade BASIC experience, I never wanted to take another computer science course again. Of course, when you are eleven years old, G.P.A. and class rank don’t mean much to you. But by the time I was about to enter my junior year in high school, I started thinking about those things … and college … and the classes I needed to take. To avoid another BASIC nightmare, I decided to bypass Computer Programming I (BASIC) and go straight into Computer Programming II (Pascal). Pascal was different enough from BASIC to make me think that it had to be better. I found out that the improvement was far less than I had hoped. We jumped right into the syntax of Pascal: program (input, output), begin-end, etc. Even after two years of studying Pascal, I still can’t remember all the rules.
It’s like trying to interest small children in reading. You try to show how much there is to discover in books by reading with or to them. Maybe they will pick up some books on their own and then some more, and pretty soon they will have built up a library. But if you dump the library on top of them, ask them to memorize the Dewey Decimal System and then put the books back in order, by the time they finish – assuming they do – they won’t care to look at another book, much less read one.
One of the students from that CP2 had a very hard time with the syntax of writing information-processing programs, but when it came to the one graphics program we were assigned he was an absolute genius. I can’t begin to describe all the amazing things he could make the cursor do. But he was never recommended for the AP Computer Science class. By having no place for such a student, the computer education system may very well be tossing aside some of the best computing minds, simply because they don’t fit the mold of the curriculum whose rigidity derives from that of the languages used.
AP Computer Science: As Good As It Gets?
Five of us made it to the AP CS class and four more came from the CP3 (Fortran) class. We spent the first two days refreshing our memories of the syntactic rules that had evaporated over the summer. It seemed as if the purpose of CP2 was to teach us the rules and now, we had to remember them so that we could play the game – someone else’s game.
The last year was one of frustration. The most commonly heard outburst in our classroom was undoubtedly, “Stupid computer!” No matter what, it was always the computer’s fault. It seemed that my classmates’ programming strategy was to let the computer find their errors in the hope that this would somehow help them solve the problem. It never occurred to them that the computer is simply a testing ground for a well-thought-out idea. A human could conceivably go through an algorithm manually; it would just take an intolerably long time. For most of my classmates, this was their fourth year in the computer science education system, and all it had taught them was to rely too much on the computer and not enough on themselves.
The root of this problem lies in what is currently thought to be important for students to learn in computer programming courses, namely, syntax. Whoever is designing the high school computer science curriculum seems to think that, once students learn the rules of the language they are studying, having them write programs that demonstrate how those rules are applied will teach them what is important in computer science. As a student who has been through the system, who has had to waste the majority of my patience, concentration, and effort on keeping the syntax of my programs straight, leaving barely enough of these qualities to devote to solving the problem, I can tell you that such a belief could not be more wrong. This method of teaching is brainwashing. It is not like brainwashing or similar to brainwashing; it is brainwashing. It is a danger to computer science, sending out trained hackers instead of enthusiastic visionaries. Fortunately for me, I was given the opportunity to recover.
Saved By Scheme
In ninth grade, my math class began an introductory computer programming course in Logo. My classmates and I looked forward to every other Friday when we studied Logo, not only because it meant a break from math, but also because working in Logo was a lot of fun, and it was easy. Unfortunately, that course was ‘squeezed out’ as far as my class was concerned by the pressure of our math courses over the next three years. During that time, however, the course had been rewritten using the programming language Scheme.
As a senior, I had a study hall period that I sometimes spent in my math classroom doing homework. It was on one of these days that I happened to overhear my math teachers talking about Scheme. I was already tearing my hair out in my Pascal class trying to learn something for the upcoming AP Computer Science exam – in fact, all I was learning was the page number of the reference section in our textbook, which I frequently consulted to see whether type declarations or variable declarations came first or to re-check how to declare a record for a linked list. Enticed by what I heard, I willingly gave up my study hall to come in four days of every week to learn Scheme on my own for no credit at all, using The Schemer’s Guide.* My reward was that I regained the enthusiasm and interest I thought I had lost six years earlier.
In the four months it took me to complete my course in Scheme, I learned more about computer programming than I had in my two years of Pascal. In less than five minutes after I began reading the text, almost everything I learned more than three years previously in our aborted Logo course came back to me. Five minutes, not the two days it took to recover from just one summer away from Pascal. There were hardly any rules of syntax to remember. Furthermore, throughout the entire four months, I never touched a computer. The ease of learning and using Scheme gave me such confidence in the programs I wrote that I didn’t feel the need for the security of a compiler to check my work.
Simple Language Makes Learning Complex Concepts Easier
The thing I liked most about taking this course in Scheme was that I knew that I was learning something. Every concept I had ever tried and failed to understand comprehensively in my Pascal class – searching and sorting procedures, recursion, processing binary trees – was made clear when I studied them in Scheme. These things occur so naturally in Scheme that I couldn’t help but understand. After mastering the concept, I could then go back into my Pascal class and easily master the code. The point here is that concepts like these are universal in computer science. After you understand them, then you can learn the rules of any language in order to encode them. But it doesn’t matter how well you have mastered the syntax of a language if you don’t understand the meaning of what you are typing or the reason why it works.
Recursion serves as a prime example. My understanding was very vague; I knew that something was done over and over again. But after seeing the first recursive program in the Scheme text, I understood what it was all about. When we took the test on recursion in AP CS, my whole class seemed to choke, with grades in the 60s and 70s, and the second highest score in the 80s. Thanks to my background in Scheme, I aced the test. I couldn’t quite believe it myself! For the first time, I fully realized that Scheme was not only easy to learn; it was also easy to learn from.
It is a myth to think that length and complexity make a program impressive – a prevalent idea among my AP classmates. Scheme code is clear and easy to understand. There is no need for pseudo-code. Thoughts go straight from your head to clear, simple code. The strange thing is that Pascal sets you up to fall into the trap of complexity and to disobey the laws of top-down design. As a procedural language, it enticed us into trying to do too much in one procedure simply because it could be done. With Scheme, I couldn’t write a function that had more than one purpose. It is as inherently top-down as it is inherently recursive.
Computer Programming Is Fun Again!
In my four months of studying Scheme, I not only covered and understood everything that had been presented in the AP Computer Science course, but went beyond that to study functional programming, data and functional abstraction, objected-oriented programming, and artificial intelligence. I still can’t believe all the amazing things I have learned in this short time. This is how I wanted to learn when I was in that BASIC class in sixth grade. I had to wait six years to do it, but it was well worth it.
I wrote this article because I don’t want another kid to have to go through the frustration that I did and not get anything out of it. I don’t want another kid’s enthusiasm snuffed out by a pile of library books. I want students who study computer science to be inspired to create their own game. Kids never liked rules anyway, and that’s all we are – kids.
*The Schemer’s Guide serves as the basis for IMACS‘ series of University Computer Science courses.
Rediscover your enthusiasm for high school computer science with IMACS! Sign up for our free aptitude test. Play along with our IMACS logic puzzles on Facebook.
Iain Ferguson works with an IMACS student to program a mobile robot.
Today, we’re chatting with Iain Ferguson who – in addition to being IMACS’s senior curriculum developer for the computer science program – is the guy behind the sophisticated technology that runs our online computer programming classes. Iain has taught these courses as well, and so brings with him the experience of having seen what works in the classroom and what doesn’t.
Q: Why does your Introduction to Computer Science course use the Scheme programming language? Isn’t the Advanced Placement exam in Java?
A: We start off with Scheme because it’s the most effective for helping students to understand the fundamental concepts of computer science that are common to all programming languages. And we’re not alone in this choice. Graduates of the some of the top universities, including MIT, Yale, Princeton, Johns Hopkins and UC Berkeley, were first taught to program in their freshman year using Scheme.
What we’ve found over 20 years of teaching this course is that if you throw a new student straight into Java, or whatever language the AP exam covers at the time, he or she can easily get mired in its complicated rules of syntax. If you simultaneously try to make a student learn the fundamentals, which are arguably more important, some of those fundamentals just won’t be understood, or they’ll be understood incorrectly. And so the students try to move on to more complicated programming assignments, and they’re hampered by a false understanding of the underlying abstract thinking.
Scheme’s syntax is simple and natural. So it takes our students very little time to pick it up. They use their mental energy instead on developing a deep comprehension of the the abstract mathematical thinking involved in programming. Applying that way of thinking to concrete computer algorithms is then rather trivial for them.
Q: Beyond doing well on the AP exam, how do you know that this approach of teaching Scheme first is working?
A: We hear from a lot of our former students once they’ve gone on to university about how easy their classes are thanks to what and how they learned here. One of my favorite stories is of a student named Erik who went to Virginia Tech. He was taking Computer Engineering in a class of about 600 students, and the first exam was designed to weed out about half of them. So Erik completed the test in 10 minutes with a perfect score. The next day the professor called him in and accused him of cheating. Well, of course, he hadn’t cheated and when he said so, the professor gave him a similar question that was solved just as quickly. Then the professor wanted to know how it was possible for a freshman to have such a deep understanding. Erik told him about learning to program with Scheme, and that was enough to convince the professor that not only had Erik not cheated but that he was also the strongest student in this class of 600.
Q: If Scheme is so beneficial, why don’t more high schools offer it?
A: Their resources are very limited, especially in this economic environment, and the demands on teachers’ time is rather significant. As with most university-level courses, it’s unrealistic to ask high schools to even consider putting resources towards preparing and teaching a class like this. If you really want to do it at a high level, you need instructors with an extensive background in university-level computer science and extensive training in teaching advanced subjects to young adults. Plus you either have to develop the appropriate curriculum or find it and license it. So you’re looking at a lot of time and expense, both of which are, unfortunately, in short supply at the typical high school.
Sounds like a guy who knows his stuff! What language did you use in your first computer programming class, and did it leave you with confusion or clarity?
P.S. If you’re ever in South Florida and want to play a game of Nim, stop by our offices and ask for Iain. He will destroy you, and it won’t hurt a bit!
Make IMACS a part of your program. Sign up for our free aptitude test. Follow IMACS on Facebook.









