I came across this article recently: Tynker Launches Revolutionary New Platform for Teaching Programming Skills to Young Learners Mountain View, CA (PRWEB) April 11, 2013
I’m starting to think Syntax really IS important.
I recently finished teaching a 1st year programming class in Java. The last time I taught 1st year programming (I mean, really*) was in 2006.
Kids have changed.
* I taught a programming in Alice course in 2008 & 2009, but that’s different.
Read on to find out why.
Now, the kids in this class were of typical intelligence and potential. It was a relatively small class so I got a chance to get to know them (at least, the ones who showed up to class on a regular basis)
As i had done throughout the term, I gave them a ‘free’ work period for their lab on their last assignment. It was a great turnout – almost everyone was there (which is quite impressive because the lab starts at 8am). At one point I looked around the room and it struck me – this did not look like a bunch of people working on a programming problem. I asked them how many were having trouble, and almost everyone put up their hands. For the most part, they were just sitting there – no paper, no notes, just staring at the screen probably wondering why they didn’t know what to do.
I felt like I had failed them, but at the same time I realized there was a limit to what I could do in a single course – and trust me, I had pretty much tried everything I could in the time I had.
So much for digital natives. They may be whizzes at texting (I confess to some envy here as I am not) and they may spend the majority of their waking hours connected, but using is not the same as knowing.
SO much of the tech world is apps written in ways that people don’t need to learn anything – you don’t need to learn anything about the application, or indeed, even the task that the application is design to facilitate.
In many ways this is good – computers are supposed to make our lives easier, ….
BUT (see also Are we teaching our kids to NOT learn?)…..
BUT….. this does NOT help anyone learn logic, and logic is ESSENTIAL to programming. AND, learning the picky details of programming language syntax is a integral part of programming literacy.
Also, it turns out, fluency in logic is essential to problem solving in the general sense (an ability which has serious implications to our continued societal evolution & development).
- Problem solving requires attention to detail.
- You need to notice things.
- You need to be willing to try things – test stuff, you know, let’s see if this idea works.
- You need to be able to decompose a problem into smaller, more manageable parts.
- You need to be able to recognize and characterize SYSTEMS.
- You need to be able to look at something from various levels of abstraction – sometimes simultaneously.
So, here’s a BIG problem:
When learning programming using drag and drop tiles (Alice, Scratch, Tynker http://venturebeat.com/2013/04/12/why-your-8-year-old-should-be-coding/, …) they DO NOT learn syntax because we’ve decided it’s not important.And for getting young kids excited about programming, I agree that it’s a great approach. But…..
Think about this for a bit.
When you have a visually pleasing graphical interface that hides the structure of the programs you are creating, what people end up doing is just blindly trying stuff. Drag a tile in – see if it does what I need. No? OK try a different one. There’s no analysis – no thought, just play.
Play is great and all, but it turns out you need the rest too – you really do need the structure. You need to learn how to analyse a problem; how to understand a system.
I never realized until this course just how important my original training in CS was. While I would not advocate going back to programming on cards, I learned some very valuable skills because I could not simply sit down at a computer and start to code. I learned to spend the time to understand the problem; I learned to do hand execution; and to “play compiler”. I had to – I often only got one chance per day to test my program (that’s ONE RUN PER DAY). Our assignments were no less complex than ones typically handed out today – so on a typical 2 week assignment we would get AT MOST 10 chances to compile and test out programs (data centers were often closed on the weekends). When you only get 10 tries you MAKE SURE each one is going to count.
Can you even imagine how today’s students would react if you told them they would only be allowed one single compile/run in a 24-hour period? We had 2-hour labs way back then too. What did we DO for 2 hours if we couldn’t repeatedly change a line and compile to see if it worked?
Here’s what we did:
- We learned how the compiler worked so we could parse our own programs and find bugs before the compiler did.
- We did hand execution of our programs to verify that our logic was sound.
- We learned how to do what the program said rather than what we meant during hand execution.
- We learned to proofread.
We need to help students learn these skills. This is REALLY important.