Monday, 23 March 2009

My “Tech ToDo” – I can haz skillz?

One of my main goals for this year was:

I really need to ante-up my geek game.

I know what you are thinking - “don’t we all Rob?” – for sure, but the truth is this I have been learning relatively little and I feel pretty “mediocre”. I’ve been making efforts to meet more people, making me realise that there are some really skilled people out there. I want to be known as a “skilled” developer, so it is up to me to step up to the plate and fill the void(s) in my skill set.

Cutting code is one thing, but cutting good code is quite another.

Sometimes you need to just keep repeating stuff to yourself until that little light bulb goes on, you leap out of your chair and think “I should do something about it!”.

I came up with the code:

   1: while (rob.notGotIt)
   2: {
   3:     rob.HitSelf();
   4:     rob.Think();
   5: }

After several iterations, I came up with the following:

  • I have been spending a lot of time studying for the old 1.1 certifications.
  • I am a real MS nerd, I rarely use other techs, even if they are open source (not for any reason – I just “never got round to it).
  • I get wrapped up in thinking about doing it rather than actually doing it.
  • I waste a lot of time doing things the “old way” when I could be using tools to cut a lot of the fat.

It’s obvious all of the above have to change, so here is the plan:

Memorise Less, Code More

This may seem a little “weird” and anti-what-the-paper-says, but certifications do not make you a good coder. I have completed the MS 1.1 certifications for Windows and Web development – did they make me a better coder? Not really. Sure, they taught me a lot of the core concepts and classes - but they didn’t improve the quality of my code, nor did they help build experience. Both of those are what really matter with code.

I spent a long time really trying to force everything in my head and be able to memorise the entire book. While this may seem a noble cause, I realise it is also a lost one. A lot of the information I learned is so outdated already I would have been better off getting the fundamentals down, cramming for the exam and just moving on.

So, I am gunning for the MCTS - .NET Framework 3.5 and ASP.NET Applications (70-536 & 70-562) I really think I will take this approach: cram, get it done, code. KISS and all that. I am much more valuable to me, my employer and the community actually writing code rather than sitting in my little apartment hugging a book.

Thinking about it, the above should be applied to technical books as well – read the book, get what you need and close it. Skim read the chapters rather than just read it page-by-page. Highlight key areas of the book and then read them thoroughly.

Get What You Need, Lose What You Want

Being a nerd I often look at lots of things and go “ooOooOO" – that looks cool! I want to play with it”. While this can be great sparking the interest, it can be a real pain in the ass when you just spend lots of timing trying to check out lots of different techs. You are not helping yourself.

So, I have started my “Tech ToDo” list. Whenever I see a tech I know I need/want to have a play with, it goes straight on the list. Take a look at it – see some techs that I really should know? Tell me about it, this is why I am here writing this post!

Every week I then review the list and bring things to the top that I think will be the most useful for me at the moment. At time of writing they are “ORM frameworks, Web MVC frameworks and Javascript”. I don’t know/do enough of any of them, and I really should. So up they come. Likewise if items are not of real importance, they should stay near the bottom of the list or possibly even drop off.

Stop Thinking Nerd! Do It!

This one can always be the hardest.. It’s so easy to say “get on with it” but we are all busy and it can be hard to “find the time”. I knew I wasn’t going to “find” it so I just went ahead and “made” it. We have recently been asked if we can reduce our working hours at the office.. Sadly I could not really afford to drop to 4-day weeks, but I did drop to a 9-day fortnight. This gives me two days a month to do what I want. Right, now I have time! Sure, it’s costing me, but that just motivates me more to use it wisely.

I have dubbed these days “Tech Days” and will blog about them as they occur..

Keeping It Focused

The “Tech ToDo” is a real simple concept, but it really has helped in me focusing my efforts on getting the skills I need to improve. It also provides great opportunity to ensure you are prepared when external opportunities arise. As an example: ORM’s were on my list as priority two – but then a presentation was scheduled at my local user group meeting on NHibernate – BOOM! Comes right up to the top of the list so I could align the presentation with my Tech Day. Just keep working the top of list and the skills should gradually come along as you need them!

Thoughts? How do you keep your skills fresh?

3 comments:

  1. Hey Rob,

    Like you, I've got a swiftly growing list of things to learn so that I suck less. There are so many ways to improve but so little time to do it in.

    For certifications, I took the 536 and will eventually take the next few to hopefully get a MCPD. You're right though, I haven't really learned any good practices from the endeavor, I'm just able to name off a lot of things I could use to solve an issue, but oftentimes find myself scrambling for the training kit as a reference.

    I think you've got a good plan. I might try and make a list of skillz and the order in which I want them. But I find that many of the skills I'm working towards, TDD, using patterns appropriately, becoming better at architecture and requirements gathering, all tend to be things I can work on simultaneously. The same wouldn't apply if I had a handful of languages to learn, but this is just my case.

    ReplyDelete
  2. I think you're being too hard on yourself, and you sound a little like you've been drinking a bit too much Community Kool-Aid (not unusual amongst those who discover community for the first time).

    Several things in your post sound alarm bells to me. On the one hand you talk about how poor certifications are, on the other you talk about cramming new certifications so you have more time for coding, thus compounding the myth that certifications can be crammed quickly and are therefore worthless. Those with vested interests (promoting themselves to get more speaker gigs, a book deal, an MVP or whatever) often diss certification but if it really were as worthless as they imply why are so many companies still insisting it's useful. And if they really are quick and easy to get ask those dissin them why they haven't just gone out and earned a shitload to maximise their employment opportunities? Truth is those dissing certification often don't talk with any real world experience of having sat the exams and passed them :-P (which is not to say you can't cheat, or that they're perfect, but as a way of getting into a new technology they're hard to beat in my view).

    I may be wrong but it sounds like you're taking strong opinions of others who seem much more passionate compared to those you encounter in your work environment as if they were fact. To misquote Scott Hanselman (from his latest podcast - the one with his wife - is well worth a listen): Just because you're an author doesn't mean you have authority. Community thrives on the latest toys and people persuading you that these latest toys are essential (that's how those pushing them get more business!) but the reality is the real world is a lot more conservative and everything carries a cost and an associated risk. Don't just assume that the whole world is out there using the latest toys when it isn't! You only have to look at the number of companies still running VB6 applications to realise that!

    If you're like me you've probably been following the whole ALT.NET thing for a while now. Scott Bellware is often the spokesperson for this stuff and well respected by his peers. Go check out his interview on the .NET Rocks podcast where he admits he hasn't done any .NET work for a year!!! See what I mean about checking what people are saying/promoting/evangelising about against the reality of what they're doing in their day jobs?!

    How often do you look at code you wrote a year ago, and try to figure out what it does/what you intended? And that's the stuff YOU wrote. Imagine trying to learn 100 new things at once (crammed into two days a month??!!) - how "useful" do you think what you learn will be a few months down the road? It sounds like you're setting yourself up for inevitable failure unless you are more realistic about one person can learn in the time he/she has available.

    Two days a month is NOT going to be enough to cram for two new certification exam (certainly not in some of the new technologies like WPF which have a steep learning curve) or get to grips with all those shiny new technologies that are constantly being updated and improved. So don't over-pressure yourself with things that aren't achievable. Choose one subject (NHibernate sounds like a great one to start out with) and play with it and see how it goes. When it stops working for you, or you feel you've learnt enough, move on and pick something else off the list, but don't regard the list as something other than a memory aid - not something that MUST be done at all costs.

    Also don't assume you're mediocre just because you've met a few "rockstars" at a community event or two. Community can be very invigorating, but it can also be very incestuous and it's wrong to assume that those "rock stars" at local community events are typical of the average programmer. How many have a good family life, or are "experts" in anything other than one or two technologies? Are they happy/or just as frustrated as you in their real jobs, even if it's using that technology they're enthusing you about? Would you be happy with the same lifestyle? Is development so important in your life you want to devote every spare hour to it, travelling all over the country to attend every event (it's seriously scary how you see the same handfuls of individuals at events, no matter where you are - but it's important to realise those people ARE just handfuls cf the tens of thousands of developers working in the industry).

    Also remember that most community experts are specialists - they don't know everything either. They pick a topic, usually one that's being ignored but which they think "has legs" and specialise in it. Nearly all are extremely opinionated - which isn't the same thing as being right!

    So, set your own comfort zones and get the work/life balance right. Talk to people you admire and respect, find out what they do for the day job, if they're happy, how many hours they spend doing what they do and prioritise your own goals accordingly, but DON'T make a ridiculously long technology list, call yourself "mediocre" and expect to accomplish everything on the list in a couple of days a month - that way can only lay failure. The mere fact that you know what things like NHibernate and ALT.NET are shows that you are "above average", at least if my experience working at many different clients is anything to go by!

    Good luck whatever you choose to do, and may your obvious enthusiasm continue through your career.

    ReplyDelete
  3. Ian,

    Thanks for the great response, apologies for my delay in replying - I wanted to make sure I took the time out to reply to you properly.
    I will try to cover all your points raised, if I missed anything, please shout!


    Certifications
    My point about cramming was not to suggest that they are either easy or worthless. I often spend a huge amount of time studying for the exam to give me the "skills" to write code, passing the exam, and then realising that I in fact don't really have more skills to right code, rather just a better understanding of my toolbox. For me, this is still *VERY* important - how can someone be skilled if they don't really understand the tools they work with?

    The idea that I put forward in cramming and then getting on with it is this:
    Understand the tools quickly and get the certification, then get on with APPLYING what you have learned. You can only learn so much about a saw before you get to a point where you just need to start cutting the damn wood right? In my case, I was ensuring I had each tooth on the saw sharp, when in fact we all know noone ever uses the whole saw when cutting. And sure enough, knowledge that I have not been using has already started leaking - not a wasted effort per se, just *too much* effort that was wasted.

    I think the certifications are real useful, and I will continue to sit the exams for them to make sure I keep my toolbox up to date. I am totally with you when you say "dissing certification often don't talk with any real world experience of having sat the exams and passed them". The exams require a good understanding to pass, and the fact that you dedicate personal time to them says heaps about you as a developer.


    Community and the Lastest Toys
    Again, I am totally in agreement here.. Maybe I didn't present the idea of the "Tech ToDo" clearly. The main point of the tech todo is to reign my curiosity in and actually keep me focused on learning things that matter to me, in my job/career NOW. There are some things on the list now I am already pretty sure I may never get around to doing, but I am making sure I keep it in my mind just in case. The idea here is to not complete the list, but just actually get some stuff off of it!

    Great point on Scott Bellware not doing the .NET for a year.. Great reality check.


    Learning Rate @ 2 Days a Month
    You made a great point here.. But again maybe I didn't get my thoughts across clearly on this one. The idea for the tech days is to really just get a feel for a tech - It's obvious I will not become an expert in a day, but it gives me the opportunity to actually do SOME of it! Up until this point, I have simply not had the time to do anything, so the extra time is a real plus. The added fact that it is costing me is also a great motivator for keeping the day on track as well. I found my first day real productive and enjoyable.

    Oh, and the two days a month are not for cramming for exams - that the rest of the evenings and weekends etc. Funny thing is you totally hit the nail on the head with the remainder of that paragraph.. I intend to just use the List and Days to keep myself fresh!


    Community "Rock stars"
    Absolutely great point.. And one I truly need to heed it's easy to say "I want to be as good at that as them, and them, and them" [ad infinitum]. This is also another reason I wanted something to reign me in and keep me focused. I'd rather pick off what I want, learn from the best around what I need/want and then move on, hopefully a better developer for it.


    And Lastly..
    A heartfelt thank you for taking an obviously good amount of time out to write your comment. Rest assured everything you have said was taken on board and duly noted, and for me, that is invaluable. If I write 1000 posts and only get 1 comment as good as yours in there, I will be happy.

    Thanks again.
    Rob

    ReplyDelete