Understanding Things

One of the things that I like about software development is how we're constantly learning things.

Hardware evolves, workloads evolve, scenarios evolve, and so we're constantly adapting to having to do new things in new ways.

There are multiple areas of specialization, things like networking, database systems, user interfaces, machine learning, etc.

Additionally, software gets deployed in all sort of domains ("verticals" - things like finance or healthcare or manufactoring) and in adding automtion or systems support we end up having to learn about the domain itself.

All in all - there's a fair chance that you'll spend your whole career learning about different aspects of software, software development or software-adjacent areas. Which brings me to today's topic - how do you approach developing a useful understanding of all these things?

Speedy Approaches

Here are three approaches that have generally worked well for me.

  1. Top-down category plus distinguishing features. This is basically understanding the category that something is in, and what makes it different from other things in that category. For example, if I understand operating systems in general, a real-time operating system is one that's designed to make work scheduling predictable such that you can meet certain deadlines.
  2. Differences with an understood concept. Here you start off with a specific example rather than a category, and then describe differences. For example, you could say that TCP is like UDP but with sequence numbers and an acknowlegment and retry mechanisms, so it's exposed as an ordered, reliable, non-framed stream of bytes.
  3. The sum of the parts. Here you start off with known parts (or mostly known), and put the system together by simply combining them. For example, a communications system I worked on was really just an HTTP stack for authentication and durable CRUD operations, a WebSocket for incoming notifications, and a per-session WebSocket to handle routed messages in a peer group - then an API layer on top that did book-keeping and serialization for domain-specific messages on top of that.

These are all handy methods in that it lets you start from a place you're more familiar with and then learn as you go. The things to watch out for, of course, are brining biases from your starting point, or knowing whether you've uncovered all the differences and side-effects in the new concetp.

Techniques

I'm not going to cover learning techniques today, because there are quite a few and they are also generally well covered in other places, so I feel I'll need some more room to perhaps add something useful.

I will, however, call out that the ways in which we understand things can also be used to explain things. You have to tailor the content because your audience is different from yourself, and so the background of what's known and what isn't, and what the best ways to be might differ, but in the abstract the ways of going about are certainly useful.

Happy learning!

Tags:  philosophywriting

Home