In the weeks since my oldest child began to use Alice, I have bought an Arduino and talked a lot about making and programming robots. This activity and discussion about microcontrollers is positively influencing the older two kids’ interests in programming and electronics. Just last night, we pulled apart two old disk drives to see what we could salvage from them. We ended up keeping a couple motors, an LED, and lots of tiny screws that might come in handy one day. Today, they wanted me to hook up the Arduino and make some LEDs light up. There is opportunity to be seized here!
Now that my daughter has finished her science presentation, I have a feeling that she is ready to move on from Alice. Today, I looked into several computer programming languages to find one that could be good for her to start off with. I found three great resources that began my search.
- 36 Resources To Help You Teach Kids Programming. This resource had a great overview of many traditional languages and links to resources that would help kids learn them. The traditional languages discussed included Lisp, Java, C/C++/C#, Visual Basic, BASIC, Ruby, Python, PHP, Javascript, HTML, and Smalltalk. This site suggested that the best language to start a kid with were Python, Ruby, BASIC, Smalltalk, and Visual Basic.
- Best Way to Teach Programming to Children? This O’Reilly Answers post had 26 great replies.
- Python is the New BASIC. This great post outlined why Python was today’s equivalent to BASIC. This guy has a point. He correctly points out that Visual Basic is not BASIC. I learned this today when I downloaded Small Basic from Microsoft, tried to run “10 PRINT ‘Hello World'” and received a syntax error. What the heck? The syntax is all different now.
From this research, I decided to introduce my daughter to Python. I opened the first page of Dive Into Python (diveintopython.net) and showed her what it looked like. I think I landed on a bad example because she responded with boringsville all over her face. I then opened up Invent with Python, a free e-book download (inventwithpython.com). This book teaches by having the learner build games. This is all she really wants to do. She wants to make computer games. When I was her age, I remember reading books about BASIC to learn how to do computer games. Back then, I remember that graphics were the coolest thing. I really wanted to make games that did awesome ASCII graphics. The problem with the Python book is that the examples are teaching those same ASCII games in 2012. ASCII graphics went out of style with the Nintendo Entertainment System.
As both of us sat unamused by the Python books, I asked if she wanted to learn how to program for the iPhone and iPad. “Yes!” was her response, which brings me to my present problem. Programming for mobile devices is not beginner material. Apple’s native language is Objective-C and its development environment is Xcode. You have to have a Macintosh, something we do not own. Android uses Java, which is strongly recommended to avoid for beginning programmers. Another thing about programming for mobile devices is that it can cost a lot of money. While I can get free development software and compilers for almost any traditional language, mobile app development is big business.
Tonight, I’ve been trying to find a suitable IDE for my daughter to learn programming while developing applications for mobile devices. I want development software that will teach her a useful language, be simple enough for her to concentrate more on the logic and structure rather than syntax, allow for use of images and sprites, and has a simulator easily accessible so she can rapidly iterate. This last feature really helped her move quickly with Alice. After some research, I’ve decided that building for Apple devices will be Phase 2. My wife has a Nexus 7 and testing apps on Android devices is a whole lot easier.
I found the following development software and here is what I think of them for my daughter:
- MobiOne. Cost: Free to develop. $100 per published program. Findings: This tool uses Javascript to create apps. I’m going to try elsewhere first. Judgement: No.
- GameSalad. Cost: Free Basic version includes publishing to iOS. $299/year Pro version allows publishing to iOS and making money from advertising. Findings: The website says no coding is required and we can’t publish to Mom’s Nexus 7. Judgement: No.
- GameMaker Studio. Cost: Free crippled version. $100 for version that allows mobile testing. $300 to publish to iOS or Android markets. Findings: This expensive package uses a proprietary scripting language (GML). Judgement: No.
- Corona SDK. Cost: Free unlimited trial. $199/year to publish apps to one platform. This package has great beginner features. There are even a couple books that help people learn how to program with it. The language it uses is Lua. Interestingly enough, it seems that several mobile app development packages use Lua. The basic problem is that in order to publish apps, you have to pay quite a bit of money. Judgement: Try it out.
- Kivy. Cost: Free. Findings: Open source Python library for developing apps. This software package can be installed on an Android device, Windows, Linux, and Mac. In order to get it on iOS, you need to compile it through Xcode. I’m going to check into the syntax of this system. I’m not sure if it is Python or a custom scripting language they’re using to make apps. Judgement: Try it out.
- Gideros Mobile. Cost: Free. Findings: This closed system looks very attractive and easy to use. They also use Lua to program the apps. Judgement: Try it out.
- Moai. Cost: Free. Findings: This free software uses Lua to code games, but it is marketed towards professionals. It doesn’t look friendly to beginners or new users at all. Judgement: No.
I’ve decided to download and try out three tools. Corona SDK, Kivy, and Gideros Mobile. Corona and Gideros both use Lua along with Moai. If my daughter decided to make a living out of app building, she would have a few tools to use besides Corona SDK. Kivy looks interesting because it uses Python. I’d love it for my daughter to learn Python.