I am of the opinion that a tech interview needs no preparation apart from doing a great job in a setting similar to what we give an interview for. Doing a great job as a programmer involves a few major type of skills – Technical aptitude (Ability to learn something quick either from manuals, tutorials or peers), ability to work along with others, communication, fundamentals of programming like functional, oop, tdd.

Interviews have a problem “Like hires like”, if there are no checks and balances the entire organisation will converge to a narrow band of skilled people. Too much emphasis is placed on competitive coding and algorithms at many places. This is similar to hiring sprinters for your football team, they are fit and can run very fast, but they probably can’t play football or in a team setting well. This leads into a spiral of hiring more and more competitive coders and set the interview benchmark to hire similar people to do work that requires a lot of communication and co-ordination (teamwork).

Photo by cottonbro studio on Pexels.com

This results in undue pressure in the industry, to be able to code competitively, the skillset which contributes only to a small portion of success in day to day work. Because of this, good application developers are left out from the hireable pool. The problem of this interview style is amplified by large new age companies who do not have a great product strategy but minting money through one or two cash cows and burning it in other engagements. This leads to headcount game to consume the budget, I have interacted with some developers who have cracked those tough interviews only to end up copying values from one spreadsheet/slide deck to another wasting their potential.

At the other end of the spectrum are interviews which are just fact based, this is done to reduce the amount of workload on technical interviewers by giving a template Q&A to recruiters who conduct the first round with strict matching of answers to the questions. This encourages rote memorisation especially for graduate interviewees without solid understanding of the fundamentals. Some organisations hire easily, but to staff on an assignment they interview people again internally, defeating the purpose of first interview in place.

Hiring is still a heuristics game, you catch a glimpse of the potential and continue with the person. To make the heuristics effective, interviews for developers need to have the following characteristics

  • Have a diverse set of people in the panel, take the following into account – programming experience, relevant experience, management etc and huddle with the entire panel of all rounds to take a decision. This helps minimise ‘like hires like’ problem.
  • Give more importance to design, architecture and clean coding skills than competitive coding. This will help in interviewing in the space that is closer to everyday work.
  • Check feedback and communication skills by reviewing and extending functionality on a code. This ensures how well this person can be a team player and not a soloist.

I like learning and I am a perpetual learner. I also love teaching so I spend a good deal of time at my work signing up to run training sessions. My favourite subjects to teach are hard to teach ones like Extreme programming, Test Driven Development, Team building etc. For a long time I used to either learn from classroom sessions or from books, which I started developing a liking towards those formats. I thought I was old school and did not like the new age video formats in bite sized chapters peppered with quizzes to test our understanding between the chapters. I retained a lot of learnings when there was a discomfort for my brain to finish the chapter which I observed that many of the new video formats did not have.

A lot of training programs I observe, tend to concentrate on immediate recall and score really well in that area. Lots of cues, easy to process and understand sentences, narrow scope of learning etc make it a joy for learners and it easily gets into short term memory. So when the trainers immediately evaluate, the learners do really well on retention. This type of retention is volatile, as there was no hard work done by the brain to etch the learning into it.

Photo by fauxels on Pexels.com

For our brain, every read or thinking about a problem/solution is a write as well. It is not like in computers where read and write are different operations. The more you think about something the more connections get established in the neuron mesh which strengthens retention. This has been pointed out in the book Range. That is one of the reason I prefer socratic method of teaching where the learners have to undergo a difficulty to learn a concept.

An example from an eight grade school book

How are cyclones formed?

Direct ineffective teaching answer: Cyclones are formed when warm air from a hot region raises up, creating a low pressure area into which wind blows from high pressure area and the cycle continues.

Majority of lessons just concentrate on memorising the statement above but look at the following Socratic method (There will be a lot of answers, some may be wrong but teacher never attempts to answer and let the answer emerge)

Q: What happens if you heat air?

A1. Hot air expands, I read it in physics class

A2. Hot air is also less dense so it will raise up

Q: If it raises up what will happen?

A1. Cold air from above falls down

A2. Cold air from the sides enter inside

Q: Why should cold air take that place?

A1. Because hot air has gone up

Q: What will happen if you heat water?

A1. It boils

A2. It turns to water vapour

Q: Is water vapour also air?

This keeps going on for a few minutes, I had attended this class 25+ years ago and I still vividly remember how the class went. I kept thinking various answers because the teacher did not conclude how cyclones are formed, we had to go back and read up to conclude. The trouble I see with many of the online courses is a result of instant gratification and the urge to put a checkmark in our list. The content creators also are incentivised for immediate recall which translates to 5 stars for them.

Barring first principles and fundamentals, factual transfer of knowledge is a shallow learning/teaching mode which gives a false illusion because of immediate recollection but fails in long term memory. An element of difficulty is desirable, this may even look bad for the trainer who is evaluated on the spot but helps in long term retention as the learner keeps ruminating about the session. By going for a 5 star driven course design we are creating content consumers, not learners.

The aphorism “All models are wrong, some are useful” is applicable for analogies as well. Analogies are never one to one replacement but should help to bootstrap a new concept through a known concept. Use of analogy should stop there and from there on knowledge has to be built on first principles. Why use analogies instead of first principles? Many people will have less time and effort to understand a new concept especially during business discussions, it is better to help them learn a new concept using the right analogy.

A good example is learning about resistance, current and potential difference in electricity using flow of water. Once a student gets an idea then building the knowledge should be on electrical concepts alone. It is hard to continue the analogy trying to explain electro magnetism.

Photo by Brett Sayles on Pexels.com

I have majorly seen this problem coming up in software development where techies explain technical debt to managers and convince them to allow work to happen on that front. The debt analogy is an infamous example, managers love debts in business which helps them with a lot of working capital with less incentive to repay principal but keep paying interest. There is no interest repayment analogy in technical debt, rather it is not even a debt it is a deficiency. Deficiencies have to be addressed for growing well.

Choosing wrong analogies are much worse than using no argument at all. An example that surfaced was when we were discussing about team building and how sports teams are built; someone then took the analogy to the extreme and said programmers are like sports people and they would not be productive beyond a physical age limit. The conversation ended abruptly as the story went in a wrong direction.

As a listener we also should try to do our part to not stretch the analogies for deep understanding, instead use it as a way to quickly get onboard to a new concept.