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 24, 2013
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. Sunday, October 27, 2013
Hacking: How a misunderstood word becomes its own field.
Of all the words computers have popularized, none has been as misinterpreted
as the word Hacking. What started out as a slang used by programmers at
colleges, "hacking" was nothing more than programmer jargon for having fun. Today, thanks in large to Hollywood and
the news media, hacking's connotation has become that of cracking, which is
using a computer to gain access to something illegally. What started as a
harmless word, hacking now represents a malicious area of computer
science.
I find hacking to be a fascinating subject in the field. Some of the biggest hacks in history have been great lessons for up and coming programmers. After all a hack is nothing more than one person exposing a weakness in another program causing it to misbehave. Because of researching hacking on my own time, I have learned how to make my programs secure so to not be vulnerable to common attacks. Attacks such as Smashing The Stack, which is common in C programs when the original coder is careless with how they read in input. The best solution to someone messing with your programs stack is to use safe functions or data structures that prevent the stack from being misused. Not all hacking is considered bad, White hacking, is done in a manner of sport to find the weakness but rather than exploit them, warn the programmers of these flaws.
Not all hackers are
evil, not all hackers are crackers.
I find hacking to be a fascinating subject in the field. Some of the biggest hacks in history have been great lessons for up and coming programmers. After all a hack is nothing more than one person exposing a weakness in another program causing it to misbehave. Because of researching hacking on my own time, I have learned how to make my programs secure so to not be vulnerable to common attacks. Attacks such as Smashing The Stack, which is common in C programs when the original coder is careless with how they read in input. The best solution to someone messing with your programs stack is to use safe functions or data structures that prevent the stack from being misused. Not all hacking is considered bad, White hacking, is done in a manner of sport to find the weakness but rather than exploit them, warn the programmers of these flaws.
Hacking today though is most commonly thought as of a
completely negative aspect.
Organizations
such as Anonymous which use hacking as their main tool have gained large media
attention. Anonymous have hacked into
many websites using the hacking methods to not only take information but also
to disable operations of websites.
Sunday, October 13, 2013
Open Source: Free to Share, Free to learn, Free to operate.
One of the coolest things I discovered my freshman year in
college was a new operating system for my computer, Linux. Having grown up a Windows user I was only ever exposed
to the dogma of proprietary software. In
my complete ignorance I believed that all software was owned by the companies
such as Microsoft, Apple, and Adobe. In my
search for programs I looked to these mentioned names paying ridiculous amounts
of money to use their products. This all
changed thanks to a certain Penguin.
Running a Linux system for the first time left me in quite a
state of shock. All the software for it
was free to use developed and supported by the community!
Problems in this free software were constantly being looked after online, and the
source code was available for anyone who wanted to add to it. I started learning about Open Source and the projects
such as GNU which stress free code. GNU in particular makes it a binding
contract with users allowing them to use their software for free as long as the
software stays that way.
Today, after seeing my fair share of code I now understand the
importance of Open Source. It pushes
proprietary software to stay fresh or be replaced. There are some disadvantages to Open Source
though. A program is only as good as it
is maintained. Where companies will
maintain their legacy software, when an open source project loses the support
of the community it can become useless. An
example of this is libraries for programming languages. If the languages keeps updating but a library does not stay maintained, the library become obsolete and no longer functions properly with respect
to the new language.
In the end, I believe Open Source software is pivotal to the
success of computer science going forward.
Open Source programs have been instrumental in my education as well as
many others. Offering everything from languages like Java, to free operating systems such as Linux, Open Source ideas have changed the way programs and knowledge is shared.
As an end note, as
important and cool as I think Open Source projects are I still believe that
companies should charge for programs on the basis that I want to code for a
living and I hope to get paid for doing it!
Subscribe to:
Posts (Atom)



