Saturday, February 13, 2010

Getting Technically Started

Where do I begin? 

This question scared the crap out of me when I forayed into the job space straight out of the university. Everything was wild and unknown. I needed a tour guide yesterday.


As a new grad, I tried a lot of things. I read books and blogs. Listened to podcasts. Worked on open source projects like Hackystat and personal projects like an Open Microblogging Plaform and a ping pong score tracker. I tried a bunch of different approaches to improving my technical life. This blog's aim is to help you filter out the noise.  I'll write what worked for me with the hope that it can bootstrap your improvement outside of college.


First things first
There are two articles are forever part of my hacker livelihood. Having read these two articles in Philip Johnson's software engineering class helped me define who I am and to understand what I need to do to contribute. These two webpages.  Yes I said webpages not blogs.  It's crazy how old these articles are.  Notice the manual revision history at the top?  Crazy.  Nonetheless, the content is the stuff of legends.

Defines who we are and how we get there.  We are hackers.  Be proud and proclaim it.

Asking dumb questions makes you dead weight. Hackers hate dead weight. We want to spend time having fun chatting about the latest tech news, making paper airplanes, having Nerf gun fights, and if it's in the project plan, write some code.  We don't have the time or patience to answer stupid questions.  Remember the "There is no such thing as a stupid question" line doesn't apply to our world.  There are stupid questions and it makes us angry.

With that said, we geeks get it.  No one knows the answer to everything.  It's not humanly possible.  Robots, ninjas and zombies can do it, but not us lowly humans.  Geeks genuinely want to help people.  They want to explain a topic they're familiar with not only flex their intellectual guns, but to help you out.

Ask a smart question, get a smart answer.  Respect +1.
Ask a dumb question, lose respect.  Respect -100 

Respect is king amongst the Geeky.


Blogs
Blogs are an excellent knowledge resource.  StackOverflow has a thread on the best programming and development blogs if you are interested, but here are the blogs that I've been following for quite some time:
I also follow the blogs of people I've met at the university or through work.  They are all interesting as well.

Reading Code
As a hacker you want to get into the nitty gritty.  You want to jump into that source and show it who's boss.  You're going to write millions of lines of unit tested, bug free, elegant code.  But wait. 

Do you enjoy reading other people's code?  No?  That's too bad because reading code is about 90% of your hacker life.  Maybe more.  There's API's, javadocs, code examples, and source digging among the countless other ways to read lines of code.  Rockstar programmers that perform 10x better than others rock at reading code.  For the rockstars, reading code should be like reading a book.  It needs to flow through your mind and paint a picture of what's happening.  It's said that you need to practice 10,000 hours to master something.  I think you'll need even more to master code reading because everyone writes their code differently and most of it is bad.  You'll need to be able to quickly pick up favored patterns and apply it to your overall understanding of the code structure and usage.

It might seem obvious, but you should get out there and read code.  It's actually really easy:

Step 1: Find an interesting project on SourceForge or Github.  
Step 2: Check out the source
Step 3: Read the source.

Voila.  You are on your way to code reading mastery.  You could even take a step in your code writing mastery hour allotment by contributing to the project.


Writing Code
I don't need to write much here.  Practice, practice, practice.  I would suggest immediately starting with a new language because it promotes new ways of thinking.  You'll realize the importance of learning new languages once you apply a language design pattern from one language to another.  

I started with Ruby on Rails because I was interested in web frameworks.  I've made a resolution to work with Python this year.  Pick something you find interesting and do some Code Kata or create yourself a side project.


Blogging
Blogging is an excellent tool.  I know that it's not for everyone, but I find that it continually improves my thinking and writing skills.  I brainstorm during my commute to work, the walk to Starbucks, the lonely period in the bathroom.  I think about interesting blog topics and if my readers (all 5 of them) would get it.  Blogging puts your thoughts into written form.  Sometimes it's hard to express what you mean until you try to explain it to someone else.

Another great thing about blogging is that it can help you with your Periodic Resume Updates.  You won't be able to remember what you've done over the past year, but having an activity log will help figure out what you should add to your resume or tell you that you aren't investing in yourself enough.


Hang out with Hackers
The last point I have to make isn't really a skill, but rather something to help build on your hackerism. Find smart hackers and hang out with them.  In person would be best, whether it be your coworkers or people at other software companies.  It could even be online. It's similar to pair programming without any coding. Either of you can drive, but both learn from each other. Most geeks like to talk about geeky things like the latest and greatest tools. Find people that are on the bleeding edge and attach yourself to them. The bleeding edge is where you always want to be.

3 comments:

Jason said...

Why just reddit.com/r/joel? What about /r/programming and /r/coding. There are actually numerous sub-reddits related to programming.

austen.ito said...

That's the one I primarily read. The other two are good to subscribe to as well.

糟糕啦 said...

友情像一棵樹木,要慢慢的栽培,才能成長真的友誼,要經過困難考驗,才可友誼永固..............................