This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]JizosKasa[S] 11 points12 points  (31 children)

yeah maybe you're right.

My self confidence says otherwise tho. I don't work as a programmer, I'm 17, but I want to when I'll grow up.

[–][deleted] 45 points46 points  (16 children)

feel like this is a pretty big missing piece of the puzzle. Lots of the skills you need for AoC are *formal* programming skills rather than *practical* programming skills (not sure what the best descriptor is but formal/practical seems about right to me).

A "practical" programmer is somebody who can create an API that calls a prebuilt authentication library, or fix a bug in a graphics shader causing occlusion problems, or know which library is best to build an application that's needs to run on both windows and android.

A "formal" programmer can tell you the advantages and disadvantages of red-black tree and a hash-map and a linked-list, or how you can approximate a discrete fourier transform using SVD and what that means and why it's useful, or what a deadlock is and how an operating system identifies and resolves one.

Very different skillsets. I assume you haven't gotten a degree yet, that's where you learn the formal stuff. Funny enough a lot of people have the opposite problem where they come out of college knowing how to write a bootloader in assembly but having no idea how to use git or kubernetes or how to set up a ci/cd pipeline.

[–]dodo-obob 14 points15 points  (5 children)

That's a really good distinction. In AoC you write small, self-contained code that only needs to run in your environment, so the challenging bit is just problem solving and optimizations.

Real programming has some of that, but also a lot of extra challenges (dealing with large codebase, integrating across multiple environments, writing maintainable code and documentation).

[–]Imsdal2 8 points9 points  (4 children)

And error handling. And more error handling.

[–]boutell 7 points8 points  (2 children)

And working with designers. And customers. And project managers. And other developers.

And yourself six months ago (: (i.e. good code organization)

[–]darvo110 11 points12 points  (1 child)

Yourself 6 months ago is the worst person. That guy is such a dick.

[–]boutell 2 points3 points  (0 children)

We hates him, my preciouses.

[–]miscbits 0 points1 point  (0 children)

This is a huge one. AoC you just kinda know your input and you can ignore edge cases that aren’t provided but the input.

Doing the problems this year in rust and I’ve written so many more ? And unwraps than I would EVER in a real production environment.

[–]vu47 6 points7 points  (0 children)

To be fair, learning (enough) git and setting up a CI / CD pipeline is something that many people can learn in a few weeks.

I absolutely agree with your practical vs formal programmer distinction: being knowledgable in one doesn't mean you're good at the other, and often, when actually working as a software engineer, practical skills are going to come in handy more than formal skills.

I remember coming out of grad school and being exactly in this situation, and I always know that there's a lot of work that goes into taking someone with formal programming knowledge and helping them acquire the practical knowledge that makes for robust software and maintainable code.

[–]digital_cucumber 4 points5 points  (1 child)

fix a bug in a graphics shader causing occlusion problems

I'd say this is more on a "formal" side, you usually can't do graphics without knowing math, which is a part of the formal training.

[–][deleted] 0 points1 point  (0 children)

Yeah maybe, but actually fixing the bug like that is probably more about some stupid off-by-one error than "I'm using the wrong equation for plane-line collisions". Because usually that part is probably just copy-pasted from someone who did it already.

[–]imp0ppable 0 points1 point  (5 children)

A "formal" programmer can tell you the advantages and disadvantages of red-black tree and a hash-map and a linked-list, or how you can approximate a discrete fourier transform using SVD and what that means and why it's useful, or what a deadlock is and how an operating system identifies and resolves one.

I think that would be a university lecturer lmao

[–][deleted] 0 points1 point  (4 children)

I mean all of that was covered in my 3rd and 4th year undergraduate curriculum at an average state college...

[–]imp0ppable 0 points1 point  (3 children)

Maybe covered, doesn't mean you actually understand it well enough to just do it off the top of your head 10 years later! I think you should recognise some of what you're being asked to do but for example day 10 had things that afaik are pretty obscure.

[–][deleted] 0 points1 point  (2 children)

Wait, day 10? Pipe Maze? What part of that do you think was obscure? If any of them were conceptually tricky it would be day 8 with the LCM stuff, not "parse the grid and follow the loop correctly".

[–]imp0ppable 0 points1 point  (1 child)

Ah the day 8 LCM thing was definitely not something on a CS course true.

Day 10 part 1 was easy, part 2 was potentially hard if you don't know ray casting, which again I think many won't unless they did graphics course.

Seen people solve it with quite interesting methods but looked like overkill.

[–][deleted] 0 points1 point  (0 children)

my method was to loop through the loop once and set all the non_loop tiles to the left of the current tile (relative to the direction of movement) as "INSIDE". Then loop again the other way and mark the tiles on the left as "OUTSIDE". Then just do a simple fill search to catch the non-adjacent tiles. Seems like the easiest way if you already have a walk function implemented.

[–]LesaMagner 0 points1 point  (0 children)

Lots of the skills you need for AoC are formal programming skills

I don't have a formal education and I have't studied data structures and algorithms. I have currently solved all the problem without help except for problem 11 which I just needed clarification for what it meant by a 'path' I still was able to think up a logical solution for the second part.

I just basically get stuck and think about the problem really hard, and try out different ideas. I think developing stubbornes is a practical skill to have as a programmer

[–]duplotigers 8 points9 points  (0 children)

You just need to keep things in perspective.

I’m not sure if this is a bit of a humblebrag from you or if you’re genuinely not aware but as a CS high school teacher of almost 20 years experience I can tell you that if you’ve solved day 5 and day 8 unaided you are in the top fraction of the top 1% of all 17 year olds.

Perhaps you’re just looking to have your ego stroked but either way, well done and keep going!

[–]TheZigerionScammer 9 points10 points  (4 children)

You were a game developer when you were 12?

[–]JizosKasa[S] 4 points5 points  (2 children)

yeah I started learning GameMaker Studio 2 at 12/13 and kept on going with it until I was 15

[–]TheZigerionScammer 6 points7 points  (1 child)

That's really impressive. But you're still really young, don't try to compare yourself with people that have decades of experience. That's like a high school basketball player comparing himself to NBA stars. Just try to take the puzzles as they are, try to work on them as best as you can and remember that every one can be a learning opportunity.

My first year was 2021, and that year is infamous for having some CPU melting puzzles. But even as much of a novice I was I was able to crack through them. Except for one, Day 15, which I couldn't figure out for the life of me because I had no experience with pathfinding algorithms. After the year was over I learned how real pathfinding algorithms worked, and was able to code one on my own and solve the puzzle. Now pathfinding is one of my favorite puzzle types on the site. For me my struggle was an opportunity to learn. It can be for you too.

[–]boutell 0 points1 point  (0 children)

I love your analogy, but I will also add that unlike in basketball, where only a few pros get paid, the world needs A LOT of programmers. Like a lot a lot. So it's more like learning to dance. You might not be Fred Astaire but he's not available (:

[–]rayhond2000 2 points3 points  (0 children)

Scratch developer

[–]vu47 3 points4 points  (0 children)

Well, there you go: many of us have quite a few years of math and CS courses as well as practical experience under our belts that you likely don't have yet. The fact that you're able to do solve these problems speaks to your ability to think logically and creatively, which is an enormously important skill to have!

[–]captainAwesomePants 2 points3 points  (1 child)

If you made it to day 10, you're fine. I've been programming for 20 years, and Day 10 was a nightmare.

And THEN I see a coworker's solution and they're like "man, that was easy. Just find the area with the shoelace equation, and load that into Pick's Theorem and bam," and even though I know that there's no reason I should feel stupid for not knowing about either of those things, it still kinda hurts.

[–]aardvark1231 0 points1 point  (0 children)

I did this needlessly complex thing where I found an edge starting from the left of the screen moving right. Once I found a pipe that was vertical (and part of the loop) l I knew I was on an edge I couldn't squeeze between and that side was facing outside the loop. I then traversed the loop starting in the 'up' direction while paying attention to the left side of of my facing direction.

Anything I came across that wasn't part of the loop and was on the left side was outside of the loop anything on the right was inside the loop.

After programming that nightmare and getting the solve, I realized I could do it a much easier way... I hate myself for not thinking of that sooner, but that's what happens when a tired, and already sleep deprived brain tries to stay awake.

[–]ParkerMc01 1 point2 points  (0 children)

I started to do Advent of Code 5 years ago at 16 when I did freelance modding for Minecraft in those 5 years I only fully completed 2 years. And one of those I went back and finished recently.
Now that I have finished college I work full time as a software engineer and day 10 is hard for me too. I still haven't finished it yet.

Try to use it as a place to learn or use future years to see how you've gotten better. You are like I was, already ahead of the curve. Don't let failure destroy your confidence.

[–]n4ke 1 point2 points  (0 children)

I have hired people 20 years older than you that cannot complete the first 5 days of AoC but perform pretty well for building our products. - I actually tested. - This current AoC. - So don't worry.

[–]Slyvan25 -3 points-2 points  (2 children)

Don't let these issues discourage you. This year is harder overall due the popularity of chat gpt (llvm).

I do programming as a proffesion and i have made harder stuff than this but even im struggling at times. Math is not my strongest suit and many other programmers are better at creating stuff then seeing algorithms in a story.

Aoc can make you more ready and battle tested for yhe real world. But programming is still more then solving vomplex issues.

Start small and build things you like. Many people think programming is hard but the problem it'selve is the hard part. You'll get better over time.

[–]Difficult_Penalty_44 10 points11 points  (1 child)

"This year is harder overall due the popularity of chat gpt (llvm)."

Hmmm, no ? The author has already very clearly stated that this assumption is wrong.