An algorithm is defined as a sequence of steps required to solve a given problem. In the next step of the Code Campus learning journey, we concern ourselves with the analysis of algorithms - a careful, rigorous, hands-on study of how to improve our solutions. What makes one solution better than another? How is that improvement quantified?

As solving a problem almost always involves an imposition of structure upon chaos, our foray into this topic begins with a hard look at sorting algorithms - ways to put data in order. When asked for “the most efficient way” to order a million numbers while on a visit at Google, Barack Obama famously remarked “I think the Bubble sort would be the wrong way to go.” In this, the American president was right - astonishingly, moving from a Bubble sort to a Quicksort reduces the time taken to sort by a factor of tens of thousands.

We will also study how shrewdly structuring data is often a big chunk of problem solving - how does thinking about the internet or the retail economy in terms of networks and graphs allow us to better model the flow of information or trade?

In the previous courses, we learned how to code - in this course, we will learn, quite simply, how to code better.

“Coding” is synonymous with “programming”. It refers to the art of writing computer code, which are instructions
that a computer can follow to solve problems. Practically every facet of technology that we encounter in
our daily lives - from online banking systems to video games on our iPhone, from the GPS systems we rely
on navigation to the security systems that protect our homes and offices, is created from code.

Communicating with a computer requires the use of a language, just like how communicating with another human
being involves the use of a language like English or Korean. The difference is that writing code for a computer
in a particular language is a little like speaking to somebody who is absolutely particular about grammar
and punctuation - any deviation from a language’s rules results in a computer not being able to accept the
programmed instructions. Different computer languages are well-suited to doing different tasks. For example,
JavaScript is the undisputed lingua franca of the web, LISP is used extensively by NASA and in Artificial
intelligence research while C and FORTRAN finds its adherents in high finance especially in the field of
high frequency trading.