system
Given the following post, respond as if you're commenting on Reddit:
human
CMV: Student assignments in introductory programming courses should always be full programs in normal languages, not "fill in the blank" snippets in toy languages.

I work as a computer science tutor and sometimes have students needing help with "fill in the blank" questions. The format is a website where students provide the implementation for a given function - say to sort an array - and then submit their code. The website reports back what the expected return value was and the received return value, and then either rejects or accepts the submission. Students never write complete programs - they only practice programming through the sort of fill-in-the-blank exercises I've mentioned above. 

The last time this happened, it wasn't even in any normal language (Java, C, C++, C#, Visual Basic, JavaScript, PHP, etc...). The student couldn't name what language they used, so I guess it was a special "toy" language designed for intro cs students. 

The problem is, I often have students who know absolutely no programming whatsoever. They don't know how to print "Hello, world!", they don't know how to declare a variable, never heard heard of a "loop" before, and so on. I basically have to start from scratch, spending our hour giving a lesson on introductory programming topics. 

I normally do this by showing a complete example program that illustrates the building blocks of coding and having the student iteratively modify & run that, to explore first-hand how the building blocks work. It's not perfect, but I haven't found a better teaching approach - Socratic method question asking is useless when students know *nothing* at all, and writing lots of wordy notes just makes their eyes glaze over. 

Unfortunately, I cannot do this when students have no way to just create a blank program to begin building & tinkering with, nor am I able to build example programs for students to illustrate concepts if they're using a course-specific toy language that no tutor would be familiar with. 

Introductory programming courses following the format I've described above are just bad and do a woeful disservice to their students. 

How can you CMV? Research showing that students who begin learning programming using a "toy" language instead of a normal one have a higher success rate would help. I'd also like to hear teachers' reasoning for not using tools that allow students to just make up their own programs from scratch, outside the context of answering assignment questions.
gpt
Algorithms and their teaching predates computer science by literally thousands of years. If a student truly is learning about algorithms (such as a sort), and trying to answer a question on the best way to achieve X, there's absolutely no reason this needs to be conducted in a programming language. Programming languages and algorithms are two different skills. Whilst they come together in programming software, they can be taught separately. 

&#x200B;

I have a degree in 3D animation, and in our first year we studied the basics of a number of topics - modelling, texturing, life drawing, traditional animation techniques, character rigging etc. As time goes on and you get better versed in these different topics you can more easily overlap them, taking a single idea to its logical end point (a character design and story idea in your head --> an animated short film viewable on a screen).. If you want to teach someone character animation, you can either provide them with a modelled, rigged and skinned character and then start with the basics of actually teaching animation, or you can insist that they model, rig and skin their own character and only \*then\* begin to teach them the basics of animation. The former is preferable for a whole host of reasons, not least of which is that your modelling improves when you have experience of actually using the model to animate with. 

&#x200B;

In other words, if you want your computer science students to begin learning about algorithms from day 1 (and surely this is vital), you need to allow for them to complete the work in something other than a programming language. This way they can learn both in parallel (and whatever else might be important).