CPU

When you hear computer computer scientists talk about processors you might hear them describe processors as the “brain” of the computer, but that is not the case. Instead, to properly understand what a processor does, you have to think of the entire computer as a brain, and work from there.

processor.png

The processor’s job is to take an instruction from memory, perform that instruction (doing math, writing to memory, ending signals to other computers, etc), and find the next instruction. Processors have to do all of this quickly, and by quickly I mean billions of times per second quickly. Processors can also be split into multiple cores. Each core is capable of performing tasks independently from one another. Think about a factory with workers assembling a product. The processor is the factory, and each core is a worker in that factory fully assembling a product from start to finish. The more workers, or cores, there are the faster the factory can produce products. Cores work together in parallel to take lines of work, called threads, and generate some sort of output. Threads are all put into a queue, and each time a core finishes a thread, it will take a thread from the front of that queue and begin processing that thread. Likewise, if the end of a thread does not fully complete a task that a program needs to finish, then that thread will create a new thread that performs the next task that a program needs to finish and put that thread at the end of the queue.

Do note that there are a two tasks that a brain can accomplish that processors do not accomplish. First, processors are not used for either long or short term memory (OK, that’s a small lie, but the memory that processors have is incredibly tiny and temporary). Second, processors do not determine what tasks they should be doing on their own. They rely on other components to send commands.

Knowing this, I hope you can appreciate the more complicated intricacies on how computers work.

Advertisements

Hello World!

Programmer

In eighth grade, I started to read a book that changed my life forever. Hello World! Computer Programming for Kids and Other Beginners put me on a path for me to learn object oriented programming. I was on a FIRST Lego League robotics team at the time, and I was completely unaware of the rabbit hole that I had just stumbled into. Computer programming has not just taught me how how to make computers run; it has taught me how to think. Programming is all about manipulating information in ways that makes that information easier for human being to comprehend. Because of the multitude of good and bad methods that can accomplish this task, there is a dire need for a programmer to have creativity and critical thinking. Creativity allows a programmer to find new ways of manipulating in hopes of finding the most effective and secure methods. The benefit of this kind of metal exercise has even sparked discussions of turning computer programming into a core subject. While I do not agree that every child in the United States should be forced to learn programming all the way from kindergarten to high school, I do believe everyone should take at least one computer programming course at some point in their education, and that is coming from someone who works with it every day.

Career Technical Education

Attending Central Nine Career Center has given me a phenomenal opportunity to advance my education for my future plans of becoming a computer programmer. This opportunity comes in the form of an Associates Degree in Information Technology from Vincennes University right out of high school. The IT program that they have allows me to earn this degree while I am still in high school through dual credit courses. So far, it has been an amazing experience because it allows me to learn about subject matter I am profound in and allows me to save money for my Bachelor’s in Software Engineering because of all of the credits I will have from earning the Associates Degree through this program. However, the benefits of this curriculum go a bit past saving some money and earning my degree early on. It gave me an experience with Carrier Technical Education that most people in the United States do not have a chance to have. I was able to learn and apply real world skills that are currently in high demand from employers, and that is enough to justify my recommendation for Carrier Technical Education.

Video Games

My parents and siblings have been bombarding me with the world of video games since I was born. When I was very young, although I am not sure how young, the first device I had to play with was a Game Boy Color with Pokémon: Leaf Green that my dad gave me. Initially, my only real problem with this was that I was still illiterate at the time. Understanding controls and performing actions were simple to start learning but progressing the game’s underlying or understanding overarching objectives was basically impossible. One I entered elementary school and actually learned how to comprehend written English. This gave me the tools I needed as a player to start achieving higher levels of engagement in my games. As I aged, I found myself hitting skill caps in all of the hand held and console games that I owned. Becoming more skilled in those games took so much practice that the games stopped being fun and worthwhile to play. This is when I started to turn to gaming on PCs. PC gaming had a very unique controller by comparison to console gaming: the mouse and keyboard. Unlike joysticks on a conventional controller mice gave me the ability to more accurately look in the direction that I wanted to look in. I wound not have to wait for the game to slowly pan around, but instead I could instantly look to where I wanted by moving my mouse at different speeds. The addition of a keyboard also improve the quality of my controls. Keyboards have significantly more buttons in a smaller amount of space by comparison to controllers; this gives me more actions that I am able to preform, and the closeness of the buttons means I can execute those actions in a smaller amount of time. When combined, a mouse and keyboard provide an expansive world of possibilities for skill improvement and a general ability to enjoy the games.

Learning to program has only cased my appreciation of video games to flourish. I  have made my own video game projects to test my skills, and I can say with great certainty that it not an easy process. The level of engineering and planning it takes to make even the simplest of games is tedious and time consuming. Turning a video game into a final product is not a process of toy making, it is a process of engineering and computational wonder that brings these games to life

Prepositions

Do not ever end a sentence in a preposition. Please.

The Heart of Engineering

designIf school has taught me anything, it is that the only true failure that anyone can experience is failure to learn from their own past mistakes. Nobody has ever mastered an art or a skill without stumbling as a beginner, and to gain the most experience out of an opportunity they must first know the ways it can go wrong. Once a mistake is learned, it will never be made again if it was learned properly. This is how to world of engineering works. Engineers work hard on designing a product, prototyping it, and criticizing their own work until they eventually solve the problem at hand. The best part about this process is that once an engineer finishes a product, he can not only reuse that product in future solutions but use the information from the mistakes he learned from as well.

However, there is a dark consequence for people who do not recognize and lean from their mistakes: utter failure. Making a mistake and not learning from it had three losses: the aftermath of the mistake, losing something that can be learned from, and even more mistakes of the same nature. Someone ends up in a loop of the same mistake over and over again is in a horrible position where the losses just keep adding up. Even Einstein refereed to this loop by saying insanity is “doing the same thing over and over again and expecting different results.”

Programming is no exception to this moral of failure, as it is a variety of engineering. The syntax of computer programs is far more sensitive than that of any written language. Capitalizing a letter in the wrong spot or using one incorrect piece of punctuation can completely change or just simply ruin the way a program works. Testing code over and over again requires learning from failed attempts because no computer program ever works properly on the first attempt. Frantically compiling code and making little changes each time is the bulk work of a project.

The Scientific Method

I believe that the scientific method is the greatest invention of all time. Every discovery that humanity has ever unveiled in some shape or form involved the scientific method. Through observation, experimentation, analysis, and a few more important steps in between, humanity has come up with many consistent explanations for how the natural world functions and methods of predicting future events. This difference between asking how and why events occur is actually what makes the distinction between scientific law and scientific theory.

Scientific law are results from extensive experimentation that set up a way of predicting how events will occur under any given conditions, usually in the form of an equation. For example, gravity is considered scientific law because we can predict how the force will affect the world(F=mg and F=G(M1+M2)/r^2).

Scientific theory are results from extensive experimentation that explain why events happen the way they do. Evolution by natural selection is an amazing example of a theory because it explains shifts in allele quantities within a population by flagging the cause to be that alleles that case negative effects in an organism force it to reproduce less, and alleles that are reproduced less progressively get more and more rare because they cannot sustain their own existence. Many people in society misuse the word “theory” as if it holds less merit than a law, but in actuality theories hold just as much merit for “being real” as laws do. When people say that they have a theory about something and they have not tested it yet it actually is not a theory; it is a hypothesis. It makes me sad when someone redefines a word to fill a position where another perfectly good word already exists.

Artist

The work I do as a programmer tends to be more of an art more than anything else. While computer programs can be used to store information, analyze data, or increase productivity, they can also be used for creativity and expressionism. Graphing Mandelbrot sets exemplifies this. They are beautiful structures that no human can reproduce by hand, and adding the color and other strange transformations to it invites more room for creativity.

Art is not just drawing, music, or  sculpting; art is any medium in which a message or emotion can be propagated from one person to another. Programming takes creativity, as there are so many ways to accomplish tasks and tasks that can be accomplished. Making programs that have an impact on someone is not impossible, and anyone who had a hard time believing me on that should give this a try. The point I am making here is that art has grown so much from the times where the only art that was considered worthy of discussion was great masterpieces in literature or phenomenally realistic portraits of societal leaders. Today, what seems to matter in a piece of art is the spectacle it brings to its viewer. The skill behind the art does not matter much so long as it has a significant impact on the viewer. Likewise, if a certain piece of art took an extreme amount of skill to make then it might not be apprenticed as well if the impact it has on the viewer is negligible.

Puzzle Fanatic

I was in either sixth or seventh grade when I solved20161125092941.jpg my very first three by three by three Rubik’s Cube, and the excitement of doing it the first time was overwhelming to me. The puzzle had seemed impossible to me up until that point, but with a bit of determination, memorization, and Google I was able to find a solution. Most people would have stopped right there and would have been happy with their abilities, but deep inside I had a burning passion to do more.

I asked my parents to buy me a five by five by five cube the next Christmas, and sure enough gave one to me. I wanted to conquer this challenge on my own this time, and I was not going to use any Google to aid in my solution. Days passed by, and I had managed to conjure up my own method to solve the cube. I was able to figure out how to do it by using some of the patterns I learned from the first cube, and applying the past skills that I earned to beat a new challenge felt awesome. However, I was not going to stop at that. With a bit of Google searching, I was able to find that there were other puzzles just like my Rubik’s cubes  cubes that were not actually cubes. The one that I wanted to do next was actually a dodecahedron. This puzzle has twelve sides, and a star shaped pattern on each side for the pieces to turn on. While the puzzle looks quite challenging, it is actually a fairly easy puzzle to anyone who has solved a three by three by three, as solving this puzzle uses the exact same movement patterns as the cubes. While solving it does take twenty minutes to actually execute, it is still a neat party trick to be able to do.

Mandlebrots

memX-1.75Y0.0Z80.0.png
The Mandelbrot Set image rendered by my gaming desktop (7680 x 4320)

The Mandelbrot Set is proof that mathematics has the power to shine with beauty. When you look at a picture of a plotted Mandelbrot Set, you will see a black bulb that has many smaller circles and branches coming out of it. If you were to zoom in on any portion of it, all you would see is more and more circles and baby Mandelbrot sets. However, depending on where you zoom there can be other interesting patterns to see as well.

I created the images uploaded here using a Java Application that I wrote about two months ago. The mathematics behind its generation is complicated, but I will do my best to explain it briefly. What you are looking at is a set of complex numbers. The horizontal red line is the real number line (Numbers like 1, 2, -3, 2.7, or even pi). Anything above or below that red line is a complex number (a number that consists of a term with the square root of negative one). Complex numbers are written out with a real number (symbolized with A) being added to or subtracted by a complex coefficient (symbolized with BI where I equals the square root of negative one). This simplifies to A + BI.

To determine if a complex number is in the Mandelbrot Set, the program will put that number through a predetermined function over and over again. This can cause one of two things to happen. The first possibility is that as that complex number goes though the function over and over again, both A and B will get closer and closer to zero. If this happens, then the number is considered to be within the Mandelbrot Set, and the program will color that number black. The second possibility is that A and B will explode away from zero, and the number will bet further and further away each time. If that happens, then the number is not considered to be within the Mandelbrot set, and will be colored a shade of red depending on how slowly A and B explode.

memX0.0Y0.0Z2.5.png
The Mandelbrot Set with a different function and a different color (7680 x 4320)

Because the program has to put a number through a function a large number of times to create these images, it can take a few minutes to even an hour to generate them depending on the quality of the image and the computer. All of the images here were rendered in 8K quality (7680 pixels x 4320 pixels), but were done on a monster computer; they each took about a minute to generate.

julia640.png
Insanity (7680 x 4320)