Thursday, December 16, 2010

App Inventor for Android for CS1?

This might make for a great tool for teaching introductory Computer Science. Check out App Inventor for Android. I took a quick look at the tools, and they seem quite nice. I think they took a lot of good ideas from the Lego MINDSTORM platform, which is not a bad thing. The MINDSTORM has a great suite of tools for teaching robotics at many levels, reaching kids in their early elementary school years through students in grade 12 and beyond. One must admit that it is quite a remarkable feat to have a single pedagogic tool that can be used to teach basic concepts in computer science and engineering to both a 9 year old and a 19 year old in college!

Anyway, back to the wonderful Android platform -- which is the current hot item in the hands of high school and college students all around. We, as computer science educators, are struggling with teaching introductory concepts in computational thinking. It is good to have some modern, pertinent paths to use as pedagogic tools to show them that computer science is so much more than just writing boring programs at a command line prompt! You need to first open their mind to what CS really is all about. Once they get it, then they start to understand why they need to go through a rigorous path to get to the other end.

On a final, but related note, I had a student in my office the other day asking many questions about why Calculus III was a required part of the BS in Computer Science and Engineering. How do you convince a student the value of embracing all levels of calculus at this early stage in their studies? (This student is currently a sophomore.) I attempted to convince him that, to a large extent, calculus is merely a study of algorithms that deal with numbers. After all, whether you are in Calc I studying derivatives and integrals, studying complex numbers (which came in useful for a couple of my teams that did fractal projects), or dealing with transformations (which come in mighty handy for graphics), etc.. you're dealing with functions and a series of steps you need to follow to achieve a result based on some input. And, likewise, programs on a computer are nothing more than functions! They map a set of input to some output! The eye of the new student opens up quite a bit once they realize that they are simply developing functions. The input, in the simplest sense, is purely numeric. Yeah, we transform it to something we understand (e.g. ASCII), but the input is simply binary numbers. The output is, again, numeric. It all relates! So, to the student(s) complaining about too many courses that don't seem to apply to computer science, open your mind, think deeper, and have patience. It will all come together soon!

As computer science educators, we need to work harder in our CS1 and CS2 courses to developing interesting and relevant problems that allow them to expand their understanding of applied computer science to a wide range of fields. I think that Sedgewick's Introduction to Programming in Java book does a fantastic job with this. Of course, doing this in a simple way that allows us to stay away from nonsensical scaffolding that detracts from learning (e.g. public static void main(String args[]) { System.out.println("Hello, World"); } includes an AWFUL lot of scaffolding for a newbie) is an ever-continuing challenge.

1 comment:

Unknown said...

Java and to some degree .Net are the main choices because they have been consistently pegged as the “safe” choice to go with for mid-level project managers in the corporate world. No one was ever fired for choosing Java or Microsoft.

However, there are many large distributed applications these days that run primarily with technologies like Python, PHP, et al. Even companies like Google and Yahoo are heavily invested in these technologies. Java may be the main choice for enterprise development now, but it’s days are numbered as the only stalwart option to go with.

Let’s face it, many of these so called “enterprise applications” could easily have been written much faster and with less overhead using technologies like Python, PHP, et al.







ruby training