Thursday, December 12, 2013

Programming Declared "Critical Foreign Language"

The America Can Code Act has been recently introduced to the US House of Representatives. It is said that it will add computer science to the list of foreign languages that are useful for US students to learn, including (I think) Spanish and French. There will be some sort of incentive for schools to teach computer science all the way through school.

What they're trying to accomplish is great! In a world full of advanced technology, most of which contains advanced programmable processors, almost anyone can benefit from knowing how it works. Of course, educators will have to choose a good learning tool to introduce the concepts - hopefully not the disaster that is Scratch. (More on that and other gripes with CS education in "Teach Real Programming, Please.") With the sudden interest in having kids learn programming, a well-thought-out curriculum will probably be developed.

I'm not sure how I would feel about the Common Core assimilating computer science into their collective. They would probably find some way to make it apply to somewhat-immediate life, but CS is such a quickly-growing field that almost any use for the things the kids are learning would be slippery. Therefore, the CC might try to teach concepts, like data hiding, polymorphism, and type systems that can't do anything on their own.

Also, nobody speaks programming. There is no level of geekness that could prompt someone to use any scripting language for verbal communication. Why did the proposers of the ACCA try to merge it with real language education? In my opinion, the education system could definitely benefit from being poked by the creation of a new subject.

Tuesday, December 10, 2013

Composing Songs in Nonfluent Language

I was just messing around with Lojban words and some basic tones, trying to make a coherent song when I noticed that composing in another language is a lot harder than just speaking in it. Of course, composing rhythmic lyrics in one's one native language is more difficult than just speaking, but it appeared that the two difficulties - meter and syntax - were more than summed. That is because, when speaking a language in which one is fluent, words can just be shoved together and permuted a little bit. However, when trying to write a song or poem in a different language, the text must first be translated. Especially in Lojban, translations can have wildly different syllable counts than in the native language. So, it's necessary to keep trying different ways of expressing a similar idea, selbri if you will, and translating it to see if it fits. It's a little bit easier in languages that use cmavo - particles - for grammar structure because a lot of them can be elided. However, that leads to some inconsistency in formality when trying to pack utterances of different lengths into a uniform meter. Of course, if writing for a language most people don't know, it's OK if it's not fully valid grammar!

Monday, December 9, 2013

Skill Trees in Education

I looked over some of the programming tutorials recommended by Hour of Code and found that they taught the material very linearly, even if the subject material was very divergent. I thought of the "skill trees" that some games have and imagined how they might be applied to education. Instead of having to go through every detail that the writer of the course thought was interesting, the student could start with the critical infrastructure and then get presented with an array of paths from which to choose.

Suppose a student just finished learning the syntax of a programming language and how to make it do basic IO. He should then get to choose which to pursue first: file handles, rendering, classes, or whatever else you can do with basic understanding of programming. Even better, for a computer science course, things like binary and networking could be unlocked in parallel to programming.

With skill trees, students could see their progress split into a huge sprawl of new things to learn and see how all these interesting skills work together. Perhaps some experimentation or studies are in order?

Sunday, December 8, 2013

Bankruptcy is Theft

In today's culture, when people get so insanely far into debt that they have no hope of ever repaying their loans, they are encouraged to file for bankruptcy. When one succeeds in doing so, all debts and contracts are destroying, producing a new credit score. That sounds pretty nice, but...

It is, essentially, theft. The process of bankruptcy causes the money that the creditors gave to be simply destroyed. Nobody will ever give that money again. The money that would eventually be passed around, or used as interest to pay for the user of money, is withheld from whoever economics would eventually give it to. So, bankruptcy is theft from not only the creditors, but from inventors who could have used it to better the world.

Wednesday, December 4, 2013

Teach Real Programming, Please

Maybe this belongs at Fleex's Lab, but it seems that's a place for technical documentation; things pertaining to computers that are nontechnical can be here.

I'm all for the Week of Computer Science and the Hour of Code and all manner of other in-school programs that teach kids basic coding and computer science skills. In fact, I've done some teaching on it myself from time to time.

I'm a little bit lukewarm as to "programming languages" designed to help people learn to code. Stop: Yes, the B in BASIC stands for Beginner's. Microsoft just keeps the name because it's catchy; VB is far beyond beginner's tinkering. Things like Scratch are kind of programming in that they require you to think about program flow. However, these usually - still looking at you, Scratch - are fully visual and are a pretty bad example of pretty much any modern programming style. In Scratch, you're presented with tools that are better suited for silly slideshows. Variables are considered advanced. No. Scalar variables are some of the first things students should be learning, right after the obligatory console-outputting one-liners.

Slideshow programming is not programming at all. Get the kids into an IDE with a debugger, a compiler, and some syntax highlighting. (IntelliSense wouldn't hurt either.) The main issue is that it associates action with visual change, which is not usually how stuff works in the real world. When there's an error in the program logic, visual symptoms will usually happen considerably later in execution. We need to see the state of all the variables at each stage to really understand what's happening.

Code Academy does it very well. They use a real language, JavaScript, and provide easy-to-follow instructions. It might be a little too restrictive for those who want to jump ahead, but it's amazing for beginners. It would be great if it was offline-capable and taught OOP sooner.

Other things, like that one that lets beginners "code their own games" online, are not so good. First, it overwhelms the newbies with all manner of infrastructure that will cause scary errors if accidentally perturbed. Then, it doesn't explain what all this fancy stuff is - it just orders them to place a mysterious line in some special place that will cause awesome stuff to happen. If I had started programming with this, I never would have made it to where I am.

So, to all the lower school teachers and CS-spreading enthusiasts, please, please take the time to understand what the kids are going to learn. Teach them binary if it will help. Teach them how networks work when you start teaching how to create networked programs. Teach them, at every stage, why what they're doing works. This is what we need for a bright, technology-integrated future.