I am a firmware developer with 4 years experience. C and sometimes assembly is my bread and butter.

Like 2 years ago, I was really interested to make a switch to application development. Got referred by my friend to her startup.

But I was a bit rusty with my data structures, high level languages and interpersonal skills.

The first question was to find the number of occurences for each word in a paragraph. The language choice was Java. But I was allowed to use C++ since it was the closest relative to Java that I knew.

And I started implementing a binary search tree from scratch and started inserting each tokenised word into it, wrote a traversal algorithm.

The interviewer, luckily, was a patient guy. After I completed my whole mess, he asked is it possible to do this in a slightly better way with constant time access without traversal.

I said yes, we can with a hash table but I dont know how to implement one. He replied I dont expect you to implement the hash table but see you use it. I asked him if I am allowed to used the standard library, for which he said ofcourse.


Finally I understood his expectation, referred cppreference.com and used an unordered_map.

Later there were some quesion on databases for which I tried my best to answer. And I frankly replied that I am not comfortable with JS frameworks as of now. Got rejected.

So the mistake is I never asked basic questions like what is the time complexity expects, if I was allowed to use standard library, didnt spend some extra time on studying stuffs needed for the domain switch and most importantly I panicked.

  • 2
    What do firmware developers do? Isn't this stuff standarized and you just fill in a bunch of pin numbers or stuff like that?
  • 5
    You're right, building an intuition for which questions to ask and which assumptions to make is very important.

    I've never been in an interview where I wasn't allowed to use the language's standard library. It's called the STANDARD library for a reason. If I had to guess, I think you got rejected not only for the lack of experience in the required language, but also because you left the impression you tend to reinvent the wheel. Building an intuition for when to use a library and when to implement stuff yourself is also very important.

    The "word count in paragraph" is easily solved by splitting the string, iterating over the result and incrementing word counts in a map. I'd have started from that high level, so the interviewer could ask me to replace e.g. the map with my own implementation if they wanted that. You have to keep in mind it's an interview with limited time.
  • 1
    @VaderNT And now I have came out of the reinvent wheel mindset, even in my current work I use existing packages wherever possible.
  • 7
    @nitwhiz you couldn’t be more wrong, you are talking about Arduino developers. Mission critical Firmware is way complex
  • 1
    @hardfault that's why I'm asking, I have no idea.

    But funny comparison :D
  • 0
    @hari1994 excellent growth! Though it's also important that "wherever possible" may be too much on the other end of the scale.

    Both the dependencies you pull in and your own code become legacy sooner or later. Sometimes NOT using that library or framework creates less legacy.
  • 0
    Why would you downgrade from firmware dev to app dev?
Add Comment