Learn Docker With My Newest Course

Dive into Docker takes you from "What is Docker?" to confidently applying Docker to your own projects. It's packed with best practices and examples. Start Learning Docker →

How I Quickly Find Answers to Problems and Research New Things

blog/cards/how-i-quickly-find-answers-to-problems-and-research-new-things.jpg

If I'm trying to research something or solve a specific problem I typically reach for the same resources with different search terms.

Quick Jump: Google / YouTube | Documentation | GitHub Issues | Forums, Mailing Lists and GitHub Discussions | Source Code | Slack, Discord and IRC | Courses and Books | Reverse Engineering | Video Walkthrough of This Post

Prefer video? There’s a video version of this blog post on YouTube that goes into a bit more detail about certain topics listed below.

Researching is a really useful skill. Being able to describe your problem in a way that lets you find answers is insanely valuable. It’s something that applies to so many situations too, not just software development.

I decided to write this post because someone emailed me recently asking how to get better at reading and understanding man pages or Vim’s help. That made me take a step back and think about researching anything in general which is what this post is about, although later on we’ll go over how I sometimes use man pages and Vim’s help.

My research order of operations is usually:

Google / YouTube

For nearly every one off problem I start by searching these 2 sources. This could be anything from how to recursively count lines in files within a directory on Linux to whatever programming related thing I’m stuck on or want to learn more about.

For common things I’m hoping to find a quick answer on StackOverflow with a tiny bit of context / reasoning and for the not so common things I’m hoping to find blog posts written by someone who has practical experience doing it and lays things out with a ton of background information and examples.

Video is also very helpful, especially when it comes to showing off a demo which lets you see something work without having to do it yourself to begin with. It’s also wildly useful for non-programming topics, like how to build something.

Also, I’m usually not using any advanced search features. Sometimes I use quotes or site:example.com TERMS to limit results to 1 site but usually I focus my efforts on coming up with a concise and descriptive description of the problem. This also doubles as a nice way to rubber duck a problem because searching nudges you into understanding the problem.

If a specific phrase you’re searching for doesn’t come up with any helpful results then keep trying alternatives. Often times I’ll end up searching for something in a few different ways because certain folks use different keywords in their posts.

For search results don’t be afraid to go past page 1 too. Sometimes I’ll keep going and find nuggets of wisdom from blog posts that are on page 5+ of the search results.

If I’m coming up empty or I’m trying to dive deep into a subject I’ll also use DuckDuckGo to get a sample of results from a different search engine.

Documentation

Web based documentation is preferred. Certain programming languages and web frameworks have great documentation like Flask and Rails. They make it pretty painless to find solutions to specific components of the framework.

For example if I wanted to learn more about what the Rails router has to offer, the documentation is amazing. It feels like a blog post written by the community.

Documentation for tools also applies here too, such as Kubernetes or whatever you happen to be learning. Documentation can be great for learning something specific in isolation which means it can double as helping you solve a specific problem too.

Not all documentation ranks well in Google and lots of documentation doesn’t have great search functionality so you may need to poke around the docs manually which isn’t too bad if you have an idea of what you need to be looking at.

As for things like man pages or more specifically Vim’s help pages, I may use them as supplementary sources to information I’ve found in other places. They can be high quality sources of info because it’s coming straight from the creators and maintainers of the tool.

I’ve definitely found lots of valuable information in both places, but for me personally they tend to work best when I already know the answer to a problem and I’m looking for exact explanations of something to verify third party information.

GitHub Issues

GitHub issues rank well in Google (as do those annoying “fake” GitHub sites) but I have found in a lot of cases that searching through GitHub’s open + closed issues and pull requests often finds extremely useful bits of information that I couldn’t find when Googling.

This is usually the case when you have a very specific problem with a tool that has a ton of high level community blog posts which can overtake search results.

Seriously, when I’ve lost all hope of finding an answer with the above 2 methods I’m often pleasantly surprised with an exact solution or at least enough information to get me going.

This is also a very high quality source of information because often times you’ll find answers written by the maintainers of the tool.

Forums, Mailing Lists and GitHub Discussions

Certain communities have official forums or mailing lists. These can be pretty good, especially if you’re looking for general advice where multiple folks can give their opinions on your question or use case.

You can sometimes find answers to specific questions too. For example, Hotwire has its own forum. It’s not high traffic but I have found answers to specific problems here. You’ll find forums are hit or miss because a lot of techs will expect technical questions get asked on StackOverflow.

More recently there’s GitHub discussions too. Certain repos have this enabled. It’s basically a forum but scoped down to a specific repo.

All of these sources can be an excellent supplement to blog posts and videos you’ve found in other places.

Source Code

Sometimes you have to dive into the thick of it as a near last resort. This is also where picking up surface level knowledge of multiple languages can be helpful.

For example, I don’t program with Go in my day to day but I have had to look at Go source code to help figure out how to do something with Argo CD Notifications because their documentation had some gaps and I couldn’t find any examples in other places.

This is easier nowadays with GitHub supporting being able to hit . within a repo to view the source code of a project in your browser through VSCode. It even supports CTRL + p to quickly open files as well as supporting project wide searches.

Slack, Discord and IRC

This is often a last resort move if I can’t find an answer anywhere else. I’ve had tons of great conversations here. I reserve this as a last ditch effort to find an answer not because it’s a bad resource, but I try to respect other people’s time.

I don’t want to become “that guy” who asks a million questions that are pretty easily found after a few minutes of searching the above resources. If I do ask a question in chat it likely means I’m potentially looking for specific advice, dealing with a non-common use case or the project’s documentation has a gap. I often make a blog post and PR on the docs after I get and understand the answer.

It feels like the least I can do, especially if it ends up taking let’s say 15 minutes of someone else’s time to walk through the problem and provide a solution.

With that said, don’t let me talk you out of using chat less. These are communities run by folks with a common interest. It’s where we go to talk shop with others which shouldn’t always be seen as a transaction of time with a giver and receiver. Often times you’ll find people happy to assist or chat about a topic because it’s fun.

Courses and Books

I’m typically not going to buy a course or book to solve 1 specific isolated problem but they can be excellent when you want to learn more about something larger, such as learning about a specific technology as a whole.

Usually I don’t start off with courses or books. I’ll learn everything in isolation using a form of question driven development, form my own opinions based on experience building something real and use courses and books to help fill in gaps and pick up best practices.

My goal there is to pick up a bunch of useful nuggets of wisdom and hopefully have a bunch of spots where I can go back and refactor what I’ve done. By that point in time I have a decent handle on things so this isn’t time consuming. It ends up being very enjoyable, almost like a reward after having put in the work to get there.

It’s funny because creating video courses is what I do so you’d think I’d make a stronger case in hopes to convince you into buying my courses but that’s not the case. Everyone learns differently. I think they’re valuable but for me I don’t start with them at ground 0. Although I do have hundreds of blog posts if you wanted to check them out.

Reverse Engineering

This could be the true last resort in attempts to interact with something.

Let’s say you have a black box, such as an API you want to use that you don’t control and it has no docs / support, a desktop app you want to add functionality to without a plugin system or some unknown hardware then you might find yourself in this spot.

This isn’t something I have a ton of experience with since it doesn’t come up in my day to day working with web based services and infrastructure but it has happened with old APIs.

How you do this depends on what you’re trying to reverse engineer. It could be a matter of inspecting the network tab in a browser to see if there’s HTTP calls you can use to build a custom tool with an undocumented API or maybe using Wireshark or a comparable tool to monitor and inspect network traffic.

In other cases your goal might be to find the inputs and outputs of a program or piece of hardware. There’s too many things to list here based on the use case but hopefully this gets you going on the right track because sometimes just knowing something is possible helps.

Who knows, maybe you could be one of the first folks who documents the approach!

Video Walkthrough of This Post

Timestamps

  • 0:59 – TL;DR is Google, YouTube, Docs, Issues, Forums, Code and Chat
  • 1:27 – Being able to research things is valuable
  • 2:52 – Google and YouTube
  • 5:25 – Documentation
  • 7:42 – GitHub Issues
  • 9:13 – Forums, Mailing Lists and GitHub Discussions
  • 11:27 – Source Code
  • 13:23 – Slack, Discord and IRC
  • 15:26 – Courses and Books
  • 17:32 – How do you research and learn new things?

How do you research new things and find answers to problems? Let me know below.

Never Miss a Tip, Trick or Tutorial

Like you, I'm super protective of my inbox, so don't worry about getting spammed. You can expect a few emails per month (at most), and you can 1-click unsubscribe at any time. See what else you'll get too.



Comments