OK, so far we’ve probably painted a pretty picture of the NXT. But some of you are likely saying “wait a minute, where’s the down side?” And there are some – after all, this is first and foremost a toy (educational or otherwise) aimed at kids, not adults with computer science and engineering degrees. So there are some things that are missing from the out-of-the-box kit. In terms of parts, this isn’t a critical problem; I (and a lot of others… you know who you are) have a lot of LEGO around the house, and it’s fully compatible. Even in terms of motors and sensors, the NXT is a more “complete” kit than the RCX (for example, the RCX with three motor ports generally came with only two motors, while the NXT comes complete with a full complement of three motors). But what about the software?
There are (from my viewpoint – again, to be honest, I’m not the target market for this) some things missing that I really wish were built in to the software. Arrays are a really good example: NXT-G has no official support for arrays, yet I find them very useful. But NXT-G is powerful enough that with a little bit of work (and a good deal of fun) I can get around this, and have my own arrays!
The method I’ve used (I’m sure there are others) uses the file system on the NXT. For each element of an array, I just create a very short on-brick file to hold that number: essentially, the array is just a series of numbered files on the NXT. What would be really nice is if you could just add this ability into NXT-G in a way even a kid could understand. Gee, yeah, that would be really nice…
Here I’ve created two MyBlocks, ArrayRead (which will read a number from a specific element of the array) and... ArrayWrite (to write a number into the array). Take a look.
With these as MyBlocks, all these messy details are hidden, and almost anybody can use them as easily as the "stock" blocks from the official NXT-G pallets. For instance, to test these MyBlocks I wrote a simple program that just puts five random numbers into an array, and then reads them out to display on the screen. Notice that the code is pretty much self-documenting used this way.
While this is a reasonable way to do arrays, there's a deeper point here. Yes, there are things missing from the language. But in a lot of cases, you can write MyBlocks to patch these holes (like arrays, trig functions, etc.)... and learn (or teach!) something in the process. It this extendability of the language that I think is its greatest strength, and kudos to LEGO and NI for keeping it in. Now, when we need something implemented in the NXT-G language... we can do it ourselves.