Finding answers to difficult questions
Exploring what to do when you're trying to find answers to hard technical problems on the internet, and all the usual options aren't working. October 20, 2022 People Building
I’ve been working on a game engine in the background for a while. Most of this work though has been learning, with the idea of “oh yeah I’m also making a game engine” becoming a useful preface and facet of myself through which to take in new information. Suddenly I have a reason to learn about IL in C#, finally checking out the stb libs, etc.
That said, it has been a difficult road. Much has been said recently about the collapsing usefulness of search on the web, but this is felt even more so when you start digging into topics that aren’t searched for or talked about at near the same rate as tools like React.js. Some hard things I’ve had to find recently:
- Visual studio configuration for dotnet core projects (why does my program run from the cli but crash in Visual Studio?)
- “Advanced” P/Invoke in C#
- Sokol libraries
It’s not even that this information is harder to find on the internet, it’s that there is simply less content out about any of the above things. Not only this, but due to the nature of the above things and the typical problems you’re solving by engaging with those things, most content is written starting from step 5, skipping (or assuming) requisite knowledge from step 1-4 such that you can engage with what’s important or different.
What I’m circling in general is that, on the internet, there is a dearth of beginner content about advanced topics. Reading about stuff like P/Invoke or Marshalling in the Microsoft docs feels like someone banged it out over a lunch break out of obligation, knowing that the target audience for the docs likely works at Accenture and can just ask their local greybeard about any issues or gaps. This is obviously frustrating, and something I acutely feel as someone that frequently feels just slightly out of their depth.
That said, what I consider advanced topics you may consider rote and vice versa - I think especially when trying to become A Good Programmer, it’s a common state to be in. That doesn’t mean it’s any more pleasant though, and after getting into this state again with game engine stuff, I wanted to write a post on some Tips and Lessons I’ve sort of gathered over the years (coping strategies?) that have helped me pull through the darkest hours. Or said differently “How do you get answers to hard problems (that have answers)”
This sounds so dumb but I find it is a necessary, active practice for me, that without it I would get nothing done. Specifically, Know that your problem has a solution.
Say it again:
Your Problem Has A Solution
I think it’s very easy to go from “I can’t find the answer” to “there is no answer”, but this is basically never the case. Unless you are working on some fringe technology at the bleeding edge of science and computing, it’s almost 100% guaranteed that whatever problem you are facing has a solution.
This is not even meant to be just the truism it sounds like, as I mean this more practically. In software, you are very likely using tools and libraries created by other people - by the nature of using those tools and libraries you are creating and running into problems produced by the circumstances of the tools that you use. This already then bounds your problem/solution space to those that can be produced — or said differently, by using a tool like MS Paint, you would produce “MS Paint-shaped problems”, not Adobe premiere shaped problems. This already means you have a starting point for a solution, and are not working in some unbounded space. I mention this because it requires a step back from problem solving at the start - when you run into issues with software, it can be easy to see a problem as totally unbounded. However, by the nature of producing the problem in the first place, your problem is in fact already bounded, and hence likely knowable.
StackOverflow seems like an inexhaustible wreath of knowledge, but where we’re going that isn’t the case. Assuming you can’t just google your problem and click the first result, the next step is to find where answers are. It’s easy to assume there is a 1-to-1 relationship between your problem area/domain and some hide-y hole of experts on that, and maybe if you’re lucky that does exist, and you could find your answer there by just googling “visual studio enthusiasts” or something.
However if that isn’t the case, your next best bet is to find where those people hang out. Look up the problem software - does it have a forum? A discord? A gitter? Matrix? Join them, and ask your question in all of them (more on this tactic below). I’ve joined so many random chat platforms to ask a single question, and I encourage you to do so as well. Don’t view this as some grand community interest - get in, ask a question, get out. Start around if you feel like you found your people, but also don’t be afraid to ask a question and leave.
This sounds a bit harsh or transactional, and it sort of is, but also consider that the people that are around to answer your questions are likely there to answer because they want to help people that have problems they can fix (more on this below as well).
If there isn’t a community for your problem specially, expand the scope a bit. Looking for a Rust operating systems question? Reframe your question such that you aren’t looking for Rust operating systems people, but instead are looking for operating systems people that are into Rust, etc. I’ve joined a few communities that are only outwardly related to a problem area I’m interested in, only to find out that, due to the nature of the community, they are VERY good at answering specific questions.
A quick example here is that I joined the Handmade Network Discord. Outwardly, this is a Discord for people in Handmade Network that want to talk about their custom software. Turns out, a lot of those people are low-level people, and I’ve found that a lot of them know a lot about P/Invoke and Marshaling and low-level graphics APIs. Maybe even more so than Discords or communities that are suposedly “about” those things.
Keep getting bigger if you are still having trouble, and remember that most communities are opt-in - the people with your answers joined the communities they are part of for different reasons than you, so you can’t assume you will intersect on specifics.
Additionally, check for creator presence online! If you’re using a tool, see where it’s creators are. Twitter? Reddit? People who make stuff and put it on the internet are, in my experience and more often than not, very excited to find someone using their stuff!
Ask “dumb” questions
The reason we’re seeking out experts and communities where they may gather is that you’re gearing up to ask some questions. This sounds trivial, but I often find that programmers are terrible at asking questions.
I think there are a lot of reasons for this, but I’d mostly pin it on endemic imposter syndrome across all skill levels in the whole industry. What happens is that people try to ask questions that simultaneously try to demonstrate their own knowledge, while also sort of trying to answer their own question at the same time in the way their question is phrased. Additionally people may share code to try and help people find them a solution.
The issue with this approach to question asking is that it’s often way too much context, obfuscating the actual issue. Novice coders project their domain architecture onto the problem they are having and are unable to see their problem as anything but a domain problem.
Something I see frequently is that, in response to questions framed in the above way and asked to experts, is that the ground of the question itself are often questioned as an outcome of what someone sees if a shared domain.
Imagine you’re the expert with whatever answer someone is seeking. If someone asks a question and shares truly heinous code with you, how do you respond? You could try to answer their question on its face, but you also know that their code may be setting them up for a world of hurt later. Do you instead try to tell them that? Assuming so, now the person who went out on a limb to ask something is now defending themselves out their code, even if they are wrong. It’s a bad place for both parties.
However, there is a way around this. The first major step is to realize you can ask more than one question. You don’t need to cram all issues into one giant question. Secondly, and this is super important, maybe the most important - don’t ask a question about your exact problem - ask a question about an assumption you have that is one level higher than the problem you are having. Said differently, don’t ask questions about your problem, ask questions about your assumptions. This also forces you to think holistically about what you may be “doing”, which even in thinking about can sometimes give you an answer you didn’t know you were able to provide.
Additionally, be specific. This seriously forces you to just think about your problem and figure out how to phrase the question, and this, combined with the above, gives us a framework for good “dumb” questions, or rather “specific questions about assumptions”.
These questions aren’t sexy, you feel kind of bad asking them, but they are the BEST types of questions to ask, in part because they pay off tenfold. In a sort of reverse-“DRY” model, if your domain is provoking an issue in one part of your code, it’s probably manifesting elsewhere as well. Trying to solve a single instance of this problem is effectively playing whack-a-mole, especially if you’re unable to extrapolate a specific solution to more general context.
However, when you ask questions about assumptions, the knowledge gained from that answer is fundamentally transferable. It helps you also better understand the problem you are actually having, which may very well (and is often) different from the problem you think you are having.
Dealing with Trolls/Tending to the Imp
Maybe you have an issue and you find someone that can help and they are wonderful - great! However I often find that the more esoteric knowledge is, the more likely there are people that gatekeep that knowledge (also maybe being why the knowledge is esoteric in the first place). This is frustrating, the knowledge you seek being so clearly available, but behind a total asshole (more often a Rick).
These people suck to deal with, and are seen as a necessary facet of communities because they do actually have the right answers. What do you do?
Well, the thing about these people is that they are often egomaniacs - they fully recognize their own position in the community and as such are often very active, and jump at the opportunity to share their knowledge. Only issue is that you will often get the answer with a dose of condescension or belittling.
The unfortunate answer from the community level is that you should probably ban these people. I like to think of them as dragons on treasure - yes they contain wealths of information, but you also have to fight them constantly to get it. People that don’t wait to fight leave, bleeding the community of the lifeblood of new members.
Unfortunately as well, these people often aren’t banned, because the role of knowledge they hold for the community is too great. So here’s what to do: “annoy” the hell out of them with as many legitimate questions as possible. Absolutely get them to help you learn as much as possible. The thing about these people is that I think they legitimately know a lot but are often asked about their information far less than they would wish. They absolutely LIVE to tell you how smart they are, but are often mean or abrasive inside of communities due to pent up “sharing” energy. Think of it this way: if the community was really as annoying as they seem to find it and if they really didn’t care about the community, why would they hang around it in the first place?
I also find that asking these people a ton of questions has the effect of “deflating” them - they feel like their knowledge is recognized and appreciated by the community, and as such may feel less inclined to randomly lash out. And you get the benefit of tons of free learning. Just ignore the backhanded answers.
So if you can’t get rid of them, “tend the imp”. I guess this is also sort of the plot of IT.
I usually write more directly about games and game development, so hope you enjoyed this small detour into something slightly more personal. I hope you’re able to find this useful next time you’re trying to find an answer to a hard question!
DateOctober 20, 2022
Up nextTalking To Machines, Or "Serendipitous Prompting for AI Image Generators" Talking about how Midjourney has changed how I approach creative work.
PreviouslyNostalgia and the Triforce% Run Musing on speedrunning's relationship to games and the production of "new" nostalgias
subscribe to my newsletter to get posts delivered directly to your inbox