Additional profile information on Alfred Thompson at Google+
Recently there was a tread on the Advanced Placemen Computer Science (AP CS) teacher mailing list about students who were teaching themselves to program using programmable graphing calculators. There were some strong feelings about this trend and they were not positive.
The limitations of these calculators in the way the programming language was structured was given as being a big part of the problem because it taught bad development practices. For example students had their code print out results rather than develop methods (functions) that returned values.
There may be some truth to that of course. But I wonder if the real problem is just the fact that students are teaching themselves in a vacuum. Just as a lawyer who defends himself is said to have an idiot for a client I wonder if someone who teaches themselves often has a poor teacher.
I do think that someone can learn a lot on their own using books, mentors and other resources. But I don't think one can do a good job of learning programming using just a language reference guide and a few bits of sample code. That is how I believe most or at least many self-taught programmers are learning how to program. Even with a great programming language there is more to programming than just knowing the syntax of the language and some basic concepts. There is a lot of theory and best practices that are very hard to reinvent from scratch. Someone learning to program on their own is likely to fit programming into their own limited experiences at problems solving and algorithm development. They are not going to reinvent a whole set of best practices which they might easily learn in an organized class with a well-trained and experienced teacher and a textbook.
Of course I have run into many self-taught professional programmers in my career. But I think that it is safe to say that they have learned a lot from other, more experienced and professionally trained programmers, from books, from reading a lot of other code and from long periods of trial and error. Most of them would have been better still if they had more formal training. In fact many of the best started out learning informally but added formal training later in their careers.
I think that most students who are learning how to program using programmable calculators are learning bad practices not just because of the limited capability of their calculators but because they are learning without proper guidance. People do write great code in assembly language which is far more limited than calculator languages but they do so with some training and guidance. We offer training in computing and programming late in the educational process. We could teach students to program in middle school. Problem solving and computational thinking could come even earlier. But because we don't do that some students are going to try to figure it out on their own using less than ideal tools. We should not blame the tools but the system which has let these students down.
For no better reason than to share a look at what it out there is the way of blogs about education and education technology and perhaps give some of these blogs some general "link love" I decided to share the list of blogs in my RSS reader (I use RSS Bandit) under the Education category. Some are blogs by teachers; some are from consultants or organizations. Some of the teachers teach computer science while other teachers teach other things but use technology. Some are focused on educational politics - some are on the right and others to the left. I like to read both sides. Some avoid politics completely. The people in my group who blog on education are listed elsewhere on this blog site so I left them off this list. One of these days I will take the time to sort them out and categorize these and other blogs I follow but today is not that day. Sorry about that.
Now to be honest I don't read every single post on every single blog. Some of them are rarely updated for example. There are some I skim the titles of and read if something looks interesting. I could not possibly even do that much if I didn't use an RSS reader. It would take far too long to visit each web site on a regular basis. RSS Bandit lets me look to see if anything is new, judge quickly if I have or want to make the time to read what has been posted.
Of course you don't need to have many blogs to follow to get value from an RSS Reader. Even if you only follow a couple or even just one (if only one I hope it's this one) you will save time by using an RSS Reader over visiting each web site directly. You can learn more about RSS readers (also called aggregators) on Wikipedia. [Edit: Another good article may be found here.]
Here in no particular order is my list:
Tom Hoffman wrote a long and very interesting reply to my previous post for which I am very grateful. He makes some thought provoking statements and I like having my thought provoked. I was going to reply in an additional comment but things got really long so I decided that a new post (this one) was in order.
The short version though is that Tom doesn't make a good case as to why a language being non-proprietary is relevant. For example, I think that if a person says "I want to give my students a copy of the software to use at home" that is relevant. That has absolutely nothing to do with the language being proprietary or not. Tom talks about different things that are relevant but does not make a good case that these issues are the property only of non-proprietary tools. He also doesn't make a good case for why proprietary or commercial tools are "bad" or should be avoided.
Further I would add that automatically ruling commercial software out just because it is proprietary or commercial is closed-minded, short sighted and intellectually indefensible. Teachers should be judging a product on how well it does the job not on who produces it.
Tom's comments are in italics below. My replies are inline following Tom's comments.
First off, there is nothing wrong with an educator using free software for philosophical reasons. Teachers often make decisions for philosophical reasons. I'd be frightened to trust my kid with someone who didn't.
Well it depends. How would you feel about a teacher who refused to teach about George Washington because the man was a slave owner? Valid philosophical reason or not? I think that the philosophy used should revolve around how well a tool teaches concepts rather than around the source of the tool.
Now, what do you get with a free software license?
1) the freedom to use the language for any purpose.
For schools, the most important part here may be that this right doesn't expire. You don't have to renew the license, you can't be forced into paying for an upgrade. This isn't a limited educational version, you can use it to write and deploy any kind of application you want.
This is not something that non-proprietary software has a lock on. I don't know very many licensees that expire. The license for Visual Studio does not expire. And the academic version is the professional version with a different label on the box. Hardly limited. The difference is in the license which does not allow commercial development. That does not limit students in a first programming course in any real way. If fact any commercially viable software would easily generate enough income to buy a commercial license.
2) the freedom to study how the language works and adapt it to your needs.
Is this of practical value to 90% of the kids in an intro class? Probably not. Is it of value to teachers who really want to understand what they're teaching and kids who are fired up about programming? I think it is. Good programmers learn a lot by reading well written code. You can read and learn from code that would be too complex for you to write, or understand completely.
If by how the language works you mean looking at the source code for the compiler, I would argue that this is of use to fewer than 1% of the total population of people who have ever programmed in the history of programming. Of practical value to a single student in a first programming course? I don't think so. You can understand quite a bit about how a language works without having access to the source. Should the student know more than what is being covered in the first programming course? Of course, but that will be something they learn during their training and not something they will require in a teaching tool.
But beyond that, yeah, this is a philosophical issue. I believe that computer science is a science, and I can't imagine being in another science class, like biology or physics, where a student would be told, say, "Well, as a matter of fact, mitochondria do have their own RNA, but I can't tell you why, because that is a trade secret." We should value engagement and drilling deeply into issues, without running into black boxes and proprietary code.
You are addressing issues that are years away from a first programming course and outside the scope of my post. Interesting to be sure but a red herring in this discussion.
3) the freedom to redistribute copies.
This is very important for schools. The language isn't limited to specific computers in the school. It can be installed at home by students. They can install it on their friends computers and show their friends how to program.
You mean like Visual Studio .NET in the MSDN AA program, Visual Basic Express (free download) or the command line compilers that come free as part of newer Windows installs or updates though Windows Update? I don't see the connection to open source.
4) the freedom to improve the program, and to redistribute your changes.
Maybe not a big deal on the local level, but globally, it means that derivatives can be created that may suit local or educational needs better than the generic version.
You do understand that you are making an argument against using Java and for using C# right? There are several C# compilers available in source form and one can easily make ones own modifications to the language without fear of legal action. The same is not true of Java which is a proprietary language and which Sun has taken people to court and won hundreds of millions of dollars in judgements against a company for making changes they didn't like.
I'd like to address this on several fronts. First off it seems irrelevant to a first programming course. Neither students or teachers are going to be modifying compilers in that course. Secondly I don't see a whole lot of need for modifying compilers or IDEs by non-professionals. In fact few professionals are up to doing major modifications to compilers and IDEs. Even when they are I think that too many derivatives can cause software to be less productive as a teaching/learning tool because of a lack of consistency. It also makes finding comparable textbooks problematic. Further more it can make sharing of sample code and projects difficult which can limit what teachers can use in class.
The may be some value in source availability for established professional developers but a) I don't see it for beginners and b) I don't see many professionals taking advantage of it either.
Also, cross-platform compatibility does not always accompany free software, but it often does, and it is important for keeping schools' options open for their OS platform, and it ensures that students can use the software at home.
The idea of cross-platform comparability does have merit. At the same time I think that in general the costs of maintaining multiple OS platforms in a single school (I have some experience in this from previously working in schools) adds costs and complexity that is hard to justify. Running Macs for graphic arts program makes some sense even though the rest of the building is Windows for example. However maintaining two platforms for teaching the same subjects is generally not a good idea. That's just my opinion based on my own experience in previous jobs in a couple of schools.
FWIW The nice thing about a fast Internet connection is that schools can offer Virtual Terminal Access to a development platform at school for students to access from home on any platform. That is not used nearly as often as I think it could be or should be.