Day 602 of 1000

This is the third 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]

In the previous post in this series I explained how Christian got his arms around the software build process using the configure, make, make install process.  A good example of how he got pushed through this learning process occurred on a trip we took to Monterrey, Mexico to visit the kid’s Grandparents when Christian was ten.  The only computer we had to take on the trip was a Dell 1300 that did not have too much power nor too much memory.  The computer was dual-booted to both Windows and Linux.  Christian had a very lightweight browser for Linux called Dillo that did not use very many resources.  It ran in Linux, but not in Windows.  Because of the lack of resources, Christian wanted to be able to run Dillo on Windows, too.

Dillo was made to be used on Linux, so Christian started digging around and found some instructions on how to compile the program for Windows.  Here is a website that has instructions on how to do exactly that.  The problem was that, in 2005, the instructions were not so good.  The normal configure, make, make-install process did not work, so Christian had to look for resources on forums to figure out how to get Dillo to compile and link properly.  The support libraries were not quite right and there were tons of problems.  Christian spent most of the time in Mexico when he was not playing with his cousins trying to build Dillo for Windows.  The make files hold commands that perform the compiling and linking of the program.  He had to learn exactly how the compiling and linking worked to modify the make files properly.  He made some major breakthroughs and felt like he was almost there when we had to pack up and go home.

Even though he was not ultimately successful in making Dillo run, he says this set of events helped him learn more about compiling and linking than anything else he had done before or has done since.  He had to dive into the make files to change the order of the internal commands, learn the structure of folders that held support libraries, and generally just learn a lot of minutiae about the compiling and linking of a fairly large program.  The reason he could stick to it was that he had a goal that he wanted to accomplish.  I think that is a very important principle with respect to learning to program.  It is also the reason class-based learning (of programming in particular) can be very ineffective.