Did you ever have students you just cannot keep up with? I have two junior boys like that in my Programming class. This is their third semester of programming and they are the only two students in the class at that period. I happily gave them the 3-program house drawing assignment and turned around to work at my desk. I glance over my shoulder every now and then for the next couple of class periods (it is a very small lab) to see how they are doing and they wiz through 4 languages in no time. I have to miss their class for a meeting. I come back the next period and they have decided to write a game in C#. Why? Just ‘cause. It took them less than an hour to learn how to get a background to scroll right and left with the arrow keys. They had never done anything like that before; they did not use a reference book or find an example (my usual method) which is why it took them that long. This is an interesting team. Most kids when you pair them up the work output is less than the sum of the individuals. That is typically what I experience with high school students. These two combined are like an exponential thing. I have created a monster that is really fun to watch. Each one of these kids is probably smarter than I am. Together they are beyond anything I have experienced in the sense of teamwork and idea generating. I am just going to leave them alone and watch. They learn more on their own than I could possibly teach them. I think I am good for the rest of the year , I can dream up projects to keep them engaged. The big question is: what the heck am I going to do if they want to take a programming class next year? Java? I know a little Java. They know nothing about Java. Maybe Win7 Phone apps writing? I have a feeling I am going to have to get clever. Poor me.
Archive for April, 2010
Here is a summary of my observations over the years. I have more experience with some languages than others so the comments will be a biased from that time of exposure. The evaluations below are strongly based on my ability to teach the language. A good teacher with lots of experience in Java can probably make a language like Java an interesting experience for a beginner. Some languages are just easy, and fun, to teach with, I will stick with those. With the advanced kids (my programming “nerds”) the language they use is much less relevant. They are able to shift gears between languages pretty quickly. The biggest thing they have learned is the ability to read documentation and problem solving. My goal is not to graduate outstanding programmers in language X, but graduate students that have the background to learn language X quickly.
Alice – I did it for a semester with a class of 7th grade boys and have had several Programming I classes play with in for a couple of months. They enjoyed it but there were some issues. It crashed, regularly, taking with it any work since the last save. It needs a large monitor due to all the windows on the screen. A lot of the programs were not programs; they were animations to make a character move in a pattern. It is hard to follow a larger program’s logic because a lot of the code cannot be seen at once. Very attractive to beginners.
Scratch – Presently being used in our elementary school to introduce some very basic programming concepts. I really like it with young kids because they can write their own simple games quickly. Again, like Alice, it is difficult to follow a larger program. Like Alice, the drag-and-drop is nice for young kids.
VB – I have the most experience with teaching VB so I do like it quite a bit. The IDE is nice for beginners and it is also nice for experts. I think sometimes the IDE is a bit too much for beginners, too many things to keep track of; properties, windows, code, etc. I like it as a second language.
RobotC – The Lego robot really attracts kids. This language requires no motivation to get the kids into it. It does have some documentation issues. I use this language in almost all my classes for a part of the semester. Writing a program then seeing the robot execute it is much more exciting that writing the average program that only does some action on the screen. K-12 love that little robot. RobotC is a C-based language which some programming teachers seem to object to but the code needed to motivate the robot is very simple to learn and transfers to other languages nicely.
NXT-G – Not good. This is written by Lego for their robot. The wire thing to pass data is just bad. Being able to write a program in this may teach programming logic but nothing else transfers. This language is a royal pain and all the kids hated it. Trying to follow the logic in a long one of these programs is not pleasant.
Small Basic – I love this language for beginners. It fits all my criteria nicely and the kids really enjoy working with it. Of course it does have some issues. It would be nice if it used parameter passing and local variables. Overall I think it does everything a beginner needs to learn the basics of programming. With this as a foundation it is not too difficult to step up to a more advanced language.
C#, Java, Python – I have tinkered with all of them and think they simply require too much knowledge initially to be a beginners language. I think C# and Java are great for a more advanced course, C# because I think it will be a future powerhouse, Java because a lot of university’s have it as their primary intro programming language. I feel that these three have about the same learning curve and if you can learn one you can learn the other.
In my last couple of intro courses I started with some simple Small Basic programs, then went to RobotC for some robot fun and finished with VB so the kids can see a commonly use commercial IDE. Interest and retention for a second semester has been good. I may have some of this batch hooked for a third semester next year. Maybe I will try some Win7 Phone programming with this class next year? Sounds like fun that may involve learning.
This is always an interesting topic and can generate some very interesting discussions. It is also a topic that I consider a high priority and one I think about all the time. When I say first programming language I am thinking middle school or high school. This language maybe the first, and last, programming language a student may work with. Being the first this language must set the tone for prospective programming students in the sense that if it is a pain to work with (lacks “fun” features, crashes regularly, has a difficult IDE, etc) it will ensure this is the last programming class they will ever sign up for. I teach a lot of beginning programming classes, usually to freshmen or sophomores. These classes are not full of aspiring programmers. The classes are full of kids that could not find another class to take at that time period (one of the handicaps of a small private school) and the kids are sort of a captured, sometimes unwilling, audience. These students do not revel in the pure joy of writing a quicker algorithm and sitting in front of a computer hammering on keys is not their idea of a good hour. I have some students who really enjoy programming and can sit in front of a computer for hours hammering away. They are scarce and, in my experience, are freaks of nature. It is the main stream kids that present the problem of what to use for a first language. My school has two programming teachers; T, who teaches most of the programming classes, and me. T is a business teacher who knows some Visual Basic. His specialty and interest is in the business field, not in the CS education field. He does teach a good intro VB course for freshmen and sophomores, not because he loves VB, but because it is the language he knows and he really does not have the time or interest to research into other languages. I am the school’s computer tech/geek and I pick up the left over CS classes. I have a thing for wanting to write the perfect CS curriculum containing the perfect Programming I course. It is fun to dream so it is a burden I bear. I dabble in several languages for education because I am always looking for a “better way” and I also get bored easily. Since I teach at a private school and can write my own courses I have the opportunity to try different languages with my students without having to through a dozen committees and a lengthy curriculum approval process. I admit I use my students as guinea pigs but so long as I achieve my general target goals for a programming course and the kids learn some programming without despising programming I think I am good to go. I have had a chance to do intro to programming courses using several different languages. The list includes Alice, Scratch, VB, RobotC, NXT-G (Lego robots) and Small Basic. I really do not think I should include Apple Pascal and Apple BASIC in this list even though I used to teach with them back in the Stone Age. I have also taught with C# and Python but not in an intro course. I am definitely not an expert in any of these languages, especially C# and Python. I typically tinker with a language for a while, then give it to the kids to tinker with and observe how well the language goes with them without me giving them detailed daily lectures. If a language tempts a kid to explore on their own then it meets one of the requirements in my fuzzy list of criteria. Here is a list of what I think is required for a language to be good with beginners.
- Has some kind of attractor (turtle, easy to write a simple game, robot, easy graphics of some kind) to get the kids interested. After all, programming is an elective.
- There is decent documentation for beginners.
- The IDE is easy to manipulate.
- The language does not crash on cheap computers.
- Has very little “don’t know what it does but it is needed to make the program run” kind of code.
- The language and/or IDE can be installed by a beginner.
- Can be used for really simple programming projects to reasonably advanced projects.
Stay tuned for my first language critical evaluations in the next blog post.
I love it. Turtle graphics is not as obvious as it seems. For VB it is necessary to install the Small Basic library as a resource. For Python the “from turtle import *” is needed and then knowing to close and reopen Python (that one took me a while). The kids learn the idiosyncrasies of Scratch. The little detail that the Scratch sprite does not start from a home location each time the program is run requires some initial planning in the program. The assignment is not making them great programmers but it is definitely stressing their problem solving skills. The kids learned that cut and paste between languages works, sort of, and is usually not the best way to save time. The result of cut and paste is just a bit buggy and it is actually easier to write from scratch. I am getting a lot of “Hey, look at this. Isn’t this cool.” kind of comments. The house building has also turned out sort of interesting. Outhouses, igloos, castles, all requiring some thought. Good stuff.
My wife teaches at a local public middle school. I have several friends that teach at the local public high schools. The big stink at both at the moment is graduation numbers. One of the three high schools in town has a graduation rate of about 78% while the other two are in the low 80’s. The teachers are being pressured to increase those numbers. I am not quite sure why this is the teachers responsibility. It would seem to me that the only real method that teachers have to increase graduation rates is to make classes easier and thereby inflate grades. Teachers cannot re-write the curriculum to make it more “inspirational” and “relevant”, that decision, especially in public schools, is a committee thing that takes years of meetings and indecision. Would “inspirational” and “relevant” even affect graduation rates? Here is an alternative suggestion. Put the onus on the students and the parents. If high school graduation is so critical then let’s write some laws to increase graduation percentages. For the parents: if your child/children have a failing grade your taxes will be increased 50% for that year. This increase will help alleviate the tax income lost to the State when that student is unable to get a job other than minimum wage. The problem with this is that the parents of most dropouts are low income themselves. That 50% may not account for much. For the students: if you drop out you will not be eligible for welfare or any other State supported aid because you deliberately reduced the possibility of make a decent income and therefore of paying your fair share in taxes. Would these laws fly? I can imagine the ACLU going just plain wild. The right wing would scream something about another attempt by big government to control the lives of citizens and the left wing would scream about the government interfering with a citizen’s right to be an uneducated worthless contribution to society. The quiet majority would say “Do it!” But they are usually quiet. Still, it would be fun to try. In reality, what affect does a teacher have on the dropout numbers? Does being boring and dry really make a kid quit school? How much affect does an “inspirational” teacher have on students that would be inclined to dropout? I think if we really got down to it we would find that the school or teachers have minimal affect on the dropout rate. The need to get a job to pay for rent and the car, “true love”, pregnancy, the need to get out and live (usually at minimum wage) as opposed to sitting the classroom six hours a day would seem to have a greater affect. None of these are factors that a teacher can really, except in very rare cases, affect. If the dropout rate is high or higher that desired, look outside the school where the important things in a kid’s life are taking place.
This is a simple assignment. Use turtle graphics to draw a house. In three different programming languages with extra credit for a forth language. My goal here is obviously not three houses, but to get the kids to translate from one language and IDE to another without a big fuss. I give then a list of languages: Small Basic, Visual Basic, MSWLogo, C++, C#, Scratch, and Python. The fact I cannot do the assignment in C# or C++ just adds a little excitement. I was considering putting RobotC in the list but then there are space issues, drawing on the floor issues and tying a pen on the robot issues. An interesting observation: the kids learn that cut and paste sort of works, especially between SB and VB, but that they then have to change the syntax for the second language. On their own they are learning the conundrum – de-bug or start from scratch. Good stuff. These kids can operate in SB and VB fairly well. This is the second semester of programming for some, forth for a couple. Some have done a little Scratch. For guidance I am basically telling them to read the documentation or look at samples they find online. In reality this is not much of a programming assignment; it is more of a research assignment. I thought how most of the programmers I know learned programming languages. Very rarely was it by sitting in a classroom while some knowledgeable expert demonstrates all the ins and outs of a language. Usually it is by reading the docs and finding examples of code. I want the kids to read and tinker, ask the kid next to them, dig around on line. The assignment is simple, the kids think it is simple, but they are working their butts off and do not even notice it.
This is a blog about my high school CS teaching experience. I teach at a small (200 9-12, 300 K-8) Catholic school in western Montana. My first programming experience was with FORTRAN and punch cards in 1971. I have been teaching Programming and tech since 1983. I started on TRS-80’s and then graduated to Apple IIe’s. I am now pretty exclusively PC (not on purpose). The blog will post ideas and hope for response to them. I am always searching for better, more interesting ways of getting kids involved in working with computers. Absolutely nothing in this blog is supported by extensive research.
Being small and private allows a lot of flexibility in curriculum and no flexibility in budget. Actually, no budget is more like it. The CS and technology department operate on free stuff, donations and the occasional grant.