Day 608 of 1000

This is the fifth in a series of posts on how we taught our children to program, what we did wrong and how we think we could have done better.  You can see the introductory post and index to the series by clicking here.

[Previous post]
[Next post]

Sandisk C200 MP3 Audio PlayerChristian only spent half the school year at age 11 learning to program C#.  We really only got him going on it as an afterthought because he was interested.  After he had established a foundation, he got a little bored, I think because he did not have a specific project in mind to practice his skill.  The reason he asked to switch from C# programming to was that we got him a little MP3 audio player.  When he gets a new “toy” like that, he really likes to investigate its capabilities.  He found that it was possible to convert many MP3 players from just audio playback devices into little, general use computers that could run games, videos, and other programs.

The conversion is made by replacing the firmware provided by the hardware vendor to perform audio playback with an open source program called Rockbox.  Rockbox is written in C and Assembly language.  The problem Christian wanted to solve was to make the fonts look better for Rockbox on the Sandisk C200, the one we bought him for his birthday.  To do that Christian did the following:

  • Downloaded the source code
  • Learned how to build and install the code with the gcc compiler
  • Found some anti-aliasing font code to improve the appearance of the fonts
  • Modified the code to run on the Sandisk C200

This new pass through the whole configure-make-install process was much less automated that with the Linux environment.  It moved him up the curve a little bit further and got him his first experience at modifying someone elses C/C++ code to work on a new platform.  The problem was that he finished that in just a couple of months and wanted to move on to a new project.  That is when he decided he needed to know how to build a professional quality website.

Rather than start with something already packaged like WordPress, Christian decided he would use one of the professional quality open source, content management frameworks and build a site from scratch.  After eliminating the idea of using WordPress, he decided on Drupal, so he had to learn PHP.  PHP is a scripting langauge that looks (speaking very roughly here) like HTML with embedded C functions.  It also requires a working knowledge of the MySQL database program.  He spent several months learning how to use the tools, then built himself a site.

In addition to learning how to program a website, he also learned how to work on the aesthetics of his site. I am notoriously bad at making this blog look good.  Christian browbeat me into adjusting the site’s appearance this very weekend.  He still thinks I did a pretty bad job, but he that it is better than it was before.  Part of that is due to the help he gave me on such things as using complementary colors and using the Color Scheme Designer website for help in their selection.

During this whole time, Christian volunteered his time at the GaugeCam project under Dr. Francois Birgand in the Biological and Agricultural Engineering Department at North Carolina State University.  While most of the GaugeCam spent their time gathering data, performing research, testing equipment, etc,, Christian was tasked with building a server to run the website, capture and process results, host a blog, and generally act as the systems administrator on the project for a couple of years.  We gave him an old computer on which he installed a LAMP stack, the operating system and programs to run the server.

The take-away from all this is that Christian stayed engaged in computing with the help of a variety of projects that had specific goals the he wanted to finish and make work.  He learned a lot along the way, a little at a time as it was required for his projects.  The gift of interesting projects with specific goals is one we believe is essential in the effort to learn how to program.  He had one additional project that fits into this category, but that is sufficiently interesting that it requires a post of its own.  Christian figured out how to browse the web on his “dumb” cell phone.  That will be the subject of the next post in this series.