Home‎ > ‎Collected Thoughts‎ > ‎

Building Blocks and Handling System Complexity

I had the motivation to learn but not the continuous opportunity. I wanted to know how to make things fly under control, wanted to know how to make audio amplifiers, wanted to know how to make video games. I wanted to be able to create things that would interact with the real world.

I tried on my own to understand these things, but I just didn’t have the experience to see the big picture. I didn’t have the proper tools, compilers weren’t free and easy to come by back then and the internet was only just beginning. On top of that, now that I am grown up and can buy my own toys, I find that resources will sit idle without a goal to work towards.

Exploration leads to questions. Trying to bang a square peg into a round hole can be done with enough brute force. The challenge is getting the students to ask: “why isn’t this working?” and search for an answer or something else to try instead of trying to brute force the same wrong solution. Beyond even that, the challenge is getting the students to try to understand on their own why things aren’t working and understanding when they have reached the limit of their own understanding.

The students first reaction should be to try to figure the problem out on their own, with their own problem solving skills. The instructor is a resource that can be used, but the instructor would be a tertiary resource instead of a “tell me how to do this”. The student should reach the point where they understand that they can be more efficient overall by asking for help. The goal is developing students problem solving skills and resource aggregation capabilities.

An important caveat to the blind stumbling path to learning through exploration is examining and evaluating existing designs for building blocks. Building blocks have analytical backing that students can use to better their own systems. Without understanding and being able to recognize the building blocks designing anything is difficult.

I remember trying to write video games with graphics. I didn’t understand that there was a physics engine, a graphics engine, a dialog script and plot line. The creativity, wonder and imagination was bound by reality and a lack of understanding the building blocks. One of the first things I do with a new project is identify the components necessary and search online and through books for how other people have built similar designs then identify improvements to be made to achieve the goal.  Experience gives you your own knowledge pool to pull from and experience comes from trying and doing things.

All of the building blocks can be put together by just following instructions. A complete amplifier can be assembled by just following directions. Being able to design the building blocks is where differentiation can be made. At the same time, being able to creatively piece the building blocks together into a new system is also where differentiation can be made. Building blocks are fundamental to the concept of abstraction.

Complex systems are built from building blocks. The individual building blocks take time and energy to create. Before you can build complex systems you need to be introduced to the building blocks and problem solving methods.