Wednesday, August 29, 2018

Teaching Programming with Blocks vs. Teaching with Text-based Languages

Blocks or text? Which should I use with beginners? On one hand, I read research backed articles like Mark Guzdial’s High school students learning programming do better with block-based languages, and the impact is greatest for female and minority students which strongly suggest I should be using Block based programming languages. Well, at least in the first course. On the other hand, I had programming in block-based programming languages.

a-collection-of-quotes-from-w-edwards-deming-4-638Sure it should be an easy choice – go with the research. Sometimes I hate data. What happened to when we could all just go with our guts?

Seriously, it is hard to argue with peer reviewed data and I am rethinking a lot of things. I currently teach four different courses and each one uses a different programming language. Advanced Placement uses a combination of block-based programming that migrates to text-based JavaScript. That’s ok I think. Most of these students have had previous programming in either or both blocks or text languages.

My mobile application programming course does use a block based programming language (currently AppInventor) and it works well there. Most of these students have had very little if any previous programming experience. The pace is slower than my honors or AP courses and students seem to like it. I need better assessment tools to really understand how solid of a foundation they have for future computer science and programming. That is something I am working on.

My Honors Programming course uses C#. These are students who, for the most part, are highly motivated, have a good base to build on, and want to be challenged. I think C# is a good language for them. Opinion I admit.

Where I am really having to think hard is with our freshmen class. We currently introduce programming with Visual Basic. Should we be using a block language? Maybe. Unlike the other courses I teach I am not the only teacher. I teach two sections out of a total of 11 or 12 sections. Three other teachers also teach sections and the department chair teaches more of them anyone else. So it is not just my call. At least not for everyone.

What I am currently thinking about is doing a pilot with my sections. What I need to do first is come up with some sort of way for use to assess the difference (if any) in results. Since I teach the second course for many of these students I could look at who takes more programming and how they do with the next course but that takes a lot of time. And how do I know if the language used influences (and in what direction) if students do or do not take more programming?

I guess I have research to do. On the other hand, if there are some of you who have made this sort of change and would like to share what they have learned I’d love to know about it.


Garth said...

I am not a big fan of block coding beyond that first few weeks with a total novice. As soon as a student wants to make anything beyond a very basic program the block language just get too unwieldy. My favorite beginner coding language by far is Small Basic. There is no close second.

Tami Brass said...

We do block-based programming K-5 with a variety of environments - Scratch Jr, Scratch, Blockly. When students get to 6th grade, they do more block - SLNova and MakeCode. Once they hit MakeCode, I encourage kids who are interested to look at the Javascript side. By this point, many are ready. It's at the end of the trimester, and many have had a strong foundation in elementary school to build on. In 7th grade, we transition to Python. It's accessible and engaging. The lessons are also highly structured in the beginning to make it accessible. Kids who are ready soar pretty high. Kids who aren't as ready glide but still have an upward trajectory. Students who enter mid-stream need a little more support, but that's to be expected. Feels like a good path.

I'm curious how the research will evolve with so many other schools beginning programming in K5. If kids build confidence early (block-based is really good for that), they're ready for so much more by middle school. I can't wait to see how the kids I've had the past couple of years (currently 8th grade) do in upper school. The students I first did CS with in 6th grade (2 week unit with block-based) are juniors this year. (I added more each year until two years ago when it became a class of its own.) In the three years they've been in upper school, we've gone from 0 CS to a f/t teacher and a part time. Tons of demand. Can't wait to see the evolution once my current 6th graders - who've had CS since K/1 - hit 9th grade!

Anonymous said...

As a high school computer science teacher I used Microsoft SmallBasic for the introductory course. Most of my students were able to successfully transition to Python and Java. Personally, I preferred starting with a text based language. That being said , I really feel that there is no one “right way” .

Mike Zamansky said...

I wouldn't place too much value in "peer reviewed data." We might start with reproducible data but I'm left with many questions:

If the results don't jive (not saying they do or don't in this case) with a teacher's experience, which is more valid? Is a broad based survey more valid than the eyeball test of a reflective teacher and their peers? If it's a smaller study - I asked on Mark's post and one piece of research was considered valid because it surveyed 3 groups of 20 kids twice. To me that's not nearly as rigorous as me and a colleague running some experiments on our classes over a couple of years. Of course we're not then going to say that our results are the be all and end all, only that they worked or didn't for us in that place at that time.

Which is the final point - how many variable aren't accounted for? Are these new CS teachers who don't have much content knowledge, were trained with materials and scripts for block based languages and also repeatedly exposed to gender issues or were they a bunch of crusty old CS professors who taught with blocks for a semester? What happened in the next year class? Did they learn meaty material or will they just drop out of the major a class later?

Not saying that research isn't valuable and shouldn't be read but there's a reason why education research is in general held in low regard - many ascribe it to be more than what it is - just another piece of information that may or may not work in your specific situation.

Anonymous said...

Quote from one of my more experienced coder students now using AppInventor for a class

I never thought I would miss Visual Basic.

Anonymous said...

Mike, you make some good pointes there. And I am a little skeptical of the study. It doesn't feel quite like a match for my experience either. But I worry about my own biases as well. I sometimes wonder if being extremely knowledgeable about programming is a hinderance in teaching total beginners.

Garth said...

Most of us reading this post are not much for research. We have years of practical experience to base our opinions on. We try things with the hope for improvement for our students. Block coding, line coding or some hybrid; they all work if the fundamental concepts of programming are covered. If I were training kids to be professional programmers then blocks would be out the window. I am not. I am teaching kids what programming is about and to give them a general view of the field. My kids that are looking at elementary ed need block coding, the kids looking at CS or programming need something a bit more industry based, the kids just looking need nothing more than something like Small Basic and maybe some simple Python. In all cases if I can teach them how to learn to code I am golden. A lot of what we do in our classes is also based on the school we teach in. We are a liberal arts college prep high school. A rigorous programming course in Java or something of the like would get me maybe one student a year. My present light weight programming curriculum (Scratch, Small Basic, Python, VB, Unity) gets me 40 this year out of an enrollment of 153. I am happy.

Andrew Williams said...

What were the entry and exit points for students in this study? Without that I'm at a loss to see what determined learning/improvement? There also is the issue of how highly directed the programs of study were.

Is there a link to the study? Not sure if I saw one.

Doug Bergman said...

Good questions you post. In our freshman course, we try to give them a true taste of CS through a variety of technologies and langauges. We use Python for a game design section. It's the first thng we do and it is our hook. I have not found anything else which even comes close. All text based. Then robots text based as well, but they love robots. Then we do block based like you with AppInventor. The goal is just to explore CS and give them a solid taste--hoping to recruit for the advanced classes.

√ėyvind Jakobsson said...

I see you've fallen into a trap many scientists fall into when trying to navigate the knowledge space of pedagogics research.

Scientists, especiellay natural scientists, are used to very strong evidence when making claims about hypotheses. In pedagogics, this is not the case. There are two main reasons for this:
-Data aquisition is costly and difficult.
-There is a tradition for using few datapoints in pdagogics (and plenty of other scholarly disciplines).

Pedagogics is usually classified as a humanistic discipline, and live in the peer review world of humanists.

In natural sceinces, this paper would be dismissed as a small collection of anecdotes rather than a study of an hypothesis.

My own data is more extensive on the subject, and they completely negate the conclusions of this paper.

It seems to me that so does yours.

You should feel free to dismiss this paper, as I do, on its lack of merits.