Saturday, December 7, 2013

Contributing to Open Source, Mentoring Improves Knowledge

Currently Listening to:
GoldFish - One Million Views
Approaching Nirvana - 305 

I've been working at Sparc for almost eight months now, and I can honestly say that having responsibilities outside of class related to your major will increase your skill level exponentially. I'm not talking about an internship where you are just fetching coffee for the people, but actually contributing to the workload in a meaningful way. This is what should be encouraged by academia, jobs that actually push you to try to maintain a work/life balance where work is split off into academia and a career.

My parents have always told me that I needed to take a job during the school year. I've done the jobs that were not related to what I wanted to do during high school (bouncy castle birthday party place), but during my senior year of high school I realized that I could get a job for what I wanted to do for a career (at the time), computer repair. During my senior year in high school, as well as the next 5 years of college (2 at Trident Tech for an Information Systems degree, and 3 years at College of Charleston working to a Computer Science degree) I did everything from go to peoples houses repairing computers, working at a chain store repairing computers, and being a systems administrator for almost three years. But I knew that after those 6 years of doing I.T. work, I wanted out. The grind of doing the same thing ("turn it off and on again") was becoming old hat. Sure I was good at what I did, and could make a nice living off it, but it wasn't what I wanted to do.

That is where software development comes in. During my time working on small projects (and some not so small projects) at school I realized that I enjoyed the problem solving that coding brings. Working on open source projects (the class that made me keep this blog/work on open source) showed me that I could make money solving challenges that I enjoyed working on. I applied to a few different places to see if I could get an internship around town for my last year of college, a few places responded back but I had friends who worked at Sparc, so I eventually decided to work there (I'll write a post about working there soon).

Working on a big project that you didn't help create is a humbling experience. Everything seems to be a jumbled chaos, you don't know why everything is written the way it is, and you don't know where to look for the simplest bug fixes. Reading other peoples code and understanding the flow is a gained skill, and thankfully my work on open source projects helped me gain those skills. After working at Sparc for about 4 months, they introduced a game to the company (on top of the Hackathon that they already did). A bingo board was produced with the top 24 most starred GitHub repos with 5 spots (4 repos and a free square) already claimed. The rules were simple, get a pull request in, receive bragging rights (as well as cash). The moment I saw the board I ran over to my computer and created a pull request to GitIgnore for a project type I knew they didn't have. After not hearing back within a few days my enthusiasm dwindled for that project, but I decided that I would want to work on projects that A) I use at work or home and B) would sharpen the skills I wanted to improve (Javascript specifically).

Eventually finding the Brackets project and using it at home I found a few solutions for bugs and worked on them over the weekend. I talked to a few people on the project and most of my pull requests were accepted! I was excited. Talking to Jeremy at work I learned I was the first one to get a request pulled. The feeling was great, I found something that I could help with outside of work that will help me with work. Around a week later I learned that my request for GitIgnore went in (Another one bites the dust goes here). A second spot on the board? My bragging rights just increased more, as well as my knowledge of software development in general.

wanted needed more more knowledge. Sparc was helping me learn Angular/Play/Design and other things, but working on these other projects helped reinforce all the things I was doing at work. Turning working on open source projects into a game made me want to learn more, to share more. Eventually I had to modify part of our code to implement Modernizr to check if the browser would support our new feature. Modernizr was also on the bingo board. During that weekend I learned a lot more about the Dom as well as how to create tests to see if a browser supports a feature. I decided that I wanted to work on implementing a test for the Keygen tag. But for the life of me I couldn't figure out why everything wouldn't work for me. Eventually seeking out help from Calvin at work, I learned about something called the Shadow Dom. I've never even heard of it because I didn't know where to look. Just having a mentor there who can point you in the right direction is a godsend.

After a few more days of banging my head against the wall Calvin and I had another talk, this time he told me that he was also working on a pull request for Modernizr. Game On. We spent a few days working on different things, me on my Keygen problem and Calvin his own feature detection bugs. We both opened up a second pull request around the same time because we wanted to gain the bragging rights (and with both of us working on two different bugs it means we still have the same chances of getting ours selected). Then it happened, "guess what? ;p" was the message. I've lost. But just because he got his request in first to me wasn't as bad when I thought about everything I learned over just that short period of time. Having someone there forcing me to try and become better by being a rival was one of the best things that I've ever done. I know that competition helps with the competitive "I want to be better" spirit, which is why I've started the coding competition practices at College of Charleston. It is what I believe to be the reason Sparc does the Hackathon, to help create a collaborative, yet competitive stage to help people become better at their craft.

So why tell you all of that? To help make a point. Students who seek out knowledge/mentors/competition will most likely have more fun than their counterparts. Attend events like POSSCON and BarCamp to improve your knowledge and find a mentor. Compete in competitions like the Hackathon and ICPC to be in an environment that will make you want to be better. Work on projects outside of the classroom (Open Source ones for community, personal projects for the itch (first lesson) that you will get to write something for a problem you know of). Those are the type of students I want to see more of.

No comments:

Post a Comment