Wednesday, August 20, 2008

Gearing up for the fall semester

I'm back in Searcy and re-adapting to the heat and humidity. I've got less than one week to prepare for classes which begin on Monday. I'm trying some new things which I think will enhance each of the classes I'm teaching:
  • Intro to Programming - Traditionally I introduce algorithm development with flow charts before we ever write any C++ code. This time I'm going to replace flow charting with MIT's Scratch. I'm hoping this might engage the students more by allowing them to create animated programs early on instead of writing flow charts that don't exactly capture the imagination (e.g., finding prime factors of a number).

  • GUI Programming - Usually I have students create three desktop applications using C#, VB.NET, and Java. This time last assignment will require developing a mobile application, possibly for the iPhone. This will allow students to respect the limitations of a small screen and take advantage of mobility that desktop applications lack.

    Update: After some digging around, it looks like developing iPhone apps on a Windows box is currently not possible. So we'll probably use either the Microsoft .NET Compact Framework or the Java Platform, Micro Edition.

  • Computing Seminar - I'm encouraging one of my students to do a presentation on which programming language should be taught in the Intro to Programming class. This will require the student to compare our curriculum with others and the pros and cons of teaching C++ first (Harding is one of the few universities which has not jumped on the Java train). If the presentation is done well, we just might change what we're doing.

I'm open to other ideas if anyone would like to leave a comment.

6 comments:

  1. Having completed my Master's at the University of Tennessee, I wholeheartedly believe Harding's CS department should stick with C++ for the chosen introductory language. UT focuses mainly on C when it comes to programming, even in several of the grad-level courses, and barely touches on OOP in any of the undergrad-level courses.

    While I have a fondness and appreciation for OOP (particularly in Java), I believe the students need to learn how the languages work at the lower levels, which is not something that is as-easily taught via Java. There are no pointers (accessible to the programmer, that is), the developer isn't forced to take care of memory (de)allocation and instead relies on the garbage collector (similar to C#, VB.NET, etc)... these are crucial aspects of programming that the students would have a tougher time picking up on if they went straight into Java, C#, etc. first.

    I was offered an interview with Cisco and many of the questions they asked dealt with the finer/lower-level details of languages like C and C++. Harding prepped me well for those kinds of questions by opting to focus heavily on C++ and I feel other students should get the same benefits.

    Sorry for the novel...

    ReplyDelete
  2. Thanks for the input, Adam.

    ReplyDelete
  3. There is only one decent intro to programming language and that is Scheme. Ok, I *might* accept Python, but mainly Scheme.

    Seriously, if you have SICP, what else could you possibly want? Moreover, if it is good enough for MIT, it ought to be good enough for Harding :)

    ReplyDelete
  4. Ok, I'll expand a bit. First, I still read SICP at least once a year and I still learn from it. It is a great introductory textbook as well as an advanced one. Secondly, I disagree with adam. Introductory students do NOT need to learn bits and bytes. They need to learn algorithms, problem solving, and ABSTRACTION. The problem with Java is that all the OO syntax and nomenclature get in the way of teaching the algorithms and the abstraction. SICP does a good job of using functions to focus on abstractions. Students at the 4th semester level need to learn C and then C++ in OOP, but you can't start by teaching OOP, the overhead is just too much. You need to learn functional abstraction first.

    I say this as someone who has taught introduction to programming in both VB and Java. Teaching in VB was FAR easier than teaching in Java because I could focus less on the OO magic and more on the algorithms and abstractions.

    Seriously, if I could design a curriculum for teaching intro to programming I'd use Python or Scheme. Probably Python because I'd be lynched for suggesting Scheme, but both are good for being able to focus on abstractions and algorithms instead of terminology and structure.

    ReplyDelete
  5. Tanton- thanks for your input. I agree that the most important concepts the students need to learn in CS1 are algorithmic thinking and problem solving.

    (((Scheme?))) (define death_by parans)

    But I was introduced to Python this summer and thought it would make a good intro language. It seems to be reasonably popular at a number of schools.

    ReplyDelete
  6. Developing a mobile application in GUI Programming is a great idea!

    ReplyDelete