I teach at a small school and as a result 9 of the 10 kids in a programming class will be there because it was the only elective available in the time slot. So there are always kids that have not the slightest idea of what programming is all about. For those of us that have programmed for a while we have a certain mindset we get into when writing code. We realize the computer is dumb as a box of rocks and has to be told every little step. Some kids never get this. They struggle mightily with the idea that to write code they have to think simple. The school has spent all these years and all that money to push the kids towards the top of Blooms Taxonomy and now all of the sudden we tell them to go back to the bottom. For example look at this simple programming statement: “x=x+1”. As programmers we look at that and say “So? It increments, so what?” Now look at it from the kid’s side. They have just spent a number of years learning algebra that claims this is a real bad thing. x is equal to x, not one bigger than x. “This programming sucks and makes no sense. I hate it.” Some of our kids are struggling with solving “7=2x+1” in math and now we expect them to understand “x=x+1”? Code is full of these little illogical things that are unique to programming but are screwy in the “normal” world of what students have been learning for the last few years. I keep telling my kids if you are going to write code you have to design smart and code stupid. Sometimes it even works.
Archive for May, 2010
The year is winding down so for a time filler I downloaded Game Maker for my Programming II kids. I am not familiar with Game Maker, I just knew it existed, that there was a free version and some teachers are using it for a piece of intro programming software. In my programming class of six (4 sophomores, 2 juniors, 5 male, 1 female), three boys immediately got sucked in. One of them, an average student with no real flair for programming and a strong resistance to reading, swallowed the thing hook, line and sinker. He has been glued to the computer for the last three days learning how to build a simple 2D shooting game. He is working through the tutorials on his own and is showing the other two how to run the software. It is interesting to see what grabs some kids and not others. I am a sucker for anything that makes kids think and do logical thought processing, even if it is some funky game writing software.
As much as I hate to admit it, outside circumstances are forcing my hand (somewhat willingly) as to what programming courses we will be offering next year. It is not a major change and, in the long run, I think it will be a change for the better of the students. The local University of Montana College of Technology is offering college credit to high school students that take the CoT’s two programming courses. The courses are taught at the high school by the high school teacher. The only restriction made is our course has to hit the learning points laid out by the CoT in their syllabus. The CoT courses are both based on VB.net and are fairly basic. The 3 credit courses will cost the kids about $120 each which is a screaming deal for the kids. The kids have to be juniors or seniors, which I am not so crazy about because the first CoT course is what we normally offer to our sophomores as a first year programming course. The second course is an Object Oriented Programming design course, which we do not offer but looks worthwhile. The CoT courses force me to use VB which I was debating discontinuing but this sort of put VB back in the middle of my curriculum. I will have to write up a sophomore programming course so the kids will not suffer through two semesters of the same course if a sophomore wants to take the CoT credit course as a junior. I have always wanted to re-do the Programming I course we offer sophomores anyway. Right now it is a fairly cold VB course out of a text book. I think I can write up a course with Small Basic and RobotC with Lego robots that will get sophomores interested in the field and be a lot more fun for student and teacher. I think I can also squeeze out a second semester sophomore programming course with things like Alice and GameMaker. We do not offer a freshman programming course because the wee folk are already buried in required courses and more critical electives.
This is not really about programming, per se, but is part of my thirty year project on teaching myself to teach programming. I am guessing thirty years is about when I retire or die of old age. I was and am a math teacher along with being a programming teacher. As a math teacher I sort of follow the latest and greatest trends in math teaching techniques. If you look at the way math is taught today it really is not that different in the way it was taught 100 years ago. The teacher stands at the front of the room at a board (it is now white instead of black); students sit at desks in rows (not always, but usually) and (sometimes) take notes. Techniques really have not changed in most math classrooms. Then technology started to takeover. The Smartboard was invented and everything changed. I can go through the text provided Powerpoint slides much easier just by touching the board. I can operate a virtual TI-83 to demo the key presses required to solve a computation on the board which is kind of cool. But really, has the actual teaching dynamic changed? The teacher stands at the front of the room at a board (it is now small and white); students sit at desks in rows and (sometimes) take notes. I see the same thing happening in computer programming. When I started this programming teacher journey in ’82 I would introduce a new topic at the board and the kids would sit at a computer and enter practice assignments. The language has changed and the computer has changed but has the methodology changed? I look at the assignments the kids work on today and they are basically the same assignments from 20 years ago. The assignments may be a little more graphically based but overall they are teaching the same processes. Each year I am thinking it is like déjà vu all over again. I have all this high speed technology and I really do not use any of it to teach with. Here are some ideas I have to bring tech into the teaching of programming.
1. Dual monitors for the students. One screen for the IDE, the other for the text or help files.
2. Software that will allow me to project any computer in the lab on the wall. This way the kids will get more experience debugging programming issues. They can participate in more that their own bug problems.
3. A projector in the lab.
4. An eInstruction Mobi touch pad so I am not stuck at the front of the room at the board. It is a glorified RF mouse.
Will these aids guarantee the kids learn better? No, but they may give then better opportunities to learn. I hopefully will have this lab up and running next year. It is a beginning.
One of my problems/worries in this job has been my total lack of programming teacher education. I became a programming teacher because back in ’82, in the school where I got my first teaching job, the math teacher was the programming teacher. Not that they had a programming teacher at that time, they just had 2 TRS-80’s in the math room that nobody know what to do with and thought having a programming class would be a good idea. With only 25 kids in the high school it is amazing how fast you can get a course up and running. The rest is history. In the 28 years since (egads!) I have had one college level programming class, a Java class that I could have taught better that the instructor. The lack of upper level programming experience is not what bothers me, learning a language just requires some time and a couple of books. What bothers me is never having seen a good programming teacher at work or really knowing how to teach programming (curriculum, pedagogy, all that good stuff). To get a CS certification in Montana is really a bit fuzzy. I got mine because of that one 3 credit programming class and having worked in a programming business for 6 months (not as a programmer). Montana offers no CS methods courses in any of its colleges. Most of the “CS” teachers in the state teach applications and are business teachers. Those of us that teach programming, as far as I have been able to determine, have the same basic back ground as that I have and learned to teach programming when given a programming class to teach. For many years this lack of background was a great bother. Once the internet got going I was not quite in limbo and I became a little more confident that what I was doing was not going to scar students for life. Now that CS teacher blogs are becoming more common I can actually talk to high school programming teachers out there to get ideas and I can compare notes. Alfred Thompson’s CS Teacher blog is the first blog I ever started following and I think has led me to every other blog I watch. Contrary to what Montana’s Office of Public Instruction thinks, CS is simply growing too fast, and becoming too significant a high school course topic, for its teachers to be hanging out in knowledge limbo. Until proper CS teacher education becomes a necessity in Montana (unlikely and a topic I can rave about for pages), following and communicating through blogs has to be my primary learning source. Thank goodness there are some sharp people out there that like to talk.