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

February, 2008

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    Programming as the New Literacy


    Regular readers know that I have been pushing this idea of programming and computer science as being a liberal art - something that everyone should learn some thing about. Recently I came across an article by Marc Prensky that says pretty much the same thing.  One key quote is:

    I am one of these last, in that I believe fluency with multiple spoken languages will continue to be important, and that multimedia, interactivity, and other game-derived devices will be increasingly significant tools for communicating twenty-first-century thought. Nonetheless, I firmly believe that the true key literacy of the new century lies outside all these domains.
    I believe the single skill that will, above all others, distinguish a literate person is programming literacy, the ability to make digital technology do whatever, within the possible one wants it to do -- to bend digital technology to one's needs, purposes, and will, just as in the present we bend words and images. Some call this skill human-machine interaction; some call it procedural literacy. Others just call it programming.

    The whole article is worth reading especially the parts where he talks about there once being a time when people did not read and write but rather hired people to do those things for them. I find that a most fascinating analogy. Does it go to far? I'm not sure it does at all.

    For years we have had jokes at the expense of people who could not program their VCRs to show the correct time. Newer VCRs do not show the time and in fact get the time from external sources. But today a lot of people have DVRs to record their TV shows and one still has to do some "programming" of a sort to get them to work. Beyond that though people who work with information, numbers, text, data of any kind, are increasingly having to do some of what we call programming to get the most out if them.

    We use Boolean expressions to do searches not just in databases but in Internet search engines. We use more and more complicated decision structures with our spreadsheets. I see a time when more and more applications will include the ability to customize them with programming. It may not be programming in Java or C++ and it sure will not be in COBOL but of course the concepts are largely constant.

    Will the person who says "I can't program" someday find themselves in the same situation as a person who today says "I can't read?" Perhaps not to the same degree but to some degree I think it could happen. What do you think? More importantly what do your children or your students think? Send them to the article and ask them if it makes sense to them? Is is scary to them or do they think they are ready for that sort of future?

    Of course the question for schools (and for parents) is, if this is indeed the future are we doing enough to prepare today's young people for it? If not, how do we fix that? OK well DreamSpark is one attempt to help but a lot more is needed in our schools.

    [Note: Lots of comments and not everyone agrees. Always a good thing. Be sure to add your opinion.]

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    How To Study For A Computer Science Exam


    Many years ago I came up with a personal philosophy about studying, especially cramming, for test taking. I looked at my peers and realized that a lot of them worked very hard to cram a lot of information into their heads in a short period of time to prepare for taking a test. Shortly after the test, weeks a the latest, they forgot most to all of what they had crammed into their heads. All that mattered to them was taking the test and getting a good grade on it. Now to me learning was the most important thing so any practice that didn't lead to holding the knowledge for the long term seemed at best to be wasteful. At worst I decided that short term study for a specific test or exam was hard to distinguish from cheating. After all the results of the test did not reflect what they had actually learned.

    Now I admit that some of my friends accused me of using this idea as a way to avoid work. But honestly I used this philosophy to push myself to study (read the book, pay attention in class, put time into the projects) in ways that would let me keep a higher percentage of knowledge longer. In the short term I may not always have gotten the best grades but I like to think that if we'd all taken the same test a year later without warning I would have out scored them.

    Later in life when I was writing and giving tests to my own students I wondered just how good the tests were evaluating what students really knew. One of the things that complicates cramming for students of computer science is that everything builds on everything else. A student needs to know everything they were taught in the first week of class in the last week in class. It is not like a student will be tested on variables and not need them again after the test.

    I used to tell my students that anything I had covered at any time (in the past of course) could show up on any test or quiz. Personally I would have liked to make every test a surprise test. But of course students hate that and parents would have had my head. My testing philosophy is that tests are there to help the teacher know what students have learned and what they need more help on. I'm not a big fan of grades but I am a big fan of students learning as much as possible. Only if I know what they are and are not learning can I as a teacher help students learn. Cramming seems to be a barrier to me getting that information accurately.

    Now I have helped students review for the AP CS exam. I didn't feel completely good about this but I did feel some responsible to help them do as well as possible on that important exam. It was not an easy exercise though. It is not something one can do in a day or two. I didn't mind talking about test taking strategies though. The AP CS test is complicated and has some unique characteristics. Those things one can teach and I don't really see that as cramming or studying in the conventional sense.

    For the longest time it seemed like my philosophy was unique to me. No one I explained it go seemed to agree with me. And then I found this blog post by Steven Downes Tony Targonski. There is a good little discussion there. It ends with this paragraph:

    For my last CS exam I found more benefit in relaxing, enjoying some music, and reading blogs. Though maybe I’m missing something. What does everybody else do for their exams?

    I remember in middle school when one of my teachers told the class much the same thing. That it was more important to get a good night sleep and to be as relaxed as possible before starting the exam than to drive oneself crazy cramming information that would not stay in the brain. What do you think?

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    Fun or Serious Learning - Why not both?


    The SIGCSE mailing list recently had a long discussion about plagiarism in the context of philosophy of teaching statements being submitted with applications for professorial jobs. While the discussion on plagiarism was interesting what got me thinking was my the idea of a statement of teaching philosophy. Specifically what was mine?

    When I think back on the best teachers I ever had, ever worked with, and what I saw as what I copied about them several things came to mind.

    • Knowledgeable
    • Enthusiastic (about the subject and about sharing what they knew)
    • Fun

    I think that the best teachers are knowledgeable in their subject. That seems obvious of course but I've seen too many teachers who were forced by circumstances to teach outside their area of expertise. In my own case I once taught a course using Java when I wasn't that comfortable yet with Java. I had the concepts down but I think there were times when we got bogged down because my knowledge of Java was lacking. On the other hand when a instructor knows a lot more than what is required for a course everyone can move faster and learn so much more.

    Enthusiasm is one of those things that is contagious. When students see that an instructor really gets into what they are doing - into the subject and into sharing what they know - they tend to come along better. Oh sure there are those who say "what a nut job. How can anyone enjoy this stuff?" but by and large human nature is to wonder what is it about this subject that has this person so excited. On the other hand if the teacher is bored with the subject how can anyone ask the students to get excited about it?

    In some ways fun follows naturally from enthusiasm. After all something you love doing and learning about is almost by definition fun. But somehow we have a lot of people in education who think that learning it just too serious to have fun with. It is almost as if they think that if the medicine doesn't taste bad it can't work is translated into learning.

    I've had teachers complain to me that students using Visual Studio for Visual Basic or C# get caught up in the fun of creating GUIs. I have seen students get too wrapped un in creating the user interface of a program to the extent that they lose focus on the main part of the project myself. But honestly I have seen that with console applications as well as GUI ones. I came to see that as a teacher issue, in fact as a "teachable moment" that I could turn to advantage, more than as a tool issue. When a student finds some fun in a project the challenge for the teacher is not to discourage the fun but to channel the fun into areas the student needs to learn more about and to grow the student beyond the narrow vision they are caught up in.

    I was thinking today that I could easily write a textbook to appeal to teachers who want to put "education" above fun. The book would be nothing but console projects that involve strictly mathematical or practical business or scientific applications. Games would be banned from the book. The book would avoid sports related projects - no calculating baseball averages/statistics for example. Perhaps we could calculate lift v. drag for airfoils? Hmm, might not work as I found that calculation utterly fascinating when I studied it. But I'm geekier than most so maybe it would work. Hard to say. OK just nothing I would enjoy in the book for starters. If anyone reports enjoying anything we'll pull it from the second edition.

    The book would explain each concept one and only one way. We'd stay as old school as possible and draw students through the same concepts in the same order as those of us with 30 years of experience learned them. No short cuts. If it was painful and slow for us to learn it should be painful and slow for today's students to learn it. When we're done we'd have students just as far along as we are - though of course no further. No sense in pushing them ahead and getting them all excited about future possibilities.

    On second thought maybe I couldn't write that book easily. It would be no fun and getting the enthusiasm to work on it each day would be difficult. I guess I'll have to stick with fun stuff and let the teachers who want to suck the joy out of software write their own books.

    I love software. Writing code is fun for me. Discovering new ways to do things, new features in a language or a code library is a fascinating process for me. Being able to use Intellisence to find new things is, to me, a wonderful advantage of something like Visual Studio. Does it reduce the need to memorize things? Perhaps. Is that a bad thing? Perhaps not. Real life is an open book test. And honestly I really want students to learn and remember what is possible more than I want them to learn the specific spelling of a specific method. Another language or platform may use different terms but as long as they have an idea of the possible they will find out how to do it. Concepts over specifics is my motto.

    Not all teachers feel the same way and they are entitled to their opinion. But for me, I want some fun and enthusiasm in my classes. In the long run those things lead to more knowledge and that to me is the goal of the classroom.

    BTW if you are looking for fun stuff I highly recommend:

    • Coding 4 Fun - A Microsoft site for software hobbyists
    • Beginning Developer Learning Center - educational resources for learners of all ages with, sorry about this, a lot of fun learning resources.
    • Faculty Connection - One for higher education and one for pre-collegiate educators. Communities of learners and teachers. Honestly besides fun resources there are some resources you could make boring as well. But don't tell anyone I said that ok?
    • Popfly - a web based mashup tool that is a lot of fun but some educators I know are using to teach concepts - shssshh!
    • Rob Miles XNA/C# based textbook. Learn how to program in the context of game development. Keep this link away from boring teachers. Rob is into bad puns big time. You might not want students laughing (or groaning) in class.
Page 1 of 8 (24 items) 12345»