I watched interesting video of Bryan Cantrill (author of Solaris dtrace) about cloud platforms and interested in his other writing. In his blog he brought topic about his interview process. I am curious how good I fit his expectation.
Here is Bryan's blog post Assessing software engineering candidates.
software engineering is an almost paradoxical juxtaposition of collaboration and isolation: successful software engineers are able to work well with (and understand the needs of!) others, but are also able to focus intensely on their own.
I work on customer satisfaction. I like quiet space.
Aptitude [...] it in fact leads down the primrose path to pop quizzes about algorithms seen primarily in interview questions. (Red-black trees and circular linked list detection: looking at you.)
I had a question about loop detection in a circular linked list and I pointed interviewer to my post about loop detection with some maths behind.
Aptitude [...] These assessments of aptitude are misplaced: software engineering is not, in fact, a spelling bee, and one’s ability to perform during an arbitrary oral exam may or may not correlate to one’s ability to actually develop production software
I quite agree on this. I has been asked to reverse linked list in place in online collaborative environment during interview. It took 40 minutes, 30 of them to figure out that I forget to print result of swapping:
reverse(list); // should be list = reverse(list); print(list);
Those lines was off screen, I concentrated all efforts to find bug in implementation. This experience is described in my previous blog post.
As such, candidates should be asked to provide three samples of their works: a code sample, a writing sample, and an analysis sample.
So let's look into this.
Code sample [...] Candidates should be guided to present code that they believe best reflects them as a software engineer. If this seems too broad, it can be easily focused: what is some code that you’re proud of and/or code that took you a while to get working?
I has written AI for solving 2048 game.
GUI, swipe support, heuristics, BFS/DFS, etc are not important in this project. All those are in stay of direct naive implementation.
But board.js contains really production ready efficient code.
There are several implementations board operations I used to study browser JS performance. Loops are unrolled. There are tricks for packing board by bits into words for memory efficient cache and function that search for uniformly random empty cell in a board.
I spotted extremely rare bug in implementation which I caught by running of two implementations side by side in wrapped object.
Writing sample [...] Writing good code and writing good prose seem to be found together in the most capable software engineers. That these skills are related is perhaps unsurprising: both types of writing are difficult; both require one to create wholly new material from a blank page; both demand the ability to revise and polish.
You are in my blog. Welcome!
Alternatively take a look to https://stackoverflow.com/users/173149/gavenkoa or to https://www.google.com/search?q=%22Oleksandr+Gavenko%22+OR+gavenkoa
Writing sample [...] * A block comment in source code * A blog entry or other long-form post on a technical issue * A technical architectural document, whitepaper or academic paper * A comment on a mailing list or open source issue or other technical comment on social media
Above links should be enough. I don't have academic papers so far ((
Analysis sample [...] Part of the challenge of software engineering is dealing with software when it doesn’t, in fact, work correctly. At this moment, a software engineer must flip their disposition: instead of an artist creating something new, they must become a scientist, attempting to reason about a foreign world.
While I enjoy troubleshooting and this is my most strong skill at current position I always worry that it takes too long and finding something deep inside framework after several hours of debugging is not rewarding.
I like to notice that something sucks or people are morons. Maven sucks (too verbose, too restrictive) & Gradle sucks (too complicated, I found myself in Gradle internals several times). You know that.
I'd probably refuse request to make some "stupid" writing on something for demonstration purpose.
Formal education [...] The completion of a formal education in computer science is much more important than the institution.
Have no one.
Formal education [...] In other cases, it’s even more nuanced: there have been many later-in-life converts to the beauty and joy of software engineering, and such candidates should emphatically not be excluded merely because they discovered software later than others
Not about me either.
Formal education [...] The most important aspect of one’s formal education may not be its substance so much as its completion.
Here it is. I am mathematician by education. Reading about red-black tree and following of algorithm proof correctness is just a routine for me ))
Formal education [...] The failure to complete formal education may indicate deeper problems, and should be understood.
I partially agree with that. Nowadays you can get money by developing Web sites without CS degree starting from age 8. You just need to remember names for those 2000 fancy icons and buttons in current popular framework.
Informal education [...] Learning is a life-long endeavor, and much of one’s education will be informal in nature. Assessing this informal education is less clear, especially because (by its nature) there is little formally to show for it — but candidates should have a track record of being able to learn on their own, even when this self-education is arduous.
May be because of lack of relevant formal education I value more informal education...
I am curious on digital electronics and interfacing and know about high Z state on a bus. That's whole new world. I value ability to deep into non-Web buzz stuff as a sign to grasp into completely new knowledge domain (beyond GUI buttons).
For many companies, it will be important to find those that are intrinsically motivated — those who do what they do primarily for the value of doing it.
I have concerns about game industry, ads, crawling, spying. Product should bring direct value to the public.
I did and do non-profit work but can't stay independent for a long time.
Values [...] What work have you done that you are particularly proud of and why?
It was implementation of GOST hash function in ARM Thumb assembler and it was my first paid task assignment.
After entering code with careful reuse of all 16 available CPU register during one day of work I found only one mistake (it was a day before New Year, everyone in office was drunk when I finally fixed bug and I joined the party).
Values [...] What mistakes have you made that you particularly regret and why?
Values [...] When have you been unhappiest in your professional career and why?
I had a task to find for a way to generate substitution tables for GOST encryption algorithm.
I spent 2 weeks on impossible task. I wasn't a security expert and table selection involves politics and law. At that time corresponding government agency issued list of allowed tables. We found them 2 years later when was in collaborations with agency. I should stop working on this task after spending of one day.
Values [...] When have you been happiest in your professional career and why?
A typical situation: my colleague went on vocation and left a bug. It was digital signature algorithm over elliptic curves and only final high level function shows problem. After 3 days of adding numerous new tests on all levels (GF(2^m) arithmetic, elliptic curve arithmetic) and re-reading entire 8000 lines of implementation I opened Emacs next morning and clearly saw mistake in one "if". I was shivering ))
BTW It was early in my programming career. With bisect I'll troubleshoot such issue in 5 minutes today.
Pre-interview job talk [...] One guideline may be: those with more than seven years of experience are expected to give a talk.
In one company I curated all new employees of our department for their first month, supplying with own training materials and teaching tasks, evaluated performance and made final resolution for candidate acceptance.
In other I participated in in-site IT school reading 8 hour lectures about POSIX and command line (which was pretty irrelevant to my Java-centric job position).