Professor Hershkop's class is a great class to take if your intention is to make it into grad school. Shit, after taking this class as a postbac, I was accepted to both Columbia and Penn for a Masters in CS, so I guess it worked out. His class will give you the A or A+ you need, presuming he grades you properly and submits appropriate grades. For me, that presumption turned out to be false. The issue involved the professor giving me a B+ when I deserved and had been graded with an A. The reason for this problem was minor - I had been granted a written extension to turn in a final project, I turned the assignment in based on that timeline, and had received a zero by error of the professor. The professor agreed that I deserved an A for the class after grading my final assignment. Despite multiple communication attempts with him and spending over two months on the issue, the professor did not submit a grade change. He acknowledged the grade I had received was an A, but was either too busy/lazy to change it over basically the entire summer. This created deep stress for me, and concerned me, especially because I intended to apply for masters programs the next semester. As a result, I brought my advisor in to help resolve the issue. After she confirmed the appropriate grade with the professor, she waited several weeks for the professor to resolve the issue. He didn't. She fixed the issue herself by submitting a document to change the grade. I believe this professor is an unfortunate member of the Columbia community, and is one of several reasons why I decided to attend Penn instead of Columbia for my masters program. His work ethic on administrative issues important students is completely insulting.
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.
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.
DO NOT TAKE THIS CLASS WITH HERSHKOP. I'm not going to bother enumerating the reasons why. There are too many. The bottom line: he's incoherent, his lectures are a waste of time, and he doesn't go over really important concepts. The upside, he's a super chill guy and very nice. This doesn't help when you can't figure out why your code won't compile, and it's ultimately becasue the code he requires you to use (and that he wrote) has a bug in it), or he forgot to tell you that one important details the you need to make your program run on the CLIC machines. The TAs we had were fantastic, which made this class doable in the end. Somehow got an A+, but there is no way I deserved one (I guesss he's really generous with grading). I wouldn't hedge my bets on teh GPA boost, if I were you. Theer was no way to know before I got my grade that it would turn out so well. It honestly could have gone either way, and that's more because I had no idea what was going o in this class because of how unclear he was. I wanted to learn C and C++, and instead we spent 8 weeks on Perl. Just don't waste your time like I did. Take this class with someone who knows how to and wants to teach.
I am writing this review a semester after I have taken the class... while at the end of taking Advanced Programming with Shlomo I was rather disappointed by the utter waste of time that taking AP with Shlomo is, it had not downed on me yet the ramifications that his class would have on my future studies. At the end of Shlomo's class you will not know C or C++, the most crucial element of AP, and one that you will regret for the rest of your stay at CU! If possible, avoid Shlomo like the plague that he is!
So having read the below reviews, I tend to agree. So instead of harping on the bad, I'm going to talk about the things that were ok with the class. Give me a break, the TSA was a bit slow so I missed my flight, so I'm burning time until my next one. Shlomo, is an interesting character. I don't know what his method of teaching is. Some (actually most) would say there really is no teaching being done, and going to class is just to find out what things you have to go on the internet/break open the books to learn yourself. This is completely true. Be prepared to scour the interwebs for tutorials and the sort if you are as unfamiliar to PERL and C as I was. On to the class... The class... was really what you made of it. I usually went to lecture because it was closer than my dorm from the class I had right before it. They were ok and I'm sure if I was the diligent notetaking type I would have gotten a little more out of the class than i did. But be prepared to get sidetracked, because like every lecture, there will be dumb questions being asked (once, some kid asked a question where the answer was literally on the slide we were on). Normally this isn't a big deal, but Shlomo has a tendency to stop and continue on that tangent. I think we've finished 3 lectures without him putting on a flipbook presentation of the last 20 slides in the 3 mins at the end of class. The lab (not the assignments) was surprisingly enjoyable. I did spend much of my time there laughing and fumbling with the assignments, but having people there who ostensibly were there to help you was a tiny bit calming. Unfortunately, if you actually NEED help, then good luck. I'm sure the TAs are very capable programmers, but like most people who can do, they really can't teach. Take this with a grain of salt, as each year the TAs change. Shlomo, while he is there for maybe the first half of the term, goes AWOL when shit gets real in C. The one awesome thing that I particularly enjoyed about Shlomo (no sarcasm) is that he is super lenient with deadlines. While some people are frustrated by the constant pushing back of assignments, trust me, you will be saved at least once by this.
Not only was this the worst CS class I have taken at Columbia, it was the worst class I have taken in any department at Columbia. Prof. Hershkop doesn't plan his syllabus in advance at all, and he pays almost no attention to this class. For example, he promised for weeks on end to set up virtual servers for the group projects. In the end, he never did (nor did he tell the class that he had changed his mind, so some students were left hanging). Since we had no virtual servers, the only way for us to collaborate on the projects was for one partner to give the other his password(!). Worse, the projects are built to encourage horrible programming practices. He doesn't just allow them - he encourages and sometimes requires them. For example: we store our data in flat text files, rather than databases. For example: 1. We were not allowed to use 'make install' to install external modules; we had to move the files into place manually. 2. We were not allowed to use MOOSE to do object-oriented programming in Perl (because he 'didn't want to have to learn MOOSE'). Forget that nowadays all Perl object-oriented programming uses MOOSE. 3. For example: we were told to use C/C++ to implement CGI scripts (which are themselves outdated), instead of using Perl, which we had already learned. C is the only language that doesn't support strings natively, so why would string manipulation be our first introduction to C, as well as our only major project in C? 4. We were essentially prevented from using version control for the group project, as well as the individual assignments. It doesn't help that the syllabus was last revised in 1995. There is no reason to be teaching Perl anymore - and if it should be taught, we shouldn't be spending more than half the semester on it (as we did). If CGI scripts are believed relevant (which they really aren't), then they shouldn't be written in C. Webthumb is a script that nobody has used outside the Columbia CS curriculum since 1997. This is supposed to be the class where you learn about important tools like version control, shell scripting, and the like. In Hershkop's class, you'll learn none of these. Grading is slow to the point of providing no useful feedback whatsoever. By the time you get each lab back, you'll have turned in three more. I'll be surprised if we get the grades for the midterm project before we take the final (which looks unlikely at this point). In short, there was nothing redeeming about this class. Prof. Hershkop takes an imperfect syllabus and manages to make it even worse. It's clear that he doesn't put much thought into the class - most of the time on the assignments is spent trying to debug the typos in his sample code. Dijkstra once said, 'The teaching of BASIC should be rated as a criminal offence: it mutilates the mind beyond recovery'. But if you ever have the chance to learn BASIC as an alternative to taking this class, by all means, go for it. It'll damage your programming career less than Hershkop's class would.
Taking Advanced Programming with Shlomo in the second semester of my Freshman Year was an awful idea. Shlomo himself is not a horrible teacher. He is funny and personable. Just don't expect him to ever respond to your emails. The main problem with the course is the way the curriculum is structured. I decided to take the class because I wanted to learn C and C++ before going into my internship for the summer. Little did I know that most of the class would be perl, perl, and more perl. Out of the 10 labs for that class, six were about perl, two were about C, and two were about C++. The only things he really covered about C were pointers and memory management. Obviously, good memory management is important and one of the trickiest parts of programming in C, but I really wish we went more in-depth. Most of the labs on perl centered around CGI programming, which is kind of pointless nowadays unless you're going to work for Amazon. There were also CGI parts to the C and C++ labs, which is even more pointless. If you are a Computer Engineering major like me or are on the systems track for CS, I highly suggest that you wait until someone else is teaching it.
This class was the subject of the nastiest official course evaluation I've ever written. I put almost exactly these notes in the little box on Courseworks, and I fervently pray that somebody in the department reads them. I feel bad for Prof. Hershkop. I really do. The way this course is designed -- or, at least, the way he seems to envision it -- it's impossible for an ordinary mortal to teach (Jae Lee, I'm told by his rapturous former students, is made of a different stuff than the rest of us, but that's a discussion for another day). 3157 requires its instructors to have an intimate knowledge of C, C++, make, Perl, Ruby, HTML, CSS, HTTP, CGI, memory, security, obscurity, etc. Not an impossible list of things to learn, but for somebody whose real work only deals with two or three of them, perhaps a bit unreasonable. Dear Shlomo, unfortunately, isn't up to the task. His knowledge of web standards seems to end in about 1998 (he suggested that a problem with one of my labs, ultimately traced to bad server configuration, was because I wrote my newlines as <br /> rather than <br>). Ditto stylesheets. As for the unfortunate Ruby / RoR lecture, he was forced to resort to a mortifying game of "spot-the-error" with the class to cover up for the fact that he was completely clueless about variable scope in Rails controllers. Not everything was wasted -- I feel like I have a pretty solid knowledge of Perl, and the course was a useful C / C++ refresher for me. But my real problem is this: He loves webapps, but in an effort to come up with "applications" for the things we learn in class, Prof. Hershkop assigns projects that actively encourage VERY BAD DESIGN PRACTICES. For example: In order to avoid adding a brief intro to relational databases to the already-groaning syllabus, students are encouraged to do everything with flat file databases. Nobody even mentions the fact that this is fundamentally unscalable. For example: The entire second project required us to write vast numbers of CGI scripts in C++. Hardly anybody uses CGI anymore, and they sure as hell don't write the scripts in C++ when they do. For example: Some of the labs instructed us to write Makefile jobs not to compile our code, but to run it. For example: we were forced to repeatedly work with a nasty little script called webthumb. At this very moment, there are a hundred copies of Firefox running in a hundred X server sessions spawned by a hundred instances of webthumb because some poor sod never found all the bugs in his copy of webthumb. There are many better ways to do this, but apparently part of being an Advanced Programmer is remaining wedded to long-dead technologies, even when superior alternatives exist. I could go on, but I hope my point is clear. I think there is a place for this class within the CS major, but it needs to be slimmed down, modernized and a little less webapp-happy.
One of the worst CS professors! The good: 1. He's fairly nice and approachable, but I think most professors are friendly, so he isn't out of the ordinary. 2. He gives homework extensions to anyone who asks for them and for almost any reason. If you need more time, you have it (but this is also a con, see below). 3. Pretty easy .... that's about it. The bad: 1. Extensions that *everyone* abuses. I'm ok with giving homework extensions if people are sick, but I had friends who purposely abused the system and took advantage of him, which is unfair to people like me who did homework on time. It's quite ridiculous when people turn in homework a month late with no penalty. 2. Typos. He can't even add. The points on the homework never add up and his slides are full of errors. 3. Boring! He teaches from slides and doesn't engage students well. I fall asleep (it was a 9 am class though) 4. Useless homework. Most assignments are pointless and not useful. You won't get much out of the course, except learning how to debug webthumb. What's that you say? Exactly - pointless! Those who took the class know what I'm talking about. 5. Lack of communication. He doesn't communicate with students well, and I heard that he never really speaks to the TAs, who grade the homework, so they are a bit confused and grading is sometimes inconsistent. 6. Perl - pointless 7. Almost every assignment is a CGI program -- never useful outside of this class Overall, he's just a mess. It doesn't seem like he puts much time into teaching. You'll probably do fairly well in the course (at least B+), but you won't get anything out of it. Avoid this prof and take it with Jae, who is actually useful and on top of his shit. I heard Jae is harder, but it's worth it for a class like this!
Good professor overall. Taught all the relevant bits that you would expect in an Adv. Programming class. Fairly entertaining and informative in class, and very helpful outside of class. Pretty flexible when one desires an extension. Majority of the grading done by the TAs, but reasonable overall. Homework assignments and labs tend to be relatively easy but some of them took quite a while to do. Recommended, overall.
A mixed review. Shlomo can be condescending at times, friendly and joking around at other times. The class is apparently easier than with other professors. Sometimes his jokes are terrible but at least he tries. Involves the class as much as possible but he'll shoot you down if you have the wrong answer, and he'll even manage to make you look stupid if you have the right answer! Probably not the best way to teach a class. Also he's pretty absent minded.
In summary: He's a hack! I'm staying out of an honors section of Data Structures next term just to avoid him. He knows very little about the languages he teaches, and when confronted with a mistake, claims it "used to work that way." That might work once or twice, but there's no way that, say, shift() didn't modify an array in the good old days of Perl. It's more likely that you don't know what you're talking about. Lectures are unbearable, riddled with typos, and full of stupid jokes. You'll spend half this class doing ridiculous things like implementing simple CGI scripts in C++, so it takes hours of drudgery, after you've already been taught Perl. Then he'll pick apart your programs when they don't follow requirements that weren't listed on the assignment. On the plus side, you don't have to go to half the classes -- but you do have to go to the labs, because he doesn't post them on the website! So show up, take the paper, leave, and feel better about yourself for not having sat in the lab for two hours.
I don't think the previous two reviews are fair, Shlomo is one of the few teachers that I've had who really cares about improving his class and helping students. Although some lectures can be a little bland, I found the homeworks to be pretty interesting and helpful getting to know how to use CS skills in more useful applications than 1004.
Hershkop is a bad teacher. The lectures are too general, too specific, or have nothing to do with the assignments. Too many times the slides are examples from the book. The midterm and exam didn't reflect what we were supposed to be learning in the class. He is a fair to generous grader. Don't take a class with him if you don't have to.
Professor Hershkop is a terrible teacher. He is a nice guy, and seems to like the subject, but he just can't teach. There are always typos on his slides and in his assignments, even in the code he gives us to use on projects. He never adequately answers questions and even though I attended all of the classes, I never learned anything. Reading the book during class would've been a better use of my time. He often taught this intro class as if it were Data Structures and expected us to know what he was talking about. Nice guy, but avoid taking a class with him if at all possible.
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.
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.
Great teacher, though somewhat boring at times. Teaches you many advanced things, but never tests you on the advanced topics. Flexible and caring, very nice during office hours.