Sunday, November 24, 2013

Artificial Intelligence : Bringing Games to life.

    Of the many fascinating areas of computer science non are more mysterious than that of Artificial Intelligence.  Coined A.I, artificial intelligence is the ability for a computer to make decisions based on previous data, in other words learn.  Since research has started there have been many useful applications which A.I has been used for.   One of the main applications A.I is used in now is for video games.
   Artificial Intelligence has been a major revolution for video games.  In the begginning video games were either played with two people separately controlling a character (or object) and any computer opponent would be hardcoded in.  Due to advancements in computer and the study in artificial intelligence now games are able to learn as they go.  Games use A.I to dynamically control or even create characters that can even have personalities which they gain from interaction with a human character.  AI. gives computeres the ability to competively compete with human players creating a challenge and better experience for the players.
  Implementation of computer A.I is a fascinating topic.  Often A.I is simulated using graphs and recursion calls to them.  Decision trees are created which the computer quickly traverses and finds the best situation for the given situation.  Since these trees contain knowledge from before and are searched and acted on so quickly it creates the illusion that the computer is thinking for itself and  thus learning as it goes.   
  Artificial Intelligence has many uses in today's society.  Non are as fun as video games though !

Sunday, November 17, 2013

History of Computer Science Every Changing Computers



Computer Science, the theory and methods of processing information in digital computers, has been a growing field since its development in the last century.  Since the introduction of the first computers, there have been exponential advancements in the power, speed and availability computers.  These advancements have come from two main areas.  The first area is the improvement of hardware, the other advancements in software.  The evolution of hardware is greatly due to Electrical and Computer engineers, while the advancements in software are largely due to computer scientists.   While the advancements in hardware allowed more people to purchase computers, it was the advancements in software that redefined the computer experience.  

Computers started out as tools only available in universities for researchers who needed to make large calculations.  Today computers are considered a necessity for every home.  This idea that everyone needs a computer is very recent in the grand scale seeing as most computer where made available to houses in the last 25 years.  The familiarization with computers is due to computer scientists constantly making computing easier to understand normal users.   Once upon a time, users had to manually communicate with the computer via a terminal and run commands. Now almost every application has a graphical user interface which has nice shiny buttons which anyone can understand. 

My first introduction to computer science was my earliest encounters with a computer.  I used a computer mainly for word processing and the occasional video game.  How a computer worked, I had no idea.  I was fascinated by computers considering them black magic because I could not comprehend how the first computer was made.  Many years later, after spending years studying the subject it makes sense to me but I am no less amazed.  The history of how a computer started as a theoretical concept of Boolean algebra to the development of high level languages such as Prolog which can deductively reason for themselves show the dramatic amount computer science has progressed.  

Today advancements in computer science continue to pave the road for the future of programming.  The advancements in the internet have changed the way people use a computer once again.  Now everything is done on the cloud.  Advancements in computer science areas such as Database have allowed websites such as Facebook to be created thus changing the way people communicate.  There has been a paradigm shift away from local computing and towards that of the internet.  Computers now are mainly used as an instrument to connect people via the website to communicate and look up data. 

The history of computer science continues to be written.  My goal in life is to look back and say that I have contributed.

Sunday, November 10, 2013

File Sharing: The death of the Floppy Disk.



Files, a collection of related data or program records,   are the foundation of modern day computer programs.  Without files saving previously calculated information, computers would have to generate and process information from scratch every time they are ran.  In the past files were commonly stored and shared on floppy disks, requiring a physical handoff of a disk from one person to another to share data.  As technology began to develop floppy disks started to be displaced by CD-rooms which could hold more data and finally USB thumb drives are now the standard for physical file transformation.  While sharing files over a physical source such as a USB or CD continued to grow they like the Floppy started to become cumbersome in comparison to new online file sharing. 

Today file sharing is mainly done via the cloud.  Sources like Dropbox and Google Drive make sharing files between two parties extremely simple and user friendly.  Anyone with an internet connection can transfer large amounts of data via these cloud sources.  Other sources such as torrents which send files via multiple hosts make it easy to transfer huge files.  Even emails are able to send up to 25 megabytes of data in attachments.  That is equivalent to about 250 one hundred kb floppy disks.  Image how long it would take to send 250 floppy disks and then manually upload them to a computer compared to the minutes it takes to send an email and download the attachments.

With the new technology sharing data has become a field that more and more computer companies are pursuing.  Big data and file sharing is useful for thousands of applications and used by people throughout the whole world.  Being able to quickly send files as well as being able to send a large quantity of files has become a huge focus for companies.  What started out as floppy disks holding under 100 kilobytes of data has turned into hard drives holding terabytes of files for today’s file centric world of computing. 


Sunday, November 3, 2013

Data Structures: Abstracting Data



One of the most important concepts in the field of computer science is that of abstraction.  Data Structures are a great tool in abstracting data.  Data structures are fundamental for many for high level programming languages giving tremendous power to programmers with easy use.   By abstracting data types such as Integers and Strings into a structure, programmers are able to easily manipulate and access data.  Often overlooked, Data Structures are one of the hardest concepts to grasp at first, but can be one of the most rewarding.  Choosing the proper data structure can make solving certain problems trivial while choosing the wrong data type will make them cumbersome if not impossible.  Mastering the art of choosing a data structure as well as being able to build one’s own, is a highly important skill, one which has greatly helped me in my later programming classes.

To me, the coolest thing about Data Structures is how much they can improve performance.  Not only do Data Structures organize data in an easy way, they also optimize the way one accesses (adding and retrieving data) from them.  Using the proper data structure can tremendously improve a programs performance.  A good example of performances based on choosing the right Data Structure is insertion into the front of a Data Structure.  The class vector is a very useful C++ data structure which acts as a dynamic array.  Inserting into the front of a vector though is a very time consuming task because it requires all the contents to be shifted.  I instead one were to use a linked list, they could insert into the head of the linked list in constant time and not worry about shifting the rest of the list.

The most common Data Structures are ArrayLists , Stacks and Queues.  They are very useful in programming and all have a specific function that can be used for certain problems.  Of the more advanced Data Structures there are the trees.  Binary Trees, B+ Trees and Heaps are all very advanced Data Structures.  These Data Structures are specifically made to being able to sort and access large data in a quick and easy fashion.  Most high level languages like C++ and Python have many classes and types built on these Tree types.  They allow the user a very complex set of tools, but present it in an easy way, which is the idea behind abstracting the data.