Web log of a grunt coder
in Search

Junior Developer

Ambition and Folly

 

In April of 2006 I was desperate to break through from tech support and testing to development.  

 

    My wife wanted to move to Arizona to be close to family and was being laid off.  I also wanted to get out of Ohio after living there my entire life.  I applied out of state to see what was out there and after a few phone interviews with a company I took a job in Arizona.  The company made software that runs a school district.  The product kept track of students, classes, grades, among other things.  Very interesting since my wife is a teacher.   

 

    I was placed in a cubical with an out of date manual to a custom development environment.  The manual examples didn’t work.   Many days the environment  wouldn’t compile.  Most of the time the application didn’t either, bad check-ins from people at 9pm.  Other days the environment threw random reflection errors.  The actual application was developed using the company’s own framework.  I would rarely get a straight answer about how to do anything.  It wasn’t like I could just look stuff up on MSDN, even though we were using .net 1.1 and C#.   In my 4 months there no one explained how to get user input or many of the common interfaces.  In hind sight there was a lot going on under the hood which has similarities to WPF dependency properties and command patterns.  Unlike WPF, there was no resource to look up for help.

 

    I was supposed to have a mentor.  But after being ignored too many times I finally vented all my frustration at him the one time he helped.  It was sometime in my second month.  I was an outsider, I didn’t work 9-10 hour days and i didn't worship "the Framework", *angels singing*. I knew I wasn’t long for that job.  I just didn’t have the ballz to quit, especially since I didn’t have a car after moving .   An experienced .NET developer was hired 2 weeks after me.  He quit after a month on the job.  I should have taken that as a sign.

 

    Luckily they let me go.  I was dying slowly there.  I wasn’t performing.  They were going to let me go regardless, they had an existing customer drop their product and had missed a state reporting deadline for two new clients, a feature they already sold.   I was agitated they let me go at 8am.  I mean they could have saved me the taxi ride and $ by talking to me the night before.  I’m still bitter.

 

    They were really stupid there.  They had a static library, that was mandatory to use, one of the mandated functions to use instead of a null check was TypeCheck.IsEmpty().  This method was overloaded a million times and performed the same function as the String.IsNullOrEmpty() method in .NET 2.0.  However it did it for many classes.   So it would return true if you passed it a collection and the reference was null or the collection was empty.  This is handy in many circumstances, I understand that.  However it was mandatory to use in ALL null checks.  So what is wrong with that?  Seriously… guess.

 

    So this guy I worked with had a weird bug he couldn’t figure out.  Sometimes his application would go in an infinite loop and just retry over and over again.  On his first screen he would process some student records and put a list in the cache, a hash table.  On the second he would take the list out of the cache, if the result from the cache was null, it was assumed the user made it to this page due to error or there was a problem at the earlier page.  So he redirected back to the first screen.  He was confused why sometimes the app would just loop, going back and forth from both pages.  So he took out the check.  I tried to explain the check was fine if it checked for NULL and only null.  Since the list being empty was a valid scenario, there may just be no students that met the particular criteria, but a null was a problem.  After 20 minutes of trying to explain the point, the difference between a reference being null after being pulled out of a hash table and a valid collection being pulled with no records in it, the point was dropped. 

 

    They had some weird ideas about floating point numbers, and doubles.  They used Decimals for everything.   I once got into a debate, losing, thought of as an idiot for challenging their views.  I was confused why they didn’t use them.  According to them floats and doubles were buggy and rounded, at one point I was told “The error is in the cpu”.    Basically they were trying to explain the problem of precision.

 

     It’s not a bug in the cpu or in .net.   It’s a problem you should have learned about in jr. high science or math.  Ok, if you take an Astrophysics class it may be re-explained.   It’s why you don’t use 3.14 as pi to calculate the distance of stars.  You need more precision or your calculations will be off, you are only accurate to (n – 1) decimal places where n is the least precise number in the calculation.  In some cases you need a lot of decimal places and accuracy, more than a float or double can hold.   When I understood wtf they were talking about I was like “Oh, precision, yah that’s an issue with some stuff. Um…  but you can use a double for calculating GPAs”.

 

    From the msdn documentation : “The double type can represent values ranging from approximately 5.0 × 10−324 to 1.7 × 10308 with a precision of 15-16 digits “. 15 digits should be enough for a GPA, not enough for distance of stars though.

 

I’ve told that story, partially for therapy and mostly to lead to this point.

 

    Many companies hire Jr. Developers wanting a regular developer for cheap and have no interest in your training.  If you find yourself at one of these places, the best thing you can do for your career is move on.  Programming is a lot like chess: to get better, find someone better then you to kick your azz, repeatedly.

 

    Our industry does not take care of its own.  Our communities do, but the industry doesn’t.  Most of what we do is considered magic by the people hiring us.  Just talk to a head hunter, they have no idea.  Being inexperienced we don’t either.  If we were doctors or lawyers we would do residency or clerkships to apply our learning and be guided by experienced people we could look up to.  You would think that seniors would step up and mentor at a company.  This is a rarity.   Generally learning is on your own and mentors are found at user groups in 20 min conversations once a month.   If you’re desperate for mentoring…   so am I.

 

Are my expectations too high?   Is it really folly to think senior developers should be teachers?

 

 

 

Comments

No Comments
Powered by Community Server (Non-Commercial Edition), by Telligent Systems