The intellectual enterprise of Computer Science is the art of problem solving; it is as much about problem solving as it is about the art of computer programming. If computer science was all about programming, it would be like calling surgery "knife science". Programming is only a tool in computer science used to solve problems. Computer science is about logic, structured thinking and reasoning.

But if we want to solve problems, we are going to have to think how to represent those problems. We solve problems with algorithms and data. Data Structures are methods for organizing data. Algorithms are like a recipe, a step by step process on how to solve a problem. Algorithms operate on top of data structures.

Informally, an algorithm is any well-defined computational procedure that takes some value, or set of values, as input and produces some value, or set of values, as output. An algorithm is thus a sequence of computational steps that transform the input into the output.

Algorithms are fundamental because it enables problem solving and are fundamental to every technology platform used today. The best companies know it; they don't care that a programmer knows the syntax of C/C++, Java or Python. Job interviews at top companies like Google, Facebook, Amazon, or Microsoft contain interview questions about Algorithms and Data Structures.

Computational thinking opens up so many exciting opportunities that it will enable you to eventually follow your dream in any area of science and engineering that you get excited about. I'm excited about artificial intelligence.

I don't get hung up on the syntax of a specific programming language, but try understand the logic and how to problem solve with a computer /programming language and different data structures and algorithms. Currently, languages are evolving very quickly and if you know the basics, you can always pick up a new language.

I also recommend working with real-world datasets (which are noisy and dirty). Not just the well-curated ones that are often overused in academic publications or in the work place.

Master statistical data analysis alongside computer science. Statistics provides the skills necessary to wrangle and understand real-world datasets. Computer science gives you the skill sets to manage, compute and learn from these datasets. Finally, broaden your horizons to less-popular and neglected applied domains where computer science can have a significant impact.

Algorithms and Data Structures have a fundamental use, one still will have to learn how to develop a SYSTEM. Most of my "projects" were simple "take some input - produce some output" programs.

Team dynamics and working within a project schedule are essential to true engineering in computer science and solving problems.

**Algorithms Constructs**

There are three basic constructs in an **algorithm**:

Linear Sequence: is progression of tasks or statements that follow one after the other. Conditional: IF-THEN-ELSE is decision that is made between two course of actions.

**Loop**: WHILE and FOR are sequences of statements that are repeated a number of times.

**Types of Data Structures and Algorithms**

*Data Structures*

Lists

Arrays

Linked Lists

Stacks

Decks

Queues

Trees

Heap

Graphs

Hash Table

*Algorithms*

Sorting

Insertion Sort

Merge Sort

Selection Sort

Bubble Sort

Search

Linear Search

Binary Search

Breadth First Search

Depth First Search

Hashing

Graph Traversals

**Algorithms Paradigms and Techniques**

Greedy Algorithms

Recursion (as substitution of Loops)

Divide and Conquer

Dynamic Programming

Memoization

**How do we **__analyze__** algorithms? **

By measuring and comparing algorithms against each other's runtime, and measure and compare the worst-case theoretical running time complexities of algorithms for a performance analysis.

With an algorithm analysis technique called Big O Notation.

## Comments