Not quite up to what was expected – Toby Champion’s Blog

6 min read Original article ↗

He did end up passing, yes. This one is is pretty intensive coding position and he said the solution wasn’t quite up to what was expected.

It’s like a therapist trying to figure out whether you have anxiety, by watching the way you poop.

It’s my bad. I have so little code I can show to people. All the clever algorithms, the elegant, fluent APIs, the gorgeous implementations of econometrics algorithms described in academic papers, pushing MATLAB as far as it can go, used in research projects generating papers I’m co-author on. The comprehensively documented libraries, the thorough error handling, the logging and type hinting. The elegant, sweated-over relational models, the NoSQL schemas, snowflakes and normal form. Data models so good that the algorithms write themselves. Nearly of all it covered by NDAs.

And because I’ve not published much open source code, through work or in my time, understandably, all interviewers have to go on is me writing ten lines of code to sort a leaderboard, under pressure, on whatever day I’m having.

When I interview people, I don’t do this. Because I’ve been doing Test Driven Development (TDD), pair programming, and mob programming (what Woody Zuill now calls “software teaming”) on and off since 2006, I find a colleague and pair program with candidates, swapping, them then pairing with my colleague, or I guess it’s software teaming and we’re working on real, existing production code, rather than doing something from scratch. We think out loud and encourage them to do the same. We listen for what they know and what they understand; what they notice and what they care about; what they ask and what they explain.

We do some Test Driven Development, too, writing production quality code right there and then, because if that’s what they’re used to, as I am, the other work is likely to be a disaster unless they’ve intentionally practiced for these interviews.

My approach is based on the very common experience I’ve had after interviews: I sit down and play around with the problem I was given and within ten minutes come up with a beautiful, elegant solution that seems worthy of some sort of gold star. Sometimes I share my solution with the interviewng team, for their amusement; it is also, perhaps, for my redemption.

But let’s keep it real. I’m also really rusty on this sort of coding in Python. It’s been a while. Mostly recently it’s just been plugging one ML or NLP tool into another. This is totally on me: I need to practice more involved coding. I also need to pull my Coding Interview books off the shelf so I can answer the basic questions my tech screener asked about OOP. Have those four pillars of Abstraction, Encapsulation, Inheritance, and Polymorphism ready to explain, along with the SOLID principles and a careful explanation of the Liskov Substitution Principle.

When I started at Phyn, Dr. Salil Banerjee, now Data and Analytics Strategy Lead for Google Research, told me I should never need to interview again. He had hired me without an interview because of our time working together at RECON Dynamics. So much for that.


Other thoughts

When I was 16 I wrote a symbolic dissassembler in BASIC so I could figure out how the operating system worked. I started a local computer club and was hailed as a “Local Wizz Kid”. After graduating with degree in Computer Science from the University of Sussex, at the time one of the best places to study CS, with stellar grades, I was soon working on a European Space Agency project, where, in 1993, the first thing I did was write my own unit test framework in C. I’ve been doing TDD since 2005.

And yet, as a result of plenty of poor career decisions, and a resolute failure to, I don’t know, either build a network here in the US, since moving here in 2007, or to use the network I have, being all annoyed because someone didn’t like the way I coded the solution to printing a leaderboard where some competitors have the same score, and so Starbucks will never get to even talk to me about a role that would let me, I’m sure, make a significant impact.

I don’t really understand what’s happening. I don’t get what happened. I don’t know know what I’m supposed to do, beyond sitting down and doing a bunch of coding exercises, and putting code I’ve written up on GitHub.

There are all these people out there, convinced that coding exercises are the way. Convinced that “pull requests” and “code reviews” make sense. Convinced that trunk-based development will result in frequently broken production systems. Convinced that Scrum is synonymous with Agile, or that you can do Agile without any of the core practices in eXtreme Programming, or that Scaled Agile Framework wasn’t written by someone high on crack, and needed to buy more of it. It’s almost as if they never sat down and read, no, studied, Code Complete, The Pragmatic Programmer, Refactoring, Design Patterns, SICP, Clean Code, eXtreme Programming, Test Driven Development, Domain Driven Design, Continuous Delivery, or any of Dave Farley’s other books, including Modern Software Engineering.

I don’t understand why I’m not asked what books I’ve read recently, or bloggers I follow, or about other projects I’ve worked on. I don’t understand why the fact that I was on this ESA/NASA project for years, or worked with Phyn on their machine learning system, or at RECON with our super complicated data model and clever use of Proto Buffers when they were super new, I don’t understand why none of that matters. None of that counts. What counts is how well I was able to do this little coding exercise.

I guess I need to start writing, teaching, ranting. Start a podcast, start a YouTube channel.

I know it’s a cliche by now, but do Medical Doctors need to do that? Do Mechanical Engineers have to do that? What is happening?


See https://www.linkedin.com/posts/-jessica-sosa-_technical-interview-code-assessment-activity-7400525688736280576-qCKB?utm_source=share&utm_medium=member_desktop&rcm=ACoAAAGhAJkBslP0veJWlBzfXV3OJjV-ssooH1g