Sunday, April 23, 2017

How and/or Whether to Teach Code?

Before the articles, I was convinced that everyone should be taught to code as early as possible. Now I'm less sure.

I'm convinced that some form of coding is indeed the new literacy. Before I thought that would look like everyone learning Python, at least. Now I'm not so sure. On some level, it's empowering to be able to have a problem and just be able to code it up. It's also empowering to know what problem can be quickly solved, and what's near impossible.
For example, I wanted to convert a picture's color into more basic colors. (Like a complicated PNG photo with thousands of different colors to a simpler one with only 10 specific shades of blue). I knew I could do that, and did. But if I wanted to, say, identify different types of trees in a picture of a forest, I would never try to solve that on my own because I realize that it's an incredibly difficult problem.
These projects won't be necessary to survive (like reading/writing), but they made life much easier (like reading/writing). I feel like the main part of coding literacy is understanding what problems can be solved with computer science and what ones are better off being done manually. An assembly line worker may do repetitive calculations or motions that he could better solve with an algorithm, for example.

So in that sense, coding could make life much better in the same way that reading and writing did. However, learning a specific language is going to get bogged down in the details quickly. In that sense, I think there should be some form of computational thinking taught.

The main benefits of introducing everyone to Computer Science is that more and more work is going to be automated away, and Computer Science jobs are only on the rise. At this point, it seems that there is more CS jobs than applicants (although it doesn't feel that way listening to my peers). Overall, it is a valuable skill that not enough people are aware of and would be good at, so it should be taught at lower levels.

The main challenges are lack of teachers and how exactly to teach it. No one wants to teach it because schoolteacher doesn't meet the move-fast-break-things ideology and doesn't pay as well as the industry does. Also, no one knows how to teach it; one article noted that LOGO didn't really catch on in the 80s, but we're still trying it now. Also, some students struggle with diving straight into a language; the semicolons and odd rules through them off, or scare them outright.

How does this fit into K-12 education, though? What exactly should be taught? What should be dropped? I think that foreign languages should be dropped as a requirement and replaced with some form of computer classes. It can start early, as early as Kindergarten if need be, with really simple "computational thinking" style stuff. Maybe just literal building blocks being put together, like real-world Tetris. Or some form of challenge with Legos. Or even a cooking class; one article draws strong parallels between cooking and Computational thinking. I do think that, by high school, kids should be working with real languages, but we don't have to start with that. Start with the baby languages, or whatever the research thinks is best. For example, algebra is important to know in high school, but don't teach it to 1st graders. Teach them the basics they'll need later, like multiplication.

I learned straight Java, and it worked really well for me. And thinking back to those classes, I realize that I've forgotten just how long it took me to internalize all the syntax. Even

if (statement)
{
    Do this stuff
}
But if statement is false skip here and do this stuff

took a while to really internalize. For loops took forever to figure out, but now I can read them almost like I can read English. But basically: learning a real language is hard in ways that experienced coders forget, so maybe we shouldn't teach it right off the bat. However, I think the thinking behind the code is very important; it's almost basic problem solving. The point of this side note is that coding can be difficult, and while it worked for me, I would be willing to rescind my "everyone should be getting to a real language by high school" statement if research showed otherwise.

I think anyone can learn to program. Again, it just sorta clicks with me, so it's kind of difficult to understand otherwise. I tend to think that with good enough instruction, started early enough, just about anyone could learn to do just about anything. And I think everyone should learn some version of code, even if it is just a "Problem Solving" class rather than a strict coding one.

No comments:

Post a Comment