One of the best and most helpful professors I've ever had. His class is not easy, but if you can get through his class you'll make it through cs. He presents the material clearly. Keeps the class engaged with humor while not coming across as a goofball. Do the assignments, don't expect perfection and read the text. Start early you won't finish projects if you start the night before. Recursion, writing compression and encryption algorithms, red/black trees, definitely a gateway to the more heavy duty programming classes. Much harder than the intro to cs classes. If you tap out of cs this is where you'll probably do it. But you shouldn't Prof. Blaer is very helpful. It might not necessarily lead to a high-flying gpa but its a great class to put on the books.
Disclaimer: In the progression of my CS courses at Columbia, I was supposed to have taken this class two semesters ago, so when I started this course I had already taught myself/had experience with a lot of the data structures in the course curriculum, so my perspective of the material may be a little skewed. BUT WITH THAT SAID... I strongly disliked this course with Allen for two reasons: 1) A good chunk of the homework was focused on Java GUI's as opposed to actual data structures. There was minimal to no assistance in constructing these GUI's, which meant you had to spend large chunks of time scanning tedious API documentation to try to figure out how to do things, instead of spending time actually learning and implementing the data structures. Also, I found this frustrating because Java GUI's are increasingly becoming an antiquated form of user interface in industry, which spending the time to teach them to myself seem irrelevant. In my opinion, it would make a lot more sense to include extensive implementation of Java GUI's in W1007. 2) Professor Allen is actually condescending to students. There were numerous Piazza posts where students would ask questions that were fairly reasonable and his responses would be incredibly and unnecessarily snarky (i.e. Student: "Can we assume ___ about problem X?" Professor: "Can we assume gravity exists?"). In class, this attitude discouraged students from answering/asking questions. Something I love/hated about the class was that his lectures were literally him reading through his class notes, which were posted on the course website. This meant that going to class always felt like a waste of time (you could literally not go and just read the slides and be fine), which was simultaneously awesome and terrible. Overall, I do feel like my knowledge of data structures has improved since the beginning of the course (specifically with Trees and Graphs), but if I could do it again, I would definitely take this course with someone else.
Shlomo is a nice guy. Shlomo isn't a particularly terrible lecturer. Shlomo is, however, terrible at evaluating students. His lectures are mediocre, but certainly not the worst I've had at Columbia. They're occasionally wrong, and very often frustratingly ambiguous, but in general I they're not the biggest problem. The biggest problem is that his assignments are a poorly made Ouija board. The number of assignments wasn't what he said at the beginning. The due dates weren't what he said (although I appreciated the Thanksgiving extension!). They were often very ambiguous about fundamental questions, like whether we had to write our own data structures, or whether a GUI was required. I felt the programming assignments were just a filler, and didn't enhance my understanding of data structures at all. The theory problems were better, but grading was unclear and didn't help me learn. Grading wise it seemed like the TAs and Shlomo did the only thing they could do, give everyone lots of points so they wouldn't complain. The midterm was very easy. The final was easier, and at the last minute he decided to make it open book/open note. The textbook we used, Weiss' Data Structures and Algorithm Analysis in Java, was pretty bad. Often they gave meandering, incomplete Java code instead of explaining an algorithm. Sometimes they'd focus heavily on Java specific junk, rather than explaining general data structures. It was generally useless, and wikipedia was a better textbook.
I'm going to cut Shlomo some slack and say that this is a slightly below average, but not god-awful, class. I've had worse (*cough* Dawn Strickland *cough*) professors in the CS department. This class covered all that it should cover. You will gain a functional knowledge of all basic data structures. He also gave us a high level overview of more advanced data structures like AVL and Splay trees, Cuckoo hashing, rainbow tables, min-max heaps, max-flows, etc. The number of topics this class covers makes dealing with Shlomo worth it. You will definitely learn more in this class than in 3134. Shlomo is a poor to average teacher. He often rushes through explanations and sometimes gets facts wrong. His teaching is good enough to understand the subject though. You will learn a good deal about cool data structures and algorithms, though it can be painful putting up with Shlomo. What makes this class a mess is the fact that he is totally disorganized. He initially told us that we would have 7 theory and 5 programming assignments - we ended up with 5 and 3 (which was plenty of HW given the length of each assignment). Homeworks were often vague with lots of errors, though you can clarify doubts on Piazza with TAs. The theory assignments usually took about 3-5 hours and the programming assignments took roughly 7-12 hours if you did all the extra credit and GUI stuff (I have no idea why a course on data structures makes you to waste time on Java GUIs). Grading was lenient, with plenty of bonus points and extra credit. Most of the HW was graded very late towards the end of the semester, so you really didn't know how you were doing till then. He also doesn't release HW solutions, so that might be a problem if you don't get 100s on the HWs (which isn't hard to do). The midterm was straight-forward and grading was ridiculously generous. He even gave people partial credit for totally wrong answers. The average was a 76 on 83. The final was open book and much, much harder, though grading was still stupidly lenient. He told us the test was non-cumulative, but it was actually cumulative. It didn't matter much since it was open book, but still... Also, pay attention to special data structures he mentions in class since they all showed up on the final. This class is as easy A+ if you're reasonably smart and do the extra credit. You will learn what you need to know and you can always supplement your learning through the textbook which is pretty good. The hard part is dealing with Shlomo's totally disorganized attitude towards the class. I postponed data structures to sophomore year because I was trying to avoid Shlomo, but ended up taking him anyway. It wasn't all bad, so don't worry too much.
TL;DR: Don't take this class. Seriously, just don't. If you've read all these reviews and you think "I'm a better, smarter wo/man than them -- I can do HONORS," well, I, too, once thought as you do. Learn from my mistakes, and stay away from this class. I'm taking this class with Professor Hershkop in spite of repeated and insistent advice from survivors not to take it (it can't be that bad!) and at present I can say without a shadow of a doubt that it's the worst class I've taken in 7 semesters of college-level study. Please note that I'm not saying this because I have a bad grade or some such thing -- I'm on track to get an A+. There are three essential problems. First, Professor Hershkop is strikingly disorganized, and tries to disguise this with claims like "Courseworks isn't working," when a normal grown-up would take responsibility and apologize and have his act together the next time around. (The previous reviewer from a year ago mentioned the same excuse, which is why I'm confident that this is NOT an actual technological difficulty.) He also forgets what he's already taught us, and winds up reteaching it, or fails to teach something entirely (e.g. search algorithms) but then assesses it on the homework. Second, Professor Hershkop's definitions of terms are frequently at odds with those used by... everyone else. For example, his definition of "tail recursion" is the exact opposite of the one used by Wikipedia, job interviewers, and the world of computer science in general, which wouldn't be a such a big deal if it weren't for the fact that tail recursion is a popular technical point for interview questions. When questioned about this in class he does not own up to the error (in contrast with basically every other professor -- Jae Lee, for one, is almost excited when students catch him out) and instead acts as if this is a major point of disagreement in the CS community, and then proceeds to continue using and testing us on the wrong definition. In case you think this is an isolated incident, he uses B-Tree and B+-Tree interchangeably -- you can check for yourself that these are completely different data structures. Third, the homework and test questions are typically ambiguous at a number of different levels. They often do not specify critical features of a data structure (is a given heap a min or a max heap?), which of multiple conflicting definitions of a term should be used (quadratic probing can be done any number of ways), or whether we should use his definition of a term or the normal one (in the cases of tail recursion and B-Trees), and they can even have grammatical ambiguities that make a crucial difference to interpretation. He tries to mask this by not giving assignments back, not offering comments, not providing solutions, and not providing definitive answers as to which of multiple interpretations of a question is correct. Oh, and he also never responds to email, despite insisting that he'll respond promptly.
Extremely arrogant, with the worst and rudest TAs (with the exception of Ashish Chhabria, who was very helpful and understanding), but a very effective teacher. The class was very well organized, each class covering a series of slides. The slides are also extremely clear, with very good examples, although there are many small bugs in Pasik's code that you may find while reviewing for tests, which is confusing. Definitely go to class - you learn so much so quickly with Professor Pasik, as much as you may despise being in his presence. He also offers a lot of extra credit, so this class is an easy A/A+. All in all, take this course even though Pasik's personality is awful.
I think it's already been made sufficiently clear that Professor Hershkop is an awful instructor his courses are disastrous messes, and the review dated November written on November 14, 2012 is an excellent summary of the class. Rather than echo the points of that review (all of which were completely accurate), I'll add a few. 1. His answers to questions usually are along the lines of "well get to the answer to your question when we cover (insert topic here)." Therefore, asking questions is almost never a sufficient way to clear up the immense confusion that results from him racing through topics. The reason he races through topics was not because he had so much to cover, but rather because he missed six lectures during the first month for religious holidays, and five of them were simply canceled despite his promise to make them up. The remaining lecture was covered by an undergraduate TA. 2. There are no published solutions to the assignments, neither for the benefit of the TAs or the students, and this hurts both of us. If the TA misinterprets a question, the people who interpret it correctly get punished. Because the assginments are often poorly and ambiguously worded, the probability of misinterpretation is high. Furthermore, comments are rarely provided on the homework, so if you want to know where you went wrong, it's your job to email the TAs/professor. 3. The grading was ridiculously slow. Before final exams, it took a minimum of a month to receive grades for any given assignment. This wasn't because they were busy writing extensive feedback, as almost no feedback was provided whatsoever. After the final, all of our assignments were magically graded within two weeks, which means that the TAs/professor weren't incapable of grading in a reasonable time fashion, but they just chose not to. 4. Nothing administrative that the instructor says is ever true, and by that I mean that everything is subject to change. When he says that "homework X/practice exam Y will be posted tonight", that probably won't happen, and sometimes there's a lag of as much as two weeks (Sidenote: he likes blaming Courseworks when he claims he posts something but it never actually gets posted. I find it funny that a professor in CS is my only professor to date to have these types of difficulties with Courseworks). When he says that the exam is closed-book/closed-notes/in-class, he may very well change his mind at the last minute. Sometimes you will receive notice that he changed his mind, and other times you will not. 5. While discrete math was listed as a corequisite, there wasn't a single mention of this in the class, and absolutely none of the material from discrete math was used. Proofs by induction and recurrence relations might have been useful to learn (and are usually used in this class), but he decided not to mention them at all. 6. People do not write bad reviews of Professor Hershkop because he is a hard grader. To the contrary, the semester-end grading was incredibly generous. People hate his classes because they are insults to people who are making an active effort to learn.
It is true that it is more likely for you to write a review on Culpa (or really anywhere online) if you had an extremely strong opinion one way or the other on the topic. You may take this knowledge into consideration as my opinion gets away from me... Full disclosure I have not completed the course but am one month away from completing. Professor Hershkop's class is a disaster. He seems to take no responsibility ensuring that the material of the course is covered. His assignments are riddled with errors. These errors cause so much confusion that it is likely you will end up answering a question in 4 different ways just to be sure that you covered all the bases of his ambigously phrased question. He missed several classes and did not make up them. He frequently started class 5-10 minutes earlier than the scheduled time. Occasionally he would end class early. He consistently rushes through material. What should be covered in 2 or 3 lectures he will literally cover in 10 minutes. He must think that covering a topic is announcing a chapter title. He has the absolutely infuriating habit of asking "if there are any questions" after every 2 minutes in class. This may seem like he's open to questions but I really think he is just killing time because he realizes he actual hasn't taught any material and is hoping that someone will ask a question that gives him the opportunity to teach something. Unfortunately it is my experience that fellow students are hungry for learning and don't know where to start asking questions because they have no base of understanding from which to start. Besides if you do offer a cogent answer to one of his questions don't bother. He always rigs the question after you've answered it. Like it's a game to show that he's the teacher. When asking a question there is one obvious answer but he changes the terms of the questions after answer it thereby making your answer wrong. Or his question was too ambigous to answer in the first place. His programming assignments have an obscene lack of focus. I spent 90% of my time working on object oriented design, file system apis, java language principals, java GUI apis and spend 10% of my time implementing the data structures and algorithms. His assignments do a poor job of reinforcing the material meant to be covered in class. The same lack of detail and error exists in his programming assignment. His TA's informed us that it was not a policy of the class to reveal the average (or standard deviation, etc) of the grades of any assignment returned or the midterm. I have no idea why this could be. I can only speculate that the grades were disastrous because his teaching is disastrous and he's covering it up. The grading process in general was a complete black box. Assignments are never handed back with comments. You're lucky if on courseworks there is a few comments (at most a sentence) as to what you got wrong. You'll need to write the TA or Professor for that information. This is the best Columbia can offer? The professor should be fired.
Great prof. Excellent course notes, straightforward assignments. He's on top of his TAs to get stuff back quickly. The downside to this is that they are VERY sloppy. I was docked a ton of points (that they never responded to emails, or in office hours to discuss) for stuff they got wrong. Allen is fabulous, though. Really great at explaining the concepts, and he brought in some awesome lecturers in robotics. Overall, this speaks to his wish to get his students excited about computer science. Note: He's really, really arrogant (and really, really accomplished, but that doesn't excuse it). I've seen him tear students apart when they ask him clarification questions on homework instructions. (thankfully the TAs used piazza, so you could, and thankfully I did, do this anonymously).
Peter Allen is a really nice guy. He's more normal than most comp-sci profs, probably because he went to Brown and was an Econ major before he found his calling in CS. He's a little disorganized, and his PDF packets are kind of annoying, but at least they're all available on his site. Some of the assignments are needlessly a pain in the ass, but they do teach you the material in a more direct way than, say, for example: object-oriented programming with an awful PhD student. (Only take OOP with Kender.) I would stress that his lectures are not the most helpful thing in the world, but he is supportive and has a sense of humor, which is always nice. I recommend this class, but prepare to slog through terrible problem sets, especially the last one.
First of all, the co-requisite of Discrete Math is not necessary in order to understand the materials in this class. In fact, we went over most of the graphs stuff in this class before Discrete Math. So don't worry about taking both classes at the same time, The class covers the basic data structures and the algorithms associated with them. Most of the codes are provided by the textbook, so you don't really have to memorize how to write them, but you do need to know how they work. Most of the questions on the test and the hw require you to apply an algorithm to a set of data and show their results. The materials covered are not too difficult, and as long as you can think abstractly and understand what you are trying to do, you'll be fine. Professor Allen is an excellent lecturer who presents the materials very clearly. He uses powerpoints for the lectures and every time we get to some code, he would stops and demonstrate how it worked on the blackboard. His lectures notes which he posts online are concise and super helpful. The lecture notes extract the things you need to know from the textbook without going into excessive details and get boring, as the textbook tends to do. In fact, I almost never had to use the book other than to do the assignment from the back of each chapter. You can get by on his notes alone without going to class or read the book, but I highly recommend you to attend the lectures when possible because he actually explains everything in details. The homework assignments were not difficult. There's usually a couple of questions from the back of the chapters and 1 or 2 programming questions that'll take you about 3 to 6 hours if you know what you are doing and maybe 10 hours if you are really lost or have little experience in programming. The programming assignments mostly involved implementing the psudocodes he gave in class and put it in a real use, which I really enjoyed. In summary, it's a (surprisingly) light class with a great lecturer and awesome notes. I highly recommend taking the class with Allen if you have the chance.
Most of what I have to say about this class has been said: Blaer is a smart and funny teacher who does a great job explaining abstract concepts and making sure you understand them. He's accessible and fun to talk to, especially if you find him during office hours and/or not surrounded by a hoard of undergrads. He also has an amazing twitter that isn't updated often enough. You can google it easily. Not sure what happened during my semester of 3137, but it seems like we had less GUI than previous classes. If that's just an anomaly, then, er, too bad... but I thought I would give CULPA a head's up, since it was a big source of pain and anguish for most of the reviewers below. In other words, take this class with Blaer!
Paul Blaer is one of the best professors I've had at Columbia. His ability to clearly present course material and actually make you learn something is unparalleled. His lectures are very straightforward and well-paced. He will essentially analyze and go through each data structure/algorithm step-by-step, making sure the class is with him as he goes along. He's also a pretty funny guy and will sometimes go on tangents, but they were always CS-related and will be interesting and beneficial to you if you are a CS major (i.e., go to lecture! You don't know what you'll miss). He is a very accessible guy and friendly one-on-one, so although he's intimidating at first, don't be afraid to go to office hours or ask questions in class. A misguided reviewer for this course will have you believe that taking AP Computer Science AB will make this course a breeze. This is NOT the case. I have taken the AB course and I still learned a wealth of information from Blaer, not to mention that most of the material after the midterm was not covered in AB, including perhaps the most important topic, graph theory. Each homework assignment is divided into two parts: theory and programming. People I know in this class complained about the GUI. Yes, there is a lot of GUI, so be prepared--in fact, I'd say the GUI is about 50% of each programming assignment, which isn't necessarily a good thing, but it probably builds character or something. However, they tend to be fairly simple, such as drawing dots on a grid or drawing binary trees (protip: if you abstract your first tree GUI interface well enough, you can reuse it later on for at least one more assignment). However, there is just as much theory as there is GUI, and the theory is much more challenging than simply looking up how a JComponent works. Most theory questions are taken from the book and definitely require a bit of thought before you arrive at a solution. Overall, if you have the option of taking this course with Blaer, don't wait. Take it with him. You'll learn data structures, you'll learn algorithms, you'll probably write some painful GUI code that you don't want to, but you'll come away a better computer science student.
This course is more aptly titled "COMS W3137: Java GUI and Data Structures," because really, data structures weren't as prominent as the name of the course suggests. Overall, a terrible experience that I'm glad I'm over with. Prof. Blaer, in his lecturing ability, isn't to blame for why I hated this class so much. He's very clear in explaining the material and a funny guy overall. He was able to keep me awake even after I pulled an all-nighter working on the first assignment (see below). The material is too sparse to deserve an entire semester. For anyone who has taken AP Computer Science AB (not me, and for future CULPA readers, I guess not you, either), the actual data structures covered would already be second-nature, and the associated algorithms would be simple. I stopped going to lectures really early on in the semester since each week covered only roughly five pages of the textbook. The homeworks were absolutely ridiculous. Most of the programming in the homework assignments didn't involve implementing the data structures (instead, we were just allowed to steal the source code from the textbook's website), but instead revolved around Java GUIs. All but one of the assignments had uninteresting programs for us to code (unsurprisingly, that exception was the one that involved the least fiddling around with GUIs) and in general took quite awhile of experimentation. Furthermore, the TAs were incredibly slow at grading the assignments. The 60-odd people's assignments were divided among four TAs (the remaining TA was solely recitation instructor) but would take somewhere between 3-4 weeks to get back to you. Of course, you could just say, "oh, each assignment takes a long time to grade," but the fact that they managed to grade all the exams within six hours after the midterm demonstrates that they can grade quickly, but simply choose not to. On the bright side, code didn't have to be as strictly formatted and documented as it did in 1007... and... I'm done with this course! (and I pity all you future CS majors that have to take this class)
I took Data Structures & Algorithms during the Fall 2009 semester, which was taught by Peter Allen. The Course: On the whole, I think Data Structures & Algorithms is a great course that gives CS students a solid grounding in how to think about solving computational problems in ways that are efficient with respect to time complexity and memory usage. While I learned a lot from this class, I think it would have been possible to make it slightly more advanced than it was. There was a fair amount of overlap with the data structures component of COMS 1007 and, in my opinion, not enough time was spent on learning more complicated algorithms and data structures. Nevertheless, at this point, I feel that I have a solid understanding of all basic and intermediate DSA, which is of course extremely critical to success in CS. My only other complaints about this class are that the homework assignments were a bit too easy (or at least were graded as such) and that the programming assignments all required GUIs, which ended up requiring more time and effort to implement than the algorithms themselves. The Professor: Professor Allen is an excellent lecturer who does a great job of making sure that the concepts that he's presenting are clear and that the students have thorough exposure to how a particular algorithm works. I read an earlier review that said that Professor Allen can be an asshole who berates students for asking questions/giving answers. While I must say that there were a couple exchanges that Professor Allen handled in a bit of a confrontational way, I think this was unintentional, and I think he really does care about his students and their success. He is also a very funny guy, so I think sometimes his humor is such that his jokes could be construed as reproaches. He is very helpful both in office hours and over email. Additionally, his handouts are so fantastic that I anticipate using them as reference materials for years to come. The TAs: While generally I don't think a TA's contribution to a class merits review (positive or negative), I believe that Dan Federman warrants an exception (positive). First of all, as a recitation instructor, Dan was very good at both reviewing things that Professor Allen had gone over during lecture as well as delving deeper into certain topics that were either not discussed at all in lecture or were merely glossed over. In addition, I found Dan's recitations to be extremely helpful when it came to clarifying the details of our various assignments. DSA required every assignment to be implemented with a GUI, which could have proven to be exceedingly burdensome were it not for Dan's ability to explain the finer points of Java AWT/Swing. Dan's recitations were effective not only as a consequence of his intelligence and knowledge of the subject, but also because of his ability to present material in a very dynamic and engaging way. Secondly, from an administrative standpoint, Dan was incredibly responsive when it came to fielding questions about the logistics or the substance of the course. Finally, Dan made a point of putting the class into a "real-world" context by discussing the kinds of applications the various data structures might have or by going over what sorts of DSA-related questions might come up in interviews. This information is invaluable and was extremely helpful. I am taking CS classes at Columbia as a postbac, and so I have had plenty of experiences with TAs as points of comparison. Having said that, I can honestly say that Dan is as effective a TA as any I have had in my academic career.
Let's not mince words here: Peter Allen is an asshole. He makes fun of you when you ask questions, he ridicules you when you answer questions, he (no joke) has been known to flame his own mailing list. At the beginning of the semester, all the nastiness really bothered me. "How," I asked, "am I supposed to enjoy a class where the professor so clearly hates his students and thinks he's far too important to teach?" Then I got over myself. Should you find yourself in the position I was in, you should really, really try to get over yourself. Prof. Allen's lack of basic human decency is matched only by his supreme competence as an instructor -- his course notes are great, his lectures are better. By the end of the semester, I actually looked forward to class. And when the third person sends out an email to the mailing list asking for some hand-holding on the extra credit, and when the tenth person asks when the next homework assignment is due, you begin to understand why Prof. Allen despises undergraduates: it's because we are, by and large, despicable creatures. So suck it up and appreciate your opportunity to learn from the master.
As an applied math major taking CS classes for fun, I found this class to be extremely simple. Prof. Allen is a very good lecturer, keeping the lectures funny and engaging. He prints out enough hardcopies of the handouts on each topic for every person in the class, which I found helpful. The lectures usually contains a bit of theory, then algorithm, and he goes over each algorithm in detail with graphical / code examples. Although going to recitation is encouraged, it's most likely a waste of time as I never went and never had any problem with any of the homeworks. The midterm and finals are extremely easy. Even as a person who's not very good at CS, I managed to score 1 standard deviation above the average in a class designed for CS majors.
Entertaining and fun, cares about the material and seems genuinely excited to teach people. Really, really likes Lisp and Recursion. Doesn't use a textbook for data structures. My only complaint is that given the time (one full semester) he could have gone into a bit more detail about various, more exotic, data structures. But what he does cover, he does very well. So I recommend him.
This is a difficult class. But his teaching style worsen the experience. The book is not very helpful either. If you want to do well, start the assignment early and try to resolve all the compile error issues with the TA in person at least three days before the deadline. Don't bother with emails. They never response on time.
One of the disappointing features of CULPA is that the more passionate students, and thus the more likely to review, will always be the ones who were disappointed in the professor. I found Zeph to be a great professor who always managed to challenge us. His homework assignments tended to look difficult at the start (with the exception of a couple, notably the first and last ones), but then he'd describe in detail in class how to attack those problems. Of course, actually doing the programming would take at least one all-nighter per assignment; but if you really thought the problems through, you could definitely benefit from those assignments in terms of how much you learned about the particular data structure. His teaching style tended to focus mainly on the homeworks, but that did not seem to limit the material he covered. He gave a lot of code in class, though almost always it was pseudocode. I never held this against him - trying to stick to exact syntax in a limited period of time is never worth it, and he more than made up for it with his descriptions of the code he put up. Zeph was clearly coming from a math background, and that really seemed to influence his teaching. He wanted to make his students think (as evidenced by his way of "reviewing" - simply giving us very solvable, though certainly challenging, practice problems), though he always wanted his students to do well. I loved him as a professor and I would definitely recommend him.
Like people say, Zeph is a nice guy, but I don't think he's a great teacher. He tries to explain things, sometimes a little too hard. The book, by Sedgewick, is fairly comprehensive but isn't an easy read. However, if you are comfortable with programming (both language and theory), the class isn't hard at all. Attendance is pretty much optional. You can easily find what you need through Google or Wikipedia. Grading is fairly lenient; the 60% midterm average was curved to 85%. His exams, however, are definitely doable (90%+) if you know your stuff; they aren't meant to be a killer. Overall, I don't see any reason to avoid his class.
Good lord this class is a miserable mess. None of this stuff is even that hard, but it is presented in such a painfully poor way that you will develop an ulcer or two trying to digest it for yourself. First of all, the book (Sedgewick) is horrendous. I believe it is just a rewritten version of the Java edition, and it shows. The code snippets are written to be compact and brief, but they end up just being impossible to understand. Single-letter variable names, often referencing code from chapters before, are used without any explanation. The mathematical explanations are so hard to understand you will probably end up just skipping them. As mentioned before, Zeph is a nice guy and clearly very intelligent but ultimately he fails to present the material well. First, you will never almost never speak about the contents of the book. Most of the class is presenting a sort of scaled-down, not-quite-there version of the code you will need for the homework. The problem is, Zeph seems extremely unprepared and often forgets vital lines of code. Even when he is satisfied it will work properly on the board, it probably won't compile when you go to do the homework. The other part of class is discussing mathematical issues behind algorithms. I'm not even going to touch on this--it's so difficult to understand, and taught with such little clarity, that you should save your brain cells and sanity and just zone out. Now we come to the homeworks. Ohh, the homeworks. These monstrosities are surely meant to be sadistic. They only roughly help you learn about data structures, but the projects are so huge and the specifications so poorly, um, specified, that you will spend hours pulling your hair out trying to get the program to do something even closely related to what Zeph had in mind. Not to worry, of course, as with most CS classes the curve is outrageously huge. It doesn't seem as if Zeph cares much about whether we "get it." For the final he gave us plenty of example problems, but no solutions. Days before the exam, he e-mailed us to tell us that no practice exam (as promised) would be coming. Well, the exam questions are much easier than the practice problems anyway. You'll get through it -- probably. Just take my advice and keep some Tums and Prozac nearby.
This course was a disappointment for me. Zeph is a cool guy -- he says words like "gnarly" and gives out loads of extra credit. Unfortunately, he's only an okay teacher. He often gives imprecise or poorly thought out explanations. Furthermore, he was unable to control the class so that we actually learned a lot of material during our limited time. (I get the sense that with a different class, the experience could have been much better.) As for the programming itself, the code he gives us sometimes fails to acknowledge the important (and difficult) parts of the problem at hand. Java also seems to pop up way too often for a C++ class -- most of us hadn't seen Java in a while, so this made things more confusing. Zeph is a Java guy, and it seemed like he would have really preferred to teach in that language. If you are good at learning on your own and a good programmer, this class will be a breeze. Otherwise you might struggle a bit on the programming assignments. For what it's worth, Zeph is a very approachable guy, and the TA's were nice too, so you shouldn't have trouble getting help. Note that the book is a bit confusing and dense at times, although it gets the job done.
Hes a great guy... its just... he can't teach that well. The classes are mindblowing and interesting, but when you have to sit down and code or do homework... may God help you. Not only can't you miss a lecture (because then you loose the code that he gave in class -which most of the times doesn't even work), but none of the language coding issues are discussed. You must become your own teacher when it comes to coding. Its 3 classes in one, all barely related to each other: computer programming, discrete math (HW problems), and stuff covered in lecture. I am sure he could do a better job; this class shouldn't be that hard, but maybe its just done on purpose, to scare off students not sure about computer science.
The best professor I've had at Columbia, hands down. He not only knows his stuff, but is enthusiastic about teaching the material and has an excellent ability to get that knowledge across to students in his lectures. He's extremely organized, always showing up for exams with a detailed plan of exactly what he wanted to do, but never afraid to deviate slightly to answer a student's question. (The only exceptions were the two exam review classes, when he stated up front that he would show up with no plan, and spend the time answering whatever questions people had.) There was no book for the course, but he walked us through the methods of constructing and traversing data structures, and really worked on explaining the rationale behind the use of different ones. If you come to class and follow what he's going through, you'll be fine. He's always open to answer questions, and will be happy to explain why he does things in certain ways before going on. Just a note: show up on time for class! This course met at 9:10 on the 7th floor of Hamilton. Yes, I know that feels early, especially for CS majors. Yes, I know it's a pain in the ass to get to the 7th floor of Hamilton without getting to the building at least a few minutes early. Make the effort to do so. Professor Pasik was always in class at least 10-15 minutes before it was scheduled to begin, and was happy to answer questions about the course work, CS in general, or anything else (he's a somewhat experienced scuba diver). He starts class exactly on time by laying out exactly what he's going to cover, and giving infrormation that's really necessary for understanding the rest of the material in that class. Lots of people would then routinely walk in 10, 15, or even 30 minutes late, then wonder why they were having trouble understanding the material. Professor Pasik was always available after class to talk with students, and was great about responding to e-mail messages. The material in this class is not so intuitive to plenty of people, but it's a lot harder if you don't come to class. For those of us who came to class ontime regularly, it was a lot easier. Pasik doesn't expect you to just copy the data structures from your class notes. He wants you to be able to understand how and why they work, so you can effectively use them. At the beginning of the semester he doesn't expect a full comprehension of all of it, but by the end he really expects people to have picked up on the things he was driving home all semester. The homework assignments follow this trend. All in all, a great professor. I'm hoping to have the opportunity to take more classes with him.
The good: Peter Allen is a very talented lecturer. His handouts are spectacular. They present each topic very simply and completely, making reading the horrendously boring textbook almost completely unnecessary. Even though sometimes the material is a bit dry, Prof. Allen manages to keep the lectures interesting and bearable. I don't know what other reviewers are talking about when they say he humiliates students. I never remember him disparaging any student. The bad: He did have a tendency to misunderstand students' questions and assume they were asking simpler questions than they meant to, but he was always patient and treated all questions as worthy of asking. Also, get comfortable when he starts to walk through an example, because he'll take you through the WHOLE thing, even if the process is the same in the first 10% of the example as it is in the last 90%. If you take this class, be prepared to work. This was the most work I've ever done for a class. Ever. The theory questions are usually reasonable, but the programming is killer. It wasn't uncommon for me to spend my entire weekend working on an assignment (even with no procrastinating). There's a lot of work, but I think it was worth it because after you walk out of that class, you will be extremely well prepared for programming in Java and comfortable with the data structures discussed in class. If you're serious about CS and can handle a hardcore workload, take this class.
Overall, good teacher. Shlomo is personable, very accessible via email (to which he responds very quickly) and office hours, and more than fair with his assignments and exams. My only complaint is that I found his lectures unsatisfying. They were, for the most part, a recap/summary of relevant readings in the text, and general outlines of theory whereas I would have found it more interesting if he went into more programming details. Even so, this isn't really necessary-- you always learn best when you're trying to work out an assignment in front of the computer. Part of it, too, may have been that he was always looking to get the class to participate when no one was really interested-- he may have done much better if he just lectured. Other good things about the course-- attendance to recitations is optional (no one went and the TA wasn't especially helpful), and although he said participation counted, he didn't seem to mind if people missed or didn't come to class (good for the independent learner).
Great teacher! Makes the material bearable, very very helpful in office hours and through e-mail, gives fair exams, and is also a very fair grader. Makes this hellish class not so bad. You'll learn quite a bit.
Professor Biliris is really not as bad as all that. I will concede that he is an extremely boring lecturer; however, one of my friends who is among the smartest people I have ever met was able to go to class and pick up everything from the lectures and never even had to open the book. Apparently, that was his goal with the lectures (to be a substitute for the book), and it didn't bother him at all when people just got up and left class. As has been mentioned, he is a very easy grader, although the homework assignments are designed a little thoughtlessly. Generally speaking, the portions of the assignment that take 80%+ of the time spent coding are the parts that are irrelevant to the material being taught by the homework. For example, the homework assignment involving trees and hierarchies was easy enough conceptually, but the mechanics of getting the applet to display the way you wanted were a royal pain in the posterior. This shows inexperience and some obliviousness. However, the man isn't uncaring. A little begging post-thanksgiving convinced him to extend the deadline of one of the homework assignments, and he seems very approachable and eager to help. Plus he's got that cute little Greek accent, which is always good for something. An average teacher overall, in Columbia terms.
This man is utterly incompetent. Going to class consists of you sitting there and staring while he copies code for data structures such as linked list or disjoint sets on the blackboard VERBATIM from the text. He doesn't even bother to change variable names. He basically stands there and reads the textbook to you in a somewhat difficult to understand accent. Sometimes he makes fun of people (especially people who leave) but that's the high point of class. Personally, I didn't go to any of his classes at all except the midterm and final. What ends up actually is that the four or five TAs for the class are the real teachers. Laziness overtakes the average student and most of them do the learning from the homework assignments. Usually people ask questions via the bulletin board which sometimes complicates things (for example, the second homework turned into a swing nightmare once a few students started asking about implementing scroll bars and other gui components to a simple tree application). Don't worry though. The curve is spectacular. I'm not even a CS major and I did the minimum but still scored an A+.
Teaches verbatim from the book, which is not a very good book. The examples he uses in classs are simply a regurgitation of the book's examples, except that he often makes errors in presenting them (which is usually fairly understandable -- but since he did not design the examples, he has trouble finding his errors.) Lectures are boring, though he does have moments of personality.
No one sums up the CS department's mediocrity more than Peter Allen. Tough, challenging, and rewarding? PLEASE... He may not take any bullshit, but he hands it out in huge buckets by making his students write Swing interfaces for every assignment. So when do you write the actual *data structures and algorithms*? You don't -- you copy the textbook's code, then stay up 'till 5am writing 5000 lines of JFrames and JOptionPanes. I've tutored literally dozens of Allen's 3137 students, and the only thing they seem to have learned from him was bad coding style. It's not all his fault -- if the CS dep't is going to use Java, then 1007 has to teach the basics of OOP. Yet almost no students come into 3137 understanding the basic concepts of abstraction, and Allen goes out of his way to make the situation worse. For example, here's one absolute law: Keep the data structures and the GUI in different classes! If Allen were really a no-BS kinda guy, he'd give zero credit for anyone who put Swing code in their Stack, BST, etc. classes. As it is, his 3137 is a lesson in producing awful hacks. Laying your code out in a clean, maintainable way is a THOUSAND TIMES more important than blindly adding Swing objects to an ADT class until something appears on the screen. But Allen requires none of the former and oodles of the latter. This the kind of class that makes people hate CS. Compare it to a really successful and challenging course, like MIT's 6.001 or even Gross's Discrete Math here, and you see how we're shortchanging our students and turning potentially talented programmers away from CS for life. This course is worse than useless. Yes, Allen is a contemptuous waste of time, but he's just a symptom of the stale status quo in Columbia's CS department.
Professor Allen is an extremely lucid and straightforward lecturer, and the material he teaches is extremely valuable. I had no problems understanding material after going to classes. He taught the class for CVN students as well, and even viewing his lectures on video was pretty useful. He does berate students a little bit, but usually if they are acting irresponsibly stupid.
Shlomo was very fair in the workload he provided us over the course of the summer. Instead of standing firm on his decision to provide five assignments, half of which consisted of programming, which was the most time- consuming portion of each assignment, he eliminated the final programming project and replaced it with more theory questions. All this at the request of the class. He's very responsive, both in the classroom and via e-mail, and is helpful during office hours. My only complaint is that his handwriting is a bit untidy, making it difficult to read from the board.
Good teacher. I enjoyed her class and felt she really strove to help us understand everything. She frequently stayed significant time after class to answer all remaining questions and did so happily. I would recommend her class if you have the option.
I might have to say that Ted was one of the best instructors I've had at Columbia so far. Keep in mind I'm an engineer and that's not saying much, but the man was great. He made Data Structures, a class I was POSITIVE was going to kill me, understandable to even the dimmest programmer. Some people in the class were annoyed by this and said he went as the pace of the dumbest kid in the class but hey, when you're the dumbest kid, you're not complaining. Seriously though, I disagree with that statement because I think Ted really cared about whether or not we learned the material. He was very understanding about homeworks and granted extensions whenever necessary, in addition to giving a VERY fair midterm and final (not easy, fair). The homeworks were time-consuming and tough but hey, this IS data structures. He went over each of them in class and made sure we knew exactly what was going on. He's a very personable man with a good sense of humor though he may weird you out in the beginning because he'll stare at you to remember your name (but he makes the effort to learn everyone's name! when's the last time an instructor of a 60 person class did that??) In conclusion, I love the man, I'd take every class with him if I could-and not just because I'm the dumbest kid in most classes.
Professor Allen will not hold your hand, he will not take any shit, and he will teach you data structures. His lectures are clear, concise, and will prepare you for the homeworks. At times, he practically walked us through how to do a given assignment. He is also apparently a huge fan of GUIs, which while will be a wonderful skill to have in the future, will likely be a royal pain in your ass and has little to so with the subject matter. As with most CS programming courses, the difficulty of this class will vary with your skill in coding coming into the course. Prof Allen does not really curve, and if he did it didn't affect my grade much. He did drop the lowest HW, which was predictable as he repeatedly mentioned that you could afford to mess up one HW. Allen has little patience for BS, so don't ask him stupid questions, don't stand in front of the room, even to grab a handout, when he's lecturing, and don't tell him he isn't teaching the material we need to do the HW -- he practically tore one student apart when he was asked for techniques used for hasing. The student felt we weren't given enough options to meet his desired # of collisions, and Prof. Allen practically walked him through all the examples in the book. Come to find an email in all our mailboxes later that his required max number of collisions was off by a factor of 3. Oops. Basically, if you start early on the assignments, this class will be very rewarding and will help you progress greatly as a coder. Allen makes learning the material incredibly easy, as his lectures are so easy to listen to. But if 1007 was difficult for you and you're really not getting Java, start every assignment the day you get it and hope it all starts clicking soon. Or try a department that's a little less sink or swim
Although he may seem unfriendly sometimes he's really not. At least when I went to his office hours, he was really nice. I asked for an extension because I was sick and he didn't even ask for a reason but only ask me to email him to remind him about it. I don't really remember him being mean to any students except a time when a couple of students were standing right in front of him when he was lecturing so he asked them to walk away so he could teach. I don't think that was undeserved. Otherwise I think it's just his lecture style to sometimes be sarcastic and blunt. He doesn't bullshit and he doesn't direct his attitude to students. Therefore so far as I'm concerned he's a great teacher. The TAs, though, were somewhat irresponsive. They generally did a really fine job answering questions about the materials. But with administrative stuff like grading policies and grade statistics, they always told us to ask another TA who would tell us to ask another one, or simply ignore our questions altogether.
Prof. Allen's lectures are clear, concise, and informative. He is a wonderful professor, and gives off a tough attitude but is really a good guy when push comes to shove. He had a lot of pity on my class by making the homeworks easier when he realized we messed up the first two. Highly recommended class.
Professor Noble is a wonderful teacher. He cares about his students and their opinions so much more than any other professor. At the end of each class, everyone submits questions in writing which he answers at the beginning of the next class. His lectures are very clear and the only bad thing about him is that he mixed up some details on the course material in the second half of the semester. The homeworks are half theory questions and half programming. They are not easy by any means and take up insane amounts of time. The two tests weren't that hard.
She 's really good, i like her alot. She put alot of effort into teaching... Perfect professor. In office hours, she always try to help you, really patience... A++ =]
Like asking questions in class? Better be prepared to withstand a barrage of embarrasment from Peter Allen. I've witnessed unbelievable acts of contempt from him in class, in which he dressed down students whose questions he apparently did not feel were good ones. If you're forced to take his class, do yourself a favor: stay home and learn from the textbook. You'll learn more and the book doesn't try to embarass you.
Prof Grunschlag's lectures improved dramatically in the two semesters I took his classes. He attempts to be funny (and succeeds often enough). He is an easy grader, and although exams are difficult there is a generous curve.
A relative new-comer to Columbia, Nieh is a VERY smart guy, and when it comes to OS, he is THE specialist. His lectures are one of the better ones here at Columbia, and you'll actually learn a lot - BUT, you really need to be awake and ready to participate, as he likes to shoot off questions, and expects you to be able to answer them. He is willing to help outside of class, but make sure you have your questions ready, as he tends to get frustrated if you go to him and don't have a clue about what you need/want to know. As far as homework goes, the theory part is fine, but the programming part is NOT. When I took Data Structures with him, only 3 of 50 or so students was able to finish one of the later homeworks... he really expects you to know how to code (god knows where you're supposed to have learned!). Thankfully, his tests are more manageable (mostly due to the fact you don't have to code!).
He makes lectures very interesting and fun. You'll definitely enjoy the class even though the subject matter is rather difficult. I had a great time in this class and I believe that he is one of the best professors in the Computer Science department. The class can be really difficult or moderately difficult, depending on who you have as your Professor.