Monday, November 25, 2013

Learning is a Fight

I just recently read a blog post by Ritchie Yip about what your mentally going through as you advance through the belt rankings of Brazilian JiuJitsu. You can read that here. As I was reading it, I realize how accurate this was. After spending over a decade doing some form of martial arts, and making the transition to JiuJitsu it is nice to read that the feelings of being incompetent weren't just my own. The more I read the article, the more I felt like it could be translated over to my time in IT. So here is my attempt to translate it over.

So let's start with a breakdown of levels and what you feel like. This part almost copied verbatim from the BJJ blog

Script Kiddie - Unconscious incompetence. You don't know what you don't know.

Entry Level/Intern - Conscious incompetence - You know what you don't know.

Junior Level - Conscious Competence - You know what to do.

Sr. Level - Unconscious Competence. You do what you know.

The Machine - You’re just conscious.  You’re indifferent to competence or incompetence.  You code or script because you love it. Simple or complex isn't a goal anymore.  Just writing becomes its own reward.

Script Kiddie

A lot of people start with an interest in computers or tech. They will be trying different things to make lines of text show up or the system beep. They will find scripts or snippets of code that they will run. You might know what the result is supposed to be, but you it might not always work out the way you want. You will find a Reddit post or something from 4chan to run. It looks cool, might be malicious, you don't care. You just want to make something work. Then you will expand to more things in different places.

You're going to spend a lot of finding something really cool on the internet, that you are going to try without learning the basics. Things like what is the difference between java and javascript? They are same, right? Or maybe at a deeper level, int vs. float vs. decimal vs. double. They are all numbers right? Just use the biggest one always. This is where a lot of people might decide that developing or working with computers just ins't for them.


Entry Level/Intern

I joined these two together because it just seemed like the place to go. I have seen some smart interns, but I have seen some dumb ones too. At this point you know your limits, and that bar is probably pretty low. You are going to be afraid to try a lot of things without someone looking over your shoulder. A big difference between this stage and the script kiddie is that you are getting a little better at the learning the effect of a script or line of code before putting it in. But you are still going to be surprised or afraid to do anything with out something signed off in triplicate.

There is a good chance that you know what a problem is, you may even know what needs to be done to solve it, but you just can't figure it out by yourself. This is expected, but just know that this is one of the shortest lived levels of knowledge. Once you show that you have made a few good decisions in a row, you might notice that people are just going to give you rights to code or servers. Your scripts and code might go through some sort of code review, it might not. When this happens, you have moved on to Jr.

Jr. Level

At this level a lot is expected of you. You should be writing scripts and code pretty much on your own. At a minimum at this level you are doing bug fixes, minor enhancements, and maybe even finishing up an application or migration on your own. This can be the most nerve racking stage in your career. You know what you need to do to fix a problem, and it is expected that you will just do it. If you don't know how to fix a problem then you research it. Research is key in this stage, because anything you don't know you are going to have to learn. This is something that you should have been doing from day one anyway, just now the problems are much more complex.

Now this will shock a lot of you by my next statement. Just as quick as the entry level to Jr. seemed quick moving from Jr. to Sr. isn't much longer, or will be the longest stage ever. At this stage hand holding is gone, you should know how to fix something or figure it out. Within six months to a year, you can no longer hide behind the title of Jr. You should be a Sr. That being said, there are forever Jr's.

These people seem to never find a way to reach that level where they could survive on their own. They show no desire to get there either; That is the worst part. Everybody knows these people in their place of work. They aren't trusted with complex tasks at all. Either from past experience going wrong, or they pass them off on to others. Then to make matters worse, after a certain amount of time, these people are never going to get better. If you don't make it past this part, your growth will be stunted and you will stay here forever.

Sr. Level

At the Sr. Level you are handed a task and a solution is expected. You will be given little to no guidance on how to do this either. It is almost muscle memory when solving tasks. There is almost no problem that you haven't seen at this point. You are most likely, with time permitting, going back updating legacy code to match your new standard. This is where a lot of Sr.'s might struggle too. It is a humbling experience to go back and look at code that is utter shit only to realize it is your own after damning this person to an inner circle of hell. For most this is the top level, you have came to the end of your journey. You learn new things as they appear to keep yourself entertained, but for the most part you have a whole tool box of skills to solve a problem.

At this level you will be guiding the Entry level/Jr.'s through the dark corners of your code that might be confusing. A teaching role, or at least consulting, will be expected. This will range from hand holding, to just pointing in the right direction. This means you have a great understanding of your code or infrastructure, as this is expected.

The Machine

I couldn't think of a good title for this level so I went with The Machine. This level has a lot of different names; architect, guru, the machine, etc. Everybody knows this person in their office. They seem to know the ins and outs of everything. You can find their fingerprints on a lot of the code and servers. Generally speaking these people are who Sr. level's go to for help. Complex problems are simple to this group, and this group loves solving these things. That is their reward. You show them a new language or server and these people seem to just be able to figure it out in under an hour. Entire applications have been wrote by these individuals.

While Sr's have a toolbox full of tools to get a job done, machines make the tools or hand them out. Whether it be deciding to use Hibernate or entity, puppet or chef, git or Hg, or rolling their own toll that they think is better. Usually they have a not only a broad understanding of something, but deep understanding as well. Like upside down pyramids, rather than T Shaped People.


This isn't a perfect translation, I know. I did what I could do with my knowledge or the all the levels. While the JiuJitsu article was wrote by a black belt, I am not a machine yet. So I am sure there are problems or skills that I might have missed. Comment and add your own examples or updates if there is a glaring omission or mistake.

No comments:

Post a Comment