I subscribed to the email list of dailycodingproblem.com a little while ago in order to learn how to think like a coder, but I recently found out that solving coding problems is actually not that useful if you want to become a software developer. Here's why.
Let's start with a reality check here, by answering the simple question: what are those coding problems really? Here is my definition after having gone through quite a few of them:
Coding problems are essentially abstract math/logic problems that can be solved with algorithms, expressed in code.
And although solving such problems can be a very fun and challenging brain exercise, it's actually not that useful for aspiring software engineers to spend much time on. And the reason for that is that such skills actually have very, very limited practical use in the real world.
Really, the only purpose of getting good at these coding problems is so that you can get through the interview process at one of the big software companies, such as Facebook, Google, Netflix and Uber. Because the reality is that you will most likely never actually use those skills in real life, even as a highly paid software engineer at one of these big tech companies.
That may sound like a bold claim coming from a newb like me, but luckily you don't have to take my word for it.
Instead, listen to Clément Mihailescu.
Clément is a mathematician, ex-Google software engineer and the founder of AlgoExpert. His company actually specializes in teaching people how to become good at solving these coding problems – hence the name.
Yet even he casually mentioned in a recent video that he never actually used any of these complex algorithmic skills in all his time at Google!
Let that sink in.
A highly paid, mathematically gifted software engineer worked for Google for years and never actually used his algorithmic skills outside of the interviewing process.
That's the reality of the situation.
And it makes sense, when you think about it. After all, computers are growing more powerful at exponential rates (Moore's law), and cloud technology already allows for incredible scaling of computational power. This means that for the vast majority of use cases, it matters less and less whether a certain solution takes 0.0002ms or 0.0004ms to solve.
In the real world, there are always tradeoffs and diminishing returns. Perfect is often the enemy of good.
So if you're interested in becoming a good software engineer, you should probably leave the solving of math puzzles for a rainy Sunday afternoon, and first focus on learning how to actually engineer software.
And the best way to do that is by building a real project from scratch.
Doing that you will learn how to abstract real world use cases into problems a computer can solve. And then breaking those problems down into small, bite-sized chunks that a simple function can solve. Then, you will also learn how to write that function.
You will learn how to set up an entire project with a frontend and a backend, deciding what languages and technologies to use and why, what logic to put where, how to design and implement a data flow through your application, efficient database design, a little UI/UX design, project planning, version control and tons more.
All things that will actually have a practical application in the real world. Also all things that you will definitely not learn by solving coding problems.
So, long story short: if you're looking to become a software engineer and you're not particularly interested in working at one of the big tech companies, getting good at solving math riddles with code is most likely a waste of time.
Go build something real instead.