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

February, 2012

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    How Young Can/Should You Start Teaching Programming?


    Or perhaps how young should you try? And to top if off, why do you want to start them so young in the first place? I received the following from a teacher friend of mine the other day and it has had me thinking ever since.

    Can you please tell me why anyone thinks it is a good idea for 6th grades or 7th grades to learn to program? I do not see them trying to teach physics or pre-calculus to them. Lord knows they are not looking at having 6th graders learn geometry. Now why do they think (not sure that word works here as that’s the underlying problem with teaching 6th graders to program) that students that have yet to understand problem solving in a class build to help them understand problems solving could start problem solving 2 or 3 years early? They do not have 6th graders read say Gatsby even though most of the basic vocabulary is there. I just don’t understand why you would want to show middle school students what goes into networking when adults with a better understanding of abstract thought have hard times working and using it? The idea of “Well we want to show them so they can get a feel for what is going on?” should then also work for teaching trigonometry or calculus. Or how about chemistry???

    I am blessed  with a LARGE number of very bright (HS) students and I still have many who just start to understand what all is being asked of them. Tell me how they think a group of students with less on the ball and minds that are less focused can do what they hope to teach and not make bad habits or outright destroy any chance of learning programming? Any teacher after them will have to undo so much bad though and habits it would depress said teacher. And yes I know there are some kids that can do the material very well even at the 6th grade, but that number would be small to start with and those students would be in with the great unwashed masses of their peers, a heart breaking situation to force a bright student into.

    I hear this from others as well. In fact I have run into the same attitude from university faculty talking about computer science at the high school level. The greater question, or more basic question, is “when are students ready to learn programming?”  It’s a fair question. We know that trying to teach concepts before students are ready for them emotionally, intellectually or other wise can be counter productive. We have also seen some good success with students learning programming in middle school (some guy named Bill Gates learned in middle school and did pretty well). Tools like Alice, Kodu and Scratch are widely used in middle schools and even younger. It seems like there are some good results there. But are we not hearing (or paying attention) to down sides? Do we focus on the students who do well with it and assume that all students are keeping up when in fact, perhaps, they are just precocious students leaving the rest in the dust?

    In my  heart I want to introduce middle school students to the joy and excitement of computer  science and computer programming. They are making decisions at this age – consciously or unconsciously – about their academic futures. I want to see CS included in their thinking as an option. I think middle school is old enough for some of this. I have no data to support that idea though. It may exist somewhere or maybe it doesn’t. How about younger children? Remember Logo? That was used with still younger children. Kodu and Scratch have been widely used with elementary school students. Does it work out ok if we don’t try to do to much or go too deeply? Or are we going to force them into bad habits that someone will later have to break?

    What do you think? At what age did you learn to program? How young have you taught programming? How young is too young as students are not yet ready?

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    When Just Working Isn’t Good Enough


    tttvbI wrote a tic  tac toe game for my Windows Phone today. It works just fine. I’m just not happy with it. I loaded a screen shot of it to the left. Oh it is obvious that the graphics are not so hot. Graphic design and UI design are just not my thing. I’m actually pretty happy that (in theory at least) I could give the XAML code off and have someone who is good at design fix it all up for me so I could just worry about the code. No, it’s the code I am unhappy with. Why? Well it’s a mess. It wasn’t designed. Now I’ve written multiple tic tac toe programs in my time. I know how it should work. But each time I just wing it. With close to 40 years of programming behind me I do a fairly good job of winging it. Unfortunately that same experience lets me recognize poor design when I see it. So what went wrong? Generally that old ready, fire aim mentality crept in to the process. You see I didn’t set out to write a great tic tac toe program. I set out to learn some Silverlight for Windows Phone development. So my focus was on other things than writing the best tic tac toe program I could write.  In retrospect every tic tac toe program I have ever written was not written to write a great tic tac toe program but to either teach or learn some concept, tool, or idea. This is, unfortunately, all too often an occurrence for what I might call educational programming. I had a student complain once that the Advanced Placement Computer Science exam was one big set of examples about how not to program. It was hard to argue with him.

    Sometimes this is ok. Sometimes doing it right means too much complication or at least too many lines of code for use in a test or as a simple concept example. Pro developer examples generally don’t go that route though. They are, usually, examples of exactly how to do it right. They’re great for professionals to learn from but too often are completely overwhelming for raw beginners. is there a middle ground? I’d like to think so. Finding it is the trick though.

    I have a couple of example programs I have been using lately (Tic tac toe, Whack a Mole, and Pong) that are optimized for fast and easy creation in a demo or hands on lab setting. There is just a ton wrong with them. The tic tac toe and whack a mole could greatly benefit from some well designed custom object classes for example. The Pong (which in my defense someone else wrote but I have translated into VB fro the original C#) just takes too many shortcuts. All three programs look like they could have been written by a beginning programmer. What I have decided to do is to take some time and do all three of these game a lot closer to right. It’s a point of personal pride which I why I an posting this. I want people to ask me from time to time when they are going to see the results. You know – just to keep me on my toes.

    Designed programs work better than hacked together programs. They are easier to debug, to maintain, to enhance and they look better. To me at least there is a feeling of satisfaction from a well designed and developed program that I just don’t get from something I have hacked together. I know that not everyone feels this way. I sure know that for some students just having a piece of code that compiles and meets the minimum standards is success. And that is fine as far as it goes. Other people pride themselves on hacking things together with at least the illusion of development speed unhindered by “wasted time” planning. That is just not me. Slapping things together today made me realize that I need more. I need that planning first. I need my code to be designed. I need to take the time to avoid coding bugs. No matter how much I tested today I just don’t feel as comfortable as I’d like that it is going to work in all cases. And that is not good enough.

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    How To Start A Computer Science Flame War


    Computer Scientists and computer professionals who may not think of themselves as “scientists” and hackers who just think of themselves as awesome are all opinionated people. Over the  years I have learned of several what I would call religious arguments. These are topics that are always great for starting a discussion (ok maybe even the online equivalent of a bar brawl) among computer people. Those who teach are, it seems, even more susceptible to these sorts of things. I thought I might just list a few of these for the fun of it.

    Language Wars

    • Java is horrible/ Java is the answer – related is write once run everywhere vs. write once debug everywhere
    • Real programmers use {assembly, C, C++, Scheme, you name it} Implying that people who use other languages are fake programmers perhaps?
    • The best first programming language is (assembly, C, C++. Java, you name it} To get people really going recommend Visual Basic as I do. I’m right of course but you’d never know it to listen to some people. Smile
    • Functional programming is the answer!  What’s the question again?
    • For Linux/UNIX users the arguments over the best shells can go on for a long time as well. And of course “are shells programming languages?” is a closely related part of the issue.
    • case sensitive vs. case insensitive
    • late binding vs. early binding

    Operating Systems Wars

    • Apple vs. Windows vs. Linux – enough said – you all know where I stand on that one.
    • Command line operation is the way to go vs. you can do it with GUI – this one gets into what a power user is all about. I think it should be about “your OS is really poor if you have to use a command line more than once a month.” Whoops I think I let my feelings show again. Sorry.
    • Virtual machines are the future vs. virtual machines are too slow and inefficient for real time (or any time critical) applications Everyone seems to think their apps are the standard that all should be measured against.

    Teaching Wars

    • HTML & web development is not computer science vs. oh yes it is!
    • Objects early objects late, objects in parallel, objects never
    • The AP CS course is great – oh no its not.Now they are developing a second APCS course that we can argue about!

    General Wars

    • GPL is the best/worst license ever Related are “that’s not a true open source license” about several “approved” OSS licenses. “What is open source” is always good to start people fighting discussing.
    • Everyone should use Open Source for everything vs. Proprietary software has an important role and is not intrinsically evil. Basically anything you bring up OSS vs Proprietary software and someone suggests that they are incompatible and that one is good and one is evil you’ll get a fight  discussion. In fact if you argue that they can co-exist you’ll get a fight discussion in many cases as well. No peace in this fight discussion.
    • EMACS vs. vi vs. Are you really using an old fashioned text editor in the 21st century with the great IDEs we have today?

    The really unfortunate thing is that there is value in discussing all of these things. Not in fighting over them but a fair and honest discussion of the merits of different sides in different contexts. There is really no right or wrong answer. There are few absolutes here (if any at all.) It’s just unfortunate that we too often let ourselves become polarized and closed-minded. Something that needs to happen in education is to teach students how to discuss without fighting. To evaluate based on contexts, concepts, and principles rather than emotions, politics and absolutes. Can we do that? I think we need to if the discipline is going to grow as a profession.

Page 1 of 8 (24 items) 12345»