Categories
Programming Languages

Perfect example

Recovered from the Wayback Machine.

Here’s a perfect example of how the computer field is broken:

In a post at Coding Horror, based on earlier posts at Imran on Tech and Raganwald, the author parrots what the others state, that programmers can’t program. With lots of exclamation points.

Why make such a breathtakingly grandiose claim? Because of what happens in interviews. It would seem that the originator of this newest fooflah created a series a tests given during the interview process and found:

After a fair bit of trial and error I’ve discovered that people who struggle to code don’t just struggle on big problems, or even smallish problems (i.e. write a implementation of a linked list). They struggle with tiny problems.

So I set out to develop questions that can identify this kind of developer and came up with a class of questions I call “FizzBuzz Questions” named after a game children often play (or are made to play) in schools in the UK. An example of a Fizz-Buzz question is the following:

Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.

Most good programmers should be able to write out on paper a program which does this in a under a couple of minutes. Want to know something scary? The majority of comp sci graduates can’t. I’ve also seen self-proclaimed senior programmers take more than 10-15 minutes to write a solution.

Jeff Atwood of Coding Horror also goes on to quote others who run into the same problems: interviewees can’t seem to do even the simplest coding tasks during interviews. These gentlemen completely ignore the environment and focus on the grossest of generalities:

Programmers can’t program.

Here’s a clue for you: I don’t do well in programming tasks during interviews, and I’ve love someone to come into my comments and tell me I can’t program based on this event. No, I’ve only faked it while working for Nike, Intel, Boeing, John Hancock, Lawrence Livermore, and through 14 or so books–not to mention 6 years of online tech weblogging.

In fact, you’ll find a lot of people who don’t necessarily do well when it comes to programming tasks or other complex testing during job interviews. Why? Because the part of your brain that manages complex problem solving tasks is the first that’s more or less scrambled in high stress situations. The more stress, the more scrambled. The more stressed we are, the more our natural defensive mechanisms take over, and the less energy focused into higher cognitive processes.

Why do you think that NASA, the military, and other organizations training people for high risks jobs spend so much time in simulation? Because they want the tasks to be so ingrained that in a stress situation, the people’s responses are almost automatic.

If you add the potential for embarrassment on to the strong desire to do well, the need to get the job, toss in a panel of arrogant twats sitting around a table looking directly at you while you do your little tests, and you have the makings of an environment that almost guarantees the elimination of many fine candidates.

Who does well in these kinds of testing situations? Good testers, the supremely self-confident and equally, typically arrogant, and the people who don’t care: none of which is necessarily the best candidate.

The whole purpose of tests such as these are not to determine if a person has programming capability–how can one stupid test determine this? What these tests do, though, is add to the self-consequence of the person doing the interview.

“I can do this, but all these people can’t. Therefore, I’m so much better.”

It’s also a lazy interview technique, which shows that HR associated with the company doesn’t give a crap about the IT department.

Some justify such tests with, “We need people who can do well in stress situations.” Bilge water.

The stress one goes through when one is an outsider faced with a bank of insiders, is completely different than the stress an individual goes through when they’re part of a team trying to fix a problem or roll out a product. Comparing the two is ludicrous, and nothing more than a demonstration of completely two-dimensional thinking: one form of stress is completely the same as another. My god, no wonder we’ve had few tech innovations lately if this is demonstrative of leadership in IT.

Having candidates bring in samples of code and having the interviewer and interview team review such, and question why decisions were or weren’t made is an excellent way of getting insight into the person’s problem solving skills, without the trained dog and pony show. Asking a person what approach they would use in a situation is superior to doing a random memory test on keywords. Providing applications and having the person provide their own critique is an amazingly effective way of getting insight, not only into their problem solving skills, but also into their personality. If they point out errors but do so in a thoughtful manner, it’s a heck better than doing so in as scathing a manner as possible.

Looking at past applications or effort is another effective approach. New programmers with no job experience can provide pointers to open source applications; experienced people who have worked in an NDA situation can provide pointers for discussions and work online: heck, Google the person’s name–that will tell the interviewer much more about the person than a silly programming test.

That primitive techniques such as the abysmally stupid “FizzBuzz” approach are used shows that companies are still missing out on good people because they have idiots doing most of the interviews.

And making the leap between how people do on interviews into such grand claims that programmers can’t program demonstrates that idiocy travels up the food chain.

You know what’s especially humorous? All the people who solve the test questions in the comments. What possible reason would a person have to do such a thing? It’s completely irrelevant to the environment in which these so-called tests are given. This no more shows that these people can program, then it shows that the other people can’t.

The lack of logic in this whole thread is amazing.

What’s less funny, though, is the slavish adherence to Joel Spolky’s elitist crap. Joel runs a smallish computer company with limited products: what the hell makes him the definitive answer on these topics? Perhaps the people should spend less time making pronouncements, and more time developing independent thinking skills.

Many of the comments in the Coding Horror post do mention these concerns, and provide other effective approaches to interview. If the people who create these tests will actually read these responses, some good will have come from the discussion.

I have found, though, that people who write these kinds of tests aren’t always willing to considering other options. The other approaches just aren’t ‘clever’.

Categories
Programming Languages

Dabble

I agree with Sam Ruby: a successful tech is a diversified one. You can’t always depend on a new millennium to justify sticking with one and only one programming language.

This last week I worked with Java, JavaScript, PHP, Python, and Ruby. I had been on a long hiatus from Java after the end of the dot-com era, but now I’m back and plan on sticking it out with the language. Yes, even unto J2EE.

I also agree with Michal Wallace: you are more likely to have an easier time getting work if you focus on .NET than Python. In some ways, I think that the interest in Ruby has slowed the interest in Python. Sure you can work with both languages: but why would you want to?

In St. Louis, the demand is for .NET (VB or C#) or Java. That’s it. I mean, that’s really it. Most of the other work in PHP or Python or Perl is off-shored.

When I move to the northwest, I imagine I’ll either need to get back into .NET or brush up my C++ skills, in addition to the Java. If one has up to date C++ skills, one can usually find work.

As for JavaScript — every web developer should be proficient in JS. Eventually you’re going to want to validate a field before sending it to the server, or have to muck with cookies. There will always be someone somewhere who will say, with breathless excitement, “What about AJAX?” JS is ubiquitous.

PHP is also ubiquitous, but there just isn’t the work for it. Nor Python. Perl’s fading. I have my eye on Ruby, though.

Categories
Programming Languages

More new toys

I still love Locomotive, but I haven’t forgotten my PHP, or my first love, RDF. (Note to self: get out more).

Anyway, I spotted the following at the RAP (RDF API for PHP) site:

RAP 0.93 will be released in January 2006 and will include support for the SPARQL query language and the SPARQL protocol.

I’ve been waiting for this to implement more evil plans. Oh rapturous joy! Oh sublime happiness!

I am dancing a jig. Do you see me?

*dance* *dance*

Happy face.

*dance…GROWORWOOWROWRWR!

(I danced on Zoë’s tail…)

Categories
Programming Languages

Chu chu code

Recovered from the Wayback Machine.

I can’t believe how easy it is to set up Ruby on Rails on the Mac with Locomotive. I went from two downloads to my first application in less than 1/2 hour. Great stuff.

I’m in the process of making vast changes here abouts. The first change is I’m moving my Tinfoil Project domain to a new development server that is upgraded to all the latest, breaking edge PHP, MySQL, Ruby on Rails, and so on. Tinfoil is being re-focused from photos to high-tech, and the new server will provide examples of code how-tos and tutorials I hope to work on this next year.

I’m looking at a virtual private server at A2 Hosting or OCS Solutions at this time, but wouldn’t mind hearing about other hosts–with a few caveats.

I’m looking for a service that goes month to month, since my income is uncertain from month to month. I need enough RAM to run my examples, and enough bandwidth not to have to pay overage. I wouldn’t mind a control panel, and some assistance (paid or otherwise) if things go wonky. I’d also like a system that has some of what I want already installed, so I don’t have to start from scratch. These are things I want. What don’t want is a service that’s heavily connected with weblogging.

You all may jump on the Cluetrain, but I’m finding I’d be just as happy, thank you, in not having a close, intimate connection with vendors. I want to be able to deal at a professional level with companies, and not have Sarah or Sam ‘offended’ by what I write in my weblog.

I want a clear means of communication detailed at the company site; I don’t want representatives in my comments whenever I mention their product. I don’t want to have to use my weblog as a form of extortion to get a company’s attention; or as a backdoor way of doing business.

I don’t care if they see me for who I really am, as long as they see me as ‘customer’ and act accordingly. I don’t want input into the company workings other than “what you’re selling me is working, here’s my money”.

I don’t want to be ‘bad’ or ‘good’ for being critical. I don’t want legions of supporters converging in my space, protecting that nice woman, hip young man, or crusty, but with a heart of gold, legend in his own mind . I don’t want what I say to show up on the tech.meme. I don’t care if what I write shows up on Google — I just want it to work.

I want a service; I’m willing to pay. This is not the beginning of a personal relationship. I don’t want it treated that way. The only train I want to be on around here, is Locomotive.

Categories
Programming Languages

Mystery solved

A month or so ago, I wrote that I couldn’t access my weblog because when I tried, nothing showed. My host had upgraded to PHP 4.4.1 and it broke something in the application, but what we couldn’t tell. My host said they could find nothing in the logs to explain the problem. In the meantime, they backed out 4.4.1 on my machine, and haven’t upgraded it back.

Yesterday, I heard from a weblogger who is using the semantic web plugins I created for WordPress: all of a sudden, he couldn’t access his administration pages. However, in his case he was able to find the problem in his error log:

PHP Fatal error: Maximum execution time of 30 seconds exceeded in
…/wp-content/plugins/delSetup.php on line 31

I didn’t see this error message in my error logs, but his email gave me a key to the problem. The line number indicated pointed to the following lines in the plugin:

reset( $del_menu_items );
while( $arr = current( $del_menu_items ))
{
while( $submenu[’metadata.php’][$index] ) $index++;
$submenu[’metadata.php’][$index++] = array(__($arr[’title’]), 5, $arr[’script’]);
next($del_menu_items);
}

The culprit is the code traversing the submenu and testing to see if it exists. Seeing this tiggered my memory about one of the first bugs issued for PHP 4.4.1 that had to do with next and current array functions, and other array problems introduced with the security fix. These have since been fixed in the CVS source, but not issued as a new release.

The code used in the plugin is a copy of code that others have used to add administrative menu extensions to WordPress. Further checking showed that WordPress now has functions to manage menu additions starting in WordPress 1.51 and 1.52. Examining the function code, there shouldn’t be any problems with PHP 4.4.1, so I’m changing my plugins to use the new functions.

Note, though, to other WordPress users: if you’re using a plug-in that’s extended the administrative menus, check with the creator to see if they’re using the old hack or the new admin menu functions. If they’re using the old hack, disable the extension until new plugins are released. If you don’t and your ISP upgrades to 4.4.1, you’ll be dead in the water.