If you want to get good at something, practice that thing. It sounds like you're asking how to get good at coding interviews. So practice coding interview questions, not logic problems or competitive programming. LeetCode is probably the best known coding interview practice platform right now, and it has hundreds of free problems. In the LeetCode discussions, you can find people reporting on their interview experience, and companies often ask identical problems to the ones on the site. It's exactly optimized for what it says it's for.
You could get better at logical problem solving by practicing on Khan Academy or Brilliant or Art of Problem Solving. If that's what you want, then do those things. But it's not an efficient way to get better at interview questions.
> the group that's unwilling to put up with this is unqualified
Companies that get a lot of applicants care more about false positives than false negatives. So they're fine not hiring a lot of qualified people, as long as there's a low chance of accidentally hiring an unqualified person. Apparently LeetCode-style problems work for that type of screening.
companies can win by hiring exceptional people with deep experience. the cost of not hiring these people has been unquantified. i would never want to be in their position. imagine a startup hires that one person who will make a billion dollar difference?
The startup isn't likely to be getting resumes on the scale that the big tech companies do and can afford to spend the time to look at each resume and maybe even do an interview with each candidate.
However, if you are getting resumes on the scale that the larger, well known tech companies do, then the individual attention cannot be paid on each resume. At that point, one looks more at a quick filter to try to remove the risky hires.
If you've got 1000 resumes and 80% of them are bad hires, and after an online assessment that takes it down to 200 resumes of which only 50% would prove to be bad hires, that is a significantly improved pool to consider.
Yes, it is possible that a great candidate was removed in that filter, but its also possible that one still remains in that pool.
Startups may be cargo cutting big tech interview processes, but the process has value for big tech companies and any others that have more resumes than they can reasonably deal with.
cost of living is driven by FAANG and startups use the same leetcode hiring process as FAANG, but pay less. the equity you get has a miniscule chance of becoming valuable.
But really, the way to get started is just to pick a site and start solving problems. If you're specifically interested in GCJ then it's best to practice using previous problems from that contest. But I wouldn't recommend getting too caught up in one contest. If you start with the Easy and Medium problems on HackerRank or LeetCode, there are tutorials, discussions, and editorials to help when you get stuck. And those sites are easy to use, so you can get a lot of practice time in with low friction. That will get you past the beginner stage.
Most people who are doing competitive programming aren't good at the harder problems. For example, there are >2500 people listed on the TopCoder Top Ranked Algorithm Competitors page (https://community.topcoder.com/tc?module=AlgoRank), but only the top 115 or so are Red, and only about 415 more are Yellow.
A programming contest, even if you just do the easy problems, can be a more enjoyable way to practice for interviews than reading a book or even going through online puzzles like those on LeetCode.
Solving programming puzzles (or competitive programming) is a good basis for a deliberate practice plan. There are a lot of sites that provide puzzles of increasing difficulty. So you can work on problems slightly above your current level, which is one of the tenets of DP.
Khan Academy is a reasonable way to start learning programming, but like other learning sites (Codecademy and others) they focus on learning things the first time, and not as much on getting better. CodingBat (http://codingbat.com/) takes a more drill-oriented approach, which is more effective for learning the basics well. But there's not a lot of content there, in comparison with a puzzle site like SPOJ (http://www.spoj.com/).
It's worth reading the whole thing, but here's a summary of why alternative interview techniques have their own problems:
* Testing for specific technology knowledge excludes good programmers who don’t happen to know that technology.
* Asking someone to explain their past projects is biased towards people who can explain effectively, not necessarily people who can do the work.
* Giving candidates a homework problem has several drawbacks: they may have someone else do the work for them; it is biased towards candidates with more free time; and because it requires negligible time for a company to send off a canned assignment, but potentially a lot of time for the candidate to complete it, it can be unfair to candidates.
* Having candidates work on a real project for one day makes it difficult to focus on characteristics that distinguish great programmers from good or mediocre ones, since real projects have a lot of simple tasks that almost any programmer can handle.
* Letting candidates use a computer during the interview can cause them to focus on syntax rather than problem-solving.
Basically, although many people hate the coding interview, there's no good alternative.
You need a certain amount of programming puzzle skill to get past the interview process at most tech companies. Competitive programming is a good way to practice this skill, but you don't have to do it at the exclusion of other types of programming. You may want to take a break from side projects for a few weeks or months while you work on your coding interview/competitive programming skills. After a certain point, there are diminishing returns unless you get interested in the competitive programming world and want to keep competing.
If you want more information on this topic, it is often discussed on Quora. Here are a few relevant posts:
You could get better at logical problem solving by practicing on Khan Academy or Brilliant or Art of Problem Solving. If that's what you want, then do those things. But it's not an efficient way to get better at interview questions.