Blog

  • 8/17/2022 - Computational Thinking Series — Decomposition

    So the KwamesKorner newsletter is "meant to deliver thoughtful technical content and enrich lives as we journey to grow in computational thinking and problem-solving.” It’s hard to deliver on that mission when we haven’t established what exactly computational thinking is, though. Let’s start with a definition: computational thinking is the process of approaching a problem and expressing its solution in a manner that a computer (or human being) can understand. It’s essentially problem solving in a structured manner. The output is always an algorithm, or a set of instructions, given either to a computer or a person. Though the concept is called computational thinking, it pertains to way more than just computers and technology. Problems of all shapes and sizes can be tackled using computational thinking, from going grocery shopping to constructing a visual masterpiece. Computational thinking applies to both the programmer and the painter!

    For the next four blog posts, I am going to cover the aspects of computational thinking: Decomposition, Pattern Recognition, Abstraction, and Algorithm Design. We’re going to examine these components through the lens of a common, everyday task: making a PB&J sandwich.

    First, decomposition. Decomposition is breaking down a problem into smaller, more manageable parts. Decomposing our problems allows us to analyze the various aspects thereof. It also helps ground our thinking as we develop an approach. Think of planning a birthday party—a large endeavor that can be broken down into smaller problems, like:
     - Deciding on a date
     - Deciding on a time
     - Planning a location
     - Planning the food
     - Planning the entertainment
      - Get party games
      - Make a party playlist
      - Buy balloons

    As you can see, breaking a large problem or task down makes it a lot more manageable. You’ll also realize that the smaller problems you identify can themselves be broken down. That’s the beauty of decomposition. It fosters a sense of confidence due to the minimized size of the problem, which fosters productivity toward a solution, hence further increasing confidence, creating an efficacy loop toward your ultimate solution.

    In computer programming, decomposition looks like breaking a software system into smaller components. Say you’re designing a hotel-booking system. With decomposition, you write code to handle making reservations, and separate code to handle checking what rooms are available on a given date. The blocks of code are different, but they works together in the same system. In a simpler example, let’s say that you’re writing a program to check if user input equals a certain value: you have to figure out how you’ll request and store whatever the user inputs, what value you want to check that input against, and what you’ll have the program do in case it matches and doesn’t match. Failure to decompose in computer programming, leads to confusing solutions that easily break and are more difficult to fix.

    How does this apply to PBJ, you ask? Simple. Consider what goes into a PB&J sandwich—what bread are you going to use? Chunky or smooth peanut butter? Grape jelly or strawberry? Perhaps a marmalade instead? Cut the crust or keep it on? The point is, attacking the creation of the perfect PB&J can be broken down by identifying smaller, simpler problems based on aspects of the bigger problem.

    Can you think of any problems you’ve had to break down? When has decomposition been helpful to you? Let me know at kwame.asante@kxtgconsulting.com!

    Until next time,
    Kwame

  • 7/26/2022 - Ask Questions!

    For most of my life, I’ve been afraid to ask questions—afraid of looking incompetent and drawing the ire of whoever I was asking. A practice I’ve adopted in the past year and a half, though, is what I call Radical Curiosity. I now ask all the questions I know to ask at the moment to gain clarity regarding a matter. Whether it’s a work task, a subject matter, or a problem I have to solve, I am always seeking clarity. I either ask other people or engage resources (thank you, internet!) to get the answers I seek.
    It’s taken a lot of mental fortitude to get to a place where I am comfortable asking questions as they come to my mind. As I’m sure the case is for many others, thoughts of inadequacy and the fear of coming across as incompetent immediately meet my questions. In the past, these thoughts would cause me to feign understanding, ultimately rendering myself lost. Rather than continue faking it until I make it, I decided to embrace the importance of equipping myself with information through questioning. A couple of ideas I have clung to help alleviate the discomfort of asking questions are below:

    I don’t know everything, and that’s okay - This goes back to my fear of incompetence. The reality is that there are things I don’t know, and I won’t until I learn. We are bound to learn through experience, but if you can save yourself the pain of such a process, then ask—in the long run, curiosity is more valuable than false knowledge. Be grateful that you're aware of what you don’t know. We, as humans, aren’t meant to know everything, anyway. When learning something, you’ll have more questions than answers: ask away! It’s okay not to be great at something initially—asking questions helps narrow the gap.

    You know what they say about assumptions - If there is something you don't know but are unwilling to acknowledge, you’re more prone to assume. There may be some things in life that we can accept are true, but complete clarity regarding a matter is always better. As you seek clarity, the questions you have may sound dumb to you as you ask them—I can guarantee you'll be grateful you questioned instead of assuming and interpreting, though. I can’t even count the amount of times assumptions have burned me. The burn of a wrong assumption always hurts more than the pain of asking an "obvious" question.

    When you’re writing code or working as a software engineer, you will face many problems, big and small. Some will require code to solve, while others won’t. The important thing is that you fully understand the problem you’re trying to solve. Gaining the knowledge needed requires that you ask questions. Whether the question is big, small, insightful, or straightforward, don't fear asking it. Never assume anything, or else you’ll pay the price down the line when you produce an inadequate solution, or worse—a wrong one. When you ask, you learn. When you learn, you grow. That’s being human. Embrace it.

    Until next time,
    Kwame

  • 4/19/2022 - Welcome!

    Welcome to the KxTechnology Group Blog! My name is Kwame Asante. I work as a software engineer, but have a passion for teaching and mentoring. My love affair for technology is running on 16 years, and I don’t regret any of it! My goal with this blog (and this website) is to make what I’ve learned about technology and software engineering as accessible as possible to folks who want to get into technology. Wether you’re looking to make a career change, or are just curious, I want to ensure you are equipped with the tools you need. I will do my very best to post weekly on a wide array of topics, from technology and coding concepts, to cool projects I’m working on, to thoughts on life as it pertains to technology. Thanks for checking out the blog! I hope you’re no stranger!