Saturday, February 12, 2011

Do you think exams that test rote memorization are worthwhile?

I usually do very well on tests, because I have a capacious memory. However, I know many programmers who are excellent at what they do, but have to drop to Google more often than I to figure something out. I don't hold this against them at all. What's important is to know the concepts, understand what's possible, and know where to find the specifics when you need them.

This got me to thinking about many of the certification exams I've taken. A lot of them are just tests of rote memorization. I'm reminded of a VB exam I took back in the 90s that asked whether the collection property of a certain object was 1-based or 0-based. Who cares? A good developer will figure that out very rapidly.

So, do you think exams that test rote memorization are worthwhile? What could they be replaced with?

  • Actually, most exams I took allowed to use books and other documentation (and some even laptops). This wouldn't help you if you didn't know what you're doing, but was much more of a real world exam than the ones I knew from school. So no, I don't think that exams that test rote memorization are worthwile because they are not real-world.

  • One problem is where do you draw the line? There may be several suitable methods of solving a problem and I think it is necessary that you should remember these methods exist, though it is not necessary to remember the details of each method.

    From Remou
  • I don't really rate such exams very highly. I like potential job candidates to have them as it shows interest in ones skills, but the actual numerical result of the test isn't so significant.

    The ones that really get me are the "pretend you're a compiler" exams. Ones that give a small fragment of code (usually involving loops) and you have to state what the output is or why it won't compile etc... that always strikes me as a waste of time - we all have tools to do exactly that job for us :-)

    Ultimately, and where I try to position myself, someone who knows the concepts and has the intelligence to figure out or otherwise research the answer to any question is much more valuable. Your colleague digging around in google is a good example - they're probably very skilled at rapidly qualifying good/bad information.

    Of course, excessive search engine users can be a very bad sign - like the guys we had to remove from our team a while back on the basis most of their code was copy-n-paste (including comments) frmo codeproject.com!

    From
  • I guess in terms of whether or not the developer can get the job done rote memorization tests don't really help.

    Of course a developer that doesn't have to refer to Google or documentation quite so frequently is probably going to be able to develop faster than one that has to keep looking things up, so from a business perspective, the ability to complete a project more quckly (assuming the same level of quality) is obviously desirable in an employee.

    Also, if you remember how to do something one particular way, not looking it up again perhaps negates the opportunity to learn how to do it another, perhaps better way whilst searching for your solution?

    From Sprogz
  • Personally, I think the 0-based vs. 1-based thing is exactly the kind of thing that should be memorized. A competent developer can figure it out, but at what cost? How many bugs are introduced because of a blown index? Happens all the time. Language syntax and constructs should be memorized. You need this information at your fingertips to really be productive.

    I don't however think that you need to memorize everything under the sun, and certainly not the more esoteric aspect of programming. There is probably no value in memorizing the algorithm for a binary tree, although it can be useful to know. If you need it look it up.

    There is a reason that rote exams are still so prevalent. They work. There is some information that just needs to be known at a fundamental level. I like to compare it to a medical doctor. A competent doctor with basic knowledge could probably figure out how to repair a damaged artery next to my heart. But, I'd be much happier if he had passed a few tests that proved he had memorized many details about the surgery.

    Dave DuPlantis : How many developers work on life-critical systems?
    Geoff : um, who do you think programs MRI systems? Air traffic control? Automated landing systems? National Defense? Automated Defribulators? ETc.
    From Geoff
  • I don't mind rote exams. The most useful purpose they serve is introducing the api of a language to developers. There are many things in the .NET exams I wouldn't have learnt, or at least would have only discovered after hours or days of going up the wrong the path. Especially useful if you're trying to bootstrap your knowledge in a particular area, like if you've just switched languages. You may already know how to programme and design well, and doing rote based certifications are a good way to get familiar with a new api.

    I still refer to google / msdn alot, but at least I know what I'm looking for. Time is money.

    From rob_g
  • Memorization is important to learning. You need to simply know certain things to do well.

    However, there's a sort of test continuum:

    • Memorization
    • Analysis
    • Synthesis

    Each has its use, and they build on each other for most fields of use.

    • Memorization

      • Being able to recall with little thought certain facts, algorithms, subjects, etc
      • Useful for things such as simple math (multiplication, addition, squares, etc) and languages.
      • Requires significant memory to do well in any endeavor without analysis and synthesis skills. ie, if the engine doesn't work then you can't diagnose it. You can recall instances of other engines that have failed, and you may be able to recall things done to fix them, but without basic analysis you can't tell how closely this particular failure matches one you've seen in the past.
    • Analysis

      • The first step in cognitive reasoning - taking the existing knowledge you have, and comparing it to the state of the world.
      • Being able to see an existing system, and explain how it works.
      • You can explain how the engine works, and if you've seen this failure before you can accurately identify that this failure and what you've seen before are the same. You can identify how this engine is different from others you've seen, and how those differences might affect the engine.
    • Synthesis

      • Being able to create a new system without having seen it before.
      • You can diagnose an engine problem without having seen it fail before simply because you know how an engine works in general, can analyze how this one is acting differently, and 'create' and apply a corrective solution.

    Tests which are thorough test all three capabilities in the subject manner, but they are harder to make and grade. You can't throw the memorization away, but you should be able to augment it with higher levels of testing when useful.

    From Adam Davis

0 comments:

Post a Comment