Computer Science Teacher
Computer Science Teacher - Thoughts and Information from Alfred Thompson

October, 2009

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    Loneliness of a Department of One


    I read the blog post by Daniel Moix on the CSTA blog today (My Voice) with interest and a mix of emotions. His is a story I have heard before. The computer science teacher who is a department of one or merged into a department (sometimes science, sometimes math) where they just don’t really fit. Much as we talk about computer science being a course that could (should?) count for a math or science credit the fact is that few schools believe it fits either department. It’s a tough situation to be in but it is the norm for high school computer science teachers.

    What does it mean? It means no one locally to discuss projects, grading rubrics, how to present specific topics, share test development, help recruit students or provide many of the other means of peer support that academic departments normally provide as a matter of course. It means feeling like no one understand you or what you are trying to do. It means no one to go to when a student “breaks” their program and you can’t figure out what is wrong. It means no one to plan with or bounce ideas off of. It also means that when budget cuts or scheduling issues come up one is all alone against groups of people with different priorities.

    Even at technology education conferences the computer science teachers are often a tiny part of the program. At a large event like TCEA or NECC (now ISTE going forward) there are special interest groups and they are helpful. At other regional conferences computer science teachers often find nothing of interest and no active group for them to relate to.

    This is one reason that the work of the Computer Science Teachers Association (CSTA) is so important. The leadership cohorts that CSTA has been training are actively at work starting local chapters. There are now local CSTA chapters starting up and/or running in 10 states now. If you are in one of those states and teach computer science get in contact with them and get involved. Strength in numbers. And if they is no local chapter get in touch with your local CSTA leadership cohort people (list here) and help them get a local chapter going in your area. No one should be alone.

    Oh and you New England people, if you are looking for a guest speaker let me know. Love to come by and help anyway I can.

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    Project Learning


    Joel Spolsky is an interesting guy with strong opinions about software development and the education of people going into software development. Recently he posted a blog article called Capstone projects and time management which is pretty critical of university computer science/software engineering programs. For example:

    It is amazing how easy it is to sail through a Computer Science degree from a top university without ever learning the basic tools of software developers, without ever working on a team, and without ever taking a course for which you don’t get an automatic F for collaborating. Many CS departments are trapped in the 1980s, teaching the same old curriculum that has by now become completely divorced from the reality of modern software development.

    Mark Dennehy  has a reply posted called Joel Spolsky, Snake-Oil Salesman that makes all the expected academic rebuttals. For example:

    Undergraduate courses in CS and CEng are not there to teach industrial tools, but basic principles

    No student is expected to graduate and be able the next day to walk into an industrial role without supervision or training, and no student has ever been expected to do that in Engineering since the first undergraduate course started in TCD in 1841.

    And well you probably know the rest though I have to say this is one of the bests collections/explanations of the issues I’ve read in  a while. So what is the right thing to do? I have some ideas (why blog if otherwise? :-) )

    I stand with a foot in industry (employed by a company) and a foot in education (by inclination,experience and the focus of my work). I’ve taught students who have gone on to careers in industry and I’ve worked with many recent graduates throughout my career. It seem that often industry doesn’t understand what academia is trying to do, can do, and thinks they should be doing. Likewise many in academia seem to care little about what industry thinks they need in new hires and recent graduates. Plus academia doesn’t have time to teach everything they would like let alone what industry would like them to teach. Compromise is the word of the day.

    It’s hard, very hard, to fit large projects into a curriculum. In high school, in university and even in graduate school the semester or the quarter is the rule and that is not enough time for a really large project. Emphasis on individual students learning concepts in a deep may make all but small team projects are difficult to manage, to grade and even to conceive. I think there is some room for projects outside of class though.

    Unfortunately a lot of students have to work jobs to help pay for their education and that takes up a lot of time. The full-time student in the old sense of the word isn’t as common as it once was. But I think that when students can they should think about creating projects outside of their course work. At the university level, the Imagine Cup is one potential opportunity. I think that students could also look at service projects for local organizations may also be possible. Non-profits often cannot afford professional work but may be willing to accept help from teams of students. 

    The benefit to students are that they are forced to develop scheduling and time management because projects that are done the day before a deadline are not likely to meet the needs of clients. many competitions that are project based, such as the Imagine Cup, have intermediate deadlines that also have to be met. Students also gain experience that they can talk about during interviews. Companies are impressed by students whose learning and achievement goes beyond what is required by course work.

    While none of this is necessarily a magic bullet there is a chance for students to go beyond what they are learning in class.

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    Learning To Write By Reading


    One of the most useful learning experiences I have had was working with editors. These talented people read my prose and make corrections, suggestions, edits, deletions and make some very helpful comments. Over time this has improved my writing quite a bit. Though of course it could still be a lot better. At the same time reading (or editing) other people’s work has also been a good learning experience. Somehow it is easier to see the run on sentences, mismatched tenses in other people’s writing than in ones own. Conversely it is also rewarding to see the clever turn of a phrase, good use of alliteration and other writing practices as other people use them. Over and over I have heard professional writers say/write that if you want to become a good writer you have to read a lot.

    The same is true of writing computer software. I know I keep coming back to suggesting code reviews and having students read other people’s code on my blog but I really do believe in it. Closely related I am becoming more and more convinced that reading and modifying code should be more widely used as a teaching/learning tool. This all hit me specifically recently in the middle of a demo I was doing.

    I was creating Pong using XNA as I have done many times before. (The demo script and sample code can be found via How To Create A Pong Game in XNA) Now I didn’t write this code. My good friend Sam Stokes wrote it. And to be fair the code was optimized for ease of demo and minimal code use not for demonstrating good practices. But a side benefit (just as if we planned it :-)) is that it has good potential as an “editing” exercise. Take for example this sample:


       1: class Paddle
       2: {
       3:     //position of paddle
       4:     public Point pos;
       5:     public int speed;
       7:     //constructor - position
       8:     public Paddle(int x, int y)
       9:     {
      10:         pos = new Point(x, y);
      11:         speed = 6;
      12:     }
      13: }

    Look at lines 4 and 5. Public variables? Ouch! Obviously it takes a few more lines of code to make them private because one also has to add getting and setting routines. I think that the first thing most students would see is what they “have to do” but I think the real learning comes with talking about what those routines would enable them to do. In a phrase “bounds checking.” As it is calling code can easily set unreasonable speeds and locations. Not a good thing.

    What if the calling code set a negative speed? Do you want to allow that?

    Theoretically the speed should determine the distance the object moves. Do you want to allow the calling routine to move the paddle more than speed points? Actually do you want a calling routine to change the location directly at all? Or do you want to add a move method that takes a direction (say up or down in this case) and have the object move itself? That reduces the need for setting routines at least for the class?

    For a simple 13 lines of code (including comments and blank lines) there is actually a lot of discussion that can go on with this code. And discussion is a good basis for learning. Do you do this sort of thing with your students? As you review code from others do you think about the “what if” or the “how can I make this better?” or the “what other options are there?” for that problem? A useful exercise for everyone I think. And you?

Page 1 of 6 (17 items) 12345»