Social coding - better than college

April 19, 2011

A few years back when social networking exploded, I was a little slow to catch on. I had a MySpace and Facebook account, but I thought social networking was sort of silly at the time. I was mostly posting pictures on Flickr, and blogging occasionally so my family could keep up with what I was doing. It was this post about my son that actually that kicked-off my desire to blog and and write as much as I could."

A few years back when social networking exploded, I was a little slow to catch on. I had a MySpace and Facebook account, but I thought social networking was sort of silly at the time. I was mostly posting pictures on Flickr, and blogging occasionally so my family could keep up with what I was doing. It was this post about my son that actually that kicked-off my desire to blog and and write as much as I could.

I began to research how to blog and came across post from Scott Hanselman that described the do’s and dont’s of blogging. I think it was his post on 32 ways to keep your blog from sucking that gave me everything I needed to get going. It was also Scott Hanselman, and his podcast Hanselminutes, that turned me on to Twitter.

Once I was on Twitter I began following people that I felt were interesting. People like Joel Spolsky, Jeff Attwood, DHH, Robert Scoble, Dave Winer are some examples. These are people that I consider pioneers in whatever field/interest they are involved in. The interesting thing about following these people on Twitter is that you get exposed to (concepts, thoughts, ideas, links) that you’d never know about if you weren’t reading your stream. For example, I’ve learned a ton about being an entrepreneur from Joel, bootstrapping a startup from DHH, and the crazy startup life from Scobilizer.

The net effect this has is high-quality self education. Someone posts a link to a blog post, you read it, bam! you are that much smarter. Sometimes a post, or a link, or a comment can have a life changing impact on you. That sounds extreme doesn’t it? I’ll give you a REAL example of how this can spiral into something amazing…

There was a postcast that I listened to from Hanselminutes where Scott interviewed the StackOverflow team about their new website, and more specifically their use of ASP.NET MVC. Scott really drilled into Jeff to get the details of their site and what they were doing with MVC. He also gave Jeff and team crap about some decisions that they made and I thought that was bold, but perfect. Some veteran programmers suck at the whole “this is how you should do it because I have n years experience doing it this way” education but Scott nailed it. This podcast was the catalyst for me jumping into MVC. Once I knew the StackOverflow guys were using it, and Scott was a fan, I had to kick the tires.

I loved MVC so much that I took it to work, sold some people on the idea, and implemented several production MVC apps for our company. Still to this day these production MVC apps are probably the least problematic sites I have every built. Easy to change, easy to improve, hard to break. Remember the “life changing impact” thing I mentioned above? MVC with jQuery was enough to get my business partner Barry Harkness and I so excited about the web again (we strayed away to win forms for a while) that we decided to start a business together called SideBox that is built on… wait for it… ASP.NET MVC.

Get to the point already!

Through all of these social networking connections, I learned about social coding with websites like GitHub, BitBucket, CodePlex, and Google Code. What’s so important about social coding? Knowledge exchange. As software programmers, we have ideas all day long. We might have a scratch file here, or a mini project there. We might even have a huge idea we’ve been working on for years, adding code to it day-by-day. Social coding enables us to share these ideas with friends and strangers. There are different types of sharing too. You can look at someones real code, and become smarter. You can clone someones project and compile it yourself, and become smarter. You can fork someones code, sprinkle in your own ideas, and become smarter. You can even pay it forward by forking, adding your ideas, and send pull requests so that others can consume your code, and become smarter.

Social coding can be fun. For example, I wanted to re-create that little toaster thing that pops down on Twitter when you change your profile, so I hacked it together and invited a friend/co-worker of mine to join-in the fun. We now have it running in two production apps.

Social coding can save your ass. Seriously. Could you imagine building a .NET web app without ELMAH?

Social coding is fast. This morning, Marc Gravell posted a profiling tool he built for ASP.NET MVC apps. I was like “holy crap, I need this”. I cloned his code, implemented it in an app I was working on, and bam! I had performance profiling. I was instantly surprised at the performance data and was able to correct a wrong assumption I made about a slight performance bottleneck in the app.

Social coding can change your future… I started following Miguel de Icaza and learned about a killer API called MonoTouch.Dialog he built for simplifying the pain of creating iPhone user interfaces in MonoTouch. I cloned it and ran the sample app that he built. I could not believe how simple it was. I forked it and added a feature to Miguel’s sample code. It was just a different approach that was built off a sample he already provided and I thought it would be useful for others to learn how to do. Even though my contribution is mostly irrelevant compared to everything Miguel has done, I think it’s awesome that Miguel was able to share that code and that I was able to pay it forward, if only slightly. I’m now using MonoTouch.Dialog for building 100% of the UI for the SideBox iPhone app.

And finally, the catchy title is explained.

I’ve been going to the University of Phoenix for the last two years. I have one more class (5 weeks) before I graduate. I’m currently in my 6th of 6 total coding classes in the software engineering program. The first two we SQL. The next four classes were Java and VB. In JAVA I, we spent four weeks building a mortgage payment calculator console application. In JAVA II, we spend four weeks building a mortgage payment calculator desktop application. In VB I, we spent four weeks building a mortgage payment calculator console application. In VB II, we will be spending the remaining three weeks finishing our mortgage payment calculator desktop application. This is not a joke, but what a joke. That’s $20k folks! At least I’ll be a software engineer that can build you the best damn mortgage payment calculator you’ve ever seen.

I can honestly say that I’ve learned more in a week from Twitter resources, than I have learned from four years in college.

If I were teaching at the UoP (I hope I can someday, but it’s unlikely after this post), I would throw their textbooks away. Every student would have a GitHub (or the equivalent) account, and we would learn about programming and design and source control and deployments and debugging and everything that a programmer will actually do on day one as a programmer. I would find some open-source projects and have students clone them and study them. I would have them listen to podcasts like Herding Code, or This Developers Life and quiz them about it. We would have code jams. I would try to hook up with local businesses that were hurting for software development and try to create a program where the students would build actual working software for them. We would learn about agile. If textbooks were required, I would let students choose two books from my personal library that only has two books (Code Complete and Clean Code).

Social coding, twitter, blogs - better than college.