does it makes sense for me to join a DSA/competitive programming course?

I am an Android Dev for last 5 years with around 2+ years of work exp. Wherever I apply, i am either accepted or rejected based on my level of knowledge as a mobile dev.

However, I think that there are certain companies in which i don't apply (FAANG, for eg) , whose initial rounds are solely based on DSA and if i have a good knowledge of DSA too, then i might be able to crack them too.

This might be FOMO calling , but i really feel myself as a bit inferior software professional in comparison to those who can create TRIE, BST , Red black tree or use popular stuff like Djikstra, knapsack, n-queens or whatnot. For me, the usual solution is to use built-in sorting functions or google. I am more valuable in areas where a nice looking ui is needed quickly

My goal is to be in tech for multiple years and be a great engineer/ tech lead .

  • 0
    Thing is, it kinda depends on what you are going to do.

    If you want your line of work to be mobile clients, then dealing with how APIs work, UI layout concepts, and the like is mission critical, while knowing a red-black tree is not.

    And you can perfectly be a long term successful engineer without ever touching one.

    As for you mentioning faang, is not so much faang itself, it's the fact that these kind of companies have use cases that require custom solutions to problems that go beyond what industry standards provide. It's in those cases where knowing how to *implement* advanced DS&A is vital.

    If you are geared more for an architectural role, it's important to know what DS&A potential solutions use so you can pick the most suitable one, but you'll never have to implement them.
  • 0
    So, in the end, knowing more never hurts, and gives you more value as a dev.

    But it's absolutely not required for some career paths, so if that's not the case, and you find it bothersome, don't feel obligated.
  • 0
    @CoreFusionX Thanks, this helps.

    I am currently( and in the future will be) in a role where knowing how to integrate maps/ camera APIs on the UI canvases will be more important than how they work internally and use which data structures. However, sometimes the outermost layers can also benefit from a good DS rather than just using array/ArrayList/hashmap. So I will be trying to give 30% of my time in DS&A too
  • 0

    Another question: The path I know for practicing programming is this: do 300-400 questions on Leet code / hackerrank, and checkout/understand solutions wherever getting stuck. However this does not help me reach my goal and rather makes me loose interest because most of the questions there are around a certain DS structure (like string/array/hashmap) or concept(like sorting, recursion etc). I see 2 problems here:

    1. The number of DS that I got to explore is very less

    2. These questions help me become better problem solver but not sure if those questions are practically helpful

    So you got any better approach?
  • 0

    Not sure about that. I'm not a big fan of those "e-peen" sites, as the problems are often too isolated to represent any real use cases.

    When dealing with DS&A, as I said before, it's often more important to know the ir existence and uses more so than how to implement them.

    What does this mean?

    Reason about the requirements.
    Do you need to sort once in a while? Go for an efficient algo (eg, not bubblesort), but qsort or merge sort can each be better based on ease of random access. Merge sort wins if the structure is a linked list. Qsort wins in an array.

    Do you need to keep something sorted at all times? Use a heap. Can you use an array? Yes, it has the same O() performance, but you wreck performance coz inserts cause whole array copies.

    So I would go with my actual problem, analyze the kind of operations I need, select appropriate candidates based on those operations and performance.

    And then, bear in mind the idiosyncrasies of your chosen language.
  • 0

    In the particular case of camera API and canvases, you'll deal with buffers.

    In this case, the key aspect is preventing copies as much as you can, especially when you need to modify the buffers, as they then become non blittable.
Add Comment