Hear, hear! I came across this article on why
"programmers can't program" these days. Strictly, it's about why interviewees can't program, mainly.
I, too, use simple tests - often as questions in a telephone interview .. but sometimes face-to-face. I figured they'd be viewed as archaic skills, and some of my colleagues have commented to that effect in the past. I believe, however, that programmers are more effective if they understand the machine they're programming. So: a sample of my simple questions:
- What is significant about the number 255?
- How does a computer store a floating-point number?
- Using a bitwise boolean operation, what is 6 & 3?
- How are parameters typically passed in to a function call?
- Describe the implementation of a linked list
- What is recursion?
- What is the stack; what is the heap; and how to they differ?
- What is packing or alignment in data structures?
- What is an atomic operation? Describe a typical use of one
I found that 8/10 candidates comprehensively fail to demonstrate an understanding at this level - and that none ever answered all correctly.
So why can this be? Schooling.
When I were a lad .. our school bought a Commodore PET. I imagine they felt the new technology might benefit in some educational way - but I reckon they didn't know what to do with it. So they gave it to the head of maths. I guess they figured it was a big calculator. We started a computer club and pretty soon we were learning about algebraic logic and iteration using BASIC computer programs. Before the year was out, we knew far more than the teacher and had progressed to writing routines in 6502 assembler. I seem to recall the 2nd cassette port at address 826 was a safe location for such code. By the time I left school, I knew by heart all the powers of 2 up to 65536 and could do simple hex arithmetic in my head.
These days, as far as I can tell (from questions asked at open days) "IT" is no more ambitious than learning how to format paragraphs in Word, or sum a column in Excel. This is appalling for two big reasons:
Firstly, it is just button-pushing. There is no skill in knowing where the "centred" option is for paragraph justification; it does not foster creativity or organised thought.
Secondly it is very application-specific. Now I know you've got to start somewhere, and arguably the most common software is a sensible place to start, but does it
really have to be Microsoft? Let's face it, despite their many (
many) faults, Microsoft have invested a lot of money in usability to ensure their products are intuitive and easy to use. So how can spending lesson after lesson poking at it be justified (not left or right or centred .. just reasonable .. OK)?
Basically, no-one teaches computer programming in school. It's a shame, because it can be a vehicle for all sorts of subject matter. It's also a shame because I find it very hard to get the "right" candidate.