A Framework For Knowing What You Don't Know

Read Time:4 Minute, 57 Second

This blog post was originally posted on my website.

Over my career I’ve had to learn new things many, many times. I’ve been an elementary school teacher, a digital marketer, a software engineer, and now I’m a full-time developer advocate. Over and over again, I’ve had to learn completely new concepts. It’s great; it keeps me humble, it keeps me happy. There’s a lot of dopamine involved in learning. But one of the most difficult parts of learning is knowing what you don’t know. And knowing what you don’t know is important, because it keeps you from making the types of mistakes that emanate from errors in judgment.

I’ve learned a couple of things about defining the limits of my knowledge about a concept. I’m sharing my framework here in case it’s helpful to anyone else in tech.

Stage 1: Nothing

The first stage of getting to know a new concept is the easiest to define. I’m starting from nothing!

This is great. I know exactly what I don’t know. Let’s say I’m completely brand-spanking new to the concept of an API. Here is a diagram of what I don’t know about APIs:

A Framework For Knowing What You Don’t Know

It doesn’t get more accurate than that. I’m not kidding. “What you don’t know” will surprise you again, and again, and again. The framework I’m suggesting here will not save you from being wrong in front of people. But I think it will give you some general guidance on how to approach learning new things.

Stage 2: One Instance of a Concept

So let’s consider universal concepts. Definitions that we all agree on. For example, an API according to Wikipedia is

“An application programming interface (API) is a way for two or more computer programs to communicate with each other.”

Maybe that’s not the most complete definition, but I think most techies would agree on what’s there. Now, you can memorize this definition, but you won’t have experiential knowledge of an API until you’ve met one out in the wild.

Let’s say I’m at that stage. I’m getting used to querying a REST API, and I’m learning to build one myself with Python or Node Express or something. This definition applies to the REST API I’m building, so I’m gaining experience with one type of API. One particular instance of this universal concept. Here is another map of my brain:

circle with my brain in it, just touching of two intersecting circles labeled 'everything about APIs' and 'everything about REST APIs'. An arrow points to the intersection of those two circles

So, I’m learning something about REST APIs. And that’s it for now. The arrow is pointing to a boundary that I’m not aware of:

I don’t know what’s common to REST APIs and all APIs, and what’s different.

So, I’ve seen one particular instance, but I’ve not seen another instance of an API. And this is a problem because there are different kinds of APIs underneath the universal concept of “API”. Like there are different kinds, or species, of cats underneath the “cat” genus. And tigers are very different from lions.

Stage 3: Two instances, of different kinds, of a concept.

Say I start implementing not a REST API, but a GraphQL API. It’s a different kind of API from a REST API, like lions are a different kind of cat from tigers. My worldview on APIs begins to break down. It’s destroyed by differences between REST APIs and GraphQL APIs, like

  • GraphQL is an application layer, while REST is a style of API. Not every API is in the REST style!
  • GraphQL requests are JSONesque, while REST requests are often parameterized in URLs. Not every API uses parameters the same way! Or has the same request format.
  • You define GraphQL with a schema, rather than a list of endpoints. Not every API is defined the same way!

circle with my brain in it, just touching of three intersecting circles labeled 'everything about APIs' and 'everything about REST APIs' and 'everything about GraphQL APIs'.

I know that diagram just got complicated, I’m sorry. But this is the most important stage to take notes at. Why? Because when you realize what assumptions you’ve made, you realize what questions to ask the next time you encounter a new kind of API.

These are the assumptions I’ve made:

  • All APIs are in the same style.
  • All API requests are formatted alike.
  • You define APIs in the same way.

Now that those assumptions have been broken by my experience, I know what questions to ask next time I’m learning a new kind of API.

Stage 4: The third instance of a different kind.

Ok, say I’m learning what a tRPC API is in order to implement on at work or something. Based on the kinds of assumptions I made last time, what might I ask now?

  • How does the style of tRPC compare to REST and GraphQL, the ones I’m familiar with?
  • How are tRPC requests formatted?
  • How do I map or define a tRPC API?

These questions will help me understand what a tRPC API is much faster than I understood what a REST or GraphQL API is.

Furthermore, I’ll be understanding the general concept of an API even better, because I’ll be understanding what is in common between all these kinds of APIs. I’ll also be understanding GraphQL and REST APIs better at this stage, because I can then make lists of their limitations.

Generalizing this process

I think every time you learn something new, you have to go through these 4 stages and there’s not really a way around that.

But if you do it consciously, it speeds up the process of learning.

So when you’re beginning, acknowledging “I know nothing about this. I should ask someone who knows something about this what is the best instance to build first,” can save you some pain.

Then again, once you’ve built your first instance, acknowledging “I might be making assumptions here that don’t apply to other instances. I should ask someone who has built other kinds of instances what the differences are,” will help you make decisions about whether to learn a new paradigm when you’re building your next instance.

Source: https://dev.to/cerchie/a-framework-for-knowing-what-you-dont-know-1m2d

WP Ad Inserter plugin for WordPress

Tag Cloud

Java Java Logical Programs OTP Generation in Java python Recursion youtube video ASCII Upper and Lower Case blockchain javascript graph learn to code software development Successful Software Engineers breadth first search Java Array Programs Java Programs Uncategorized android ios programming kotlin web-development django data sql cybersecurity database swiftui serverless aws swift rust react background-position gradients loader mask grid nth-child pseudo elements indieweb WordPress Print Array without brackets C++ factorial Java String Programs Final Keyword Static Variable Axie Infinity Cryptokitties NFT games tool inserting MISC Tips Codes python code python projects python3 system info python project Bigginers How to Do Integrations Payment Gateways PHP checkout page in php Implement stripe payment gateway in Step by step in PHP integrate stripe gatway in php mysql payment gateway integration in php step by step payment gateway integration in php step by step with source code payment gateway integration in website PHP Integrate Stripe Payment Gateway Tutorial PHP shopping cart checkout code shopping cart in php stripe php checkout PHP/MySQL/JSON best international payment gateway does google pay accept international payments how to accept international payments in india paytm payment gateway razorpay codeigniter github razorpay custom checkout github razorpay get payment details razorpay integration in codeigniter github razorpay international payments Razorpay payment gateway integration in CodeIgniter razorpay payment gateway integration in php code Razorpay payment gateway integration with PHP and CodeIgniter Razorpay payment gateway setup in CodeIgniter Library & Frameworks Tips & Tricks UI/UX & Front-end coding birds online html code for google sign in login with google account in PHP login with google account using javascript login with google account using javascript codeigniter login with google account using php login with google account using php source code
The question of the day… Previous post The question of the day…
VS Code Extensions You Should Use As a React Developer Next post VS Code Extensions You Should Use As a React Developer

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.