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:
- Recursion
- Backtracking
- 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
- NP-Hardness
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.
There are worse places to learn about algorithms than UIUC; they have a long history in both real and fictional computing. If you like watching animation over reading, may we suggest this?
Learning algorithms and processes is important for creating good software. It isn’t necessary to be able to instantly recreate them. You do need to know they exist and have the references nearby. Used to call this the “three foot rule”, i.e. references should be within three feet of you work area. Now there are multiple ways to search the Internet for the same information and even find code examples in multiple languages.
Learning multiple languages is good, also. Seeing the similarities in the constructs of various languages helps cement them in your brain. Sometimes you’ll find a construct in one language that isn’t in others but can emulate it to gain its advantages.
+100
So many miss this.
Recruiters too.
Don’t even start on PHBs.
There are tons of languages. The thing is, I think you find one that agrees with you and that is your go to tool. It seems every time I try something new, I wind up trying to “force” it into it’s equivalent of what I know and what I am used to. I am old enough that when I started Fortran had no memory management so playing with C did have some new features that I got into right away. But really, I fins whatever I play with I tend to structure like I am working in C, regardless of what it is. And given that often times I just want to get a job done, I just go with what I know. I am also really bad at recycling my own old code. If I have something that does even part of what I want something new to do, there is no sense in re inventing the wheel, and I look at the old stuff as field proven. On the plus side, if I do learn a new trick or a more elegant way of doing something I will update old code with it when I have time. Things are not static. It is interesting seeing something you did 20 years ago and getting a chuckle out of “dang, why did I do this like that?”.
“The thing is, I think you find one that agrees with you and that is your go to tool. ”
If only. Usually one either uses what others are using. e.g. Linux kernel. Or one uses what the boss says.
“If only. Usually one either uses what others are using. e.g. Linux kernel. Or one uses what the boss says.”
If only. One uses what the previous developer used (who is often the boss now).
Unless you are fortunate not to have a previous developer. Then you can brew your own poison.
And if you choose right, you might become the boss later. :P
Real programmers can code Fortran in any language ;) :P
Get a job where none of your colleagues know how to code and you can choose which ever language you like.
+1
“Get a job where none of your colleagues know how to code and you can choose which ever language you like.”
Heh, there is only one language to choose for that type of job: Profanity. :D
“The thing is, I think you find one that agrees with you and that is your go to tool.”
That sounds more like the sort of thing you would hear from the victims of ‘The only tool you need is a Hammer’ School of Computer Studies.
A language isn’t a hammer, it’s how you describe the hammer:)
> But really, I fins whatever I play with I tend to structure like I am working in C, regardless of what it is.
You’d benefit from knowing how a language “likes” to be used.
> And given that often times I just want to get a job done, I just go with what I know. I am also really bad at recycling my own old code. If I have something that does even part of what I want something new to do, there is no sense in re inventing the wheel, and I look at the old stuff as field proven.
And that’s why libraries are so popular, even essential.
Practice shows that you REALLY have to learn the mechanics of calculation first. In the Netherlands it was decided that it wasn’t necessary to learn the mechanics first and do the word problems right from the beginning. Result of this policy 2 decades later? 57% of teachers in training score below a 10 year old from my generation. They never learned the basics and it has become a real problem when people go on to an education where the skill is needed.
What does a your age person from your generation score compared to a 10 year old from your generation?
What did a teacher in training from your generation score compared to a 10 year old from your generation?
What did a 10 year old from the generation of a teacher in training score compared to a 10 year old from your generation?
I feel like you’ve told me that bread is better than a flannel.
I told you nothing, I replied to an article on hackaday stating that choices in education have led to a problem in educating people for occupations where arithmetic skills are necessary.
So you don’t know. That’s what I thought.
I’m not saying you’re wrong, just that your comparison is meaningless without more information.
“no one would think a guy working the grill at a burger joint could plan a Michelin-worthy menu” why in the Hell wouldn’t he be??? Some might not have the same oportunities as others. May that rely on self confidence, luck or something else. It’s chocking
I think you’ve read into that statement more than was intended. The assertion is essentially that you wouldn’t expect a random human with at least bare minimum skills to be able to make a Michelin star menu. Not that the random human couldn’t, in the fullness of time and after a due course of learning and practice, make a Michelin star menu.
“Programming is one of the most difficult branches of applied mathematics; the poorer mathematicians had better remain pure mathematicians.”— Edsger Dijkstra
There are zillions of Algorithms books. Kudos to Jeff, but what’s the big deal?
Great! Let’s hear your recommendation for an even better free book.
(BTW, when this came up on hackernews, a number of people chimed in who said the author was their prof at university and said he was the best one they had, FWIW. I haven’t read the book.)
https://news.ycombinator.com/item?id=18805624
Sorry; I didn’t realize he was making it available for free.