It tells nothing about understanding of other CS fundamentals.
A deep, well-versed understanding of these concepts becomes essential when you're building resilient, well architected systems.
Building such complex systems always involves understanding constraints, trade-offs and making design decisions based on that.
These decisions, most of the times, are NOT modeled only around time complexity analysis.
Differentiating ability:
The ability to analyze solution approaches from first principles /fundamentals of computer science.
DS and Algorithmic knowledge is required but it's not sufficient.
While some CS fundamentals might be considered "coachable", it's best to lay this foundation as early as possible.
Competitive programming often incentivizes programmers to get code out as quickly as possible for submission.
This leads to negligible emphasis on code quality and hence poor readability.
One of the most common areas of growth of engineers with high competitive coding background is the poor code quality. 📉
The getting things done attitude is not the best when you work with a team. 😔
Having an understanding of data structures, algorithms and their application to problem solving is essential, going too deep at a competitive level is neither necessary nor sufficient if your goal is to become a good, well-rounded software engineer.
Why did I write this thread?
College students are often indoctrinated with the dogma of having @codechef
stars, @codeforces levels as a measure of them being fit for good hires.
Those who're unable to challenge this dogma, often:
- sacrifice genuine curiosity for exploring other real world tech projects e.g. webdev, ML
- sacrifice intern opportunities with startups
- get stressed out, develop imposter syndrome
If you really enjoy competing in programming challenges and get your kick out of it, keep doing that.
However, try to make time for understanding CS Fundamentals and if possible (maybe not in competitions) - try to write clean code.
Others, who're doing it just because of the dogma -
- It is not a prerequisite for getting into FAANGs.
- however, building a strong CSF foundation is necessary. (next tweet)
Try to work on open source projects, or gain real world experience (startup internships?) because that fosters clean coding and serves as an exhibit that you can function as SDE in the real world.
side projects are also a good option, try to gather feedback on reddit etc.
If you found this helpful, please like and retweet. ❤️
Follow me for more such content.
Some references that will help you understand more:
- Google: 90% of our engineers use the software you wrote (Homebrew), but...