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

May, 2012

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    Be What’s Next!


    Grace Hopper used to tell her audiences that if they ever used “because we have always done it this way” as an excuse for anything that she would magically appear next to them to “haunt” them. I first heard her say that some 40 years ago and it has stuck with me since then. And yet people do use that as an excuse. Oh they may say it differently but that is what they often mean. In computer science education all too often people believe that because they learned computer science some way that everyone should learn it that way. It’s not as bad as it used to be but at times I wonder if people are just saying it differently. For example “we use command line application programming because we don’t want students getting too wrapped up in GUI stuff.” Or perhaps “we need students to use text editors and command line compilers so that the really understand what is going on.” Baloney I say. Use modern tools and let students create applications that are real looking and relevant to them. In the long run this will be more incentive to learn more than anything else. And now we are facing a new set of paradigm shifts in computer science and software development. Garth Flint said it well in a comment to an earlier post of mine.

    I believe there is a large paradigm shift right now and coding for large desktop based apps will start to fade away.  I/O devices like the Kinect and handheld computing devices will be the future.  The kids do not need what was popular in programming in the last decade, they need what will be required for the next decade.

    I think he is right and if computer science educators do not adopt the new paradigms students will fall behind. Now someone is going to say something like “well when today’s high school freshmen graduate college in seven years it will all be changed so what we teach now doesn’t matter so much.” I hear that a lot as well and again I say baloney! We owe it to our students to advance them as much into the future as we can because they’ll have to run as fast as they can after college just to keep up as it is. So what does that mean?

    It means several things. One thing it means is that large desktop applications are going to decrease in importance. They’ll probably never go away. Even batch jobs that run over night on mainframes have not gone away. But they are going to decrease in importance. They are being replaced by apps – smaller more narrowly focused applications that run on lighter weight devices like phones and tablets. Oh and on Windows 8! Also the way we interact with computers is changing. The mouse was a big change in its day but today we are seeing another change. For one thing touch is now big. This is not just using your finger like a mouse. It’s multiple touch points and gestures. Kinect is ushering in a change as well. Not just by tracking body movement but with voice commands now easier to do. With a Kinect software can distinguish between speakers and do more noise filtering. Noise filtering is being incorporated into phones as well. Windows Phones do that particularly well. So what is a teacher to do?

    Well start thinking about how you are going to use new technology in your courses. Too much for the first course? Perhaps. Probably not for a second course though. And there are resources.

    NEW! Game Dev: Advanced XNA, Kinect, and Windows Phone 7-Semester 2 The excitement and engagement of programming with games continues as students learn to design and implement complex games within the Xbox, Kinect, and Windows Phone 7 environment.

    Ready or not Windows 8 is coming. With it is coming more touch, more apps, more chances to do things differently. Now maybe your IT department is going to stick their heads in the sand with Windows XP, Windows Vista or Windows 7 but your students are going to be living in a Windows 8 world. There are more Windows 7 systems out today than Mac OS, iOS (iPhone/iPad) and android devices combined. And it is not even close. And that doesn’t include Windows Vista and Windows XP! Six months after Windows 8 it may be the same for Windows 8. Seems a shame not to be ready for it. But of course I’m biased.

    I’m starting to try out the Windows 8 Consumer Preview and the Visual Studio Express Beta for Windows 8 to add to the Windows Phone Development Resources I’d already been experimenting with.  What about you? What about your students? If you teach APCS it is after the exam and many teachers are looking for things to keep their students engaged. How about having them give Windows 8 a try and see what they can develop? Your seniors are likely to run into it in college. And who knows, maybe they will come up with some good apps that will help them pay their way though college! It could happen. (Check out Getting an App in the Windows Store: What, Why, and How)

    So are you moving into the future or stuck in the past? As we say at Microsoft a lot “Be what’s next!”

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    What should the High School CS curriculum look like?


    I get asked questions like this a lot “can you share how you would construct a 3 year programming sequence, preceded by IC-3 type course, and culminating in AP JAVA. What would be your first two CS courses?” You’d think I’d have a great answer on the tip of my tongue by now. But I don’t. There are lots of reasons for this but they boil down to “the answer depends.”

    What do you mean by computer science? Probably you don’t mean applications because while they are really important (in my opinion) they are general knowledge skills not computer science. Do you include web development? And if you do is that as a parallel track to programming heavy courses or as an introduction to CS with more programming heavy work later? And then there is the whole question of the AP Java course (technically I think it is still called AP CS A but I’m not sure.

    Should AP CS be the last course in the sequence, the next to last with a senior capstone sort of course last, or should it not be in  the rotation at all? It gets more complicated with the advent of AP CS Principles! Do you offer both courses and if you do are their separate options or does one probably APCS Principles) come before the other like we often did previously when there were two APCS courses? And where does hardware and networking fit into the mix? Arg, so much to think about!

    I like web development. I think it is a great thing to learn. I don’t see it as a way to start computer science but as a goal of its own. There is some good web design curriculum at and the DreamSpark program makes the software easy to get and to use with students at school and at home. Good stuff for sure.

    I think about computer science as having a real programming component to it. That means I tend to think about a first course that covers basic principles of CS and of programming. So for example (not all inclusive)

    • Representation of data including binary
    • variables and data types
    • assignments and equations
    • arrays
    • decision structures (if/then, case/select)
    • Loops (for, do/while do/until)
    • Objects (using but not necessarily creating)

    The goal behind this course is learning some basic concepts of programming, problem analysis and solving skills, and some interest building success. traditionally I have used Visual Basic for a course like this but there are other options. People could use Small Basic, C#, Python or even C++ or Java. Personally I like something that lets students create some cool UIs or graphics and that seems harder with C++ and Java.

    For a second course I see things as getting deeper. Designing with and creating objects for sure. Some real data structures like stacks, queues, linked lists and the like. And get deeper into algorithms with a little sorting and searching for example. I see this as a possible course to add some interesting domain specific programming. Games perhaps or maybe Kinect programming or mobile development.  This gives students a deeper appreciation for the use (and creation ultimately) of APIs and sharable code. It also opens up more larger team projects. To say nothing of the fact that it gives students interesting projects involving things that they care about. (We’ve got free curriculum for all of that at the Faculty Connection BTW)

    OK now your students are in great shape for AP Java. If you used C# for the second course they’ll ease almost seamlessly into Java. If you stuck with Visual Basic or used something thing else for the second course the concepts should still map nicely and the syntax is the only hitch. I found that students jumped from one syntax to a new one much easier than us more mature individuals. A reminder of how things were done in a previous language opens doors for really covering concepts independently from syntax as well.

    Now maybe you made those first two courses a semester each (doable in many cases) and you are looking for something for after AP CS. Or maybe you took longer with the first two courses (a full year each even) and want something in place of APCS. What then?

    Well there are lots of options including independent study courses. Or survey courses. Perhaps involving things like cryptography or robotics or advanced simulations. Or perhaps a project class with an eye towards community service!  I know of teachers who have students take on projects for local non-profits for example. Or build projects around the Imagine Cup. I know several high schools that have a game development course that creates teams to enter the game design competition. One of these days a high school course is going to take aim at the Software Design Invitational and do a great mix of hardware and software in a real world changing way. I can’t wait for that.

    Besides CS concepts the students learn project management deadlines HAVE to be met and the teacher can’t extend them), team work planning and communication and other “soft skills” that are very important today. A chance to win prizes and trips is one incentive but the building of a project portfolio that can be shared with university admissions people or potential internship employers is a pretty solid incentive as well.

    That is just one possible scenario. I can think of others but I’d prefer to use this as an opportunity for others to share what they do in their schools. Is there only room in the curriculum for one course? Well then what does that look like? Or two courses? Or perhaps you have a more involved set of offerings with multiple paths. What does that look like? What is your school doing that works or perhaps what is it your ideal curriculum would look like? It’s getting to the end of the year and I know a lot of you are getting ready for the summer. Let’s give everyone some things to think about over the summer so that next year’s planning can get rolling early.

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    Please Don’t Learn To Code


    I am a late convert to the idea of computer science education for everyone. Or pretty close to everyone. A lot of people still don’t see it as valuable for more than a few people with some sort of natural predisposition for programming. I think there are many reasons for this. One is that they equate computer science with programming. And that’s not quite right. Second is that they see the only reason to learn computer science is to do it professionally. Inspired by Jeff Atwood’s Please Don’t Learn to Code I did a search on Bing for “don’t learn to code.” Bing came back with 224,000,000 hits. That seems like a lot. I can’t address all of what showed up but I would like to address some of what I read in the post by Jeff. He basically uses a bit of a straw man argument comparing coding to plumbing. This is largely the idea of coding as a trade skill.

    I would argue that a more realistic comparison would be to compare computer science to math or reading. Computer science, of which coding is but a part, is part of the liberal arts of the twenty first century. You wouldn’t say “don’t learn math because you are not going to be a professional mathematician” now would you? Of course not!

    But it gets worse with still more straw men about the move to teach CS and programming to more people.

    • It assumes that more code in the world is an inherently desirable thing.

    Actually it assumes no such thing. Rather it assumes that having a better understanding of what the computer can and cannot do will lead to better decision making and a greater openness to new algorithms and to software is a desirable thing. It assumes that people can benefit from a better understanding of computer science, algorithmic (or computational if you will) thinking. It’s not about “more code” at all. I would also suggest that a better understanding of

    • It assumes that coding is the goal.

    Again, no, the assumption is that there will be better understanding of what code is all about. The idea is not to turn everyone into a programmer but to give more people knowledge and understanding. Being able to produce code is a tool toward understanding with understanding being the goal.

    • It puts the method before the problem. Before you go rushing out to learn to code, figure out what your problem actually is.

    Backwards here. I believe most people pushing for more computer science and programming see it as a means to teach the tools for understanding problems. It’s a tool for understanding problems far more so than solving them. Will some people code their own problem solutions? Of course they will but the goal is to help them understand problems first.

    • It assumes that adding naive, novice, not-even-sure-they-like-this-whole-programming-thing coders to the workforce is a net positive for the world.

    No, not really. Again the people who are promoting more computer science see it not as a vocational training but as a liberal art that helps people understand the world around them. Coding is the language of computers which has in a real way a culture of its own. By learning the language of a culture we gain understanding of that culture. This is the main reason we teach “world languages” is school. Not to turn out professional translator but to give people a greater understanding of a people’s culture and the way they think.

    • It implies that there's a thin, easily permeable membrane between learning to program and getting paid to program professionally.

    I don’t think too many people, except for self absorbed teenagers, who really believes that. The line is more permeable than it has been in years but still not an easy path. But since vocational training is not the goal so what?

    I would say that learning computer science is for everyone. Coding is just a tool to help you get there. It is about concepts, ideas, ways of looking at and solving problems, and much more than just coding to make a living. Don’t fall into the trap of seeing the field too narrowly.

Page 3 of 6 (18 items) 12345»