I know this is question is very broad, but bear with me.
I consider myself a strong engineer. I have 14 years of experience, I'm mostly autodidact, and I can learn new stacks/technologies pretty easily.
Being an autodidact, I don't possess a degree, however I know about basic algorithms such as binary sort, quick sort, graphs etc.
Recently, I started to interview again, and some interviews require HackerRank test. Some tests are designed to evaluate a specific knowledge, say SQL or multithreaded programming, while other questions are purely algorithmic (in the style of: "find if a string is an anagram").
I don't have a problem with specific domain knowledge questions, such as SQL or multithreading. I do have a problem with purely algorithmic questions. I never used binary search, or needed to reverse a string as fast as possible, in my career.
And, sadly, I start to question my career. Do I suck at those questions because I never worked with something algorithmically hard? Do I suck at them, simply because I'm not used to solving them? Are they even good evaluation tools to understand if the candidate is suitable for the work he/she is going to perform?
So my questions is: do you think that being able to solve LeetCode/HackerRank questions (not brute forcing them, but rather understanding the underlying algorithm) help you become a better developer (rather than better at solving these types of questions), or are they, mostly, useless and it's better to build and ship software?
> Do I suck at those questions because I never worked with something algorithmically hard?
You probably have done some algorithmically complicated things in your 14 year career. Of course someone has always done something _more_ complicated but whatever.
> Do I suck at them, simply because I'm not used to solving them?
Yes. LeetCode can be compared to the SAT or ACT in the United States. It's a standardized test where you can improve your score simply by knowing some tricks and how the test works.
> Are they even good evaluation tools to understand if the candidate is suitable for the work he/she is going to perform?
Absolutely not, unless the LeetCode questions are somehow directly related to their day-to-day job, which is in the small minority.
> do you think that being able to solve LeetCode/HackerRank questions (not brute forcing them, but rather understanding the underlying algorithm) help you become a better developer (rather than better at solving these types of questions), or are they, mostly, useless and it's better to build and ship software?
I think understanding the underlying algorithms can help one become a better software engineer. Mostly things about data structures focused on when to use one over the other, some efficient sorting algorithms, that sort. Not an obsession with Big O notation, questions with very specific algorithmic solutions such as "given a list of integers from 1-100, in a random order, and one is missing, how would you find the missing number", and the like.
But yes it's always best to build and ship software. That's supposed to be the point of learning these things in the first place. Shipping trumps everything else, always.