In a couple of instances, it was a sensible, applicable “take-home” test, but usually, it was a schoolboy binary tree test.
I interview very well (on account of over 30 years of relevant ship experience, and I’m actually a fairly decent chap), but it has never gotten to that point.
BTW: if it isn’t already obvious, I’m quite senior, and have been architecting, as well as writing, software, since my very first project, in 1987.
I was quite willing to work for a lot less than many folks much less qualified, on account of having my retirement set, and was looking for interesting and engaging work, more than money; but it never got that far.
I won’t waste time practicing LeetCode. I don’t think it would make any difference, simply putting off the inevitable rejection. It’s not something that helps me to write better shipping code.
If I could just build them a feedback system for their employees. Including backend, frontend (as a SPA please), and tests.
Of, of course they didn’t expect me to actually finish, 5 API’s and 3 implemented front-end pages would be ok (and tests, of course). Also, could I maybe make it look nice?
I dunno, for some reason I saw it as a challenge and actually tried. But after 3 hours I was forced to concede that even using a full framework and CRUD generation for most of the app the idea that you could finish was ludicrous.
I spent an extra 30m writing up a review of the process and attached that as a ‘cover letter’.
Unsurprisingly I didn’t get the job, but I guess I consider it a bullet dodged now.
Just setting up technologies that I have never used on my local machine and trying to understand them has taken me several hours.
It seems unlikely I will submit anything.
Unfortunately they are developers. They underestimate how long it will take. They didn't actually try it themselves. They might even have modeled it after a piece of software they did build in-house and thus underestimate even more.
I had to advocate very strongly on cutting scope from our take home test and multiple times argue against 'extensions' of the ask.
I like take home. It's a great way to talk about their code. Have them explain choices. Pros and cons. And yes tests please. What I look for is not complete test coverage or having 27 classes that all have pseudo tests. Have one class with _good_ tests. Show that you understand what is important to test and how to do that. If you know how to do that, I can hire you to repeat it for a salary.
My own last take home I sent in didn't even run because the implementation assumed various external services that I didn't bother implementing or mocking out enough to make it all run. I put lots of comments explaining various choices and what I'd expect those external services to do though. Was a great topic started about code comments and which ones I would leave in actual code and such.
So you’ll be competing with people that implement the whole thing regardless.
Now I’d like to think that interviewers are entirely impervious to that, but realistically, it’ll hurt the chances of those that do it only halfway.
If you don't try you've already lost.
My experience doesn't matter. The fact that I've now worked at (and currently work at) 3 of the big tech firms, doesn't matter (to be fair, I only got jobs at these places back when I was willing to grind out leetcode and memorize as many problems as I could - a task which I refuse to do today). The fact that I have a history of leading teams, areas, and spend at least 50% of my time also "writing code" for high performance, high reliability, global services, --and-- can speak in depth regarding my accomplishments, design decisions, technical decisions, collaboration, etc. doesn't matter.
The only thing that matters is: Can I pretend like I've never seen this toy leetcode problem before during an interview, and magically come up with a perfect solution in 30 minutes or less. (and if I haven't happened to memorize it, and dare legitimately appear to struggle, well... game over).
Everyone knows that something very serious must be done at an interview. Nobody cares about it enough to actually put in the time or trust for a bespoke solution.
Consequently, you end up with everyone sub'ing algorithms in for due diligence, then because they made that choice, defending the choice and pretending like it's meaningful.
Hiring is hard. Hiring technical, non-standardized talent is even harder.
Did you think to work with blockchain? It has a lot of engaging problems, and you can start even without getting hired. It ranges from helping out DAOs in open-source and getting paid in tokens; to starting off your own small project and building a community.
As for the jobs, the compensations has been through the roof lately – the field doesn't get new developers nearly at the rate needed
I enjoy working on stuff that people use. Things that the user interacts with directly; like UIs and devices.
I did a bunch of work with Bluetooth, OBD, and ONVIF (surveillance), but I'm working on what is sort of a "social media" app, now. I wrote the backend for one of the servers we use, and was the original author of another of the servers. These were big projects.
The interesting part, however, is the iOS app that I'm developing. Trying out different ways of presenting to the user, and interacting with the user, is a lot of fun.
Do you know of any good articles or guides about getting started with this for complete beginners to blockchain?
Today, we have “jargonauts.” These are folks that key on certain terms and acronyms.
I remember, back in the 1990s, hearing everyone gushing about “AJAX,” and wondering what the big deal was (after being laughed at, for not knowing the term). No one would explain what it was.
I looked it up, and go “Oh, they mean HTTPRequestObject!”
Turned out, that I actually already knew a lot more about “AJAX,” than most of the folks gushing about it, and the reason no one would explain it, was that they didn’t actually understand it.
Lot of that, going around…
Except then it turns out what they mean isn't DI, but some other concept related to it and largely taken care of by their framework of choice.
Personally I find DI to make it harder to reason about in a sizeable portion of cases (20ish%) without actually providing a benefit.
So that makes me prefer going for rejection (Passing the result of the dependency instead of the dependency itself) or just keeping it there.
Altough, those approaches depend heavily on the rest of the codebase. (FP makes rejection relatively easy for example)
Without classes what would you be injecting? Other functions? That’s still something that happens all the time in FP.
That’s secretly the most powerful design strategy.
Altough, for usability it is IMO definitely the best.
Nowadays it's called a dict.
Not worth fighting over. Time is flying, and even the early 2000s was a couple of decades ago.
I'm pretty sure that HTTPRequest debuted in IE 5 or 6.
It's more akin to saying "We want to do this thing that's never been done on the web before, and no one ever thought to do. How do we assemble it out of this box of scraps that HTML and browsers currently give us?"
Consequently, there was probably proto-AJAX with ActiveX, the early js landscape, and iframes. But it would have certainly depended on where you worked.
Critically, internet connections were much slower (in latency and bandwidth), so partial page loads were more of an advantage.
I asked someone that was on that trip with me, and it was late 2007.
You know how it is, with us doddering old geezers; we forget stuff...
While I'd prefer to work, not needing the money implies the ability to avoid the interview process. It's a funny thing being in an industry where people retire not because they can't do the work at a professional level, but because getting a job is such a PITA.
I feel that this is a desired result. I am pretty convinced that folks like to have an "ideal culture" at their workplaces. I hear the term "cultural fit" so often, that I guess it means something that I'm missing.
The whole situation is quite pathetic.
Sorry it's a boring answer :-)
I ran a UI team for 3 years, we built a UI framework, then the UI and apps on top of it.
We lived trees and tree traversals. Understanding trees was essential to everything we did.
Do I ask people to balance trees? No, but I do care if people can understand traversals, and also how to manipulate and design tree structures to solve business problems. Being able to design the right data structure to solve a problem is an important skill, and trees are one of our fields fundamental data structures.
I have written quite a few frameworks, SDKs and APIs; both server-based and host-based, and never had to deal with this stuff. If I had, I would have done what I always do, when I get to that point: Learn what I need to learn.
I have been learning new stuff, my entire career. I don't know how to do almost every project I take on. I even wrote about it, here: https://littlegreenviper.com/miscellany/thats-not-what-ships...
A lot of people try to start at root, enumerate the level of nodes for the entire tree, and then return non-sibling nodes at the same level as the node we want to find the first cousin of.
Which works, but it is O(n) and a lot of work. People who know about parent pointers in trees just walk up a couple levels and then down a couple of levels.
I consider it a fair question because, it has no gotchas, it is just understanding how to efficiently walk around one of the most commonly encountered data structures.
My other go to question is provided a library function that can schedule a callback to run anytime in the next 2147483ms, write a wrapper that can schedule a callback at any arbitrary time in the future. For advanced candidates I provide a library of date/time functions and they have to take in a date/time and using the provided limited functionality scheduling callback, call the passed in function at the proper date/time.
This is a very simple problem, and one that I've encountered in real life[0].
It is a trivial, but again real life problem of building functionality on top of a limited platform API. I have seen this question trip up countless candidates, who try to seriously over model the solution. I have no idea why a class with 1 function and a couple int64 variables counting down time seems so hard!
(Old school C programmers tend to get it right away)
[0] Windows timer APIs like their 100 nanosecond parameters, though now days they all have modern 64 bit FILETIME variants that side step this entire issue.
Fortunately I've yet to run into this once I spent enough time as a mid-level developer and became senior. If it's any ray of hope for younger developers out there, you will get to a point where you basically bypass all that crap and interviews can be more like a friendly chat between peers.