Sunday, December 15, 2013

What if money was no object?

Currently Listening to:
Noisestorm - Solar
Love Automatic - Save My Soul 

One of my favorite things to do in this world is problem solve. Other things that I love to do include teaching peers. These two passions of mine come together quite often, helping fellow students learn new technologies, or helping them understand something they didn't quite understand in class. I've quoted some of my favorite people in the past like Daniel Pink and Sir Ken Robinson, but today I'm going to talk about Alan Watts. One of my favorite lectures included the "What if money was no object" talk.

How many of you reading this actually like what you do at work? Maybe the environment is bad, maybe the people are annoying, but do you actually like what you do? Most people that I've talked to seem to not enjoy their job. This baffles me. They go to work day in and day out trying to make money but they don't like their job. They have the "fun" on the weekend. "All rech and no vomit" is the phrase Watts used to describe this mentality of forcing yourself to do this, "... you will spend your life completely wasting your time. You will be doing things you don't like doing in order to go on living. That is, to go on doing things you don't like doing... Which is stupid!"

Personally I love what I do. If I lived in a post-scarcity utopian society, I would still do what I do now. I may not be the best person to come up with an algorithm, I may not be the best coder, but at least I can say I love what I do. Asking students in the computer lab about what they want to do, I get plenty of answers that have nothing to do with coding, and to those students I've started asking why they went into computer science. "For the money" is a typical response I get. These students are about to graduate and they either don't know what they want to do for a living, or actively don't want to go into software development. I understand that knowing how to code can improve almost everyones problem solving techniques as well as help them with the day to day for their job (knowing how to script a mundane task saves you in the long run), but I have problems when the students seem to despise what they do.

Another issue that I've seen recently is the lack of effort on the part of the individual to better themselves. Ignoring the population that does not like what we do, we are left with those who I would assume are like me, motivated to better themselves over the weekend by working on a project, reading a book on the subject, contributing to a big open source project, or attending a conference/seminar. I've tried to put on events for my fellow students and peers in the area, including BarCampCHS, local programming competitions, helping with the Hack-a-thon, teaching teachers how to teach, and so on. However, when I start telling everyone to attend these events for the learning experience, or the meet and greet that they would have with local gurus in the community as well as people in a position to hire you, I get the same students every time. I've started referring to these students as "my go getters". They are the ones that attend/plan/promote all the events. All in all that is about 30 students that seem to enjoy what they do enough to want to better themselves. I can't say that the other students are bad, because honestly I haven't met them. They don't want to hang out in the lab (understandable, I know that I'm a very extroverted person and most of my peers would define themselves as introverted), or they don't think that going to these things are very important.

When I'm talking to some of my friends who do things in the local community I'm normally asked to give recommendations to them about who I would hire, and to pass on the message that someone is hiring to them (remember it is who you know, not what you know). Why would I recommend someone who I've only met once in the classroom who never speaks out. I would rather recommend someone who I've dealt with outside the classroom in a professional manner. The planning team of BarCampCHS sits pretty high on that list seeing as how I saw on a weekly basis their problem solving techniques as well as planning and execution of running a big event. Students who talk to me on a regular basis about interesting problems or new technologies are right behind them. The conversations I've had range from talking about ICPC problems, new technology stacks, hosting of web apps, design issues, high performance computing, low level hardware coding, open source licensing,  and many other topics that range from an individual problem to problems spanning the entire field of software development.

I've had conversations about why students don't want to do these things, and the mutual agreement is to just not even care about them, so consider this my last plea to those who don't seem to care (and honestly, if you are reading this either you do care, or you just like me): Instead of that one game of league maybe you could solve a problem on UVa, instead of going to r/funny you can instead read an article from r/learnprogramming or r/programming, instead of complaining about your grade in advance algorithms maybe you can implement your own library containing sorting algorithms and different data structures. I promise you, if you do these things you will feel better about your choice in degree/job. You will start to hone in on the part of programming/computer science that you enjoy most, because as Alan Watts said, "Better to have a short life that is full of what you like doing than a long life spent in a miserable way. And after all, if you do really like what you're doing, it doesn't matter what it is, you can eventually become a master of it. The only way to become a master of something is to be really 'with it' and then you'll be able to get a good fee for whatever it is. Therefore it's so important to consider this question. What do I desire?"

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.