Archive for March, 2009

Programming and the College Degree Requirement

Saturday, March 28th, 2009

During my hiatus I ran across an article lamenting the college degree requirement.? Programming is a young field – many of it core principles and tenets were created a mere 40-50 years ago.? Best practices are still hotly debated all across the Internet, and the value of a college degree is still struggling to establish itself.

Part of the problem is that a large number of practitioners came into the profession without a computer-related engineering or science degree.? These individuals have had long and productive careers and so understandably are more forgiving of others without a computer-related degree.? Of course these numbers are at least partially due to the immaturity of the field.? Not all universities offered computer related degrees, so folks got degrees in other fields.? The rapid explosion during the dot-com boom and Y2K scare created a huge demand for developers, driving up salaries and luring folks into the field who had probably never considered it as a viable career path.

So now we are in a situation where we have established degree programs and well-accepted curriculum for teaching people how to develop software, but an actual industry consisting of a number of folks who did not have the opportunity to learn the curriculum because they were busy actually doing it.? Naturally, number of these people look around and think that since they don’t have one of these degrees and they have done fine, their worth must not be that great.

Of course, they would be wrong.

In the article, the author makes a couple of different claims.? The first is that experience trumps a degree.? This is true, but how do you define experience?? Is experience working as a shift supervisor for 5 years worth more in a development context than a senior project developing yet another web page?? And if you are attempting to compare a developer of 30 years against a recent college graduate, there will be no contest.? Experience only matters in context.? Degrees are just another way of demonstrating experience.

The author also claims that want and desire should outweigh having a degree.? Of course, want and desire is also one of those things that is real problematic when it comes time to define it.? To use the author’s example of the person who taught themselves programming at night while working a full-time job, perhaps the taught themselves programming not because of any particular interest in it, but because it was a way out of the dead-end job they were currently working in.? Doesn’t getting a degree indicate an equal or higher amount of desire?? As anyone who has suffered through one of the “weed-out” courses in computer science or engineering can tell you, getting a degree in business administration can seem mighty tempting at 3:00 am on a Saturday when you are stuck in a lab and your friends are stuck in a party.

Finally the author claims that since everything taught in the degree programs can be learned outside of college, there is no real need to actually go or finish school.? While true, this simply misses the point.? If I am seeking to hire a candidate and I receive 500 applications, I do not have time to sit down with each of them and determine whether they have learned the skills I need them to know.? Everything we do and every profession can be learned without having formal education in it.? But formal education provides a common standard against which others can judge us.? There is no need for every person to be an expert civil engineer to determine whether the guy building that bridge has some minimum knowledge.? Instead they can look to see if he has his degree.? They can look to see where he got his degree from and determine how much prestige it has.? This gives us a common understanding of the type of knowledge he is expected to have.? Without a degree, the only way to determine this would be to have enough knowledge to ask him yourself, which is not practical.

I obviously fall into the pro-degree camp.? On the job learning, or even learning from home, tends to focus on what is needed right now.? You can learn the motions, but it is much more difficult to learn the reasons.? A formal education should focus on teaching you the why’s and leave the how’s to be learnt in your own time.? A degree program should protect you from having to learn the arcane details of a specific language in favor of learning why those details exist.? The degree program should teach you how to approach and solve problems.

A degree also provides you with a common learning experience and language.? Upon entering the workforce you can immediately relate to other developers who share the same knowledge and language.? A college degree implies that you have a minimum amount of ability and that you have demonstrated a minimum ability to communicate that knowledge.? In business, communication is everything.

At this point I should mention what I mean when I refer to a “college-degree”.? The article took that to mean a “Computer-based college degree”, so I have done the same.? In reality, however, I believe that the benefits of a degree translate well across domains, especially if the degree is still in a science or engineering based discipline.? The difference between a person with a comp-sci degree and one with a chemical engineering degree is minor enough that it can often be overlooked unless you need instant productivity.? Both would have demonstrated an analytic ability and a intense dedication to learning.

This is all assuming a recent graduate (up to even 10 years).? If I am looking for a more experienced applicant, than experience will obviously be the determining factor.? In the end, a degree is simply another way to get your resume noticed.? Hiring is not about interviewing all the perfect candidates, it is about not hiring a bad ones.? Most companies are always ready to hire good people, but if you do not have the qualifications that scream out “good employee”, it is up to you to go the extra mile to demonstrate that.

HP Support – Take 2

Friday, March 27th, 2009

I’ve been without a laptop this week.? Given that I normally use my laptop for writing and free-time coding, I decided to take the opportunity to catch up on some of my outside interests.

Unfortunately, HP had a different idea for me.

I mentioned in my last post the wireless and display failure that was plaguing my laptop and eventually forced me to return it for service.? After its wireless connection stopped working, I submitted the problem report to HP.? Within an hour they had authorized a return shipment and agreed to fix the additional display problem, all at no cost to me, despite the laptop being out-of-warranty.? The next day I received the box to return the laptop for service.? I still needed to image my disk (since I had some sensitive data on it) and then restore it to “factory-condition” using the original restore disks.? I did this over the weekend.? I wasn’t in a real hurry since I figured the laptop would be gone for over a week anyway.

Finally, on Wednesday I packaged it up and dropped it off at FedEx over lunch.? 2 days later the laptop is back in my hands, the display is fixed and the wireless card appears to be restored.

So much for my free time…? Thanks HP, thanks a lot (no seriously, I mean it!)

With the quality of most customer service departments leaving much to be desired, I thought I would highlight one of the few technical companies that seems to have done it right.? I don’t know if I was fortunate to get such a helpful customer service agent, but I hope that they continue treating their customers with this kind of respect and efficiency.

Removing distractions and building relationships

Thursday, March 19th, 2009

I've been thinking a lot about management lately.? After a long stint working my way up the management ladder, I am now back “in the trenches”.? This has given me an opportunity to assess other management styles from the point of view of an employee, while also being able to evaluate it based on my own knowledge and experience.

Scott Berkun wrote that as a manger your “relationship with your programmers is everything”.? I like this statement.? You often hear that a manager's job is to protect the programmers from everything else so they can do their job.? Frankly, I find that position rather annoying.

Some programmers need and want to be sheltered in that manner.? They want to be left alone to create their next great class.? They don't care whether the customers like the software or that they customer can't use it because it is too slow.? That is someone else's problem.? For these developers, having a manager that hides all that messiness is a blessing.

Other programmers love to work in that environment.? They want to know the details.? They want to know how what they do fits into the overall plan.? If their manager were to make them simply work on their code without an understanding of the larger context, they would go nuts.

Still other programmers want to move beyond simply programming into leadership positions.? They want to be on the front lines, interacting with customers and clients, making the decisions that affect the direction of the project.? Their manager has to work with these folks and give them opportunities to learn and demonstrate that leadership abilities.

The moral here is that every employee is different.? They all want different things, and to simply say that a manager should block any distractions from the developer's job is dumping everyone into the same category.? Instead, as a manager you have to learn what it is your team needs, and give them that.? It will be de different for every person, and sometimes you won't be able to give them what they want.? But your relationship with them lets you accomplish your goals, while helping them accomplish theirs.

HP Support and FizzBin

Tuesday, March 17th, 2009

In an amusing coincidence, I stumbled across Scott Hanselman’s posting “FizzBin: The Technical Support Secret Handshake” today, right after the wireless card in my laptop died (fortunately, my desktop is alive and kicking, and the wired NIC is still working just fine in the laptop).? I wholeheartedly agree with his sentiment.? I have lost far to much time explaining that I did in fact follow all the suggested procedures in the support manual before contacting them.

This is why I dread dealing with support – to the point that I actively avoid it.? This same laptop (an HP Pavilion dv9208nr – because Pavilion is too easy to remember apparently), has also fallen victim to the left hinge display problem.? My hinge has been busted for a long time now, it actually doesn’t bother me that much, but they sent me a note admitting they had a problem, which is always the first step.? So I looked into it, and it required contacting support and giving up my laptop for up to 2 weeks.? Since the hinge just didn’t bother me, and I use the laptop daily, it was really a non-starter for me.

Then my wireless died.? That of course I cannot have.? It rather defeats the whole purpose of the laptop.? I tried everything I could think of, but nothing worked.? I updated everything and it made no difference.? From the computer’s standpoint, the wireless card no long existed.? This was unacceptable, so I bit the bullet and submitted a support request.? Since I was working, I went on the HP support website and submitted an email request.? The form was fairly standard, except that it had a drop-down that let me specify my technical ability.? I explained what happened, what I had done, and indicated that I had a high technical ability.

Within 30 minutes I had gotten an email back from a support technician agreeing to service the laptop free of charge.

I don’t know if this is a common problem with this laptop (a quick search turned up no real likely candidates for my model) and that was why they quickly agreed to an *out-of-warranty* (did I mention this laptop’s warranty expired almost a full year ago?) laptop, or if they simply acted in good faith to correct the problem, but either way I was impressed.?

I don’t know if my indication of technical ability had anything to do with it, but I must admit that I prefer this interaction to having to invoke the FizzBin code…? No fuss, no arguing about whether the problem was with my router, just a simple thank you and an offer to fix my problem.

Bad API’s

Monday, March 16th, 2009

Bad API’s are the bane of every programmer’s existence.? They sap productivity and introduce errors into otherwise clean code.? They should be eradicated at all costs, yet they live on despite the best efforts to improve them.

How can you stop bad API’s?? The best way is to not write them in the first place.? This means paying attention to your design and paradigm.? This means taking the extra time to think about your problem.? This means that you will not be the first one across the finish line… at least for this race.

At least you can take comfort in the idea that some day some programmer won’t curse your stupidity for cleverly calling your simple AddItemToEnd method PutTheJunkInTheTrunk.? And they won’t throw things after discovering that you have to remember to increment a global count variable every time you use a factory to create a new object.? Trust me, it won’t be nearly as amusing after 10 hours of debugging, and it will be much harder to defend that decision.

Blogengine.net Contact Page Problems

Saturday, March 14th, 2009

So I've been having issues with the contact page on this site.? After looking around, I tracked the problem to the Send button handler code.? It would apparently only send email if there was an attached file.? Since my contact form has no ability to attach files, it didn't send emails.

That sucks.

A broken contact page is the worst problem you can have with a website (short of the site going offline), because your visitors can't even tell that it is broken.? Even worse, if the page indicates success but doesn't send it, your visitors won't even know there is a problem, and neither will you.? Yet another good reason to run through and test your sites functionality every once in a while.? That is also why I include my email address (brian@codeinreview.com) on each page, which is apparently what folks have been using to get in touch with me.? So for everyone that tried the Contact page, I'm sorry.

Fortunately the fix was easy, I just commented that check out of the button handler code in the contact page and we were back up and running.?

? private void btnSend_Click(object sender, EventArgs e)
? {
??? if (IsCaptchaValid && Page.IsValid)// && txtAttachment.HasFile)
??? {
????? bool success = SendEmail(txtEmail.Text, txtName.Text, txtSubject.Text, txtMessage.Text);
????? divForm.Visible = !success;
????? lblStatus.Visible = !success;
????? divThank.Visible = success;
????? SetCookie();
??? }
? }

I'm not really certain why that check was in there in the first place, I couldn't see any reason for it.? It would also be nice if there was some feedback as to what failed here – but for now that will need to wait until I better understand what is going on.

In looking into this fix, I also discovered that several other people have had issues with the contact form in blogengine.net.? If my hack doesn't fix the problem for you, check out these changes.? Maybe they will do the trick…

Good luck…

Code smells, and passing a generic instance as a strongly-typed parameter

Saturday, March 14th, 2009

Whenever I see repeated blocks of code, I become suspicious.? I start to wonder if I can’t refactor that common code into a common method and (hopefully) simplify the existing code.? Recently I ran across a pattern of code that occurred intermittently throughout the codebase.? The pattern had a form similar to this:

Code In Review is proudly powered by WordPress
Entries (RSS) and Comments (RSS).