If you follow my personal blog, then you already know that I started tutoring about a month ago. Tutoring has been a rewarding endeavor and I can see me continuing to do it as long as I breathe. But with tutoring comes a lot of confusion in the techniques used to teach newcomers to programming, such as pseudocode.
Pseudocode has its place in technology…
The only time in my studies have I found pseudocode to be useful has been in my software engineering course. In this course, pseudocode was used to explain snippets of code to executives and customers so that they can get a feel for what the program would do and to get a bit more technical without using actual code. In these situations, syntax is not as much of a concern as getting the functionality across to the client.
Where pseudocode doesn’t belong is teaching people how to code…
I understand the desire to take baby steps to teach newcomers how to code. We do not want to overwhelm them and have them running for the hills before they have even gotten their feet wet. But I wholeheartedly believe that using pseudocode fosters more confusion than necessary. I tutor students from 4 different Intro to Algorithm and Design classes. Some professors have their students translate their code from pseudocode to C code and have them practice it in an IDE. I find that these students often mix the syntax between the two and it leaves them more confused.
Where is the breakdown?
In one class, it’s like learning two different languages. If pseudocode is to be used, I personally believe that professors should chuck syntax out of the window. Let them type whatever they want, as long as they understand the concept, who cares if the student types “Set count to zero”, as opposed to “count equals zero”. Let them get the concept that they have to assign a value to a variable without the added issue of worrying about syntax. Pseudocode should not be it’s own language, in my opinion. Why? because it varies across text books, and even in the same class, it’s taught in different ways. Also, a student can not run pseudocode to check to see if what they did was correct. For the first week or two, let them logically write out what steps they are taking in the program without fake syntax. I have found that since they are so caught up on syntax, they skip over the logic generating portions of coding because they are so worried that their professors will take off points from fake code.
I suppose I believe that pseudocode is helpful, but only when used as a logic-generating tool in order to get the student thinking about their program without focusing on syntax and actual code. The other part of learning needs to be using a language that is easy to use. There are many languages that I think would accomplish this. I like Python, personally, but I don’t care what the language is really, as long as they are learning syntax with an actual language. An actual programming language should be used to teach the syntax portion of learning to code, not pseudocode. By using an actual language, the student has access to a developer’s API to use as a learning resource. They should be allowed to learn while using a language that can be compiled in order to get immediate feedback on their errors. An actual language should be used so that students can do web searches and watch tutorials in order for them to solidify concepts in the way that they learn best.
Using an actual language to teach syntax is best because the student is then able to play around in an IDE, make changes, and get a feel for how programming works. Pseudocode, more times than not, leaves students more confused and frustrated. It was no surprise to me that students were able to pick up on using C much quicker than using pseudocode, and it’s not because they learned pseudocode first. They were more successful with using C, because they were able to get feedback from the compiler, research online, and use developer documentation to correct their errors.