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:
The Wicked Teacher of the West is looking for the most important concepts in Object Oriented Programming as she develops a new course. It's a tough question because teachers only have so much time to present material to students. That time has to be used wisely.
My list is more or less:
I feel like I am leaving something out. I need more time on this. What do you think I am leaving out? Is anything on my list not among the "most important" concepts of OOP?
Of course the basic building blogs of "regular" programming are also important.
It all has to be build around understanding problem solving and good design thinking. Without problem solving skills its all just wasted. Of course I'm just stating the obvious - right?