July 2007 - Posts

Microsoft recently launched www.OBACentral.com.  The new sites helps further the vision for Office Bussiness Applications (OBA) as platform for developing Line of Business Applications. The site features a few Microsoft Partners that are already building OBA's.

As many friends and colleagues know my wife and I are pregnant with our first child, a little girl.  As a result we have decided to relocate to Tulsa, OK.  Yes, we are heading to Tulsa to be near family.  Most of my wife's family is from Tulsa and my parents relocated their several years ago for work.  Anticipating this move I have been actively interviewing with many local companies.

Interviewing is always a stressful process.  However, I couldn't believe the general tone of a third round interview I had tonight.  The interview started off quite pleasant but quickly turned almost insulting as the technical questions began.  First, I was asked to talk about my experiences with Scrum.  Well I work for a major fortune 100 company in the financial sector that is slowly trying to implement an Agile Methodology.  Unofficially, our team has been trying to use as many scrum principles as possible.  However, waterfall is deeply engrained in our organization and many process just aren't flexible.  As I began to describe what Scrum principles we have adopted the interviewer proceeded to tell me we're not practicing true Scrum.  This is of course what I had already stated.  My entire point being that we have been trying to adopt as many as the "best scrum practices" as we could possibly accommodate.  It is a learning process for us.  Large corporations do not just change direction overnight.

The next interviewer comment that took me off guard was his apparent lack of respect for the Microsoft MVP Program.  He stated, "I have interviewed many MVP's and was not impressed."  He said "...some seem technical but many are just good at answering questions and which was I?" 

His opinion was supposedly not meant to offend however I did find it quite offensive for I am proud of my MVP Award.  It hasn't gone to my head and by no means do I believe I am an expert in every ASP.NET, C#, etc.  I do believe I am a good developer and have contributed much to the development community.  Furthermore, I am friends with many fellow MVP's and I consider them to be good developers as well.  His opinion seemed purely based on technical knowledge/memorization and fails to account for all the other valuable contributions MVP's make.  The MVP award also recognizes those individuals that have helped mentor others and build communities. 

I must admit at this point my mind and heart just weren't into the interview.

The final frustration point for me came when the interviewer seemed to indicate that correct "Enterprise" way to populate business objects with data was to use an ORM such as NHibernate.  I certainly understand the value of mapping configs and pulling data from multiple sources to populate business objects that are independent from the data model however every decision has costs associated with it.  I work in an "Enterprise" environment and we haven't made much use of ORM's.  I would argue it depends on your requirements and many factors.  If I am building a service that only needs to retrieve data from one database an active record pattern or simple data mapper would work just fine.

The point I'm trying to make is there are things we are all good at and things we are all bad at.  When interviewing someone you can take the interview in a direction where the person seemingly doesn't know much by asking them essentially definitions.  There are many features of .NET that I probably couldn't describe in great depth but I know what they are.  I would go to MSDN read about the feature then use it.  It seems to me like it is more important to learn how a candidate solves problems.  Are they a creative thinker?  Are they passionate? 

I want to thank everyone who attended my session on Saturday.  I had been sick all week and was still feeling quite run down but we had some great discussions.  Office Business Applications (OBA) are really an excited way to look at developing or extending line-of-business applications.  As promised here are my slides and some important OBA links.

Download Tamp 2007 Code Camp OBA Presentation
Supply Chain Management OBA Reference Pack
Loan Origination Reference Pack

Recursion is a computer science concept in which a method / function essentially calls itself until some condition is met.  Recursion can be an elegant solution to some logic problems.  However, I believe there are some potential dangers in using recursion that should carefully be consider.  Recursion is not an impossible concept to grasp it is just one that takes some thought.  The skill level of those maintaining an application should be considered before implementing recursion as it is a more advanced programming concept and could lead to serious performance issues of not implement correctly. 

namespace RecursionTest
{
    class Program
    {
        static void Main(string[] args)
        {
               System.Console.WriteLine(calcFactorial(4));
               System.Console.ReadLine();	
         }


        static int calcFactorial(int n)
        {
            return n * calcFactorial(n - 1);
        }

    }
}

Did you spot the bug in the code above? The code never stops when the factorial is complete resulting in an infinite loop.  To fix the code we need to add a simple constraint or check.

namespace RecursionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(calcFactorial(4));
            Console.ReadLine();
        }


        static int calcFactorial(int n)
        {
            if (n == 1)
            {
                return 1;
            }
            else
            {
                return n * calcFactorial(n - 1);
            }
        }
    }
}
The recursive code above is very clean however as demonstrated it is easy to forget the constraint and introduce an infinite loop. I would also like to point out that from a performance standpoint recursion may not be the best choice.  It is often faster to use a looping structure where possible.  Finally, one must consider the impact recursion has on the managed stack in .NET.  Basically the deeper a thread's stack becomes the more difficult it becomes for the Garbage Collector to determine what should be collected and what is still in use.