If you were in charge of creating a programmer certification exam, what are some of the questions you would supply? Remember, it should probably not favor any one language, and probably cover multiple paradigms (OOP, functional, procedural, logical, relational, etc.) Separate questions with horizontal rules. Include the correct answer.
Q: The main purpose of relational schema normalization is to:
Why is this important? Shouldn't it be enough to know of databases and their power, and recognize when a database is the most natural tool to use?
Somebody who doesn't understand schema normalization doesn't understand one of the biggest differences between relational databases and their alternatives.
Furthermore, relational schema normalization is a mechanization of OnceAndOnlyOnce. It is therefore fundamental to every paradigm, even if it is only formally recognized in the RelationalModel.
Someone writes: I ask about schema normalization in all interviews for programmer positions. But, as far as I can remember, so far every applicant knew at least the concept at one level or the other.
Certification makes sense only in highly mature areas, whereas much software is still done in exploratory areas where craftsmanship is a key element.
Metaphorically: Certifying engineers who build bridges makes perfect sense now that bridge-building is a mature field. Certifying engineers who build interstellar rockets is madness; it's a purely speculative field, and as such, anyone designing the exams might well be Neanderthal compared with pretty much everyone taking the exam, and in any case, there is no objective basis.
Also, the question at top of page was "creating a programmer certification exam", and "cover multiple paradigms (OOP, functional, procedural, logical, relational, etc.)", yet the single answer so far is about schema normalization, which surely is important for programmers who will ever do DB work, which includes essentially all business application programmers -- but the question was not thus limited, and most of the many dozens of kinds of software development that are not about business applications do not use databases significantly at all.
In other words, given the open ended question, how about if I suggest exam questions covering compiler theory, parallel algorithms for fine-grained parallel architectures, computational number theory, Computer-Human Interaction ergonomics, 2D and 3D graphic modelling and rendering, etc. etc.?
The blithe assumption that any programmer certification should unquestionably involve DB issues shows precisely why such certifications are of highly questionable value in the first place; they are based on assumptions that are blind to the vast variety that exists in the industry.
IMNSHO, programmer certification should be considered only for areas where human life is at stake, e.g. medical equipment software, nuclear reactor software, aeronatic/aerospace software, since then there's an overriding interest (safety) regardless of whether the subfield is or is not mature. However, all such areas already have very tight (which is not to say perfect) safety protocols that do their best to give guarantees regardless of whether individual employees have met hypothetical guild standards.
Hear hear.
Q: Tell me about your last project and the design decisions you made.
A: There is no one right answer, but the candidate should be able to describe the project clearly and have good reasons for choices made. I may not know the problem domain of that project, but I should be able to understand the answer and learn something from it.
Q: If you were do to the project again, what would you do differently?
A: The candidate should be able to describe what they learned along different dimensions of the project: technical, project management, team, development process, customer interaction, etc.
Q: Tell me about some big design mistake you made in the past, how you dealt with the fallout, and what you'd do different if starting again.
A: (If candidate avoids self-criticism, put up a yellow flag.)