Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: What coding challenge sites should I try next?
138 points by lakechfoma on Dec 1, 2017 | hide | past | favorite | 63 comments
I'm learning PHP for a new position and tried using codewars and codefights. I'm not impressed by the UX with either of them, they're over gamified. The quality of Kata on codewars is not good (at least the easy stuff) and both are broken in random trivial places.

Can you offer suggestions on similar platforms that are less gamified, higher quality challenges, and more reliable?

Maybe just skip the game sites.

Go to github, find a project that you find interesting and relevant to your position.

Take a look at the open bugs and try to fix some. Even if you don't feel comfortable sending a pull request you can learn a lot by going through the whole process on a real project.

Alternatively, take a look at the recent commits and what they fix...


My recent interviewing experience, while anecdotal, would suggest that you'd actually be better off with the coding challenge sites, assuming that succeeding at interviewing is your goal.

I think this is unfortunate, irrational, and that contributing to Github projects would actually build your practical skills while adding some value to the universe.

But having spent more time working on coding challenges, algorithms and puzzles would have been more beneficial to my most recent several interviews.

It's a trade-off. One thing that's definitely going to get you more and better interviews is a section on your resume that lists major open-source projects you've contributed to. But yes, once you hit the interview you still might hit the old-style puzzle questions depending on the company.

You don't need to make a trade off. You can do both contribute meaningfully to an open source project AND practice on Codewars.

What top companies exist that don't ask candidates to solve coding challenges?

Along those lines, find projects that have "up for grabs"[1]. I was trying to learn Go for personal enrichment and learned tons about real-world Go by opening a PR.

[1]: http://up-for-grabs.net/#/tags/PHP

Good call on at least reviewing fixes on github. I was going for the game sites because I just want to get the trivial gotchas of the language out of the way, get a feel for what error messages look like on some basic stuff.

Project Euler (projecteuler.net) has great algorithmic and mathematical challenges. I like to go through their problems when learning new languages.

Agree with your good suggestion, and extend with rosalind.info for kinda the same experience but for bioinformatics instead of math.

Now what I'd be VERY interested in is an implementation of a list of "Like Project Euler, but for X" where X is all manner of things. WRT various values of X, I know there are periodic security challenges but nothing long term/permanently ongoing, I'd greatly enjoy being proven wrong. I'd be particularly personally and professionally interested in "Project Euler for HFT". How about "Project Euler for VLSI design"?

Yeah, yeah, If I want it, I should do it, and its true I probably could, other than the lack of infinite spare time.

I love Project Euler. Each time I pick up a new language I actually go to PE and solve some problems (often times ones that I have already solved) just to get a better feel for the syntax of the new language I am learning.

Afterwards I'd just go make some standard 'mock projects' that require a bit more of software architecture. Such as building Game of Life, a twitter clone, a HN clone,..

Depending a bit on if I actually liked the language :-)

I personally love https://www.codingame.com/, but it's geared more towards university students. The challenges get pretty hard, and they all pretty much gravitate around game AI if that's your thing.

The cool thing is that some challenges are multiplayer, in the sense where you need to develop an AI for a given game, and then send your AI on a ladder to compete against other coders' AI.

Advent of code just started, so you might try that: http://adventofcode.com/

I second this, gets more popular every year. The puzzles are well thought out. They get progressively more involved each day, it’s definite worth a try

Great resource, thanks!

I am surprised no body has mentioned Exercism yet. Go to exercism.io and there are around 60 problems for PHP that you can start working on it. The good part is, it has tests built into it. You can gradually work on a solution by progressive approach and thus passing each test successively.

I'm pretty surprised that LeetCode hasn't been mentioned. There are a lot of low quality questions on it but if you sort by "Top 100", you'll find some pretty interesting problems.

You don't really need platforms to help you learn how to code. Find some good video courses and create practical projects by following the instructions, that's the best way to learn, especially if you're into webdev.

I suggest trying Udemy, TutsPlus, or CodeSchool. Unfortunately, I can't recommend anything PHP-specific. Though if you're just getting started and aren't stuck with PHP, I recommend going with Django or Node instead. Udemy has excellent courses on Node(https://www.udemy.com/the-complete-nodejs-developer-course-2...), so if you're looking for the best place to learn webdev, I highly recommend going there.

For sure, it's just the little language gotchas that I'm trying to understand before really leaping in to anything. For example I didn't realize an array in PHP is actually a key/val set until it bit me on some easy challenges.

Thanks for the recommendations though. I'm not necessarily stuck with PHP and would prefer to move towards Python if possible.

A couple of years ago, I had some slack in my schedule, and decided to combine learning Python with starting a project in it. It took me a couple weeks to feel really comfortable, but it also got me to a kind of "MVP" implementation, and I was able to take the next month or so after that to fill in the features.

Starting out, I spent a few days in standard tutorials, then just started writing. As I implemented features, I'd research the standard Python idioms for doing various things. It might not work for every program, or for every learning style, but that script has been part of our build infrastructure for 2 years at this point, and maintenance for the last year and a half has mostly been limited to feature additions as our needs change.

I like Programming Praxis:


There's a pretty extensive collection of problems there now, and they span a variety of topics, from basic CS stuff (e.g., implement a stack or a binary tree), to cryptography, number theory, and trivia (e.g., write a quine, calculate the date of Easter, or solve a Sudoku puzzle). Note that the chronological list of exercises isn't up to date.

Realistically, the best way to learn a language is to make a small project that does something useful. But if you're still wanting to do challenges rather than a project, you're just in time to participate in Advent of Code 2017 [0]. The only 'gamified' part is the leaderboard which is based on how long it takes you to generate a correct answer since the challenge became available. Another challenge that, while not generally suited for a PHP programmer but still possible, is the Synacor Challenge [1] , which involves creating a virtual machine and running a provided binary in that virtual machine to find codes to submit.

[0] https://adventofcode.com/ [1] https://challenge.synacor.com/

I'm shocked Codility isn't on here yet. https://codility.com/programmers/lessons/1-iterations/

They're really strong on language-agnostic testing with emphasis on CS concepts. That's great and typical, but they have the study material linked directly to each lesson. I've had great interview experiences through their platform.

(shameless plug warning) I liked it enough that when I went through Flatiron School, I made a Ruby gem to see their lessons in the command line. https://rubygems.org/gems/rubedility

http://www.codeabbey.com/ is more CpSc oriented but very similar to https://projecteuler.net/.

https://uva.onlinejudge.org/ has too many problems to sum up easily, but they have online solution checking. http://acm.timus.ru/ and http://www.spoj.com/ are similarly massive.

If you don’t mind competitive programming sites then you can try codeforces [1] which is probably one of the hardest sites to compete in. You could also try codechef [2] which has long challenges so you can compete over the span of a week rather than over two hours like on codeforces.

[1] http://codeforces.com

[2] https://www.codechef.com

When I was taking algorithm courses in my university, my lecturer used SPOJ [0] and Uva online judge [1] as part of coding exercises. For example, today, I learn about greedy algorithm, my lecturer find a problem on those website about greedy algorithm problems. Someone already mentioned CodeForces. It likes SPOJ and Uva. But, CodeForces usually has a coding competition regularly.

The websites above will affect you on how to solve a problem quickly because it's timed. It helps for job interview. If you want to learn about software engineering, e.g. architecture or what's going on in real industry, it's different in my opinion. You should know well the problem, use cases and of course, the contexts. To be honest, I agree with @cag_li. Involve in open source projects or build a real project!

[0]: http://www.spoj.com

[1]: https://uva.onlinejudge.org/index.php

Build your own toy version of the following:

- compiler

- neural network

- graphics engine

- web server

- physics LP solver

- JIT compiler

- garbage collector

- memory controller

- operating system

OP said he's learning PHP.

Uncharted territories are quite a challenge. But probably there are projects out there that are doing those already.

So? OP clearly wants a challenge :-)

As others have said try building something. I would add the following:

Start with something really, really simple - like a single page website (and I mean literally a single page of HTML). Then incrementally add features, adding the PHP code to, for example, read content from a database. Every day add a little feature or a tweak or fix a bug. After a couple of months you will be surprised by what you have achieved. But you don't need to stop there. Keep adding little features - eventually you will end up with a CMS.

The thing about this approach is you never burn out because you work in small doses, and the project never "runs out" because there's always something new you can add. But because you work on it incrementally you are more likely to get somewhere than if you sit down one day to "write the next Google".

Hope that helps and good luck!

Code Forces is an ugly, ungamified site but the calibre of its contestants is of a far higher grade. If you can do well there, you'll have no need to ever again worry at your ability to solve smaller coding-related problems. Silicon Valley tech company interviews will also feel easy in comparison.

http://www.hackerrank.com - most popular, lots of corps use for first line recruiting so worth knowing.

http://www.interviewbit.com - teaches you at the same time.

One similar to Hackerrank is hackerearth [1].

[1] https://www.hackerearth.com

One I like is Wechall. It's sort of an index of other challenge sites (including a nifty API that can track your progress through some of their indexed sites), although they have a few of their own challenges as well. The sites it indexes tend to be geared towards security topics like web security and cryptography, though there are some more general programming challenges as well.

PHP is an unusual situation; for PHP, I would recommend reading bug reports and learning what has not been fixed for years that will bite you badly. Lots more info here: https://news.ycombinator.com/item?id=15815830

If you want an honest appraisal of PHP, you'll find it in the above link.

Ha yeah that's been my experience at a smaller scale so far. Why are "arrays" actually key value sets? Not at all intuitive. I figured that out when I used array_unique() only to discover that some index values had gone missing. Of course that function provides no option to "treat $array like an actual array". I found a solution of array_keys(array_flip()) which I read also happens to be faster than array_unique(). Wat.

Anybody know some good resources for advanced sql query practice? Multiple nested subqueries, more obscure functions, etc?

Have you tried pgexercises or hackerrank?

https://pgexercises.com/ https://www.hackerrank.com/domains/sql

I'm the founder of Daily Coding Problem (https://dailycodingproblem.com/).

We send high quality programming questions every day. You can sign up to our mailing list for free to get problems starting tomorrow at 9AM PST.

I hope you enjoy our problems!

I tried signing up via the form but could not do so.

Sorry! There was a bug in the subscription logic. It should be fixed now. Mind trying again?

It seems fixed, thanks for the quick turnaround.

http://codeforces.com/ and https://www.topcoder.com/ have really good algorithmic challenges with frequent Competitions.

We're going to start more business-oriented dev challenge soon, more info https://dev.to/msedzielewski/voucherify-developer-challenge-...

None, go build something. Build a clone of something, facebook, twitter, HN, google, slack.

Codility is really well written. I'm not sure if they have PHP but they seem to have the major languages.

They're one of the few which tests and teaches your code's performance. They're also very popular for hiring tests.

Hi! I'm teaching a coding bootcamp and one of my students built http://jsstation.com

If you could share with us what you could like to see, we can make it happen!

Synacor Challenge is a pretty good one: https://challenge.synacor.com/

I wasn't a fan of the text adventure puzzle, but the rest is great.

codewars Kata get hard soon enough. maybe its because youre doing it in PHP but ive had no complaints at all on python and javascript.

agree with cag_ii that you should just work on projects given that you're keen on PHP

It wasn't that they were too easy, too easy is fine. I'm doing this to understand where the good docs are, what error messages read like, and what the common mistakes and gotchas of the language will be. It's just like no one proofread some of these, repetitive concepts, one Kata had a blatantly wrong test condition, etc.

Reviewing commits on github will be useful in understanding what contributing to mature projects looks like though.

Codewars isn't being maintained very well. Some of the languages aren't current - their version of Elixir is over a year old, and they have no plans to upgrade it.


This site has been mentioned on HN and reddit a few times.

Good if you are looking for sharp code, and perhaps to span languages.

I had a great time going through the challenges at http://www.4clojure.com/

What about the original "challenge" website?


Google Codejam has some great problems.


This site has been mentioned here a few times, good if you want a challenge in your language or a variety of languages.


This link does not go anywhere.

I would personally recommend taking the 10x Club course (note: I work at the parent company, and yeah I know about the name)

It might be something fun to build something that solves a need that someone or a group of people have.

hacker.org is pretty good.

Some of the challenges can be brute forced easily, and some have only been solved fully by one person. The puzzles are good, but the real fun is in the challenges. Some of the ones I've unlocked have only been solved by less than 100 people.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact