Every time I see this I wonder how many amateur/hobbyist programmers it sets up for disappointment. Unless your definition of “pretty far” is “a small number of the part ones”, it’s simply not true.
Every time I see this I wonder how many amateur/hobbyist programmers it sets up for disappointment. Unless your definition of “pretty far” is “a small number of the part ones”, it’s simply not true.
In the programming world I feel like there's a lot of info "for beginners" and a lot of folks / activities for experts.
But that middle ground world is strange... a lot of it is a combo of filling in "basics" and also touching more advanced topics at the same time and the amount of content and just activities filling that in seems very low. I get it though, the middle ground skilled audience is a great mix of what they do or do not know / can or can not solve.
I don't know if that made any sense.
But also, the middle ground is often just years of practice.
Advanced level stuff usually gets recommended directly by experts or will be interesting to beginners too as a way of seeing the high level.
Mid level stuff doesn't have that wide appeal, the freshness in the mind of the experts, or the ease of getting into, so it's not usually worth it for creators if the main metric is reach/interest
Structured (taught) learning is better in this regard, it at least gives you structure to cling on to at the mid level
I don't mean to say my solution was good, nor was it performant in any way - it was not, I arrived at adjacency (linked) lists - but the problem is tractable to the well-equipped with sufficient headdesking.
Operative phrase being "a computer science education," as per GGP's point. Easy is relative. Let's not leave the bar on the floor, please, while LLMs are threatening to hoover up all the low hanging fruit.
I have a computer science education and I have no idea what you're talking about. The prompt "Proof." ?
Most people who study Comp Sci never use any of what they learned ever again, and most will have forgotten most of what they learned within one or two years. Most software engineers never use any comp sci theory at all, but especially not graph theory or shit like Dijkstras algorithms, DFS, BFS etc.
> Most software engineers never use any comp sci theory at all, but especially not graph theory or shit like Dijkstras algorithms, DFS, BFS etc.
But we are talking about Advent of Code here, which is a set of fairly contrived, theoretical, in vitro learning problems that you don't really see in the real software engineering world either.
> The prompt "Proof." ?
See this paper on the Stoer-Wagner min-cut algorithm from graph theory, for the last problem in a previous year's Advent of Code: https://www.cs.dartmouth.edu/~ac/Teach/CS105-Winter05/Handou...
> I have a computer science education and I have no idea what you're talking about.
A post-secondary computer science education? I don't mean bootcamp. I mean a course of study in mathematics.
My only assumption is that you're really out of touch with the ordinary world of humanity if you think most people are aware of stuff like this:
https://www.cs.dartmouth.edu/~ac/Teach/CS105-Winter05/Handou...
According to Eric last year (https://www.reddit.com/r/adventofcode/comments/1hly9dw/2024_...) there were 559 people that had obtained all 500 stars. I'm happy to be one of them.
The actual number is going to be higher as more people will have finished the puzzles since then, and many people may have finished all of the puzzles but split across more than one account.
Then again, I'm sure there's a reasonable number of people who have only completed certain puzzles because they found someone else's code on the AoC subreddit and ran that against their input, or got a huge hint from there without which they'd never solve it on their own. (To be clear, I don't mind the latter as it's just a trigger for someone to learn something they didn't know before, but just running someone else's code is not helping them if they don't dig into it further and understand how/why it works.)
There's definitely a certain specific set of knowledge areas that really helps solve AoC puzzles. It's a combination of classic Comp Sci theory (A*/SAT solvers, Dijkstra's algorithm, breadth/depth first searches, parsing, regex, string processing, data structures, dynamic programming, memoization, etc) and Mathematics (finite fields and modular arithmetic, Chinese Remainder Theorem, geometry, combinatorics, grids and coordinates, graph theory, etc).
Not many people have all those skills to the required level to find the majority of AoC "easy". There's no obvious common path to accruing this particular knowledge set. A traditional Comp Sci background may not provide all of the Mathematics required. A Mathematics background may leave you short on the Comp Sci theory front.
My own experience is unusual. I've got two separate bachelors degrees; one in Comp Sci and one in Mathematics with a 7 year gap between them, those degrees and 25+ years of doing software development as a job means I do find the vast majority of AoC quite easy, but not all of it, there are still some stinkers.
Being able to look at an AoC problem and think "There's some algorithm behind this, what is it?" is hugely helpful.
The "Slam Shuffle" problem (2019 day 22) was a classic example of this that sticks in my mind. The magnitude of the numbers involved in part 2 of that problem made it clear that a naive iteration approach was out of the question, so there had to be a more direct path to the answer.
As I write the code for part 1 of any problem I tend to think "What is the twist for part 2 going to be? How is Eric going to make it orders of magnitude harder?" Sometimes I even guess right, sometimes it's just plain evil.
Just checked my copy of TAOCP (Vol 3 - Sorting and Searching) and it doesn't mention A* or SAT.
Ref: https://en.wikipedia.org/wiki/The_Art_of_Computer_Programmin...
A quick google shows that the newer volumes (Volume 4 fascicles 6 and 7) seem to cover SAT. Links to downloads are on the Wikipedia page above.
Maybe the planned 4C Chapter 7 "Combinatorial searching (continued)" might cover A* searching. Ironically googling "A* search" is tricky.
Hopefully someone else will chip in with a better reference that is somewhere in the middle of Wikipedia's brevity and TAOCP's depth.
I used to program competitively and while that's the case for a lot of the early day problems, usually a few on the later days are pretty tough even by those standards. Don't take it from me, you can look at the finishing times over the years. I just looked at some today because I was going through the earlier years for fun and on Day 21/2023, 1 hour 20 minutes got you into the top 100. A lot of competitive programmers have streamed the challenges over the years and you see plenty of them struggle on occasion.
People just love to BS and brag, and it's quite harmful honestly because it makes beginner programmers feel much worse than they should.
Maybe when I was in college (if AoC had existed back then) I could have kept pace, but if part of your life is also running a household, then between wrapping up projects for work, finalizing various commitments I want wrapped up for the year, getting together with family and friends for various celebrations, and finally travel and/or preparing your own house for guests, I'm lucky if I have time to sit down with a cocktail and book the week before Christmas.
Seeing the format changed to 12 days makes me think this might be the first time in years I could seriously consider doing it (to completion).
I have no evidence to say this, but I'd guess a lot more people give up on AoC because they don't want to put in the time needed than give up because they're not capable of progressing.
I think it comes down to experience, exposure to problems, and the ability to recognise what the problem boils down to.
A colleague who is an all round better coder than me might spend 4 hours bashing away trying to solve a problem that I might be able to look at and quickly recongise it is isomorphic to a specific classic Comp Sci or Maths problem and know exactly how best to attack it, saving me a huge amount of time.
Spoiler alert: Take the "Slam Shuffle" in 2019 Day 22 (https://adventofcode.com/2019/day/22). I was lucky that I quickly recognised that each of the actions could be represented as '( a*n + b ) mod noscards' (with a and b specific to the action) and therefore any two actions like this can be combined into the same form. The optimal solution follows relatively simply from this.
Doing all of the previous years means there's not much new ground although Eric always manages to find something each year.
There have also been some absolutely amazing inventions along the way. The IntCode Breakout game (2019) and the adventure game (can't remember the year) both stick in my mind as amazing constructions.
And then something shiny and fun comes along during a problem that I'm having trouble with, and I just never come back.
But, speaking to the original question as to the number of newbies that go all the way, I'd say one cannot expect to increase their skills in anything if one sticks in their comfort zone. It should be hard, and as a newbie who participated in previous years, I can confirm it often is. But I learned new things every time I did it, even if I did not finish.
The idea that anyone who doesn't know any code would:
1) Complete in Advent of Code at all.
2) Complete a single part of a single problem.
let alone, complete the whole thing without it being a "tremendous challenge"...
is so completely laughable it makes me question whether you live on the same planet as the rest of us here.
Getting a person who has never coded to write a basic sort algorithm (i.e. bubble sort) is already basically impossible. I work with highly talented non coder co-workers who all attended tier-1 universities (e.g. Oxford, Harvard, Stanford) but for finance/business related degrees, I cannot get them to write while/foreach loops in Python, and simply using Claude Code is way too much for them.
If you are even fully completing one Advent of Code problem, you are in the top 0.1% of coders, completing all of them puts you in the top 0.001%.
Wishing you best of luck in AoC, Life and Love but I imagine someone like you doesn't need it, being a complete toolbox and all.
P.S.: Tell your coworkers I'm sorry they have to put up with you.
You're the person saying Advent of Code is "so easy" that anyone even people with no coding ability at all should find it do-able, which is totally diminishing the difficulty of the problems, and asserting your own genius, i.e. that you found it totally trivial.
I am the person saying that actually, stuff like Advent of Code is incredibly difficult and 99% of active programmers aren't able to complete it, let alone people who don't code.
I am not an elitist at all, unlike yourself, I don't find completing "Advent of Code" easy, in fact, it would take me a long time to complete it, more time than I have available in my busy life in the average December. And I doubt I would be able to complete it 100% without looking up help, getting hints, or using LLMs to help.
Heck, I even talked about having to be serious about completion, and you could not bother to read the whole comment, then proceed to call me delusional? FFS, I am now praying for your co-workers and I'm not even religious.
Did you realize only roughly 500 people of the > 1M who are registered for advent of code even complete it?
You said "it should not be a tremendous challenge", i.e. not that big of a deal even if you don't know how to code. Which is absolutely diminishing the difficulty of the event, I mean, come on man...
This is why I'm asserting you are quietly oblivious to the abilities of most people. I am asserting that most people who CAN code, cannot complete the event, yet alone non-coders. I am a very active coder (for fun mostly these days, but also sometimes for work), but I could not complete Advent of Code. Maybe if I took all of December off work to dedicate serious time, but even then I wonder if it's possible without looking at hints/LLM-help etc.
I often try and help my co-workers who are working on AI based side-projects for fun, so I have a strong insight into the abilities of non-coding smart people, and the reality is that yes, they get very turned off as soon as you get anything more complex than for-loops and if-statements. This isn't me being mean to co-workers, this is the reality of things I have experienced. It's not a brains thing, they can understand more complex stuff, but they don't want to, they find it annoying, boring, not worth the time/effort etc. So the idea of them learning dynamic programming, DFS/BFS, more complex data structures etc, is well, just not going to happen.
My point is that you are effectively saying, "oh just about anyone can do Advent of Code if they want to", is totally not grounded in any sort of reality.
Try to have a better day.
https://adventofcode.com/2020/day/1 for example. It's not hard to do part 1 by hand.
You need two numbers from the input list (of 200 numbers) that add to 2020.
For each number n in the list you just have to check if (2020-n) is in the list.
A quick visual scan showed my input only had 9 numbers that were less than 1010, so I'd only have to consider 9 candidate numbers.
It would also be trivial for anyone who can do relatively simple things with a spreadsheet.
That's not the same as saying they're easy, but it's a different kind of barrier, and (in my opinion) more a test of 'can you think?' than 'did you do a CS degree?'
In this sense it's accessible: you won't get stuck because of a word you don't understand or a concept you've never heard of.
I very much disagree here. To make any sort of progress in AoC, in my experience, you need at least:
- awareness of graphs and how to traverse them
- some knowledge of a pathfinding algorithm
- an understanding of memoisation and how it can be applied to make deeply recursive computations feasible
Those types of puzzle come up a lot, and it’s not anything close to what I’d expect someone with “just a little programming knowledge” to have.
Someone with just a little programming knowledge is probably good with branches and loops, some rudimentary OOP, and maybe knows when to use a list vs a map. They’re not gonna know much about other data structures or algorithms.
They could learn them on the go of course, but then that’s why I don’t think basic coding knowledge is enough.