Penetrating the Mysteries
In an earlier post on interviewing, I discussed the spark, the core of the ability to be a professional software engineer. I define it as the capacity to work effectively with never before encountered situations and challenges, a talent connected to self-directed learning that is largely independent of language, domain knowledge, type of problem, and so forth. Only largely independent, however, not completely independent. A certain minimum level of understanding of the fundamentals of software and computation is required in order for even the most talented problem solver to actually solve problems.
Thus when interviewing less experienced developers, it is worth bearing in mind an important dividing line in the early development of a software engineer. This is the point at which an individual penetrates the mysteries, clearly seeing through the arbitrary details of programming language syntax and grammar into the manipulations of state and process that lie beneath. The individual stops thinking in terms of syntax and grammar, and starts thinking in terms of state and process. It is a reversal, a reordering of the world, a revelation. It is the transition from neophyte to initiate in the cult of programming.
Prior to this point, programming for the neophyte is a matter of assembling esoteric incantations that must be repeated in the assigned place, with little understanding of what is actually happening under the hood, or why this strange and capricious grammar exists at all. Obtaining solutions from peers and the internet and experimenting until it works can produce results - slowly and painfully. The same is true of memorization and rote. Some people graduate with Computer Science degrees and remain in this state. Others are still in this state after a year or two of work in the corners of professional environments that fail to challenge, assess, and educate the participants.
Engaging with a problem, the essence of the spark, requires an understanding of the nature of the problem and the tools to hand. Treating programming as incantation cannot work in an unfamiliar environment. If we all cast our minds back to when we first grappled with the mysteries, I think it is fair to accept that it isn't easy to make the transition, and it doesn't happen all at once. Nonetheless, it is also fair to reject applicants who haven't reached the minimum point of understanding at which one can actually test their talent, the nature of their spark - unless, of course, one is willing to commit to rolling the dice and undertaking effective education in addition to managing the work of development.
In my experience, this business of the mysteries and incantation is the important dividing line when hiring inexperienced individuals. Near every such individual I have interviewed and rejected, I rejected because they had not yet penetrated the mysteries of the profession, and the organization I worked with at the time was willing to neither roll the dice nor play the role of educator in this matter. It is no doubt the case that many of these blind neophytes went on to make the transition to all-seeing initiate, and do well in their careers. But determining the difference between someone with true potential and someone without that potential at the incantation stage of development is, I'd say, very challenging.