private override

16May/082

indy alt.net

The inaugural indy alt.net meeting was last night!

The group appears to be led up by jaxidian/Shane Milton of Leaf Software Solutions.  Many thanks to Shane for getting this group together!  I think this is an awesome opportunity for our community to learn how to be more receptive to alternative thinking in a .NET world.  I have heard of so many shops that have their blinders on and won't even consider working with frameworks/etc. other than those provided by Microsoft.  This can only be a true blessing to our community and where we are going as craftsmen.

Don't get me wrong, I'm not dissing Microsoft, they make world-class software.  The problem is that we need to be careful to always use the best tools that serve us in any given situation, rather than using only the tools that we are told to use via the mothership.

Last night's discussion was led by one of the co-founder's of Entity Spaces.  Their product, Entity Spaces, is a code generation based ORM tool.  I'm very familiar with the concept, but haven't had much of an opportunity to use many ORM's other than ActiveRecord in a Rails project I worked on, so I'm not sure how the usual suspects (NH/ActiveRecord, Linq2Sql, Linq2Entities, SubSonic) add up in a real implementation scenario, but it's at least worth thinking about.  Maybe I'll do a write up or try to find a comparison.

Also, many thanks to Tridge Alliance for their financial support of the group.

All-in-all, it was a great inaugural meeting.  I am sure we'll only continue to grow and get better.  If you're reading, and are in the area, and feel like you're missing something (sort of like Neo, ya know?) please come and see what we're all about!  We meet the third Thursday of every month.  Check the website for more info.

I'm stoked!  Let's make our tech community a better place!

16May/083

why I quit my job

It was hard.  That's for sure.  It's by far the toughest decision I've ever made in my life.

When I started at Ontario, I was part of a "rogue" team.  We did .NET.  We were agile (not Agile proper).  We were fast.  We cranked out features like you wouldn't believe.  We were tall.  And we had a blast.

Over the last year and a half or so, my team had completely dwindled for various reasons.  Folks looking for better opportunities, more money, or discovering God more deeply and intimately to pursue His Kingdom.

I started to question myself:

  • Was I limiting myself?
  • Was it my mission to impact the lives of all around me by staying and mentoring and instilling the passion and knowledge I have as an engineer into my colleagues?
  • Was it my mission to end my mentorship with my colleagues, since the seed had been planted, and move on to see what kind of impact I could make elsewhere?
  • What does God want me to do?

A few unexpected things happened that led me to my decision:

  • By happenschance I saw a post on jobs.joelonsoftware.com describing the kind of company I want to work for (www.SEP.com)
  • That company happens to be full of folks that went to my alma-mater (Rose-Hulman)
  • Matt's Initiate series ultimately sealed the deal for me as I realized I need to continue on, and spread His glory through the use of the talents He has given me.

I have since realized, the importance of me starting my career at Ontario.  I learned how to become a software engineer and found my passion via the tallest of my colleagues (yes, that's you Shawn), and I was re-introduced to God.

Working there was truly a blessing.  I still have many dear friends there, so if you are one of them, and find yourself reading this, please post a comment of email me!

Wow... that's been a long time coming!  It has actually been several months now since that time, and I've had a lot of time to reflect... but I think this sums it up.

Tagged as: , 3 Comments
16May/081

singly implemented interface… why/why not

So one of the things I've noticed since I've been at my new place of employment, is that people are passionate about their code!  I love it!  I have always been, and its great to be in a place where everyone else is as passionate about it as I am.

Onto the issue at hand.  Along with passion, comes strong opinions (of course).

Statement: I always want to create an interface for any service or class that collaborates with other services or classes.

Why?

Testability.

IMO (I've got one too!), testability is THE first class citizen (second only to working, value-adding software).

Having an interface on any collaborating service provides me the ability to (at least):

  • TDD
  • Test after the fact
  • Swap in a new implementation later
  • Low-friction

Why not? (my response to each in red)

  • YAGNI - "Why do you need an interface if there is only one implementer?  We'll create the interface or base class when there is a second implementer".
    There already is a second implementer... the tests!  Nuff said. (which is a nice segue into the next point...)
  • Testability should not affect the design.
    Ahem, isn't our goal working software?  How do I know it works if I can't write tests for it?  This directly opposes the entire idea of TDD.  TDD is not so much about testing, as it is about it being a design tool.
  • Just "subclass and override".
    Have you ever read Working Effectively with Legacy Code? This is the epitome of a legacy code technique

Dear reader (I doubt there are any),

What do you think?  Are there things I missed on either side of the equation?  I want your opinions.

Tagged as: , 1 Comment