Let's Talk About Functions
It's all just functions
Most software is made up of a bunch of functions talking to each other. Of course that's an oversimplification, but not by much. There are other pieces involved. Data structures, other abstractions, infrastructure, and more. But there are also a lot of functions. Functions are one of the most important building blocks that you will use to build software. If you want to be able to build software, you have to get good at working with functions. Reading them, tracing and debugging them, testing them. Writing them, and rewriting them. And thinking in terms of functions.
and data
Data structures are also sort of a big deal. Not just the 'important' data structures that you learn about in CS studies and interview prep books, but the bigger picture of how your data is shaped, and how you interact with it. It becomes easier to think about the shapes of data once you start interacting with it in your functions. So, I'm going to stick to talking about functions for now. But I'll probably say a thing or two about data structures and shapes as well.
composed into bigger systems.
When an experienced developer looks at a problem, they quickly start to see discrete building blocks and patterns of interaction. A big, complicated problem can usually be decomposed into smaller, simpler problems. And these simpler problems tend to take some common shapes. With experience, it becomes easy to spot the patterns.
But it takes practice to recognize the patterns
I think that one of the biggest hurdles in becoming a software engineer is in learning how to think about building blocks like functions. And how to read them, write them, and compose them to create applications. When I see people saying things like "I'm stuck tutorial hell", or "I don't know how where to start" or "I don't know how to build real things", I believe that simply shows a lack of experience in thinking in functions and other abstractions. Once you start working with functions regularly, software development will become less daunting.
So, let's talk about functions. I'm going to share some examples of different types of functions that I find out in the wild. And I'm going to challenge you to think about them in a few different ways. I hope that will help you to start to understand how to build software, or how to build it better.