As I posted late last month, my daughter Amber has embarked on a journey to learn about software development and software testing, and has proven willing, most of the time, to work through the examples in Codecademy and some other example projects to learn more about code and how it works.
Tuesday marked a milestone point for her in that she has now set a 30 day coding streak. As of right now, she is most of the way through the HTML and CSS course, and is about 10% through the Python course on Codecademy. I figured it would be a good time to have Amber tell us a little bit about what she has been doing and her reaction to all of this so far.
It's been 30 days, and in that time, I've worked through about 150 exercises, and I have installed my own Python compiler and a program called Geany, which is a nice little window where I can write all of my code for different stuff. I can write HTML, CSS and Python code in this tool, and I can compile and run the Python code I am running.
Geany was a new tool to me, I learned about it when I was in Dublin, and it was used for the Programming for Testers workshop. What I like about it is that it is fairly unpretentious; it's a simple editor that gives the user color coding of different languages, the ability to hook up different compilers for different languages, and a stripped down interface that focuses on the core needs of the person using it. As an exercise for her, I asked her to download the code, get it installed, and get it working and try to do so with as little input from me as possible. By doing so, she had the chance to look at available sources, make a choice about what she downloaded and utilized, and then put it into use.
When I saw the different versions, I decided to download the newest one, which was Python 3.4.2. It was easy to install (I just followed the screens) and it was easy to put in the code and see the coloring of the letters. I noticed that the code I was working on in Codecademy wasn't working in Geany. I read a bit about Python 3 and found out that the print statement now needs parentheses. Since I'm just starting off, and I've only been doing this for a few days, I haven't really gotten into the habit of writing the code a certain way, so making the shift from Codecademy and Python 2 to Geany with Python 3... it's not hard, it's just something I need to do, and I just do it. It's a little bit of a challenge, but it's easy to handle.
One of the things I encouraged Amber to do with the materials she was working on and reviewing was to take the time to set up files in Geany that reflect what she is learning. Sure, there's a lot you can learn in Codecademy, and there's a list of all the exercises, but going back to review can take a long time, and locating the different items takes a while. When I worked through "Learn Ruby the Hard Way" a couple years back, I made local copies of each assignment, but even then, it was a litter of code and took time to find what I was looking for. As I was talking to Amber about organizing the things she was learning, I suggested that she make a personal project so that each item she learns, she can write it into the project and have it be part of a larger whole. I'm of the mind that we can learn a lot of things, but if we don't have an authentic problem to solve, or a way to put what we are learning into daily use, we will lose what we learn, or we will struggle to find it later.
I'll let Amber pick up from here...
As we were talking about gathering up each lesson, the idea was that I would make a set of files (a web site for HTML and CSS, some longer program in Python) and we'd make it grow and show examples, both on the screen itself and in comments. As we were talking about it, we were joking about the need for "sheet music" for the project. We both started talking about writing a "libretto" for the project, and we said "hey, that's a neat name", so we are now calling our project "Libretto". We are also using Dropbox to keep everything up to date so we can both look at it and "work on it" together.
As Amber said, we happened on the term "Libretto" to describe what we are making. Borrowing from Wikipedia:
Libretto (pl. libretti), from Italian, is the diminutive of the word libro (book). A libretto is distinct from a synopsis or scenario of the plot, in that the libretto contains all the words and stage directions, while a synopsis summarizes the plot.
This seemed the perfect metaphor for this project. Instead of words and stage directions, this project would contain examples of what she is working on, as well as comments in the code to explain the code itself. It will be verbose, it will have lots of comment space. It won't be particularly elegant, but over time, we want to make it become a collection of classes, methods, IDs pseudo-classes, and other aspects that she can look back to and say "Oh, yeah, I made a pseudo-class that does this one thing, and I can use that as a framework to make something else". The idea is that, as she learns each language, the "Libretto" will tell the same story for that language. By doing so, she can work with the pieces and see how different technologies would solve similar tasks, and do so in a space that can be periodically refactored. The cool thing is that, at least for the time being, Geany looks to be up to the task.