Who’s the better programmer? The guy that knows 10 different languages, or someone who knows just one? It depends. Programming is akin to math, or perhaps it is that we treat some topics differently than others which leads to misconceptions about what makes a good programmer, mathematician, or engineer. We submit that to be a great programmer is less about the languages you know and more about the algorithms and data structures you understand. If you know how to solve the problem, mapping it to a particular computer language should be almost an afterthought. While there are many places that you can learn those things, there is a lot more focus on how to write the languages, C++ or Java or Python or whatever. We were excited, then, to see [Jeff Erickson] is publishing his algorithms book distilled from teaching at the University of Illinois, Urbana-Champaign for a number of years. The best part? You can read the preprint version online now and it will remain online even after the book goes to print.
When you were in school, you probably learned math in two ways: there was the mechanics (4×4=16) and then there were the word problems (Johnny has 10 candy bars and eats 4, how many are left?). Word problems are usually the bane of the student’s existence, yet they are much more realistic. Your boss has (probably) never come in your office and asked you what 147 divided by 12 is. If she did, you could hand her a calculator. The real value comes in being able to synthesize the right math for the right problem and — if you are lucky — gaining intuition about it (doubling the price will only increase profit by 10%). Software is pretty much the same, for example no one rushes into your cubicle and says “Quick! We need a for loop written!” You get a hazy set of requirements if you are lucky, and you then need to map that into something that computers can do. For that reason, we’ve always been more of a fan of learning about algorithms and data structures rather than specific language features.
It could be a fundamental issue with how normal people view our strange and exotic fields. After all, no one would think a guy working the grill at a burger joint could plan a Michelin-worthy menu. We don’t expect a bricklayer to be an architect. We also don’t think the executive chef and the architect are going to flip burgers or lay bricks even if they can.
The main corpus contains several interesting chapters including:
- Dynamic Programming
- Greedy Algorithms
- Basic Graph Algorithms
- Depth-First Search
- Minimum Spanning Trees
- Shortest Paths
- All-Pairs Shortest Paths
- Maximum Flows & Minimum Cuts
- Applications of Flows and Cuts
In addition, there are additional sections on topics ranging from string matching and Fourier transforms to Turing machines and estimation. It looks like good stuff.