Foundation of Computer Science -- Data Structures and Algorithms

People often ask me what I do as a software engineer or what I learn as a computer science major. This is my attempt at explaining what computer science is, and hopefully in a way that anyone can relate.


At its core, Computer Science is about the study of Data Structures and Algorithms. Data in Data Structures is applied broadly. It can be a picture of a family member, the number 3.1415, the latest best seller song, a computer, a group of computers, or even another piece of data. Pretty much anything that can be described in human language can be defined as data. Data Structures is about finding the best way to organize data, the best way depends on the situation at hand. For example, if I'm listening to a song I want sound quality, whereas if I'm trying to find out my checking account balance I want security and accuracy. Algorithms are about the manipulation of data. Sometimes algorithms would take data as input, sometimes it outputs data, but often times it does both. Obviously, the best algorithm also depends on the situation at hand. If data structures is about the resources needed to accomplish a goal, then algorithms is about the actions needed to take in order to accomplish that goal.

These two pillars of Computer Science has a bit of history. For a while, the School of Algorithms was in power. It appeals to the intuition. How can anyone organize any data when you don't know how you're going to use them? It seems logical that Computer Science must start with the understanding of algorithms. In the golden years, algorithmists explored many properties of algorithms -- speed, security, resource usage, and so on. They used mathematics to prove the theoretical limitation of algorithms, but also used engineering to workaround the limitation. Applications of Computer Science also exploded.

Then it stalled. Too many experts from too many domains were writing too many algorithms. The problem is that their algorithms are often perfect for the problem at hand, but useless when solving even a slightly different problem. This is fine when the problem is well known, but eventually it become clear that the world is changing too rapidly to anticipate all future needs. The pure algorithm approach simply cannot keep up with the new demand. Data structurists filled in the gap.

In engineering, a good design is one that has good bones. The bones of a design is the base in which everything else is built on. In an airplane the frame is the base, and in Computer Science it becomes data. The real advancement was the invention of smarter data types. Data structurists created data that resemble algorithms. These data holds content just like traditional data, but also hold algorithms and can use algorithms to perform actions on themselves. Algorithms become data, and data become algorithms. It works beautifully because it fits into our human mental model. Suddently, we go from passive data to intelligent data, and from a command and control structure to self organizing workers. These smart datatypes has a second advantage. Developers can create new data types by deriving from existing ones, much like a child inherits DNA from her parents, but also improve upon it at the same time. This is just the solution that the industry was looking for.


There's a saying within the Mathematics community that a person's career is peaked when he starts talking about about math instead of doing math. Not true. Rather I want to think that I have inspired the computer scientists in all of us. Now mathematians fear.
Related Posts Plugin for WordPress, Blogger...