Sofware Engineering 2C03 is an introductory course to algorithms and data structures. It's a second semester course also shared with those in Computer Science.
The purpose of this course is basically to learn how to program smartly (i.e. with using as little memory and/or clock cycles as possible).
The course starts with an introduction to Big-O notation (a general logarithmic/exponential value of n to show the complexity of a program) and gradually moves on to more difficult topics such as master's theorem (finding the complexity of a recursively defined algorithm).
Following that, it moves onto dynamic programming (recalculating as little as possible by storing solutions), sorting algorithms and data structures such as trees, queues and stacks.
This course is taught by RyszardJanicki, and he is absolutely terrible - worst professor I've ever had. During all the lectures, all he did was monotonously read out the content of his highly congested slides, never ONCE stopping to ask if anyone had any questions. He also has a very thick Polish accent and a stammer which makes understanding him quite difficult. By the end of the term, there were only about 5 to 10 people attending class (out of ~100).
The course breakdown is as follows:
Assignments 30% (10% each)
Midterm 15%
Final Exam 55%
The assignments are extremely long and sometimes rather difficult. Most of them involve writing out many many copies of data structures showing all the steps as you basically do algorithms by hand. Notably long ones (extending up to 10 pages) include the heap sort and Floyd's algorithm. In some instances (such as with Floyd's algorithm) it takes less time to make a program that implements the algorithm and writes out the steps for you. It's not unusual to spend over 24 hours on a single assignment (if you complete everything that is).
The only somewhat positive thing about this class is the tutorials. In the tutorials the TA usually shows how to do most of the assignment problems. Unfortunately though, our TA was not familiar with the material outside of the notes she was given... so it was usually pointless asking further questions.
Also, this class has a midterm. If you do the first assignment completely, you should be good. The midterm is quite easy and the TA marks rather generously.
The exam, however, is literally physically impossible to finish. If you walked in knowing absolutely everything you were going to write, you would not be able to write it all down in the 3 Hour period given. There is such an insane amount of work to do on it. It's literally 2 assignments stuck together. Also, you get a cheat sheet, but it will probably be useless. Don't worry though, their is an insane curve applied at the end (I predict ~22 people in software would have failed in my year without it).
Protip: The exam is
only on things covered after the first midterm, regardless of what the prof says. I wasted quite a bit of time relearning things I didn't need to. Spend the time digging up old assignments and learning them inside out instead.
Protip 2: On the final exam, rather than showing every step, just write SOMETHING for each question. The marking TAs are very generous.
Protip 3: Start the assignments early. You cannot finish them the day before.
Protip 4: Don't buy the book. It's a poorly written piece of garbage. You only need it for assignment questions, and there is a PDF version available on a DC++ near you.
- - -
It's unfortunate that this class is presented so poorly, because the material is actually quite interesting and fundamental to CS and Software Engineering. You can help make a brighter future by showing up to the course review day towards the end of the semester
.
Good luck! You'll need it...