Tuesday, July 14, 2009

The new video Kodu game will teach you (or your kid) about programming. - By Chris Wilson - Slate Magazine

The new video Kodu game will teach you (or your kid) about programming. - By Chris Wilson - Slate Magazine

Interesting... I wonder how this compares to Alice as a possible (very) introductory teaching language for CS newbies in high school and college? Alice continues to get rave reviews, though (as with every language) there are critics. At first glace, Kodu seems to be too elementary to be a platform to use in a "programming for non-majors" CS class. We want a class that can be used as a way to open the eyes of students that never thought about CS as their major. Our plan was to adopt Alice for this purpose.



Thursday, July 09, 2009

The Scala Programming Language

As if we didn't have enough choices for programming languages to teach...

The Scala Programming Language

I like everything I've seen with the language so far. In particular, I like that it plays well with Java.

Yet, seriously, the number of languages out there is truly astounding (and ridiculous.) Forget the trials of the professor considering what languages to teach. Let's look beyond my responsibilities. What about the student? And, consider the challenges of the IT sector looking to adopt development strategies, including selection of a language or two for development. Which do they choose?

It is absolutely impossible for one language to satisfy all needs. But, it seems that the number of choices available for each need in software development today is much more of a hindrance than an asset to both the developer and the software development industry. As a CS professor, I strive to keep myself aware of the latest trends and technologies, in order to incorporate aspects of them in my advanced classes. (i.e., I want my students to get jobs!) So, should I teach a wide range of languages at a very introductory level so they can put huge lists of "technologies and skills" on their resume? No! The problem with this approach is that the student does not learn the depth in any language required to complete a large-scale project that they will be given when they get a job. They do not get a chance to get beyond the headache of syntax and program structure and really learn problem solving skills. I think that 2 languages should be taught in depth to CS undergraduates, with essential focus on constructs common to all programming languages. I don't think many will disagree with this. The disagreement among CS faculty is in regard to what languages to teach. If a couple of languages are taught in depth, the student will most likely be able to adapt what they've learned to other languages with relative ease. 

Do you think I'm being ridiculous? Check out this list:

So, who is to blame? Some of the blame is on industry (e.g. Microsoft's unwillingness to embrace Java, and therefore create C# and an entirely new JVM clone called CLR), some is on academia (e.g., Scheme), and some is simply the work of CS gurus and zealots and those in the open source community that thrive on anything that is anti-establishment. Of course, all of these players have created some nice languages. but they all claim to adopt aspects of some prior language, and incorporate something that is supposedly new. And unfortunately, some of these lesser known languages thrive because there are groups that thrive on adapting and going against any technology that is mainstream. (Maybe I'm being too cynical... but, I've witnessed these attitudes in industry and academia!) They often take a certain pride in being able reject any mainstream industry, and/or say they know something that nobody else in IT does. So, are they wrong? Quite often, their rants are right on the money! Can you blame them? There are reasons some of the better academic institutions have all Linux labs.

Sigh... can't we all just get along?!?!? Ehhhh.... no, but at least most of those in CS industry and academia are willing to have an open mind and see what hype is about. We love to learn new things and see how to develop better systems. If we didn't love change, we would have chosen a different field.

Whatever the case may be, it is my opinion that the number of development languages available today is a bit of a hindrance. But, if students can learn fundamental programming constructs in detail, learn foundational algorithms and data structures, gain experience with design patterns before leaving college, and gain some good problem solving skills, then the language of choice is mostly just syntactical goo to put around the solid structure and scaffolding of your design.

Syntactical goo... hmmmm... I'm sure I'm not the first to use that phrase.