Posts Tagged: side project


18
Mar 10

kids writing code

3 children at a computer

you doody head you forgot to clean up your EventStruct!

Last night I went out to get some dinner and as I sat in the drive-through waiting for the unbridled joy that is Cain’s chicken I listened to the radio. WOSU’s All Sides had a piece about child poverty and mentoring. It was interesting and thought provoking, one of the guests said something that rang true and made me think. (Paraphrasing because the audio is currently unavailable) He started to realize that the kids were excited to have him come talk to the class every week, not because they were interested in his stories about the Post Office, but because they wanted to know that someone cared about them. It was a powerful thing to remember, that children need to know that someone cares for them, and that not all children are that lucky.

In writing this blog one of my favorite memories is doing the research to write the teaching post. It reminded me of the heady days of my youth spending hours inside of the amazingly good QBasic help file trying to get something to work, stumbling and bumbling, put beaming with pride and a giddy happiness when I finally got the program to work. These days the amount of programming languages geared towards teaching have only expanded, and systems like Alice put LOGO’s turtle graphics to shame (although I still love that LISP-laden turtle).

This started the old gears turning in my head, and although this thought is pre-pre-alpha, I thought I would get some feedback and just jot down what I’m thinking. What if there were an after school program for elementary school aged children where IT professionals donated their time and talent to helping kids learn how to program. Children need mentoring, the IT community has a wealth of talented and caring people, let’s put these two things together and see if we can do some good. The logistics of this are a little daunting, but I want to lay out the reasons why now is the right time for just such a program.

Programming is the new literacy. Don’t believe me, here is an article entitled Programming is the new literacy. As we move forward into an increasingly wired future, programming, scripting, mark-up, are going to become skills that are normal to have. Children are already more “plugged-in” then ever before, the benefits of understanding the machine they’ve been using since they were in diapers is apparent. As the information economy continues its march into the 21st century, people will need these skills. From a simple formula in an Excel Spreadsheet to whipping up a ruby script to do batch processing, these will become the differentiators of tomorrow, helping people achieve.

Hardware has never been more accessible. Moore’s Law is a thing of beauty, I just bought a more than capable HP refurb for $150 to act as a media server. OLPC has shown that putting affordable computers into children’s hands is possible, and it looks more and more likely that school districts in the Industrialized Nations will be following suit in the next decade or so. Companies routinely donate their old computers which means that if $150 is too much (which it is for a lot of low income families) then you can get a donated computer free. Children can also access computers at libraries and schools for free.

Software has never been more accessible. The number of languages specifically targeting teaching has only been growing. If you haven’t already, go read the teaching post, it is a round-up of just a handful of the neat and nifty software meant to help kids learn to program. The learning curve has never been gentler, you can go from a learning language like Hackity Hack (which is based off of Ruby) to the full Ruby language fairly easily, and from there you can explore the whole world of Ruby development from Rails to Unicorn and back again.

Programming is about more than computers. Although the immediate goal of learning to program is to instruct a computer in how to perform a given task, the side benefits are immense. Programming teaches children a structured way to solve problems, learning about control structures teaches the ideas of Boolean Logic, writing formulae increases and reinforces the understanding of mathematics. Programming is also empowering, being able to sit down at a keyboard with nothing more than your wits and a good idea and turn it into something real is an amazing feeling for a child. Programs let children learn and explore, make mistakes and figure out how to solve them, with gentle encouragement and careful guidance a child can turn their ideas into reality, and that’s a powerful lesson.

Where to go from here? I’m not exactly sure, the logistics of setting something like this up are a little out of my league. For right now this is just a good idea, I’m at step 3 of the idea ladder. Leave a comment, let me know what you think, if you are a parent, would this kind of program interest you? If you are an IT professional, would you volunteer at such an organization? If you are a business owner, would you support such an organization? If you are a child, would you like to learn to program?

I’m not sure where this idea will go from here, but I’m excited to find out.


23
Dec 09

decompress

festivus card

Get ready for the feats of strength

The holidays are upon us and no matter what holiday your particular sky god has you celebrate (Festivus for the Rest of Us!) there is one thread of humanity that binds us together at this time, days off from work. When you have some time off of work you can spend it doing any number of worthwhile things

  • Drinking egg nog until you black out
  • Eating your weight in sugar cookies
  • Having that same argument with your family that you’ve been having for the last 10 years
  • Watching 24 hours of A Christmas Story
  • Spending quality time with friends and loved ones
  • Living through the same day over and over and over, á la Groundhog’s Day (Best saved for the actual Groundhog’s Day)

If you are reading this blog there is a good chance that you are some sort of programming nerd, its ok, I don’t care what the New York Times says. As a proud nerd you have probably heard of some sort of technology that interests you, maybe clojure has piqued your curiosity, or you finally want to learn that “rails” thing all those young whippersnappers keep talking about. I would argue that this can be a great way to decompress, if you do it right.

First off, find something different than what you are used to, if your 9-5 is .Net don’t spend your precious free time learning more .Net, that’s stupid. Go find something radically different, maybe look at a functional programming language, go find that weird kid in the corner and talk to him, he probably has interesting stories about fire. This might seem like a waste of time at first, but it’s not. It’s all too easy to get locked into an ecosystem, doing the same thing day in and day out, to get comfortable there and to start thinking that your way is the only way or the best way. Reading about other technology outside of your realm might not have a direct benefit to your 9-5, but you may gain a perspective or understanding that would be incredibly difficult to get from your standard frame of mind.

Second off, this isn’t work, this is fun. You are allowed to make mistakes and change your mind. If you work through a tutorial or get done with the first chapter of something and find that you really don’t care, then go find something else, the software world is full of interesting things. The thing is, only stop if you grok the subject and dislike it, don’t necessarily stop just because you don’t get it at first.

erlang source in gedit

What? Caroling? No fuck that, I got some erlanging to do!

Third off, this is just to whet your whistle. Don’t ignore your loved ones, squirreled away with your Beginner’s Guide to Erlang because you’ve fallen in love with the idea of massively parallel systems. Take this time to investigate several things, learning the basics and setting up your love affair for the next few months. Then make sure you tell the people you care about that you love them and eat too much food and do people things.

For me this break will be about Rails. I’ve followed rails for a while, I’ve always been impressed with it, and I’ve had a few false starts. I’ve gone through the Getting Started tutorial more than once. I’m a php guy at my core, but learning how other people do the web is worthwhile. I’ve started the adventure already and think that this time it might stick. I have a 2 hour car ride up to Cleveland and back that I plan to fill with listening to Rails podcasts.


That’s all for now, go relax and decompress, that’s what I plan on doing for the next 4 days. As a side note I will probably not update during the holiday break so if you obsessively check or your rss feed gets lonely don’t worry I will be back on the 28th.


25
Nov 09

refactor

google thinks this means refactor

google thinks this means refactor

I’ve been working a lot on prosper lately (this means that if you want to play around with it, get the bleeding edge on GitHub). I recently added a lazy loading feature, mostly to facilitate unit testing, and pretty soon I will be adding some unit testing. I was able to take care of some things recently that have bugged me for a while, and its because of ruthless refactoring.

Refactoring is not black magic, it just means taking some code and reworking it, rename a function here, encapsulate some functionality there, done. The sticky part is that refactoring is a compounding problem. Things that should be refactored build up on each other, so if you put off refactoring for too long you will have a real mess on your hands. Refactoring can be painful but should never be put off, you see a function named poorly but know that it is used in 20 places, get it now, don’t put it off, because by the time you get around to renaming it, it will be in more places.

A good IDE will help you in your refactoring process, the one that I love is (surprise, surprise) Eclipse. Eclipse is brilliant at refactoring, probably because it keeps semantic knowledge with symbol names. Rename the function foo to bar and you don’t have to worry about Eclipse destorying all those variables named foo (ps. if you have variables named foo you have refactoring to do!). Eclipse (and other IDEs) are great at all kinds of refactoring, renaming, extracting and encapsulating, pull up, push down, etc. Get to know these tools, get comfortable with using them, and refactor without fear.

Wait, change big chunks of code without fear, how!? Well you should have tests, be they unit or functional. I’m introducing unit tests into prosper, but for the time being I have a local version of todo list case study. The todo list application is pretty good because it exercises all the important bits, if I change something and everything in there keeps working, I haven’t broken anything too badly.

The reason I want to introduce unit tests though is that I’ve introduced regressions even with the todo list humming along, some dark corner of prosper has started shooting out unicorns, but I haven’t noticed, until I see some bit of code that I know can’t be doing the right thing. Test coverage allows you to refactor without fear, and if you want to have a living project that people might someday use, you need to refactor without fear to keep things current.


That’s it for the technical part of this blog post, I would like to announce a few things though.

  • The move to GitHub has been completed and I’m starting to get into the workflow of using it now.
  • The new skunkworks project is nearing a beta release, so keep an eye out.
  • Development on the new project has spurred improvements in prosper, there will be a point release (0.6) soon
  • There probably won’t be a post tomorrow as I’m traveling with Heather, my beautiful girlfriend, up to see my family in Cleveland.

That’s all for now, I will have something up Black Friday more than likely, until then, Happy Turkey Day everyone, safe travels, see you after I put another couple of pounds on.