Kids and Code: Where to start?

Though I am a software developer, I am not a born educator so when my children demonstrated a spark of interest in learning how to program a computer, I turned to the internet and searched for resources appropriate to their age and personalities.

I performed my first search several years ago and the results were less than encouraging. I found a few books aimed at an audience much older than my children were at the time, a few antiquated programs that oftentimes did not install correctly on my home computer, and very little else. Much has changed with every year adding more exciting options to the mix. Here are a few of the options I would have been glad to find back then and may yet be making use of.

Please note that while I may not have personally tried all of these and cannot vouch for their suitability or effectiveness, I do like what I’ve heard and seen so far. I’ve tried to organize the list by age but here again, your individual mileage may vary as every child is unique. I provide some links to online resources but I strongly encourage you to search for more as there are often several excellent sites out there dealing with the same topic. Finally, I’ve deliberately kept the links visible so this list could be printed and remain useful.

How to train your Robot: http://drtechniko.com

Dr. Techniko developed a “programming language” that 5 – 7 year old children can master and write their own program with. It involves no computer and no typing. The programmer uses a series of pre-defined symbols to program their “robot” to perform a certain task. Too bad my own children are too old for this. Looks like fun!

The only requirement is the information from the web site, a goal to accomplish and a patient and willing robot (parent). :)

Scratch: http://scratch.mit.edu

Scratch is a simple drag-and-drop language designed to enable children to create their own interactive stories, games, and art. It has a healthy online community and a huge amount of resources. It is free and can be downloaded from the web site.

LOGO:

I remember learning LOGO as a child and was pleasantly surprised to see that this lovely language still exists though some of the web sites are a bit dated. LOGO is primarily a geometric shape drawing language.

The list of LOGO commands can be found at http://mia.openworldlearning.org/voctable.htm though much of the rest of this web site is not publicly accessible. There is a nice editor to type your programs into at http://learninglogo.com.

LEGO Mindstorms NXT: http://education.lego.com/en-us/preschool-and-school/upper-primary/8plus-mindstorms-education

LEGO’s Mindstorms NXT line of programmable robot controllers is an amazing though unfortunately expensive teaching tool. Out of the box, I was a bit dismayed to see that the controller comes with very little in terms of instructions or sample projects but there is a large amount of material online. This means that once your child has happily torn the wrapping paper off the box, the next stop will be the computer to find something to build with the kit.

LEGO recommends this for children 8 and older. Access to the internet is necessary in order to read up on how to program the controller and to research all the neat creations that can be built.

Alice: http://www.alice.org

Alice is an object-oriented language used for creating 3-D animated stories, videos or games. It uses a drag-and-drop development environment to avoid unwieldy syntax or complex development tools found in other languages. Alice also has a very active online community.

Targeted to children in middle grade and up, Alice is freeware and can be downloaded from the web-site.

Computer Science Unplugged: http://csunplugged.org

Computer Science Unplugged is a series of interactive group activities that teach computer science concepts without the use of a computer. Aimed at the 5 to 12 year-old group, all you need is a small group of willing participants and someone to lead the activity.

Phrogram: http://phrogram.com

Phrogram is a Visual-Basic-like language that doesn’t attempt to shield the programmer from syntax or the complexity of development tools. Indeed, combined with the appropriate extension libraries, Phrogram applications can be written to access a database, do complex mathematical calculations or read and write to a file on disk. Aimed at the more sophisticated programmer, Phrogram can be downloaded from the web site for a reasonable fee.

Codecademy: http://www.codecademy.com

Codecademy is an excellent web-based resource for learning web-based development languages and tools such as JavaScript, HTML, CSS, Python and more. It goes through material in a gradual manner. This web site is suitable for anyone who doesn’t require animated characters leading them through their training as if it were a game. A browser is all you need to get started. I know several adults who have learned programming through Codecademy.

Microsoft XNA Game Studio 4.0: Learn Programming Now! http://www.microsoft.com/learning/en/us/Book.aspx?ID=14907&locale=en-us

Though not strictly an online resource, this is an excellent book by Rob Miles (Microsoft Press) that teaches a beginner the basics of the C# language and the XNA framework in order to develop games for the XBox platform.

My son devoured the previous edition of this book when he was 10 years old. He read cover-to-cover and tried the first few examples on his own. Then, over spring-break that year, the two of us sat down and went through the remaining exercises till he had a working game and an reasonable grasp of object-oriented programming.

A Windows 7 computer is required. Visual Studio Express and the XNA Framework can be downloaded for free. Access to an XBox 360 makes the end result more exciting but is not required.

Coursera: https://www.coursera.org

Coursera is a collection of free university-level online courses. These courses start a pre-defined date, go for a set number of weeks and require assignments and evaluations to the handed in at specific times. A certificate is presented upon successful completion of the course. Great for teens and adults.

For this, you need to be able to dedicate time each week to view the several hours of lecture videos and complete the assignments.

 

Along with the above online or book resources, I also recommend looking at community or library education programs, summer camps and other organizations in your community. A quick search of my community guide shows me the following programs are being offered for a reasonable fee:

  • Summer Day Camps: There’s an animation and Web design session for children 8 – 13 and a LEGO Mindstorms NXT program aimed at children 6 – 10.
  • Weekly sessions: Introduction to programming with Scratch is offered to children 11 – 15. Various robot building sessions using LEGO’s Mindstorms NXT are targeted to children 5 – 16 years old. Java, C++, and web design courses, on the other hand, are offered to the 12 – 16 age group.

And finally, there may be private tutoring companies in your community that offer programming courses. For example, Real Programming 4 Kids offers game programming classes for children of various ages in my community. This particular company has at most a 4:1 student to teacher ratio, ensuring that each child gets a fair amount of individual attention. Organization of this type may exist in your community though they may come with a higher price tag than you’re willing to spend.

While I have highlighted the resources I’m familiar with, there are many more excellent ones out there that have simply not crossed my radar. If you know of them and can recommend them, leave me a comment and I’ll gladly update my list.

One thing I’ve learned today: Learning new technologies via samples results in Frankencode

I was asked to develop an internal tool that would manage the advertisements we would display in our application. My requirements were simple: I needed to provide the user the ability to view the list of existing ads, create an ad by uploading an image along with the ad metadata, update and ad or delete an ad. Since our customers would never see this application, I went on a limb and chose a technology I’d never tried and knew nothing about: .Net Web Api. I figured I’d adapt one of the many excellent examples I found on the web so that it would serve my purpose. How difficult could it be?

I wrote the service component first and left the ad management user interface till last and for that, I chose a simple product catalog sample application that used jQuery and Knockout.js, two more technologies I had no previous experience with. Again, I knew there were lots of code snippets available on the web for those libraries so, armed with a decent search engine and StackOverflow, how could I go wrong?

The product catalog sample provided me with code for a basic grid and a set of detail fields. The user would enter the row id in an edit field and click a button to fill the detail fields with the data for that particular ad. An Update and a Delete button at the bottom of the page would update or delete the selected ad. This wasn’t quite what I had in mind but it was a close approximation. I figured adding a delete button to the appropriate row in the grid and providing the ability to click a row to populate the detail fields would be simple to implement once I had the basic functionality working.

I looked for examples of image uploading and found several, all with their quirks and limitations. Figuring out which limitations I could live with and which I couldn’t took some time. I really wanted to be able to upload an image and its associated metadata (name, width and height) all in a single POST request but most of the samples either dealt with uploading just the file or uploading a whole slew of files…but no other data. I tried all sorts of file upload methods with various degrees of success before settling on one that used a strict HTML page with a form tag and a submit button. Have I mentioned I’d never dealt with uploading files over HTTP POST requests before?

Frankencode monster

Once I got the file upload working (though I’m now working on the functionality that will inform the user whether the upload succeeded), I stepped back and took a cold hard look at my application. What I saw was a Frankenstein-type application. The samples I combined were never meant to go together. I know I’m not validating my fields in an even remotely optimal manner. I’ve tried to hide the delete button for images that are still referenced by an ad and therefore can’t be deleted but haven’t figured it out yet. It should be a simple matter of making the delete button’s visibility conditional upon whether the image is referenced by an ad but my condition always evaluates to true so I still have to do a bit more work on the project.

Have I learned something? A resounding yes! I can now claim to know some jQuery, a bit of Knockout.JS and something of .Net Web APIs. However, I’m lacking a lot of the very basic knowledge that I would have gained if I’d picked up a book about any of these topics and read the first few chapters. I liken it to trying to learn C# by trying out async samples. You might eventually understand how the async functionality works but without an understanding of basic C# constructs, you won’t be able to extend those samples without creating a monster and without looking for yet another sample to base your next bit of code on.

But I have to admit it’s been a lot of fun! 😉

As a woman in the tech industry

I have never met Ashe Dryden but the fact that she can’t point to a single woman like me makes me immensely sad. I’ve never felt that my experience was particularly unique but after reading recent blog posts about harassment and sexism from Sarah Parmenter, Relly Annett-Baker and several others, I’m starting to wonder if I’m the first and possibly last of my kind.

Unlike most of these ladies, I am not a public figure. I don’t speak at conferences, I haven’t written any books or been in the spotlight for anything monumental. I’m just a woman who graduated with an Engineering degree and who has worked as a software developer at a handful of different tech companies over the last 18 years.

Growing up, my father encouraged me to try my hand at all sorts of traditionally male activities. Whenever he set out to build a piece of furniture or do some maintenance on his cars, whether it be tuning the engine, replacing worn brake pads or patching up a rusted door, he’d invite me to join him. Soldering irons, voltmeters, circuit boards and electronic components littered the basement and I was welcome to try my hand at any of it should I wish. Similarly, I was introduced to LOGO and BASIC programming when those were brand new languages.

With a childhood such as mine, Computer Engineering was a perfect fit for me. I was one of 7 ladies in a class of roughly 70 students. You would think the ladies would hang out together but that wasn’t necessarily the case. Most of us made friends amongst our male classmates and never really sought the company of the others of our gender.

Throughout my university years, I considered my male classmates as big brothers I could count on to escort me around campus after dark or to help me with assignments should I need it. Similarly, they knew they could count on me for lecture notes or assignment due dates if they happened to miss a class because of my habit of writing absolutely everything down.

Yes, I would have preferred not needing to be escorted around campus after dark but given that one of my male friends was assaulted on his way home from a night class, it obviously wasn’t safe for anyone, regardless of gender, to wander around campus alone after dark.

I’ve worked for a half-dozen different software companies since graduation and have never been treated in any other manner than professionally. No, I’ve:

  • Never been asked to make or otherwise serve coffee.
  • Never been asked to take the minutes at a meeting unless it was a rotating responsibility and it happened to be my turn.
  • Never been groped or otherwise inappropriately touched.
  • Never been subjected to derogative or suggestive language.
  • Never been noticeably privileged or negatively impacted due to my gender.
  • Never considered myself unfairly compensated by any of my employers.
  • Never felt that the value I brought into any discussion was viewed as of lesser quality than that of my male counterparts.

I’ve been privileged to work with excellent people in safe and professional environments and I’m saddened to hear that my story is such a rare one.