Wednesday, 8 July 2009

Certification vs. Burnination? Recruitment, Employers, Developers – Let’s Talk (Long)

Robdor This has been something that has been playing on my mind for quite some time, so I thought I should get my thoughts out onto the Interwebs and see what people thing. But first a little background..

A Little Précis on Rob

I have been working with C# in the “pro” environment for about 2 years. Before that I had about 1.5 years “bedroom programming” experience. I am a relative newbie to the development world.

In the past year, I really wanted to shake that feeling off. I spend nearly ALL of my time studying and [hopefully] improving my craft – ask my friends, they think I am a loser.

Would I consider my “.NET Skills” my selling point? Probably not – the one thing I have always prided myself on is my attitude:

  • I do not miss deadlines (unless things really hit the fan).
  • I am not afraid of looking stupid, I am afraid of being stupid.
  • I am 110% honest. No matter how bad I look.
  • Always, always, customer first.

I KISS – Keep people happy. Spare me red tape, spare me B.S. – let’s just work together and get the job done.

Back when I was training for the forces (failed entry due to eyesight) I kept it even more simple (and crude – forgive me)

         I do not f*ck around

Moving on..

Certification

In order to try and make myself more “sellable” I have been working towards some Microsoft Certifications (I have Windows/Web 1.1, Now working towards ASP.NET 3.5).

Recently however, this has REALLY been bothering me.. I am constantly having problems trying to brute-force meaningless crap into my head. The MS certifications are notorious for really grilling you on things that actually are hardly ever used. It’s trigonometry all over again.

This would be fine if I did not have lots of other things that I feel that I should be looking into. I genuinely feel like I am wasting precious clock cycles in my brain. When I could actively be learning things that make a difference to how I work, what I can do for my employer and ultimately, the customer/end user.

Burnination

This is a reference to “Trogdor the Burninator” and some fun banter I had with my previous manager. He used to call me “Robdor the Burninator” because I would go crazy at lame code in the repository and then hack like crazy to fix it (we even have archived projects called “xxx – PRE ROBDOR” – they make me happy).

Anyway, the whole idea here is that I am a developer, I enjoy cutting code and I want to solve people’s problems for them.

As an example, I recently started a personal project. I want this project to evolve into a product. I want it to be worth lots to lots of people. I want to change the way people work and ultimately - save them money and help their business grow. In return, I hope I can get a business of the ground and grow myself.

I have been working on this project for about three days now. In that three days I have learned more about:

  • Prioritising tasks/features effectively.
  • Improving the design of my code for increased testability.
  • WPF
  • Organising my tasks/features/futures into some logical sense.
  • How to use Git and remote repositories.
  • My ability to estimate timescales on features.
  • Innovating is not hard (per-se) when you are free to do it.
  • How much I enjoy writing code.

.. than I have in the last year at my employer. I kid you not.

Now, looking at that – what do you think is actually going to have a greater impact on the work I produce for you?

The Usual Suspects Job Requirements

I have seen far too much weight applied to certifications/meaningless experience when it comes to job opportunities.

In the current climate, there are a lot of people looking for jobs. There are CV’s flying everywhere. Now I know for a fact that my CV has been instantly binned because:

  • I have not had >5 years experience in .NET.
  • I do not have a Comp. Sci. degree.
  • I do not have a MCPD

When I can also tell you:

  • I have met people who have > 5 years .NET experience but cannot write a unit test using Debug.Assert let alone xUnit etc.
  • I have met ASP.NET developers that have never written a line of Javascript.
  • I know people with an MCTS in Windows/Web Dev but cannot code up a simple CRUD app, let alone apply design patterns etc.

Now, please do not take this as a flame against those people, it really is not. My point is this, these “basic” requirements can easily be met by people who will genuinely struggle with a lot of development roles.

Training for the Royal’s was a classic, you would often meet absolute beefcakes who would crack and crumble REALLY easily. But the skinny, spotty 16 year old kid would pass every test with flying colours. Why? Looks can be deceiving and the only way to really test a person is to bring them in and run them through the mill.

Selection

Sure, I understand that you need some kind of filtration process, you cannot possibly have EVERY applicant in. But please know what you are shopping for before you go to the supermarket. I am finding myself actually getting turned off of opportunities that use the same old boilerplate crap. “Your loss” you are thinking Mr Agent/Employer right? WRONG – I think most people with even just a reasonable amount of talent are feeling the same way and you are potentially losing out on some great people.

This is not to imply that I am the greatest geek in the world, far from it. But I know that given a good opportunity, I will take it and run with it, that is my nature. I am the geek that will likely die at 40 by way of a stress-induced heart attack, and go to heaven/hell mad at myself for “being weak”.

OK Geek, So Now What?

Apply some brain-time to it:

Understand the Lingo

I am sick to death of being told “it’s a great opportunity” by recruiters that do not know the difference between “C# Windows” and  “C# ASP.NET”. How the hell can you find me a good opportunity if you can’t read the damn label?

Work for Us, Not For You

Modern developers are nothing like the geeks of old. We endeavour to approachable, helpful, honest and act with integrity. We have to. We are not douche bags so do not treat us as such. Talk to us, build a relationship and genuinely want to help us/make us happy. Sure you may lose a little commission or a little time, but one happy geek who refers you to their network of 200+ other good geeks may actually get you the exposure and results you are actually looking for.

Understand that Burnination Can be Worth a LOT more than Certification

Keep an eye out for those that are heavily invested in developing themselves. Someone who is very active in the community or actively developing themselves can bring valuable insight to the team. Don’t underestimate what that can do for your business.

Know What You Want and What You Need

Do you want the safety of that little boilerplate piece of text HR have used for the pass 15 years, or do you want to find the most up-to-date an innovative person you can to drive your business forward?

If You Scared, Use Protection

Many modern processes (such as Agile methodologies) are excellent at highlighting problems early. I am sick to death of hearing managers moaning about how they have “gotten their fingers burned in the past” as excuses for stepping outside the box with recruitment. Stop moaning and start managing! YOU are in charge.

Look at how YOU allowed a “bad apple” to sit in the team long enough for it to become such a major issue. Nearly every employment contract I have signed has a grace period where my employer has the right to bin me without warning. Use that time. Put me through my paces. If you don’t see any hope, exercise that right. But I will say, give people a chance to correct mistakes and if things are not working out – they should know about it. Geeks are in fact human.

If this is not an option, change the way you work, have increased checking, pair program, have 100% code reviews until the other developers are happy with the output. Take control and stop deferring responsibility. I really would not be surprised to see a greater success rate from managers really investing time in making sure they have a solid “integration process” for new employees.

Don’t Throw Recruitment “Over the Wall”

There has been a classic situation like this with designers and developers for a long time. I have often been regaled with tales of “these crazy designers” and I have also witnessed some of it myself.

The problem is this - developers write code and throw it over the wall and expect the designers to make head and tail of all their geek speak and “logical” UI’s. Designers create really sexy UI’s that look great but fall apart when the data from the DB actually replaces their “Lorem Ipsum”. Problems ensue because once the respective individuals job is done, they just “throw it over the wall” then the mess is in someone else’s garden.

In recent years, these barriers have started to come down, and it shows. I actually really enjoyed a recent project with a third party design company because I worked with them, I learned stackloads and had a lot of fun seeing their creative magic at work. We did this by maintaining a really tight loop, always assuming joint responsibility for the end product and keeping each others best interests at heart.

I think WE need to do the same with recruitment. Yes "we” – employers, managers, developers, everyone.

  • Take the time to educate them (whoever you are talking to) on YOUR needs. Don’t write them off straight away. Let them know your issues and give them a chance to address them.
  • Respect theirs, yeah we can all get annoyed, we are all very busy, but they have needs too.
  • Both aim for the same goal – a happy employee with a happy employer. Yes recruitment agents, that means stop drooling over your commission cheque for 5 minutes.
  • Those in the middle (Agents, HR) help both parties get their point across. “Sure, this employer uses VSS, but they reward internal training with a days holiday – why not train them on SVN?” or “Sure, this person interested does not have Comp. Sci, but they have worked with X technology and we are really moving in that direction”.

You get the idea. Really put on your “matchmaker” hat rather than just indiscriminately forward some people and brutally chop down others.

In Summation

I personally feel that too much weight is applied to certifications by companies that somehow want to take the “easy” road. They somehow feel more safe slapping a qualification on it. Maybe it gives them more protection if something were to go wrong. Who knows?

What I do know is: I am really starting to wonder if these are the kind of people I want to be working for. I would much rather continue working for a crap/mediocre employer and working to improve myself to the point where I can go solo/start a joint venture as opposed to move somewhere that cares so little about the true quality of their developers that they just slap a boilerplate label on it and hope for the best.

Certification does not make better developers. Developing makes better developers. My perception of this has really changed drastically over the past 6 months and I have yet to come up with a good counter-argument to this internal change. It genuinely feels right. I am more enthusiastic than I have ever been (even after passing certs.) and I am starting to amass some code to prove it.

I believe the truth is this, you are only kidding yourselves.

What are your thoughts? Certification or Burnination? Is this a problem or a symptom of internal issues/false mindsets?

Thursday, 2 July 2009

Feedburner “File Size Greater than 512k Limit”

So, it was brought to my attention that my blog feed had apparently not updated since April! Now, I know that I do not publish a great deal, but I know I have posted since April!

I therefore thought I should dedicate some time to figuring out what the problem was.

My first port-of-call was obviously Feedburner, which basically provides a whole bunch of stats and enhanced syndication options for your blog. Sure enough, my Feedburner Feed was out of date. Excellent.

Why Was Your Feed Out of Date?

Good question, Feedburner wasn’t actually reporting any problems! I figured maybe it had choked somewhere along the line so I would try re-adding it to see if it caused it to refresh it’s cache or something.

Boom, there it was:

image

So, a really helpful error message telling me my feed was too big. No idea how it calculated this so I can find out for myself. But it does provide a rough idea as to where to look for an answer (no link or even better THE ACTUAL ANSWER).

As always, Google’s software constantly of Beta-quality support.

So after 5 mins of Googling for the mysterious “Feedburner Forums” page – I came across this page, which contained the following little gem of information:

  1. Sign in to your FeedBurner account.
  2. Click the title of your FeedBurner feed on the My Feeds page.
  3. On the feed management page that appears, click the Edit Feed Details... link just below your feed's title.
  4. In the Original Feed Address field, change the address listed there from an example like the following:

    Code:

    http://myblogname.blogspot.com/atom.xml
    OR
    http://myblogname.blogspot.com/feeds/posts/default

    to the following format:

    Code:

    http://myblogname.blogspot.com/feeds/posts/default?max-results=3

    (Note that max-results sets the number of posts you want to have appear in your FeedBurner feed. Any integer value between 1 and 500 is permitted.)

  5. Click Save Feed Details. Your changes are immediately applied and FeedBurner re-burns the newly shortened (or lengthened) feed.

The bold red text is the good stuff. After adjusting this down to 3, my feed is now syndicating and burning properly again.

1/2 a MB in Text Content.. REALLY?

image Exactly my thoughts.. 512K is a LOT of text content, I mean, normally you need hundreds of posts to be hitting this kind of limit.

However, it would appear that perhaps images and embedded files may also be causing the problem – I have recently added several posts with links to files etc.

I do not know if this is the root cause of the problem, and to be honest, at this point, I do not care :D

Hopefully this post will just help any others that get the same problem and save them having to search for a page that the Feedburner team seem to lazy to quote or even just link to :)

Tuesday, 30 June 2009

Cleaning Notification Area Icons in Vista/Windows 7

Just thought I would quickly post a little tip on how to clean your notification items from Windows Vista/7..

What are Notification Area Icons?

imageIn Vista/7 you have the ability to control how items in the taskbar tray are displayed (hidden, always shown etc).

This list can actually get rather bloated, especially for us developers when we are building applications that sit in the tray (you actually end up getting two entries, one for the debug, one for the release). So, you may find it is getting a bit unmanageable and want to give it a clean.

NOTE: This will remove ALL entries from the list – including settings you may/will want to keep!

You will therefore need to reconfigure items that you want to always show in the tray etc.

Some people may be asking “why not just use the reset link provided?” – Well, it doesn’t clean, it just resets. So if you have many icons that you have previously set to “Always Show” and then deleted. They will just revert back to “Hide/Only Show Notifications” (or whatever) as opposed to actually being removed from the list.

(If at this point you are still unsure what Notification Area Icons are or how they affect your system – this blog post may not be for you).

So How Do I Do It?

Pretty simple, just execute this registry script:

   1: [HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify]
   2: "PromotedIconCache"=-
   3: "PastIconsStream"=-
   4: "IconStreams"=-

imageThis will basically blitz the cached items in Explorer. We then need to restart this process so open Task Manager (CTRL + SHIFT + ESC) right-click explorer and click “End Process”. Don’t panic, the taskbar etc is supposed to disappear, that’s the point :)

Then in Task Manager, click “File > New Task (Run…)” and then enter “explorer.exe” and all will return to normal. Note your Tray Icon/Notification settings are now squeaky clean!

Hope this helps :)

Monday, 22 June 2009

GrokGit Series: “Gitting Started with Git”

Well, I have been saying it for a while – I need to do more speaking at community events, so I finally agreed to start small and do a nugget for my local user group.

Why Speaking?

My thoughts are simply:

Pros

  • You need to understand things more intimately in order to be able to explain them.
  • The many iterations required to get the slides right reinforces the learning that took place to get the content on there to being with.
  • It’s great for confidence.
  • You can (hopefully) pass some useful knowledge on to the community and help them try new things/better themselves.
  • It’s a great icebreaker to meet new people (i.e. you are more likely to talk and engage with them if you have some subject matter to talk about).

Cons

  • It can be scary – it’s been ages since I stood up in front of people.
  • It can be time consuming trying to create the “perfect” slide deck.
  • You can look/sound like an ass.
  • You give false information and/or confuse people even more.

… All of which can be sorted by me trying hard not to be a moron (no guarantees, no cash back!) :)

OK, So What Nugget?

I have recently decided to take more of a direct approach at getting to grips with Git. After a rather interesting session at Open Space Code in London, I came back highly motivated to crack it.

Since myself and others have experienced some pain at most parts of the learning process, I thought I would share some tips and guidance on how to get up and running with Git.

This nugget is the first of a series I hope to continue to help both you guys and myself get to grips with Git.

Please click the link below to download the slides from my SkyDrive.

I’ll upload others as soon as I have completed the talks (give me a change to review them based on feedback etc.)

As always, all feedback is very welcome – so please shout if you see anything you feel needs to be said!

Tuesday, 9 June 2009

Common Git Commands Reference/Getting Started

Here’s a round up of the main features that I have made use of in getting started with Git. This is by no means a complete list, but I thought it could be a great supplement to any “Getting Started” guide you may have (feel free to comment and post links!).

Basic Commands

Here’s a run-down of the most common commands I have found myself using.

Command Description

git help commandName

REALLY your friend when getting started! Use it!

git init

Creates a Git repository in the current directory.

git status

Reports the current repository status (e.g. commits pending etc.)

git add

Add files to source control (use the “-A” switch for ALL files in the directory.

git commit

Performs a commit operation to the current repository.

git branch

Lists the branches in the repository (with the current branch marked with an asterisk).

git branch name

Create a new branch called with the given name. This will be created based on the HEAD revision of the master (i.e. latest code).

git branch -d

Deletes a merged branch. If you wish to delete a branch regardless of it’s merged status, use “-D” instead.

git checkout branchName

Change the working tree to the given branch name.

git checkout –b newBranchName

Creates a new branch with the given name and switches it to the working tree.

git log

Lists the log messages for the current branch.

git gui

Pretty nice, simple GUI for a more visual run-down of the current Git state.

git reset --hard

Reverts the working tree back to HEAD revision (useful for messing with code and not wanting to commit).

Ignoring Files & File Types

I found the best (and easiest way) to do this is to create a text file that contains the ignore patterns you would like to add. For example:

   1: # Core Excludes for Git
   2: # Cached items used by VS.
   3: obj/
   4: bin/
   5:  
   6: # Resharper Cache
   7: _ReSharper.*/
   8: *.resharper.user

Once we have created the file, we then need to tell Git to use that file for its exclude configuration. We do this using the “git config” command to set the environment variable “core.excludesfile” like so:

   1: git config core.excludesfile {path}

While working with the excludes file you will probably want to test that your patterns are matching correctly. This is where “dry run” will be your friend. When you have added your excludes file to your configuration, flick back to your project and type:

   1: git add –A –-dry-run

Here we are telling git to add all the files in the project directory (using the “-A” switch) but we have also specified it is a dry run (note the double-dashes preceding dry). This will basically list all the files that would be added if you had not have specified “--dry-run”.

Now, if you are anything like me, your first pattern may not be right. So you will go back and update the excludes file, save and then try again.

But wait, there is no difference to what is matched? It would appear that Git stores the configuration in memory once loaded (makes sense) so we need to reset it. Simply re-execute the “git config core.excludes {path}” command again and all will be well.

One other point to note, patterns are case-sensitive… That one had me for a good five minutes.. :)

Wrap Up

It is very likely that this post will continue to grow as I come across new commands/processes etc. So it may be one to fave in the RSS reader if you have found it useful.

If you have any ideas/suggestions for other items to add to the list, please let me know!

Obviously I have not covered merging yet, but that is the next on the list. I do also intend to add working with remote repositories (for those wanting to use GitHub) soon, so check back for that!