Tuesday, July 24, 2007

Tell Somebody About It

I just listened to Scott Hanselman's Be A Better Developer in Six Months podcast. You can listen to it here: http://www.hanselman.com/blog/HanselminutesPodcast72BeABetterDeveloperInSixMonths.aspx

He spoke with .NET Rocks host Carl Franklin about things you can do in six months to be a better developer. This gives me an opportunity to discuss what I've done in the past as well as my plans for the future.

Some of the fair recommendations, in their and my estimations, include:

  • Read books
  • Read other peoples' code (like open source code)
  • Learn about a very different programming language (Scott is reading a book I saw about F# that I was tempted to buy too)
  • Speak at events

Some of the best recommendations included:

  • Start a discussion group
  • Teach
  • Mentor an intern or other younger or less experience developer
  • Keep tabs on IRC server channels

The number one recommendation:

Tell somebody else about your plans to have them hold you to it.

What I Did When I Was Younger
There are a few things I don't think that were mentioned that have helped me tremendously when I was younger, a few years older than the 17 and 18-year-old interns that Scott interviewed in his previous show entitled "Talk to the interns":

  • Volunteer with an actual open source project.
  • Look at things you just don't understand.
  • Try something you're probably not ready for.

I will elaborate on these now below.

Volunteer with an actual open source project.
I don't consider myself anywhere near the level of coder like people like Scott or Carl, but I definitely recommend contributing to some open source projects to learn how to be a better developer from an overall perspective.

When I was in college, I contributed code to a few open source projects. They were relatively small contributions, but it was what I could do at the time.

  • I taught myself C by contributing to the X-Chat IRC client for Linux. I rewrote the channel list window and gave it the ability to sort by several columns and the ability to filter by regular expressions.
  • With Rob Ginda, I implemented the first UI prototype for "MingZilla", the precursor to his ChatZilla IRC client which is now an extension for FireFox / Mozilla.
  • I built bindings to Gtk for the Mozilla JavaScript Engine, JSENG, getting lots of help from Mike Shaver.
  • I created a Mozilla JavaScript Engine language support module for SWIG

While I wish I could have done more than I did, I still learned a great deal from these experiences. I did most of that in a one or two year period during college, outside of my classes.

Scott and Carl talked about how open source projects are often under more scrutiny, and this is very true from my experience with X-Chat and Mozilla.

For X-Chat, I learned to be as meticulous as I could about commenting and memory management. The patch was accepted on the first try. Accomplishing that gave me more confidence as a young developer.

For the Mozilla contributions, I learned about source control and distributed development. I spent a lot of time in #mozilla and #javascript back then on irc.mozilla.org and irc.freenode.net

With SWIG, there was a real challenge to me because I was writing C++ code to generate C code which allowed people to write JavaScript code to call C libraries in an object-oriented fashion. Fun stuff!

Look at things you just don't understand.
My grandfather Gene and his son, my uncle Kevin are both computer experts, and both are software engineers / application architects / managers. I've always been around computers, even if I didn't know what the heck was going on. My grandfather was always setting up LANs or new laptops, thumbing through PC Magazine, or writing some program to automated his photo albums from his digital camera download.

Come on now...be honest, how many people can say that about their 73-year-old grandfather? When I sent him the Fizz Buzz challenge from Coding Horror he wrote back promptly with this small program in REXX:

/* fizzbuzz
: */

- Show quoted text -

Write a program that prints the numbers from 1 to 100.
But for multiples of three print "Fizz" instead of the number
and for the multiples of five print "Buzz". For numbers which
are multiples of both three and five print "FizzBuzz".

do i = 1 to 100
if i//5 = 0 & i//3 = 0 then
msg = 'FizzBuzz'
if i//3 = 0 then
msg = 'Fizz'
if i//5 = 0 then
msg = 'Buzz'
msg = i
say msg

end /* do i = 1 to 100 */

Since I was probably 17 or so, my uncle has always given me CDs from MSDN or links or ideas about tons of things, but he has always shown me things that he knew I would not understand, like big, huge requirements specification documents, sequence diagrams, work flow diagrams, glossaries, and more. He works primarily on toll lane systems for major transportation systems and bridge systems, involved in everything from the hardware interface to the user interface.

I remember being in his office and seeing coin collection machines from toll booths and the C++ code he wrote to process transactions. Perhaps because of its bizarre sounding name, I have never forgotten the word "semaphore". Just what is this semaphore, I thought. It is like a half-smore? And how do you cook one of those without burning your hand?

It was only later that I really understood what it was, and even later that I learned of its physical origin, prior to its use in computer programming, in telegraphs, railways and other systems:


“The semaphore or optical telegraph is an apparatus for conveying information by means of visual signals, with towers with pivoting blades or paddles, shutters, in a matrix, or hand-held flags etc. Information is encoded by the position of the mechanical elements; it is read when the blade or flag is in a fixed position. In modern usage it refers to a system of signaling using two handheld flags. Other forms of optical telegraphy include ship flags, Aldis lamps, and Heliographs.”

So, looking at those diagrams and devices I did not understand expanded my imagination and gave me things to ponder about how things work and how software enables devices to work.

Try something you're probably not ready for.
When I was 18 or 19, and having coded HTML, JavaScript, and PERL for about a year or so, my uncle hired me to implement a small order-tracking system for a client of his in PERL. I did not like his criticism and got very frustrated with him! I eventually finished the project and it worked fine. I can't even remember what the issue was now. I'm sure he knew I was technically ready for the project, but I had no "consulting" experience prior to that, so I'm sure he was prepared for me to make mistakes.

What I'm Doing Today

Today I have some of the same goals and some different goals. I want to be a better developer and architect, but more so than that, I want to help younger people who have aspirations to become good at whatever it is they want to achieve. Some of them are interested in computer technology and programming, others in graphics, music, medicine, mathematics, or horticulture.

I try to keep my eyes and ears peeled for topics of interest for all of these subjects and share that information with them.

A main interest of mine right now thus revolves around how I can further my own educational and intellectual growth as a professional, both also involve their interests and expand their horizons. I have two projects in the works to help achieve these goals.

1. The Carola L. Gough Web Site and 3D Virtual Art Gallery
My great grandmother Carola, aged 96 and currently, as of this writing, in hospice care after having suffered a stroke is an inspiration to everyone who knows her. She told her family she never wanted to be kept alive on tubes and machines or in a nursing home. She has been in hospice care without food or water for more than a week, and is still responding to our voices over the phone and from people in person at her side.

She has lived an astonishing life. Her paintings hang in galleries all around the world, and her life example has given our family strength of resolve it could not otherwise have. See her paintings and the 3D Virtual Art Gallery we have built for her in Second Life at this URL:

My plans for this are:

  1. Finish scanning her photos of her paintings
  2. Scan and transcribe several of her journals she sent to us, dating from 1947 to 2004.
  3. Scan and transcribe the two years worth of correspondence she and her husband maintained with family during the time they spent in the Congo in their early sixties.
  4. Publish a calendar for sale based on her paintings of Congo and donate a large portion of the money to a cause to help the victims of the horrible wars taking place there.
  5. Publish a book based on her paintings her writings
  6. Make the CarolaGough.com web site and 3D Art Gallery highly interactive and a worthy commemoration
  7. Get as much contact with people who own her artwork as possible and involve them on the web site
  8. Learn about 3D modeling and find a way to recreate some of her paintings in 3D immersive landscapes.

This project is only fitting for commemorating a person whose life has touched so many people and will forever inspire all of us to, as she advises, "Whatever life has to throw at you, run to meet it head on."

2. Create a Multi-player XNA Game Based on My Old Two Player Game from 1998
I wrote a simple two player dice game to teach myself the basics of Winsock in 1998. I've enjoyed the game over the years with friends and family alike, but it's time to pump this thing up. I want to make it multiple-player and make it using the XNA technology. Ideally, when running on Windows, it would connect to a centralized game state server that would store historical data on players and games played. This would allow for multiple front-end clients to interface with the game server.

But, I want to try my best to involve the younger people I know who are interested in many things with this project. As a video game, there will need to be people with skills in many different things, like:

  • Programming
  • Sound and Music
  • Level Design and Landscape
  • Mathematics
  • Graphics

So, my personal goal in this project will be to develop my technical, organizational, and leadership skills while helping younger people experience teamwork and goal-setting and accomplishment.

I know it's a lot, but now I've told it to somebody, so now we've got to make it happen.

We've already got Carola's encouragement. Before I left San Francisco last week, I told her that my time spent with her over the years and seeing her life and her example has shown to me that, "I can do any noble and good purpose I set out to accomplish."

She immediately said to me, "You can!"

And so, I will.

No comments: