>>11765102>>11765161Pick up an Algorithms book, a Data Structures book, and an O Reilly book on a common object-oriented language (e.g. Java, C++). Avoid Python; you won't learn low-level data structures (e.g. arrays vs lists). If you want to go fast, here are the must-knows:
>Programming Languagedata types
strings and string manipulation, especially format strings
arrays
looping (for, while, do-while) and iteration (for each)
conditionals (if, else if, else)
recusion
exception handling
how to read error messages / stack traces
how to read the documentation
An intelligent person reading error messages can debug faster than a moron googling them. And almost everything you can think of is already implemented in most languages, but you have to know how to find it. This makes literacy crucial. Do not skip the last two steps.
>Data Structuresarrays
linked lists
hash tables
heaps
binary search trees
graphs and their representations (adjacency matrix, adjacency list)
>Algorithmsbig-O notation
best, worst, and average-case runtime analysis
amortized analysis
sorting (insertion sort, heap sort, mergesort, quicksort)
graph traversal (breadth-first search, depth-first search)
dijkstra's algorithm
dynamic programming and memoization
Data structures and algorithms go together, so practice them in pairs. Comparing the speeds of each data structure is a good way to learn big-O notation. So is comparing the speeds of various sorts. Sorting and manipulating data structures is also 99% of most real-world work.
The graph traversal algorithms are handy for programming systems that plan ahead (e.g. a basic chess AI), and Dijkstra's algorithm is good for pathfinding.
Dynamic programming is a way for the computer to store values it may need in the future, so it doesn't have to do the same calculation over and over. For many problems, this can save a lot of time.
If you understand all this, you'll be able to accomplish a lot.
t. MS in CS, now working in industry