Thanks for sharing your story, it was an engaging read.
The part about filters in interviews resonated with me because of a recent experience. The place I work has been interviewing for new developers and the team lead asked me for my opinion on one of them. Overall seemed like a good candidate. But when I took a closer look at the assignment and the solution, I noticed that while technically the solution was good, the candidate had ignored a bunch of requirements outlined in the assignment.
At first I was willing to give him a chance, but when I gave it more thought, I realized that one of the biggest issues I've had with colleagues was them not reading the issue they're given, not understanding it, not fulfilling the requirements given in the issue and/or outright ignoring what's written because they independently decide they know a better solution (without consulting anybody), which turns out to be worse because of reasons which might not have been outlined in the issue, but still lead to the given requirements.
I pointed this out and felt it was a big red flag that, in a best-case scenario, this candidate was still unwilling to follow or incapable of following clear instructions. The candidate wasn't invited to the next round.
It also really bugs me when I've put more time into reporting an issue or setting someone up for success than they've spent working on a solution.
You would know best, but it struck me that one reason to skip parts of a take-home interview assignment is that it was taking far longer than it "should". A sufficiently senior candidate should have noted this but (I'm feeling charitable towards junior candidates this lazy Sunday afternoon) maybe that's something that's a reasonable thing for them to learn in a real job.
Ugh... I've had two bad hires in two years that were exactly like this - if you can't follow simple instructions, how have you survived in this career for this long?
Ugh... we have a new colleague who does this repeatedly. Most recently, I said in order to build, you need to do this:
- git clone <repo1> <dest1>
- git clone <repo2> <dest2>
- git clone <repo3> <dest3>
What do they do? git clone repo1, 2, 3 without giving <dest> parameter, which clones into default folders named after the repos. Build fails of course because repo1 depends on repo2 and 3 being named specifically. He sends me the error log (remote colleague, yay) and I say: you gotta rename those folders. Instead of renaming them, tries other things for hours, then comes back and shows me other build errors. I look over the errors and realize, again, the folders are still named incorrectly. Rinse and repeat 2 more times before finally the build process works. Lost a few hours to this. This kinda stuff keeps happening with this colleague. It's really a huge time-sink. If I had more time, I would do remote call and watch over them, but I'm so deep in my own stuff that I don't have time to babysit (not to mention calls take 1-2 hours with this person just trying to explain really basic things, over and over and over again).
I want to share my experience about my journey of programming. When I started programming, I was introduced to the ideas of variables, conditions, loops, functions—regular programming constructs. But I didn't understand much of what was going on, how the computer worked, or anything beyond just the syntax. I used to wonder: when I start my PC, how does it even know where to begin? I often felt insecure and anxious about all these unknowns. I was trapped in tutorial hell, thinking that just gluing pieces of code together was enough. It made sense for a while, but eventually, I wanted to quit.
After some time, I searched online about how to improve, and people recommended learning data structures and algorithms (DSA). I didn’t know how to implement data structures on my own and struggled a lot—almost like going through hell. Nothing made sense. I couldn’t even get beyond linked lists.
Then I found a Reddit post saying I might have the wrong mental model. It said that even if you know some programming, without understanding how to think about structures and systems, you're stuck. I started searching for what 'mental models' meant, but due to my lack of experience, I didn’t find anything useful.
Later, I read a discussion on Hacker News about the book Structure and Interpretation of Computer Programs (SICP). One commenter explained how the book starts with the concept of data and procedures. That really clicked for me. I had never thought of computation as just transforming input data into output data. The model of:
Input → Computation → Output
made everything fall into place. This idea carries through all levels of programming—whether it's assembly, mid-level, or high-level languages. It’s the fundamental notion. You need basic constructs to steer data through transformations into useful outputs. Computation is essentially about transforming one form of information into another.
After that realization, everything started to make sense—assembly, high-level programming, even operating systems. It was one of the best ‘aha!’ moments of my life."
The struggle with being self-taught is that you don’t know what you don’t know. This is probably even worse in areas like Unity, where the coding part is sort of a sideshow to the main event. Nowadays the problem is you lack the discernment to evaluate AI output.
I wrote The Conputer Science Book (https://a.co/d/01e62STx) to act as that basic building block and help orient self-taught developers.
What did come out from the blog post though:
- OP writes really well
- OP has learned to be very honest with themselves (and I hope not too self-critical now)
- OP seems really good at delivering things people like, even if they’re a bit cobbled together
All of which are very valuable and harder to learn than programming fundamentals tbh.
- OP takes rectifying what they deem to be deficiencies seriously, and actively work to fill those gaps.
At first I was reading the article thinking "wtf, that can't be real" and by the end felt I had respect for OP, both for their self-reflection and their willingness to put in the effort to learn. Admirable, really.
The struggle with being self-taught is that you don’t know what you don’t know.
yes, but he knew. i mean he should have known that he used stuff without knowing why.
i am mostly self taught too, and i agree with your statement, but i don't see an excuse for using stuff and not trying to understand why. i mean sure, when i follow a tutorial , at first i'll copy things i don't understand, but do that a few times, understanding should eventually come. that's how i learned how OO programming works. i followed the motions for a while, and one morning i woke up and it clicked. if you keep using something without understanding it, then it is time to ask questions. what is this thing that i keep using? how does it actually work, and what are other ways to solve the same problem?
things that i don't know are things that i never came across. i just recently had an interview that asked me questions where i honestly had to respond: i never touched this issue in my programming career so i can't give you an answer, just my best guess. but i never had a situation where i kept using something without eventually understanding why.
> he should have known that he used stuff without knowing why.
We all use stuff without knowing why. Many of the folks on here are deeply curious people who love learning about the world around them, especially for the tools we use in our daily careers and hobbies, but even then there's a huge number of things in our lives that we just do because it's what we do and it works. If you went to a "being a person" interview, and they asked you why you used a bow knot to tie your shoes and what the pros and cons of it were versus other knots, would you really have an answer?
There's a great list of Fundamentals halfway through. Though I have no frame of reference for how reasonable it is. (Is the average game dev really expected to implement a rigidbody sim from scratch?)
There's numerous studios across the games industry that have high coding standards, mandatory code reviews, and expect upskilling. Game complexity keeps increasing, and live service games in particular need to be stable and well maintained and very well engineered in the first place. For many games, the days of games being pressed to disk, shipped out and done with (where bad code is fine) are long gone.
I was thinking about this too, and I think there are two different views you can take.
1. Do you want to work IN the games industry?
2. Do you want to make and ship your own games?
I think the overall internal engineering standard for #1 is higher, because you're ultimately assessed against that standard by others.
For #2 _as long as it works_, you can get away with some under the hood crap, but you're the one that suffers for it (and hopefully not your players). I think I'd be wary (as I'm wary of this for myself), that aiming for #2 gives you an easy out to produce crap, as no one is holding you to standard other than yourself. Doesn't mean you shouldn't do it obviously, but it's a risk.
That list missed the biggest mistake all Game Programmers make: They write code for the games industry. If you can program a videogame, you can program a shitty webapp, and the shitty webapp industry pays twice as much. Video games are great, but that's an argument for making your own game, not working for the soulless meatgrinder that is the games industry.
I feel there was a very narrow time window in the 90s when a bunch of game franchises were started where the devs could get away with shipping stuff with a ton of bugs. The first two Fallout games come to mind. So does the original Deus Ex. This is definitely the exception not the rule though! Hardware constraints weed out shitty (or at the very least suboptimal) code very quickly.
This is the exception not the rule however. If there's one unifying thing about games that succeed despite major issues with the code its that the developers tend to have extensive experience playing board games and can make a compelling gaming experience without having a game with all the bells and whistles.
I think maybe that was just when YOU were playing games, because games today still ship with tons of bugs - it usually isn't until a few years later that there is stability
Do you have data supporting that? My favorite games (Factorio, Noita, Song of Syx to name a few) all share in common devs' passion and expertise. I don't have any example of a good game with shitty code.
Hell, Minecraft is a perfectly good example. It's code is a mess, but it made it's developer a billionaire, and has to be one of the most played games ever.
I had an experience developing The Sims 1, which confirms the "Worse is Better" hypothesis, which is a harsh reality of the games industry and the software development industry in general: I pointed out to my manager that the code was shit, and we really needed to clean it up before shipping.
So he sat me down and explained: "Don, your job is TURD POLISHING. If you can just make your turd nice and shiny, we will ship it, and everybody will be happy with you, because that is what we hired you to do."
But then at least he gave me a few weeks to clean up and overhaul the worst code. The moral is be careful what you ask for, or you might have to be the one who shovels out all the shit.
Just wanted to say I loved this article. In a way it didn't say anything "new", and yet all the anecdotes were spot on and I really liked the writing style.
There are activities where this type of realization is constant, and activities where it is rare.
Interviewing a marketing manager is dominated vibes and optics, and driving that clarity about what their actual skills are is an uphill battle. With a software engineer I can usually get there in a few minutes.
But many creative activities are susceptible to avoiding harsh realizations. And tfa was about the creative side of gamedev.
That doesn’t mean that engineers are better than English majors. If anything, technical people should have more respect for great creative talents, because those people got almost no feedback and still figured out how to become great.
I submitted this because I thought it was a good and nuanced (if long) take.
FTFA:
> If I had AI in 2019, I would not have lasted 3 years before the interview crashed me. I would have lasted longer, and the crash would have been worse.
I went to a private university to learn gamedev. And I feel like I learned game but not dev. Yes I slung a lot of code but, when the game industry dried up and I applied for a bunch of developer positions, I kept finding terms I had never heard of. Basically any methodology other than compile and fix was completely absent from my skillset. What I had learned, I had discovered while helping mates in other disciplines with their coding assignments. And the learnings I had were completely transitory. Tricking DirectX 9 into compiling was actually quite different even from DX8 or DX10/11.
I think this kind of thing is endemic, and its not just a youtube video problem. I guess you could see private education as kind of the same beast as self education.
That said, it did give me troubleshooting skills, because effectively we were taught break fix to such a spectacular level, especially in netcode, that my skills were very easily transferable. Didn't come back to code for ages.
There is an ocean between the level of complexities of the examples you gave. For the database side, it would be the equivalent of "write postgres from scratch", not "how do I take a postgres backup", assuming you want to do no frameworks at all (like you qualified for the game side).
Sure, here are the "steps" for creating that from scratch:
1. Setup lighting
2. Create a mesh importer system
3. Create an animation runner system
4. Create your 3D models + all animations needed (walk forward, crouch, run, jump, death, etc.)
5. Setup a camera system for following your character
6. Setup a physics engine for your character
7. Add support for collisions and high speed elements (i.e. Bullets)
8. Setup an AI system
9. Setup a particle system
10. Setup a player input system
11. Setup a save/load system
Follow those and you should be able to get from 0 to hero in a few years. Or you can use an engine and do it in a weekend.
I might have missed a step or twenty but people who want to avoid engines usually end up spending most of their time building an engine, and basically re-doing all things engines already provide.
And yes, making a postgres backup is orders of magnitude easier than making "just" a game, even the most basic one.
Are you interested in the graphics (how to render 3d, opengl/directx, shaders etc), in the “game engine” aspect (all of the various parts of a game coming together), game design, networking, or something else? All of it?
As people used to say on stack overflow - what have you tried so far?
- i have started brushing my c++ and learning 3d math for now
- i am interested to know for starters what does the 10000 ft landscape look like
- what are the major steps involved?
- what have I tried? I spent a lot of time looking into what kind of libraries exist. Rust has something called bevy which I would not touch given it is new and I dont want to work with double unknowns
- C++ has a library called raylib that seems to have a lot of functions for basic stuff.
- There seems to be a library called jolt which claims to handle physics well
- how is rendering / graphics pipeline stuff handled in c++. what libraries do we have for loading models, working with shaders, handling networking for gaming etc?
- the thing is i need to get a complete picture inside my head of how a 3d game is put together like how this https://visualrambling.space/neural-network/ gives you the picture you need to understand how a neural network works
The most enlightening part of learning is finding our own unknown unknowns.
For me it is different, making a best piano in the world is different from composing like Beethoven. Well what I am saying, learning unity is doable but what you do with it is most important. Back then I used to think learning photoshop, paint tools makes me artist, but I have realised being artist is actually faraway being from tool operator.
Not the same issue as the author, as I come from programming and been toying with Unity for myself / hobby. But it's surprisingly difficult to learn, because most guides and tutorials don't teach you the fundamentals. They teach you how to specifically do X, but it's hard to apply when you want to make something else. Often they also "hack" it to work, and as an experienced dev I can then really feel that this isn't the way to actually do it, it's just a shortcut, but I don't know how it should be done.
Like the input system. Many tutorials will just assign a listener on WASD buttons or something. But that only gets you so far.
Or the mentioned Brackeys. Very cool and well produced tutorials to make certain graphical effects. But often they are impossible to combine with your actual shaders, and if mindlessly applied you haven't learned anything generalizable you can use for your own vision. Just then have to hope there exist a tutorial or asset for whatever effect you're looking for.
> Before AI, I got a lot of interviews. Companies would talk to anyone with a reel. Today a beginner can send out fifty applications and not even get a first call. The thing that saved me may not be available to people starting out now. I do not have a clean answer for what to do about that. I only know that interviews were the best school I ever had, and I feel for anyone who is being shut out of that classroom.
Remembering which ones are FIFO and LIFO helps you remember what is what for etc
But yeah- had to read an article and a book- I hated most of the Unity youtube tutorials- enough info/help to get you going but they leave you stranded in the woods without a path out because you were blinding following someone else when you walked in.
Better to read/learn and understand the small bits yourself slowly as they are the breadcrumbs that lead you out.
We're going to see much more of this. It's possible to get a lot done without actually knowing how to program now. Amusingly, this was with Unity, and didn't even involve AI. We're going to have a whole generation of developers who can't really program. But they can open the hood and mess with the internals. They're more than users, but less than programmers.
I felt this article in my bones. I also had the same realisation years ago and eventually wrote about it on my blog: https://omeysalvi.com/blog/blog-11. I still have a long way to go but I feel encouraged that at least I'm learning with intent now.
It takes a lot of humility and strength to admit this. Kudos to the author.
I was similar to that in the past, chasing tutorials and only having half-baked knowledge. What shook me out of that was this article: https://fabiensanglard.net/c/
I'm going to start with the things I didn't take too seriously: Internet tutorials, blogs and almost anything brought by Google (yes, it includes this article). I usually considered those sources unreliable and potentially harmful.
Like a lot of people in the industry I used to Google way too often. Overtime I found the illusion of speed and the inaccuracy of the answers to be counter-productive.
No website is as good as a good book. And no good book is as good as a disassembly output.
This set me straight and got me to look into actual authoritative sources. Instead of tutorials read a proper book. Don't scrape StackOverflow, read the reference documentation. Learn to write automated tests instead of randomly poking around in the application. The thing is, I did not even intend to learn C, but after reading that article and other articles on that website I accepted that if I want to get good at programming I should start with the fundamentals, and C was a good starting point. It was the first language I actually learned properly.
Knowing the literature is criminally underrated. Nobody even asks for it anymore. I used to ask candidates when was the last time you implemented something described in a paper or textbook, and walk me through how you did it, and after 2010 or so, people stopped even being able to come up with an answer. I've worked with junior developers who get stumped with basic things like what units or format for arguments to pass to some SDK provided function, and they try everything besides reading the official SDK docs.
I wonder how long/far someone can truly go without actually knowing stuff today. I don’t know about game dev but the web is certainly built on abstraction: In university I’ve met people whose portfolio sites are made in NextJS but don’t know what React, the DOM or even HTML is. I think this is bad. At the same time (with the help of AI) they are certainly shipping things and working real jobs.
At least on the web, with frameworks and stuff abstracted into magic services or libraries, you can go really far without knowing what you’re doing. At what point does not knowing the lower level stuff start becoming a hard ceiling?
I think the author's being a bit hard on themselves.
Vanishingly few people ever learn a new thing optimally. Programming in particular takes years to learn thoroughly enough to get to a level where you can consistently produce quality work. It's normal to have gaps in your knowledge that you realise would've been better to fill earlier in your journey.
Like, there would be plenty of people who spent years studying data structures, algorithms, and other fundamentals who never actually built anything in that time.
Thanks for sharing! (Sorry the following is written before I realised you posted your own blog post!)
It does seem like a trap, although you might nit have had the raw technical skills for the job they applied (by the way why wasn't he screened out early rather than on the take home task?),
They clearly have a lot of the skills around game design.
The trouble is that they also didn't have the high level skills that someone who does have the low level technical skills might need from a lead!
I'm not entirely sure on the take that AI would make it worse. If they are satisfied with the kind of game they make. Then they could continue to make games for many years.
I do think it's right that Game Developer companies want technically highly skilled people. My favourite thing about AAA gaming is the feeling of the constant cutting edge.
On the other than, I don't see why they couldn't have a long and fruitful Indie career.
Thank you for sharing your story, and I'm so glad it worked out in the end.
This story however is also why algorithmic interviews and the supposedly "irrelevant to the real job" programming interviews are not going anywhere soon.
Having done a lot of hiring, it's surprising how many candidates do not actually know how to code despite experience and looking good on paper.
> Then the interviewer asked me why I used Queue<T>. I couldn't answer
And this was before AI. Imagine the amount of people who will never be able to answer similar questions. I am going to maybe have a bad take, but if you don't know what you're doing, you shouldn't be working in the field until you do. It's not okay to wing it into new roles with more responsibility.
And that kicker has been around since salaries have been high. I've interviewed people who flat out had zero interest outside of work in the field. Who only took a degree because of the salary.
It's incredible how a creative field that also happens to be critical to so many things can be infested by people who just don't care.
This is a great, reflective article that made me think of specific situations I've been in with people in my career that did not possess the same level of introspection. They are everywhere, which is why those interview questions he mentions get asked.
Particularly though, this hit home -
> The interviews were not silent on my end. I was not freezing and saying nothing. I was pretending. I was trying to sound like I knew, hoping the interviewer would believe me and move on. They always knew. You cannot fake technical answers in front of people who have asked the same questions hundreds of times. Looking back, that performance was worse than just saying I do not know. It wasted their time and it delayed my own learning.
This is the thing that absolutely maddens me with some people who I have worked very closely with before. They don't know enough to know that they don't know, but either are so insecure or with outsized ego, they cannot admit it publicly, because that threatens their sense of expertise. They also aren't willing or able to do the "boring" work to catch up (that the author mentions at one point). The farther you go into your career without getting past what this guy went through, the worse it gets, and you'd be shocked how long some people can last living in this world, which to me looks like hell.
I've had people confidently tell me stuff about niche areas of my expertise I knew they'd never worked on in their life, and start trying to drive decisions around those things based on that fake expertise, and being in the awkward spot of "do I protect their ego, let them fail, or tell them to please listen to me?" But I found when you do the latter, it falls on deaf ears, because they do not know enough to even understand that you can tell the confabulated responses they give to questions tell me immediately they have no effing clue what they're talking about, so any feedback will just be interpreted as threatening or incorrect.
I'm positive I have done this in the past, not saying I am perfect, but entering a mid to mid senior part of my career now and having worked with a ton of different people, when I see it now, I'm very unsure how to deal with it. This guy, bless his heart because it's so honest, likely received tons of direct feedback he wouldn't or couldn't listen to.
The very first mistake you made was using Unity. Start from scratch. A game loop is really just draw(), update() positions in a loop. Even smaller effects can be done with simple programming.
Recently I played around with ChatGPT for some effects for JS game, the results were interesting and very experimental.
3D game is another beast altogether and linear algebra needs to be very solid for that.
> 3D game is another beast altogether and linear algebra needs to be very solid for that.
Or you can use an engine, like Unity.
Edit: you responded and then deleted a post about "games that don't look like Unity on Unity". Ignoring that the looks of a game usually matter less in the long run than gameplay, a very, very short search shows that Escape from Tarkov[0] is made in Unity.
Thanks for sharing your story, it was an engaging read.
The part about filters in interviews resonated with me because of a recent experience. The place I work has been interviewing for new developers and the team lead asked me for my opinion on one of them. Overall seemed like a good candidate. But when I took a closer look at the assignment and the solution, I noticed that while technically the solution was good, the candidate had ignored a bunch of requirements outlined in the assignment.
At first I was willing to give him a chance, but when I gave it more thought, I realized that one of the biggest issues I've had with colleagues was them not reading the issue they're given, not understanding it, not fulfilling the requirements given in the issue and/or outright ignoring what's written because they independently decide they know a better solution (without consulting anybody), which turns out to be worse because of reasons which might not have been outlined in the issue, but still lead to the given requirements.
I pointed this out and felt it was a big red flag that, in a best-case scenario, this candidate was still unwilling to follow or incapable of following clear instructions. The candidate wasn't invited to the next round.
It also really bugs me when I've put more time into reporting an issue or setting someone up for success than they've spent working on a solution.
You would know best, but it struck me that one reason to skip parts of a take-home interview assignment is that it was taking far longer than it "should". A sufficiently senior candidate should have noted this but (I'm feeling charitable towards junior candidates this lazy Sunday afternoon) maybe that's something that's a reasonable thing for them to learn in a real job.
To make it fair, did you also inquire into firing your colleagues? :)
Ugh... I've had two bad hires in two years that were exactly like this - if you can't follow simple instructions, how have you survived in this career for this long?
Ugh... we have a new colleague who does this repeatedly. Most recently, I said in order to build, you need to do this:
- git clone <repo1> <dest1>
- git clone <repo2> <dest2>
- git clone <repo3> <dest3>
What do they do? git clone repo1, 2, 3 without giving <dest> parameter, which clones into default folders named after the repos. Build fails of course because repo1 depends on repo2 and 3 being named specifically. He sends me the error log (remote colleague, yay) and I say: you gotta rename those folders. Instead of renaming them, tries other things for hours, then comes back and shows me other build errors. I look over the errors and realize, again, the folders are still named incorrectly. Rinse and repeat 2 more times before finally the build process works. Lost a few hours to this. This kinda stuff keeps happening with this colleague. It's really a huge time-sink. If I had more time, I would do remote call and watch over them, but I'm so deep in my own stuff that I don't have time to babysit (not to mention calls take 1-2 hours with this person just trying to explain really basic things, over and over and over again).
23 replies →
I mean the only other alternative, since they survived this long and it happened two unique times in a year, is that you are the problem.
1 reply →
Sorry, I am pasting my old comment which is written 10months ago. https://news.ycombinator.com/item?id=44177446#44184036
I want to share my experience about my journey of programming. When I started programming, I was introduced to the ideas of variables, conditions, loops, functions—regular programming constructs. But I didn't understand much of what was going on, how the computer worked, or anything beyond just the syntax. I used to wonder: when I start my PC, how does it even know where to begin? I often felt insecure and anxious about all these unknowns. I was trapped in tutorial hell, thinking that just gluing pieces of code together was enough. It made sense for a while, but eventually, I wanted to quit. After some time, I searched online about how to improve, and people recommended learning data structures and algorithms (DSA). I didn’t know how to implement data structures on my own and struggled a lot—almost like going through hell. Nothing made sense. I couldn’t even get beyond linked lists.
Then I found a Reddit post saying I might have the wrong mental model. It said that even if you know some programming, without understanding how to think about structures and systems, you're stuck. I started searching for what 'mental models' meant, but due to my lack of experience, I didn’t find anything useful.
Later, I read a discussion on Hacker News about the book Structure and Interpretation of Computer Programs (SICP). One commenter explained how the book starts with the concept of data and procedures. That really clicked for me. I had never thought of computation as just transforming input data into output data. The model of:
Input → Computation → Output
made everything fall into place. This idea carries through all levels of programming—whether it's assembly, mid-level, or high-level languages. It’s the fundamental notion. You need basic constructs to steer data through transformations into useful outputs. Computation is essentially about transforming one form of information into another.
After that realization, everything started to make sense—assembly, high-level programming, even operating systems. It was one of the best ‘aha!’ moments of my life."
What is programming? by George Hotz is also good one https://www.youtube.com/watch?v=N2bXEUSAiTI
Extremely well-written and honest post.
The struggle with being self-taught is that you don’t know what you don’t know. This is probably even worse in areas like Unity, where the coding part is sort of a sideshow to the main event. Nowadays the problem is you lack the discernment to evaluate AI output.
I wrote The Conputer Science Book (https://a.co/d/01e62STx) to act as that basic building block and help orient self-taught developers.
What did come out from the blog post though:
- OP writes really well
- OP has learned to be very honest with themselves (and I hope not too self-critical now)
- OP seems really good at delivering things people like, even if they’re a bit cobbled together
All of which are very valuable and harder to learn than programming fundamentals tbh.
I'd also add:
- OP takes rectifying what they deem to be deficiencies seriously, and actively work to fill those gaps.
At first I was reading the article thinking "wtf, that can't be real" and by the end felt I had respect for OP, both for their self-reflection and their willingness to put in the effort to learn. Admirable, really.
The struggle with being self-taught is that you don’t know what you don’t know.
yes, but he knew. i mean he should have known that he used stuff without knowing why.
i am mostly self taught too, and i agree with your statement, but i don't see an excuse for using stuff and not trying to understand why. i mean sure, when i follow a tutorial , at first i'll copy things i don't understand, but do that a few times, understanding should eventually come. that's how i learned how OO programming works. i followed the motions for a while, and one morning i woke up and it clicked. if you keep using something without understanding it, then it is time to ask questions. what is this thing that i keep using? how does it actually work, and what are other ways to solve the same problem?
things that i don't know are things that i never came across. i just recently had an interview that asked me questions where i honestly had to respond: i never touched this issue in my programming career so i can't give you an answer, just my best guess. but i never had a situation where i kept using something without eventually understanding why.
> he should have known that he used stuff without knowing why.
We all use stuff without knowing why. Many of the folks on here are deeply curious people who love learning about the world around them, especially for the tools we use in our daily careers and hobbies, but even then there's a huge number of things in our lives that we just do because it's what we do and it works. If you went to a "being a person" interview, and they asked you why you used a bow knot to tie your shoes and what the pros and cons of it were versus other knots, would you really have an answer?
1 reply →
>The Conputer Science Book
I suggest an edit to fix the typo.
Conversely, I only opened it to see if it was actually cleverly titled Conputer :)
1 reply →
What nobody told him is that it doesn't matter. The most beloved games have the shittest code.
The goals of getting a job in the industry, and making a game people love, have completely different requirements, with surprisingly little overlap.
---
As for the latter (game industry requirements) I read this article a while back.
https://lazyfoo.net/articles/article11_top-ten-mistakes-game...
There's a great list of Fundamentals halfway through. Though I have no frame of reference for how reasonable it is. (Is the average game dev really expected to implement a rigidbody sim from scratch?)
There's numerous studios across the games industry that have high coding standards, mandatory code reviews, and expect upskilling. Game complexity keeps increasing, and live service games in particular need to be stable and well maintained and very well engineered in the first place. For many games, the days of games being pressed to disk, shipped out and done with (where bad code is fine) are long gone.
I was thinking about this too, and I think there are two different views you can take.
1. Do you want to work IN the games industry? 2. Do you want to make and ship your own games?
I think the overall internal engineering standard for #1 is higher, because you're ultimately assessed against that standard by others.
For #2 _as long as it works_, you can get away with some under the hood crap, but you're the one that suffers for it (and hopefully not your players). I think I'd be wary (as I'm wary of this for myself), that aiming for #2 gives you an easy out to produce crap, as no one is holding you to standard other than yourself. Doesn't mean you shouldn't do it obviously, but it's a risk.
That list missed the biggest mistake all Game Programmers make: They write code for the games industry. If you can program a videogame, you can program a shitty webapp, and the shitty webapp industry pays twice as much. Video games are great, but that's an argument for making your own game, not working for the soulless meatgrinder that is the games industry.
I feel there was a very narrow time window in the 90s when a bunch of game franchises were started where the devs could get away with shipping stuff with a ton of bugs. The first two Fallout games come to mind. So does the original Deus Ex. This is definitely the exception not the rule though! Hardware constraints weed out shitty (or at the very least suboptimal) code very quickly.
This is the exception not the rule however. If there's one unifying thing about games that succeed despite major issues with the code its that the developers tend to have extensive experience playing board games and can make a compelling gaming experience without having a game with all the bells and whistles.
I think maybe that was just when YOU were playing games, because games today still ship with tons of bugs - it usually isn't until a few years later that there is stability
1 reply →
What TFA describes is not someone who wrote poor quality code, but someone who could write no code at all, before the era of AI.
> The most beloved games have the shittest code
Do you have data supporting that? My favorite games (Factorio, Noita, Song of Syx to name a few) all share in common devs' passion and expertise. I don't have any example of a good game with shitty code.
Undertale is the oft-quoted example.
Hell, Minecraft is a perfectly good example. It's code is a mess, but it made it's developer a billionaire, and has to be one of the most played games ever.
I had an experience developing The Sims 1, which confirms the "Worse is Better" hypothesis, which is a harsh reality of the games industry and the software development industry in general: I pointed out to my manager that the code was shit, and we really needed to clean it up before shipping.
So he sat me down and explained: "Don, your job is TURD POLISHING. If you can just make your turd nice and shiny, we will ship it, and everybody will be happy with you, because that is what we hired you to do."
But then at least he gave me a few weeks to clean up and overhaul the worst code. The moral is be careful what you ask for, or you might have to be the one who shovels out all the shit.
https://donhopkins.com/home/TheSimsDesignDocuments/TDSEditTo...
https://donhopkins.com/home/TheSimsDesignDocuments/Comprehen...
Terraria is an infamous example.
The Simpson’s Hit & Run and Fallout 3 come to mind
2 replies →
Hunt for Postmortens at GDC magazine or GDC Vault.
There are countless great games with a lot of bugs and performance problems. Maybe most of them have pretty code behind the scenes, but I doubt it.
Hey, I'm the original author. Thanks for sharing this. I saw a spike in my analytics and couldn't figure out where it was coming from, now I know :)
Just wanted to say I loved this article. In a way it didn't say anything "new", and yet all the anecdotes were spot on and I really liked the writing style.
> But interview after interview, the story started to make sense. They were not wrong, I was not ready, and it took me a long time to admit that.
I believe this is one of the most humbling but also maturing moments in career and adulthood.
There are activities where this type of realization is constant, and activities where it is rare.
Interviewing a marketing manager is dominated vibes and optics, and driving that clarity about what their actual skills are is an uphill battle. With a software engineer I can usually get there in a few minutes.
But many creative activities are susceptible to avoiding harsh realizations. And tfa was about the creative side of gamedev.
That doesn’t mean that engineers are better than English majors. If anything, technical people should have more respect for great creative talents, because those people got almost no feedback and still figured out how to become great.
Marketing is easy, just ask the interviewee what metrics they use in their job. If they can answer (at all), hire them.
The expected answer is something like LTV/CAC.
Don't worry, blogpost author. We think you're a Queue<T> and that's all that matters.
Last night I started learning Qt and thought if the underlying pun was the motivation :)
I submitted this because I thought it was a good and nuanced (if long) take.
FTFA:
> If I had AI in 2019, I would not have lasted 3 years before the interview crashed me. I would have lasted longer, and the crash would have been worse.
It's worth pointing out that:
1. Much of the core lesson in this article has nothing to do with Unity specifically, and applies to self-taught programmers in general; and
2. This person has a vested interest in making you believe learning Unity is especially difficult.
Yeah, the actual point is "For a long time I avoided learning programming and it turns out you do actually need that for a game programmer job."
The issue was compounded by the author getting a lot of positive feedback on their game, because people respond to how the game looks, not the code.
For the solo indie approach that's not really an issue (many such cases!), but getting a job is a separate beast.
1 reply →
> and applies to programmers in general;
There, fixed that for you.
So many college educated programmers I've worked with that have zero real world experience and so make a ton of poor decisions with code design.
I feel this.
I went to a private university to learn gamedev. And I feel like I learned game but not dev. Yes I slung a lot of code but, when the game industry dried up and I applied for a bunch of developer positions, I kept finding terms I had never heard of. Basically any methodology other than compile and fix was completely absent from my skillset. What I had learned, I had discovered while helping mates in other disciplines with their coding assignments. And the learnings I had were completely transitory. Tricking DirectX 9 into compiling was actually quite different even from DX8 or DX10/11.
I think this kind of thing is endemic, and its not just a youtube video problem. I guess you could see private education as kind of the same beast as self education.
That said, it did give me troubleshooting skills, because effectively we were taught break fix to such a spectacular level, especially in netcode, that my skills were very easily transferable. Didn't come back to code for ages.
- as a non gamedev i keep asking this question since i dont get a satisfactory answer like ever
- if i want to make a 3d third person tactical shooter from scratch) without unreal, unity, godot etc what is the exact flow
- i know c++ and have a decade of programming experience. i am revising 3d math from that awesome 3d math primer book
- what are the steps?
if you asked me to write a program to take a postgres backup i would say, the steps are
- spin a docker container for postgres 18.1
- perform a pg_dump using directory format
- take a tar archive out of that directory
- create a brotli archives out of the tar archive above as it doesnt work directly with directories and gives better compression than tar
- copy the file from container to host
- shut the containers down
- can someone give me an overview along the above lines for gamedev?
There is an ocean between the level of complexities of the examples you gave. For the database side, it would be the equivalent of "write postgres from scratch", not "how do I take a postgres backup", assuming you want to do no frameworks at all (like you qualified for the game side).
Sure, here are the "steps" for creating that from scratch:
1. Setup lighting 2. Create a mesh importer system 3. Create an animation runner system 4. Create your 3D models + all animations needed (walk forward, crouch, run, jump, death, etc.) 5. Setup a camera system for following your character 6. Setup a physics engine for your character 7. Add support for collisions and high speed elements (i.e. Bullets) 8. Setup an AI system 9. Setup a particle system 10. Setup a player input system 11. Setup a save/load system
Follow those and you should be able to get from 0 to hero in a few years. Or you can use an engine and do it in a weekend.
I might have missed a step or twenty but people who want to avoid engines usually end up spending most of their time building an engine, and basically re-doing all things engines already provide.
And yes, making a postgres backup is orders of magnitude easier than making "just" a game, even the most basic one.
Are you interested in the graphics (how to render 3d, opengl/directx, shaders etc), in the “game engine” aspect (all of the various parts of a game coming together), game design, networking, or something else? All of it?
As people used to say on stack overflow - what have you tried so far?
Also - this might be a good starting point: https://www.gameenginebook.com/
- i have started brushing my c++ and learning 3d math for now
- i am interested to know for starters what does the 10000 ft landscape look like
- what are the major steps involved?
- what have I tried? I spent a lot of time looking into what kind of libraries exist. Rust has something called bevy which I would not touch given it is new and I dont want to work with double unknowns
- C++ has a library called raylib that seems to have a lot of functions for basic stuff.
- There seems to be a library called jolt which claims to handle physics well
- how is rendering / graphics pipeline stuff handled in c++. what libraries do we have for loading models, working with shaders, handling networking for gaming etc?
- the thing is i need to get a complete picture inside my head of how a 3d game is put together like how this https://visualrambling.space/neural-network/ gives you the picture you need to understand how a neural network works
The most enlightening part of learning is finding our own unknown unknowns.
For me it is different, making a best piano in the world is different from composing like Beethoven. Well what I am saying, learning unity is doable but what you do with it is most important. Back then I used to think learning photoshop, paint tools makes me artist, but I have realised being artist is actually faraway being from tool operator.
Not the same issue as the author, as I come from programming and been toying with Unity for myself / hobby. But it's surprisingly difficult to learn, because most guides and tutorials don't teach you the fundamentals. They teach you how to specifically do X, but it's hard to apply when you want to make something else. Often they also "hack" it to work, and as an experienced dev I can then really feel that this isn't the way to actually do it, it's just a shortcut, but I don't know how it should be done.
Like the input system. Many tutorials will just assign a listener on WASD buttons or something. But that only gets you so far.
Or the mentioned Brackeys. Very cool and well produced tutorials to make certain graphical effects. But often they are impossible to combine with your actual shaders, and if mindlessly applied you haven't learned anything generalizable you can use for your own vision. Just then have to hope there exist a tutorial or asset for whatever effect you're looking for.
> Before AI, I got a lot of interviews. Companies would talk to anyone with a reel. Today a beginner can send out fifty applications and not even get a first call. The thing that saved me may not be available to people starting out now. I do not have a clean answer for what to do about that. I only know that interviews were the best school I ever had, and I feel for anyone who is being shut out of that classroom.
Unity dude here, learned alone/self taught-
Being old enough to enjoy reading technical books/articles is a + and knowing the acronym RTFM
I learned about collection types other than array/list from reading this article by the creator of the game Project Zomboid- as he used Stacks for zombie behaviors https://ia600303.us.archive.org/18/items/pdfy-G4Wm9sq1LU298r...
Then I got this book which is a great overview of C# for use in Unity https://csharpplayersguide.com/
Remembering which ones are FIFO and LIFO helps you remember what is what for etc
But yeah- had to read an article and a book- I hated most of the Unity youtube tutorials- enough info/help to get you going but they leave you stranded in the woods without a path out because you were blinding following someone else when you walked in.
Better to read/learn and understand the small bits yourself slowly as they are the breadcrumbs that lead you out.
We're going to see much more of this. It's possible to get a lot done without actually knowing how to program now. Amusingly, this was with Unity, and didn't even involve AI. We're going to have a whole generation of developers who can't really program. But they can open the hood and mess with the internals. They're more than users, but less than programmers.
Not clear how this plays out.
I felt this article in my bones. I also had the same realisation years ago and eventually wrote about it on my blog: https://omeysalvi.com/blog/blog-11. I still have a long way to go but I feel encouraged that at least I'm learning with intent now.
It takes a lot of humility and strength to admit this. Kudos to the author.
I was similar to that in the past, chasing tutorials and only having half-baked knowledge. What shook me out of that was this article: https://fabiensanglard.net/c/
This set me straight and got me to look into actual authoritative sources. Instead of tutorials read a proper book. Don't scrape StackOverflow, read the reference documentation. Learn to write automated tests instead of randomly poking around in the application. The thing is, I did not even intend to learn C, but after reading that article and other articles on that website I accepted that if I want to get good at programming I should start with the fundamentals, and C was a good starting point. It was the first language I actually learned properly.
Knowing the literature is criminally underrated. Nobody even asks for it anymore. I used to ask candidates when was the last time you implemented something described in a paper or textbook, and walk me through how you did it, and after 2010 or so, people stopped even being able to come up with an answer. I've worked with junior developers who get stumped with basic things like what units or format for arguments to pass to some SDK provided function, and they try everything besides reading the official SDK docs.
I wonder how long/far someone can truly go without actually knowing stuff today. I don’t know about game dev but the web is certainly built on abstraction: In university I’ve met people whose portfolio sites are made in NextJS but don’t know what React, the DOM or even HTML is. I think this is bad. At the same time (with the help of AI) they are certainly shipping things and working real jobs.
At least on the web, with frameworks and stuff abstracted into magic services or libraries, you can go really far without knowing what you’re doing. At what point does not knowing the lower level stuff start becoming a hard ceiling?
I think the author's being a bit hard on themselves.
Vanishingly few people ever learn a new thing optimally. Programming in particular takes years to learn thoroughly enough to get to a level where you can consistently produce quality work. It's normal to have gaps in your knowledge that you realise would've been better to fill earlier in your journey.
Like, there would be plenty of people who spent years studying data structures, algorithms, and other fundamentals who never actually built anything in that time.
Thanks for sharing! (Sorry the following is written before I realised you posted your own blog post!)
It does seem like a trap, although you might nit have had the raw technical skills for the job they applied (by the way why wasn't he screened out early rather than on the take home task?),
They clearly have a lot of the skills around game design.
The trouble is that they also didn't have the high level skills that someone who does have the low level technical skills might need from a lead!
I'm not entirely sure on the take that AI would make it worse. If they are satisfied with the kind of game they make. Then they could continue to make games for many years.
I do think it's right that Game Developer companies want technically highly skilled people. My favourite thing about AAA gaming is the feeling of the constant cutting edge.
On the other than, I don't see why they couldn't have a long and fruitful Indie career.
Thank you for sharing your story, and I'm so glad it worked out in the end. This story however is also why algorithmic interviews and the supposedly "irrelevant to the real job" programming interviews are not going anywhere soon.
Having done a lot of hiring, it's surprising how many candidates do not actually know how to code despite experience and looking good on paper.
> Then the interviewer asked me why I used Queue<T>. I couldn't answer
And this was before AI. Imagine the amount of people who will never be able to answer similar questions. I am going to maybe have a bad take, but if you don't know what you're doing, you shouldn't be working in the field until you do. It's not okay to wing it into new roles with more responsibility.
On one hand, now anyone can ask AI to explain Queue<T>.
On the other hand, most people aren't curious enough to ask.
And that kicker has been around since salaries have been high. I've interviewed people who flat out had zero interest outside of work in the field. Who only took a degree because of the salary.
It's incredible how a creative field that also happens to be critical to so many things can be infested by people who just don't care.
1 reply →
This is a great, reflective article that made me think of specific situations I've been in with people in my career that did not possess the same level of introspection. They are everywhere, which is why those interview questions he mentions get asked.
Particularly though, this hit home -
> The interviews were not silent on my end. I was not freezing and saying nothing. I was pretending. I was trying to sound like I knew, hoping the interviewer would believe me and move on. They always knew. You cannot fake technical answers in front of people who have asked the same questions hundreds of times. Looking back, that performance was worse than just saying I do not know. It wasted their time and it delayed my own learning.
This is the thing that absolutely maddens me with some people who I have worked very closely with before. They don't know enough to know that they don't know, but either are so insecure or with outsized ego, they cannot admit it publicly, because that threatens their sense of expertise. They also aren't willing or able to do the "boring" work to catch up (that the author mentions at one point). The farther you go into your career without getting past what this guy went through, the worse it gets, and you'd be shocked how long some people can last living in this world, which to me looks like hell.
I've had people confidently tell me stuff about niche areas of my expertise I knew they'd never worked on in their life, and start trying to drive decisions around those things based on that fake expertise, and being in the awkward spot of "do I protect their ego, let them fail, or tell them to please listen to me?" But I found when you do the latter, it falls on deaf ears, because they do not know enough to even understand that you can tell the confabulated responses they give to questions tell me immediately they have no effing clue what they're talking about, so any feedback will just be interpreted as threatening or incorrect.
I'm positive I have done this in the past, not saying I am perfect, but entering a mid to mid senior part of my career now and having worked with a ton of different people, when I see it now, I'm very unsure how to deal with it. This guy, bless his heart because it's so honest, likely received tons of direct feedback he wouldn't or couldn't listen to.
Learning how to program from tutorials is like learning how to ride a bike from watching YouTube videos.
You kinda feel that you are learning something but you only truly learn when you have to do it from scratch.
The very first mistake you made was using Unity. Start from scratch. A game loop is really just draw(), update() positions in a loop. Even smaller effects can be done with simple programming.
Recently I played around with ChatGPT for some effects for JS game, the results were interesting and very experimental.
3D game is another beast altogether and linear algebra needs to be very solid for that.
> 3D game is another beast altogether and linear algebra needs to be very solid for that.
Or you can use an engine, like Unity.
Edit: you responded and then deleted a post about "games that don't look like Unity on Unity". Ignoring that the looks of a game usually matter less in the long run than gameplay, a very, very short search shows that Escape from Tarkov[0] is made in Unity.
https://en.wikipedia.org/wiki/Escape_from_Tarkov
The reason why I deleted it was because Subnautica one of my favourite games was written in Unity. I never could have guessed.
It seems I've underestimated Unity, thank you for changing my mind!
What's with all the Unity articles on the front page recently? Seems suspicious.