Showing posts with label computer science. Show all posts
Showing posts with label computer science. Show all posts

Saturday, April 21, 2012

Simple Solutions to Complex Problems

Felt it was time for another update. I've been busy with my own studies and a side project on Tumblr these past few weeks, so forgive me for going silent. Anyway, I've been cruising through the vast collections of educational resources on the Internet looking for something that I could use to further my own collective knowledge in the world of science and technology, and I came across something very interesting on the Google Educators website  that I think could help the masses better understand that black art we call mathematics. There is a section called Computational Thinking, which is something that we computer scientists and software engineers use to write programs (more on this later).

Now, to most of us, MATH is the most feared, and most frowned upon four letter word. I personally respect math, but many do not. We are taught from a very young age that math is something that we need to get through life; and this is true. But then why is it that the way by which we learn math relies on an archaic learning style where we see "ideal" examples that we can easily solve by hand if we know the trick of that one type of problem? This is an idea that has confounded me since I began my struggle with mastering math. And then it dawned upon me in my first year of college that the reason I struggled so much in the past, is because I realized that ideal examples completely break down when they are exposed to complexity of the real world. It was on that day that  I realized that I spent eighteen years of my life learning how to do math completely backwards.


What do I mean by this? Let's consider the pattern by which we learn how to do computational mathematics. We start our mathematical journey by learning to count things. And this is how we should begin. Counting works in the real world. And our brain can grasp this and acknowledge this implicitly. We start out by using counting agents like fingers and toes to keep count. Eventually we move to computing agents, but before we do that, we move to paper calculations. I think that this is the start of the problem.

Many math teachers will probably crucify me when I say this, but we don't need to learn how to do paper calculations anymore. We have computing agents to do these calculations for us. Now before you ready your pitchforks, hear me out for a second. If we already have the tools in place (ie counting agents, and computing agents), then why are we wasting so much time on fixed interval calculations, and not immediately graduating the learner into real world calculations? I am of course talking about Calculus, that dreaded math that the layman can never hope to understand. Or can he? This brings me back to concept of Computational Thinking.



There are many techniques our brain uses to process CT, but the ones that are outlined by Google's section are as follows:

  1. Decomposition: This is probably the most fundamental form of CT. We use it all the time without even realizing it (which is key). Our brain is designed to output the information it takes in as complete objects, but it can also break those objects apart into their individual pieces. For example, you sit down to dinner, and you take that first bite of a pizza or what have you, and the first thing you taste is something that we associate with how pizza should taste. But what about after that? Suddenly, hints of basil and tomato begin to permeate your pallet, the spice of the pepperoni, the sweetness of the cheese, the earthiness of the yeast risen dough. It all breaks down into something that makes you eager to take another bite, and another. We can do the same thing in math. In other words, we can break a number into its individual pieces. Take for example, the number 20. There's several approaches to this, but let's say we want to just take little bites of the number 20 in breaking it apart. We know that 20 can be expressed as 5*4, or 10*2. So if we take just one more bite, we see that 20 can be expressed as 2*2*5. In algebra, we'd call these the "prime factors" of 20, but how much algebra did I actually use? None. My brain implicitly decomposed 20 into its prime factors.
  2. Pattern Recognition: The brain loves to find trends in natures. Pattern recognition is simply the ability to note common similarities and differences. Once again, the human brain can do this implicitly. For example, when you were a child, you might've had the unfortunate experience of touching the stove when it was hot. And what was the result? Other than the searing pain, your brain quickly made the connection that fire is hot, and we don't touch fire because it will burn us. Continuing with the example, we see that you likely shrieked in pain, and your parents came running. What's the pattern here? If I hurt myself, and I cry, then mommy and daddy will come running to my aid. Now let's apply this to math. Why is the product of two negative numbers a positive number? This is something that I had the hardest time with in school. I eventually accepted it as law without fully understanding it. But let's examine this phenomenon. We know that:
    • (-4)(4)=-16
    • (-4)(2)=-8
    • (-4)(1)=-4
    • (-4)(0)=0
    • (-4)(-1)=4
          Do you see the pattern? Of course you do. And that is because your brain is designed to see patterns. It isn't designed to necessarily understand the principle that two negative numbers when multiplied together is a positive number, but it will immediately grasp the fact that a pattern emerges when you keep a constant, and decrement be until b is less than 0.

There are two more principles of CT that Google goes over, but for the sake of the length of this post, I'll let you research those for yourself. My point is that our brain is a marvelous computing agent that is designed in such a way that is counter to the current way mathematics is taught in the public sector. I believe that if we instead teach students to decompose complex, real world mathematical problems, to identify patterns, abstract the critical steps, and then write the algorithm to solve the problem, the student will then have a full and comprehensive understanding of math, and maybe even come to love its subtle intricacies, and infinite puzzles. And how do we do this? We teach them how to write programs. Instead of teaching the student how to use a calculator, we teach them how to BUILD the calculator. We live in a modern world, and there is no place for archaic methodologies in a modern world. We sit on the forefront, the very pinnacle of a movement that could potentially change this world into a place worth living in. If we continue to use archaic methods of instruction, and (worse yet), continue to dumb down the material that students NEED to understand to inherit this world. We'll miss the boat on this movement, and the consequences will be dire.

I'll close with an amazing presentation by Conrad Wolfram who addresses this very problem, as well as possible solutions in great detail.

Enjoy!




          

Friday, March 2, 2012

MITx- At Last it Begins

A few turns back I blogged about the concept of Open Courseware and how it plans to usher in an era of social learning. As a reminder,  I'm pleased to announce that in just three short days MITx will launch its first class; Circuits and Electronics. This class serves as the prototype for the MITx courseware framework that is to be rolled out in the Fall and as such, will allow students to take the final exam outside of an approved testing center. Moreover, students who pass the class will receive a certificate verifying their mastery of the topics learned in the class. Best of all, in keeping with MIT's Open Courseware philosophy,  MITx offers these "extended" classes at no charge to the students who enroll.

Despite my already busy schedule, I have taken it upon myself to enroll in this pilot course and encourage anybody who reads this and has a sincere interest in Electrical Engineering and/or Computer Science to do the same. Remember, the pursuit of knowledge is not about going to class just so you can walk away with an A. No, the pursuit of knowledge is far more fundamental than such a perverse concept. Instead, embrace the Open Courseware framework, and pursue what it has to offer for the sake of expanding your own personal knowledge. With that said, click the image below to be directed to the MITx main page!

Wednesday, January 18, 2012

Adventure

Colossal Cave Adventure is a text based adventure game developed back in the 1970's by William Crowther. To the best of my knowledge, the game was originally written in FORTRAN in 1975, and then later ported to other languages due to its wild popularity. The basic idea behind Colossal Cave Adventure is that you key in specific commands that the console understands to navigate the caves. For example, if I wanted to go south, then I would type "SOUTH" into the console and I would arrive at a different location on the map (provided South is a valid direction from that specific part of the map). The interesting thing about Crowther was one of the founders of the ARPANET, one of the corner stones of today's global Internet. The idea for Adventure was spawned from Crowther's passion for cave exploration, and in fact, Colossal Cave Adventure's map emulates parts of the maps Crowther created of Mammoth Cave for the Cave Research Foundation. 




Colossal Cave Adventure was then picked up a year later by a man by the name of Don Woods, who expanded on the Crowther's work after first receiving his approval. Woods's version was still written in FORTRAN, but it wasn't until Jim Gillogly of the Rand Corporation (another co-developer of the global Internet we use today), that Collossal Cave Adventure was ported to C. It is this release that became the official release of "Adventure", and was included with the first IBM PC's. At the time, this was the single most advanced implementation of game logic, and spawned several other text based adventure games including ZORK, and Hitchhiker's Guide to the Galaxy.




So why all the history? I bring up the subject of Adventure Game because it is now my turn to write my own text based adventure game for my Computer Science class. The game that so changed the text based adventure genre, has now been relegated to a rudimentary assignment in an Intro to Computer Science class. I am neither saddened by this, nor am I overjoyed by the prospect. I simply find the rich history that is involved in the development of the technology we know and love today amazing. Here we have a story within a story. On one hand, we have a tale of a technology (the Internet) being developed that will change the way mankind communicates forever. On the other, just beneath the surface in fact, we have a tale of a man who was at the forefront of developing this technology, yet on the side he develops something that would captivate the mind of his users for decades to come. And why did Crowther develop such a masterpiece of its day? Was it for money? Recognition? Boredom? Try love; the love for his two daughters whom he wanted to feel more connected to. Who could have guessed that his daughters would love their father's work so much, that they would proceed to pass it around amongst their friends and in doing so, establish a whole new genre of entertainment?





And that is my point of this post. No matter what you do. No matter what your industry of expertise may be. Be sure that all that you do is out of the love and passion, and the will to right by others. A simple act of kindness can, and often does, change the world. I shall leave you now with the original Colossal Cave Adventure. Click the image above and the console will open in a new window. As this is a Java version of the game, you will need to be sure Java is enabled in your browser to play. There is a walkthrough, but try to play the game first without it, and then use the walkthrough to fill in the gaps. Half the fun of Adventure is figuring out the puzzles for yourself. Enjoy :)