========================================================
#Level up!
This lesson is designed to take your coding skills to the next level.
Sounds fantastic, right? Watch this video to find out how.
<iframe src="http://fast.wistia.net/embed/iframe/hzui3mtmb3?seo=false" title="Wistia video player" allowtransparency="true" frameborder="0" scrolling="no" class="wistia_embed" name="wistia_embed" allowfullscreen mozallowfullscreen webkitallowfullscreen oallowfullscreen msallowfullscreen width="640" height="360"></iframe>So by the end of this lesson, you will come away with working knowledge of Algorithms, Data Structures, and Abstract Data Types. This is generally referred to in the computer science world as "Data structures and algorithms", or DSA. You'll also hear it as "computer science fundamentals" (CSF) or "advanced programming fundamentals" (APF).
Before we go any further, let's talk about why this is important.
Much of the motivation for the material in this lesson is to prepare you for interviews. While it is true that for the most part, computer science topics don't apply in day-to-day programming (or rather - unless you're a senior level!), data structures & algorithms questions come up very frequently during interviews for software development jobs.
This section also makes you into a more complete programmer. Studying this lesson will give you a deeper understanding as to how systems work under the hood and insight into the thought behind their design. The subjects in this lesson are what distinguishes a developer from an engineer.
As a programmer, you will inevitably encounter situations that will require you to solve unique problems. This lesson will equip you with tools that aid in solving some of the trickier programming problems you will encounter.
Much of the content in this lesson will seem very abstract, and, for the most part, it is. One of the concepts is "abstract data types," after all! But "abstract" doesn't mean it "not useful;" before you can really understand the specific kinds of cars, you have to know what the general idea of a car is, right? That's what we're here for - the computer science versions of both an abstract car and specific types of cars.
Where possible, we adhere to the simplest possible explanation that still captures the concept. We aren't going to start with a front wheel drive mini with a manual transmission, seat specific variable temperature control, and blind spot detection - we'll start with a car.
Many of the concepts in this lesson will be challenging to understand. In fact, you will probably have to read through certain sections multiple times before you understand it. This stuff is hard; rereading it is perfectly normal.
There's an old joke (spoiler: it isn't true). It goes, when the Russians and the Americans were racing for space, each country realized astronauts needed some way to write in zero-gravity. NASA spent millions of dollars researching and developing a pressurized pen that could write upside down and in zero-gravity. The Russians, however... brought a pencil.
The specification called for "something that will allow astronauts to write in space." Two implementations appeared: the pen and the pencil. As ridiculous as the joke is, let's consider the advantages of bringing a pen or pencil.
- The pencil is erasable.
- The pen can't be erased.
- A pencil is cheap
- A pressurized pen is definitely not cheap
- The pencil requires sharpening.
- Pens need ink to somehow work in zero gravity
So - what's the best option? It depends on what's happening on the space mission! The pencil seems like an easy choice because it's so cheap, but maybe the fact that it requires sharpening would make it a bad choice (where would the shavings go?).
Here, you're going to learn some basics on deciding, in your program, whether to use a pen or a pencil.