Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

The teacher at Eastern Washington University that is now teaching the algorithms course is new to eastern and as a result the course has changed drastically mostly in the right direction. That being said I feel that the class could use a more specific, and industry oriented (since that is where most students will go, though suggestions for an academia oriented class are also welcome) direction, having only worked in industry for 2 years I would like the community's (a wider and much more collectively experienced and in the end plausibly more credible) opinion on the quality of this as a statement for the purpose an algorithms class, and if I am completely off target your suggestion for the purpose of a required Jr. level Algorithms class that is standalone (so no other classes focusing specifically on algorithms are required). The statement is as follows:

The purpose of the algorithms class is to do three things:

  • Primarily, to teach how to learn, do basic analysis, and implement a given algorithm found outside of the class.
  • Secondly, to teach the student how to model a problem in their mind so that they can find a an existing algorithm or have a direction to start the development of a new algorithm.
  • Third, to overview a variety of algorithms that exist and to deeply understand and analyze one algorithm in each of the basic algorithmic design strategies: Divide and Conquer, Reduce and Conquer, Transform and Conquer, Greedy, Brute Force, Iterative Improvement and Dynamic Programming.

The Question in short is: do you agree with this statement of the purpose of an algorithms course, so that it would be useful in the real world, if not what would you suggest?

share|improve this question
    
what is the question? –  Oxinabox Mar 25 '12 at 2:32
1  
You can compare the statement with the description of Stanford's Design and Analysis course being given at Coursera here: coursera.org/algo/auth/welcome –  James Poulson Mar 25 '12 at 2:32
    
What I am describing seems to match the idea behind the stanford class, but I more looking for what people in industry wish students coming out of collage could do. –  Eric Fode Mar 25 '12 at 3:10
1  
I don't think there is such a thing as "industry" topics when it comes to algorithms. It's an abstract topic that is a CS fundamental. There are specific topics for industry but they are very specific to segments of industry so it wouldn't be conducive. –  Rig Mar 25 '12 at 12:04
    
Perhaps the first two point can be combined into one... They have the same essence, as per me... –  c0da Mar 26 '12 at 6:12

2 Answers 2

It does not sound bad for a start, though I see some problems with these points:

  • The first point is the weakest to me. I am not sure if your average graduate will actually get to analyse algorithms. In fact, I have met numerous people in industry who don't even have internalized the complexity of nesting loops and require benchmarks to realize that that is the point where things slow down. While I therefore agree that a very basic knowledge in this area is good, I also want to make the point that the typical analysis content of algorithm classes goes way beyond that (think: average case analysis for quicksort, etc.). Finally, when it comes to implementing, there is a huge distinction between algorithm, as in I came up with this idea on how to solve our problem, versus actual algorithms (usually recognizable by being named after someone other than yourself). The latter you will seldomly, if ever, implement yourself.

  • The second point, in contrast, is what I consider the most important. I could not believe the amount of people I met who were not able to properly abstract from a problem in order to find out what the root complexity problem is. It is one thing to learn f.ex. the Kruskal algorithm, and a totally different thing to match a real-world problem to it. In industry, you are not being told implement algorithm X. It usually goes like solve problem Y, and you have to abstract it to find out that it has a structure which makes it suitable for solving with algorithm Z. Unfortunately, I am not sure how to teach this subject, as most of the skills here seem to come from experience.

  • Another point that should not be focused on too much. Obviously, you will not include a huge number of strategies here, and you will always have to update the list. Plus, you will continually be challenged on that list. Lots of people will complain why didn't you include X? and the like.

Just an idea: From my experience (ranging from algorithm competitions, to research, back into industrial usage of algorithms), the absolutely best way to learn about algorithms is to work with them and get some experience. If it is somehow possible in the boundary constraints of the course, to incorporate time for students to solve problems on their own, make it so! The various algorithm competition platforms are very suitable for this. I have even seen courses, where a kind of tournament was registered specifically for one algorithm class. The homework assignments were dead-simple and extremely powerful at once:

  • Step 1: Register at site X for the course.
  • Step 2: Solve n problems to pass the course.

There are important implicits here:

  • Students do not know which algorithm solves which problem. There's just a bunch of problems and none of them is phrased as implement algorithm X.
  • Students get experience from actually implementing fault-free algorithms. All submissions are automatically verified against huge test inputs for correctness and speed.
  • Do not be afraid if students skip your class. Some students are actually very good at teaching themselves this way. If they managed to solve all these problems two weeks into the course, they may be quite bored during lectures. As long as they also get to learn the non-implementational aspects that will be fine though.
  • Edit: Just to make this clear, the goal is not to solve any problems on the given site. Of course, the problems are specifically selected/created by the instructor first to match the course.
share|improve this answer
    
I agree that using a problem (eg. projeceuler.com) site and saying go solve some problems to the students is probably the best way to teach practical algorithm application skills (most problems on these sites, and really most problems in real life use algos that are already fairly well defined and you just need to translate pesdo-code to what ever language you are using and tweak as necessary. But this class aims to do a bit more then that, it aims to also teach the principles needed to develop (and or identify) effective algos. –  Eric Fode Mar 26 '12 at 10:23
    
I am not saying you should leave them to solve any problems. Of course, the instructor's responsibility is to select suitable problems and if necessary roll one's own. If you want less well-defined, then just add such a problem, where out-of-the-book algorithms won't suffice. Though in my experience, many of these already exist at the corresponding sites. –  Frank Mar 26 '12 at 11:23
    
I agree, i was simply adding to your idea of having the student solve problems, but to also supplement it with theory that is applicable, and analysis and design techniques. –  Eric Fode Mar 26 '12 at 18:07

I'll disagreee slightly with Frank's answer. I do think it's desirable for new graduates to have a reasonable understanding of algorithms. Yes, quite a few people in the industry don't, but that's not a good argument.

Furthermore, for a university, it's more important to teach skills that are relevant to many environments, both current and future. For that reason, algorithms are more useful than say Java.

Would I require algorithm implementation? Well, as a C++ programmer, I quite often see junors stumble on something as easy as std::sort. It requires a partial ordering, and quite a few programmers have problems writing one. Now that would be a good subject for a Jr. Algorithm class, leave the actual QuickSort for the senior class.

Similarly, hashing can be introduced by having your class write a good hash function for a custom data type. This doesn't require a precise understanding of all details of hashing, but you do need to understand the basics of the hashing algorithm to write a good hash function.

So, to get back to the mission statement, I'd state the following goals:

  • Understanding of common algorithms
  • The ability to apply and tailor them to real-world problems
  • The ability to evaluate algorithm performance, both in space and time. (big-O)
share|improve this answer
    
I only said that the level of what reasonable means needs some thought. I never said they don't need any understanding at all. –  Frank Mar 26 '12 at 11:18

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.