course
Advanced Programming

Apr 2021

As someone who had no programming experience before college, I was worried about being weeded out by AP ever since I got into Columbia. Despite its difficulty, I’m pleased to say that AP with Jae has only reaffirmed my passion for CS. Jae is fantastic. He cut out the C++ content and labs 8-10, which made the course far more manageable. His lectures were clear and I never felt lost. And even though he puts on a serious face in class, he’s actually really cool and hilarious if you get to know him at the Hackathon. All the TAs in Spring 2021 were extremely patient and helpful, which was assuring given that the TAs in earlier CS classes were often hit or miss. The course is still a rigorous step up from the toy programming in Data Structures. After all, pointers, memory allocation, and network programming are naturally tougher topics. However, AP isn’t the weeder that it was (and probably still is) known for. It’s true that the labs are longer, but Jae also gives plenty of hints during class, so you should always have some kind of entry point for each project. In addition, the specs are so detailed that you can guarantee yourself a perfect score every time. I took the class when the exams were still online. They’re still the hardest part of the class, but I noticed that they were more similar to the labs than a lot of the sample paper exams were. This is probably why Jae always said you’d get the most out of the labs if you did them all by yourself, and I would agree with his assessment. Yes, it sucks to stay up until 3am figuring out where your program is going wrong. But once you debug the error, your brain will be tuned to avoid repeating the same mistake in the future. You just can’t achieve the same effect if you rely on the TAs to fix everything for you. If you don’t go through that process yourself, you’re going to struggle on the exams. As for grading, I thought Jae had one of the most forgiving curves ever. For a "weeder" course, it’s difficult to fail; the C- cutoff this semester was 12.456. It seems that the only way you’ll fail is if you cheat or barely put in any effort. TL;DR: It’s a great class and there’s nothing to be scared of. Don’t cheat, start the labs early, and you’ll likely be fine.

Apr 2021

Professor Lee is a great lecturer. But this course is notoriously brutal. This class is designed as a conjunction from the C programming language to advanced things such as operating systems and computer networks. So if you ask what I learned from this class, I'd probably say, nothing? Mmmmm, not really, a little bit of everything: OS, TCP/IP, database, etc. Jae did really good in lecturing, and it's quite amazing how he just linked all this "everything" together. I don't need to explain this point since this is basically a consensus from everyone. You will like his lecture and learn a lot here! But, the bad thing about this course is grading. Nobody wants to spend more than 25 hours a week on this class and only got a B, right? What you learned matters, for sure, but how much your input and what the GPA is also matters. I just can't understand why Jae does not really see this point. I almost spent half of my study time studying this course, but what I am expecting is a B/B-. I just keep on saying that it doesn't matter, at least I did learn something. But the reality is that the grade was, is, and will be harsh. Jae said, yes, somebody learned this in advance, and they will surely do better and get better grades, though he doesn't encourage people to do so. So the unfair part of this course is, it doesn't award hard work, it awards knowledge. If you learned this, never go to the lecture, did everything perfectly, and you will get good grades. If you learn this the first time, you are not likely to end in A range anyway. I am just a normal guy, who never learned CS in high school and expected to study hard and do well in college. I just don't understand where all those crazy guys come from! They seem to know everything already! I want to get good grades as much as those guys! If every class in Columbia is designed like this, I guess I will never find a job with my GPA. Grade fxxking matters! Why can't he just curve the grade slightly better! I literally feel sick about how harsh the grade curve is, and it DOES NOT FAIRLY represent my efforts in this class! But lucky as I am, Covid 19 allows me to PDF it. With regard to whether or not you should take this class, I mean, CS guys don't really have a choice? Right? So good luck with it!

Apr 2021

What is there to say about AP that has not been said already? This class is very hard. The material was only slightly harder to grasp than Data Structures but the workload was about 1.5 times as large. Jae is an excellent lecturer. He is very efficient in class and doesn't go off on tangents. You will learn the material if you put in the effort, he isn't out to trick or 'get' you. Jae is very serious about cheating so definitely don't try any of that, look him up on Reddit if you do not believe me. Overall, you cannot avoid the class as a CS major/concentrator so you're going to have to take it anyway. The class isn't easy and is very annoying and frustrating at times, but is extremely well put together and taught.

Dec 2020

I should preface my dislike of the course with the fact that Professor Lee is a fantastic teacher. Never before have I had a CS teacher who taught me so much, whose material was so practically-driven, and who's class was so organized. He really knows how to lecture, and every lab, every exam question, and every piece of code from class was well-planned. Now, to the course itself. The other reviews do not lie--Advanced Programming is one of the most challenging, most isolating and asocial, most hated classes at Columbia (or, even in the country). This course is taken by the best of the best (the top students at an Ivy institution) and thrashes them. If that's not enough, the structure of the course promotes isolated work, with absolutely no cooperation and complete competition. If you are looking for the most competitive class at Columbia, this is likely it, with only the top 4 students getting A's. Even more, there is no understanding for mistakes, no leniency for errors, and you are expected to do too much work outside of class. And most of the blame I give to Professor Lee, as he structures the course, he teaches it, and he continues its asocial tendencies. I would not recommend this class to anyone. However, the CS department strategically makes it a mandatory class to Major in CS or get a Concentration in CS. Thus, take it at your own risks. And, most importantly, DO NOT CHEAT. This class produces more academic-integrity violations than any other course at Columbia. Jae is ruthless, is not understanding, and attempts to ruin students who cheat (understandably). He is very adept at catching cheaters (he must use fairly high-tech software), and is extremely unforgiving. So, let this be a warning to all: DO NOT CHEAT, BECAUSE HE WILL CATCH YOU.

Dec 2020

GOAT This man is a legend take his class!!

Feb 2020

The single worst academic experience I have had at Columbia. Jae turns his course into a lifestyle; expect to receive emails 24/7 (and not just from the listserv— he emailed us the day after Thanksgiving telling us to get back to AP) and to dedicate hours of your life to his labs, all while resisting the urge to Google your questions. Furthermore, Jae is not approachable whatsoever, and I found him rather arrogant and condescending. Final grades are not curved nicely, and are not indicative of how much you learn. However, to Jae's credit, his TAs are very good, and his teaching is decent. He is incredibly polarizing, as the below reviews show, and some people do like him. I wondered who hurt Jae, but it turns out it was none other than his own experience as an undergraduate at Columbia. I sure hope I don't turn out this cynical by the time I graduate...

Jan 2020

Let me start off by saying, I'm not someone who naturally "gets" things and prior to this point, I had never even gotten above a C in any exams I've taken for a CS class. That being said, I managed to get an A- in this course and my goal is to hopefully not come across like I'm bragging but just to make everyone who's currently doubting their abilities heading into this course feel a little more confident in their potential to succeed. Obviously all the reviews agree that it's hard, but it's up to you whether you want to treat it as a 'lifestyle' or not. I usually started the homework a couple of days before the due date (except for HW7) and got around the median each time. I think the two things that really helped me were the videos they uploaded on YouTube and rewatching the lectures but at twice the speed. Counterintuitively, as someone who really has trouble focusing in class, this forced me to pay attention since it gets rid of the little pauses where I would accidentally zone out. Maybe you'll like the listserv format or maybe you won't but either way, you're probably going to be stuck with it so use it to your advantage. It makes me nervous to ask questions anonymously, let alone in an email to everyone in the class, but it was helpful to go through each of them prior to the midterms and final and seeing whether I could answer in my head similar to how the TAs would answer each question. I would say you don't have to start reviewing super early for the exams (although like in all classes, the more time you leave to review the better your chances), you're the person who knows you the best so just leave yourself enough time to be able to go through the sample exams and ask questions to the TAs in person if you have any. I hated hearing the TAs say this, but the exams really are just basically like puzzles and it's a combination of luck over whether it covers your strengths and how much time you dedicated studying and absorbing the homework in general. Regardless of the amount of importance it might promote on itself, AP is still just a class in the end. I wouldn't be surprised if there were a couple of super freshmen in the course, but most of us have been here for at least a year now when taking it so just try your best to learn from your mistakes or successes in your previous courses and you should be ok. Another very important thing to note, Jae won't fail anyone unless you cheat so if you start thinking about cheating because you're afraid of failing the course then know you would be so much better off just taking the L instead of receiving the cheating email at the end of the semester. Good luck!

Feb 2018

Y'all need to get over yourselves. Anyone who's had an internship or real world experience knows that coding just takes time to learn, and it can be very painful in the beginning. Jae isn't hateful; he's just realistic. He's been on the other side, and he knows that your boss isn't going to hold your hand on the job and make sure everything's okay. They're going to expect you to be a self-starter and learn things on your own. Welcome to the real world, kiddos. If you don't just "get it" because you're A) bad at logic B) you had good training coming in here or C) you're not extremely stubborn, maybe you just aren't cut out to be a professional programmer. This is what adulthood is like. One time a friend came up to me and said "Jae's tests are hard." Have you guys actually tried to build anything in the real world? Engineering is just like that; shit breaks and you have to fix it. You can't care about your feelings; you just have to make it work. Alright, I've done enough tearing into you guys. Take this class seriously, and you'll learn a lot. Most importantly, you'll learn how to hold yourself accountable and have high standards. You'll get eaten alive in the competitive world of software without that kind of attitude. Jae Woo Lee is one of the most practical professors I've had at Columbia, and I'm glad I got knocked off my high horse by him and learned some perspective. If you take OS, you'll truly begin to understand how deep and impressive a good programmer can be. Consider yourself initiated once you've been through all this. And if it's not for you, that's okay. Don't blame Jae. I'm a much better programmer thanks to this class.

Feb 2018

test

Jan 2018

This course is not easy, and Jae will not hold your hand. He will expect you to keep up and master everything that he covers in class. Do the readings as they're assigned, at least the required ones; if you don't, you will most likely fall behind. Jae's lectures go by quickly, so make sure you take notes quickly or have recordings for backup (usually if you ask the listserv for recordings, someone will have one). You want to use a combination of hand-written and typed notes because he talks fast and writes a lot of code and diagrams on the board. The labs are not terribly difficult but they can take time if you want to make sure your program(s) work exactly as instructed. The exams ... oh boy ... The averages are typically in the 40s-50s, with even lower medians, but the curve is generous (but not that generous). In Jae's words, "if the average is a 40, then a 50 is good" (but of course it's not). Aim for a 60-70 exam average for an A- and 75+ exam average if you want an A (assuming your labs are perfect or near perfect). The exams account for 75% of your grade, so they're a huge part of your grade. The TAs can be a mixed bunch, so choose your favorite(s) and they will help you succeed on the labs. If you want to do well in AP, I suggest you - allocate 15-20 hours a week for it; if you feel like there's nothing left to be done for the week, you're wrong. - take a good set of lecture notes (Jae's notes are just a skeleton); review them regularly - do and REDO every one of Jae's practice exams - this is critical! You should ask a friend to grade them (if you have friends). - go to office hours regularly - you are bound to have questions while studying. Each week, I collected a list of questions to ask the TAs or Jae. - talk to the TAs about the labs. they will give you hints. More often than not they will indirectly tell you exactly what you need to do or how to approach a problem. Ten minutes during office hours can save you hours in the library.

Dec 2017

This is the best class I have ever taken at Columbia so far! As you'll learn if you take the course, AP is a programming class with a narrative, and Jae constructed the syllabus carefully. It's nice to have a professor who cares so much about the class and the students. He hosts a hackathon with food and the only chance of the semester to work with friends on a homework. Jae is a great lecturer. GO TO LECTURE and ask questions! The homeworks are called labs, #1-10, and are worth 100, 120, or 150 points each. Pay careful attention to the homework instructions, they are very specific and graded exactly to homework specifications. Best advice is to go to lecture, go to the review sessions, and start the homework early so you can go to office hours before they get super crowded near the homework deadline. If you do this you should be able to get good grades on all the labs. Jae is a stickler for academic honesty/no cheating, and it was both the most stressful (when asking friends for help and not wanting to cross the line) and the best part of the course. Since you have to do essentially every part of every lab by myself (besides TA help) my confidence in myself as a programmer grew a ton with every lab. The exams are ~very~ hard, yet doable. If you stay on top of the material, start reviewing early, and understand what you are programming you can do well. The questions require clear knowledge of C fundamentals, and exams often include at least one question that is incredibly complicated. Exam questions are pretty similar to the types of questions on the sample midterms/finals. I heard a lot of hype about how horrible and difficult AP was before I took the class. Don't let that scare you, it is totally possible to do well and have fun in this class!

Nov 2017

DO NOT take this class unless you're a CS major and are required to. This is absolutely the worst class I have ever taken. Jae Lee is is a horrible teacher. Besides being extremely disorganized and random in his lectures, he is arrogant and rude towards his students. You will honestly learn the material better by going through the TA's recitation notes and going to the TA hours. Learning C and C++ is beneficial to anyone wanting to work in a CS-related field, but Jae insists on forcing students to memorize very specific syntax of functions, and "punishes" (his words) those who can't regurgitate the exact code on paper. Frankly, most of us found it ridiculous. The midterm exams are insane. The median is usually around the 40's-50's. This should tell Jae (and Columbia) that his course is awful and is failing the students, but we all realized Jae takes some kind of sick satisfaction in teaching "the hard course." Jae also has this weirdly extreme obsession with cheating. This isn't exaggeration; he is constantly on a delusional witch-hunt for anything remotely close to what he considers cheating. Supposedly, he runs all written code through a program that compares your code to EVERY SINGLE SUBMISSION FROM THE PAST 5 YEARS. There are 3-400 people in the class per semester. Meaning that many people's code will match someone else's somehow, and if you deny it, he starts a full investigation. How this sadist is still allowed to teach a required course for a major, I will never understand.

Jun 2017

In terms of material learned, this is an excellent course and I left the course feeling I had a great understanding of C/C++ and an improved understanding of programming in general. Jae is very generous with his curve and 55 points (of total course points) ended up a B. I read the text, watched videos on Lynda, and went to TA OH and found the labs totally doable but EXTREMELY time consuming. With Lab 7 probably taking me 20 hours to complete. The short answer/long answer midterm exams were (I assume) intentionally impossible with class medians hovering around 45. The final was fill-in-the-blank, multiple choice, true/false so was much much easier. Jae will send you practice exams. Do all of them. One of the hardest things about his exams is the way he words his questions and attempts to trick you, so practice exams help. As an instructor...I found Jae to be too disorganized to learn from and preferred to study with my own materials. Pedagogically he was, honestly, a nightmare, a nightmare barely concealed sadist. and sometimes would send emails that told students they must "suffer". He also uses language like "punish" when speaking of how he likes to "punish students who don't do ____". Before he announces his miserably low medians, sometimes he will laugh for an extended period. etc. I found his teaching style completely creepy. And encourage Jae to get out his sadistic impulses in a more consensual environment. My friend told me some students thrive under these types of psychological tactics and are pushed harder. not me. and not many, many students I know. He is the only professor who teaches this course. So try to let his bizarre, upsetting, behavior roll of you. You will learn a lot. Just ignore Jae. Also, don't cheat. Just don't. Jae is known to be obsessed with finding cheaters. And if you get caught, I have heard it is extremely unpleasant.

May 2017

AP is a very good and well-organized class. Labs are not too hard but tedious and the instruction in the lab is sometimes not clear. Exam is not that hard. Don't listen to the rumor, you can ace the exams if you really understand the material inside out. Jae's teaching is clear and to the point. However Jae is a terrible human being. He is disrespectful to some students even though some of them are already working and have possibly accomplished much more than Jae in other fields.

Mar 2017

Jae Lee is a terrible professor. I wouldn't even want him as a TA for this class. His two main objectives are: Make blisteringly difficult homeworks and tests, and catch cheaters. You will hear him talk about cheating in almost every lecture. It's his favorite subject. He sent out several unprofessional emails to the class ranting and raving about cheating, including one where he called cheaters "douchebags". At the end of the semester, maybe three weeks before the final, he sent out a threatening email to those he suspected of cheating saying they had until the next morning to reply as to whether or not they cheated and the first word of their email had to be yes or no. If they said no there would be a formal investigation and the consequences would be much worse than if they just admitted cheating. He sent this email on a Friday night, where no one would be at the school to advocate for, or give advice to the students who received the email. I had some friends get the email, who didn't think they had cheated, but because of the threatening nature of the email, they didn't know what to do. Some of the cheating accusations came from homework assigned toward the beginning of the semester. So he waited until just before the final, when stress was highest, and sent a threatening email forcing students to incriminate themselves, or else. One student gave him a doctor's note because they were sick during a test. He didn't believe them, and passed their note around to the TAs. There is no reason for him to share someone's medical information with TAs. The tests were ridiculous. He gives you tests from past semesters to study from, but all they will do is show you that your test will be just as impossible as those were. The averages were low, something under 50 for the midterms, I believe. This is the only class I've ever had where I felt like I wasted time by studying. I don't care if I get a B+, if you give me a test where I get 40/100, I'm going to feel stressed and deflated. The homework was insanely difficult and time consuming. If you have a ton of experience programming, far beyond Intro to Java and Data Structures, it might not be so difficult, but it will be time consuming. Think 20-30 hours per assignment toward the end. This listserv for this class is annoying. You get dozens and dozens of emails a day. It's not well organized. This has the opportunity to be a great class. Knowing C and C++ is very valuable. This class should not be taught by Jae Lee. No class that is required for a major should be taught by this man. People should be able to choose whether or not they want to subject themselves to his teaching. It blows my mind that he has good reviews on here. I feel like I'm looking at a conservative's Facebook page filled with pro Trump propaganda. The only reason I can think for this is that you've never felt relief like being done with this class. If you struggled through like most of us, you'll probably never want to think about AP again, let alone write something about it.

Feb 2017

Jae is one the worst professors I have ever had. He is discouraging his students by telling them that they are essentially losers for not remembering C code syntax. He has no new knowledge of the recent updates in the C and C++ language, which makes no sense as a computer science professor at an elite school. Jae teaches this class with the passion your dad has for reading you washing machine manual. He is boring and uses abstract class notes, while not following any reading order, just to confuse you even more. He uses an old school teaching method where telling a student he sucks should motivate him or her to do better and try harder. The grading system is unfair and discouraging. The exams are ridiculously hard and don't reflect in any way how much of a good programmer you are. The problems on the exam are tricky and concentrate on memorizing syntax and Linux command line outputs, also if you understand tricky instructions. Jae exploits the fact CS students are obligated to take AP to demoralize students. With so many good CS professors that Columbia has to offer, it is a shame one has no choice but to take AP with Prof. Lee.

Dec 2016

Jae is an excellent lecturer who is very clear about his explanations. Even though his lecture notes are already quite good, it's definitely worth it to come to lectures, since Jae provides useful supplementary information and also runs sample code so one can see how the code exactly works. The TAs are also very willing to help you with the code (as long as you put in the effort, of course). The recitations are more or less just review of the lectures, but if you want more practice or sample code, it's good to check them out. The exams are quite tricky. The best way to prepare is to definitely read all of the lecture notes very carefully (VERY CAREFULLY), understand exactly what each line of code does, understand how each lab works, and read K&R or the C++ book carefully. It might even be helpful to write and run your own code to ensure you know what is happening. Furthermore, Jae might reuse exam questions from the previous midterms, so definitely learn from your mistakes. The labs vary in difficulty. As long as you have the proper prerequisites (Data Structures, some familiarity working with UNIX commands and hopefully Vim/Emacs, and good coding habits) and as long as you follow along in class, the labs will be straightforward. Pointers are actually not that difficult if you follow along and draw pictures. The hardest lab is lab 7 in which you have to write a web server. It's not difficult conceptually, but it's difficult because there are many parts you have to keep track of. Make sure you debug your code constantly (instead of writing the whole lab in one shot) and get started early! Be sure you do well on the labs, since the averages for labs, unlike those for exams, are usually very high. Personally I thought the listserv was a giant clusterfuck. However, if you care enough to look through all of the emails (questions about the labs, questions that have already been asked, emails from TAs exasperated at people who repeat the same questions), you can gain some useful tips for finishing labs or figuring out exam questions. Just make sure you search for your question before you create a new email, and don't reply-all to announcement emails. It's essential that you set up an inbox filter to filter all of these emails.

Dec 2016

His Lectures are well organized, relatable, he stays on topic, throws a few jokes to keep you awake, but he can be intimidating. My advice to overcome the wall between you and Jae is to go to the Hackathon and introduce yourself. He's actually nice if you get his attention. It seems like he prefers a student that doesn't need their hand held (which is the intimidating part) but pestering him is a good way to show him you care/will work hard. I think that could be why some students don't like him as a person. If it's really that bad, then hire a tutor (I did). Your tutor is pretty much your employee at that point. If you can't hire a tutor (a good CS tutor is $$$$$), then you need to make sure this is the only difficult class you are taking because you will live in the TA room. If you can't either see Jae, hire a tutor, or be in the TA room for almost every OH, then you are probably cheating in order to do well. My advice for the cheaters is that you will get caught so proceed with caution. You could lie (most cheaters are also liars), but you'll get caught! I can't stress this enough. Jae says this in the beginning too and people still think they can do it. My advice for if you don't cheat (i didn't but I almost regretted not doing it), just let it go. I think Jae pretty much hit the nail on the head when he said those people who cheat like that won't make it very far in the world of CS. Just worry about yourself and try your best to have fun. There was an intrinsic reward in the end. I did become a better programmer after this and real world programming made just a little more sense. Go to every lecture and don't bother opening your laptop. The notes are posted to the server so stop pretending you're taking notes and just watch what he does. Read over the notes later. Use the drops and extensions strategically. You will need them, but try not to drop any of the ones right around the midterm. I think around lab5-8/9 (can't fully remember) is when you really should focus. The exams are tricky. If you don't like your grade just argue a lot. I will say that if you KNOW how to do the homework, then you KNOW what he's asking in the exam. You'll be able to argue for your points (all points matter) if you KNOW. Also, his exams are pretty much from the lectures and old exams.

Sep 2016

Apart from his teaching, Jae Lee is the worst human being I have ever had as a professor. All the other professors in the computer science department genuinely care about you learning and being successful. This is not the case with Jae. I hope that the way he treats his students comes back to bite him in the ass one day.

Nov 2014

This class is legendary for a good reason. The assignments are long, the material difficult, the exams are incredibly tricky bordering on unfair. However if you get through it you will have learned as much in this course as self-taught programmers may learn in years, if ever. I write this from a perspective of someone who took this course with basically zero knowledge of computer science or programming experience coming into this class. What the class covers really well: C. What the class will force you to learn by sheer force: the UNIX environment, working with a shell, basic git commands, how memory works under the hood, and more C than you ever care to know, and then some. What is briefly touched upon: multi-threaded programming through blocking functions, sockets/networks, and basic under the hood stuff for C++. Jae begins the semester with the claim that he'll turn students of programming into actual programmers which sounds like an ambitious task but he pulls it off fairly well. By the end of the class, you will have coded a linked list in C, written your own web server, and some minimal C++ experience, all of which isn't that impressive on paper. However, the skills you learn here will be applicable to nearly any job you hold as a computer programmer unless it's really implementation-heavy front end stuff. Even then, you will come away with experience of having to read lots of documentation with very little guidance on how to use it, which is expected of all programmers. If you want to do programming as a career and are debating taking this class because of the grading, take it anyway. You'll learn a lot more than you think regardless of your grade. He grades to a A- and in my semester he curved everyone to at least a C-. I did terribly on my first exam and still eked out a B+. This is sort of a requirement: get to know your TAs really well. They are all super helpful, smart, and were probably the reason I didn't drop out after failing my first midterm. They really make or break your experience in the class.

May 2014

This class is amazing. Jae is amazing. The TAs are amazing. There's not much bad to say about it other than... Oh. Right. The tests. Let's start with the good. Jae's lectures are interesting and helpful. I thought that he went at a perfect pace. The homework assignments can be somewhat challenging but everything is so well organized. All you need to do is pay attention in lecture, go to recitation, and give yourself enough time to do the programming. I was almost terrified coming into this course, from the horror stories that I heard from upperclassmen. I heard that the labs would get harder halfway through the course, but I didn't feel like there was that significant a change. I will, however, say that if you don't know the material from the first few labs, you will likely struggle with the latter ones. Alright, so the tests. The tests are pretty unpredictable. All I can say is try to study as much as you can and beware of Jae's trickery. Do the practice exams to get an sense of what the problems will be like. You might not ever be fully prepared... but good luck, and hope for a good curve? (it will be pretty good.) Somehow, despite how awful I felt when struggling through the tests, I still really enjoyed the course and I feel like I can look past those. You will definitely learn a lot either way.

May 2014

One of the better CS courses out there. It's truly inspirational how Jae teaches (Sidenote: Chris Mulligan and Jonathan Balsano, the head TA's are also a plus for this course; they know everything and they will go the extra mile to make sure you know the way Jae wants you to know the material). The labs get progressively harder (lab 2 is particularly challenging for those that only know Java and thinks they know everything). Jae hands out a bunch of very clear yet brief set notes for every topics. The listserv is very useful and you won't have to wait more than a couple of hours before a TA responds to your questions. The bad part are the exams. For all the thought Jae puts into the labs and lectures, I feel he hasn't figured out a way of writing exams that aren't so unforgiving yet as challenging as the ones he cooks up. No matter how many hours you spend studying for the exams, you will be challenged. There are no easy questions. You almost certainly will need to go through an overly-complicated program that makes you follow 10-15 logical statements that intersect and go through overly-complicated loops. Almost always the questions will be either right or wrong, and there aren't many questions (usually 10 in midterms, 20 in final). Normally this wouldn't be such a problem, but each question usually tests for 3, 4 or 5 things at the same time. So even if you knew everything there is to know about 4 concepts, if you missed the one, you won't get the answer right (guessing here is really, REALLY bad) and you will probably end up losing a bunch of points. His exams are all or nothing, meaning that you won't get partial credit over anything. You truly are as strong as your weakest topic. Then again, if you want to be a programmer or you want to do something related to programming later on, take this course. You will learn more in 3 months than you could expect in a year. If you are not a programmer, nevertheless take this course. Programming is all about getting rid of any assumptions you may have and think logically and methodically and CS3157 makes you develop those skills more than you ever thought possible.

May 2014

First off, Jae is a fantastic lecturer. If you go to every class and pay attention (which isn't too difficult to do), you'll learn a ton about C, C++, how the internet works, etc. The material itself is quite difficult. C is a low-level language, so you'll be doing a lot of stuff that you probably never did before (especially in 1004/1007). You have to worry about memory, how pointers specifically work, and every other minuscule detail that gets done for you in higher-level languages like Java. It's interesting that you start at C, but build up to C++, which shows itself to be strangely similar to Java (Java was built off of C++)... so you kind of do a full-circle. Overall, would absolutely recommend this class, but make sure you take it in a semester that you aren't too overloaded with other stuff. You will do a crapload of work, but you'll learn a lot.

Jan 2014

I took this class 1.5 times. I started as a sophomore, shortly after 1004, with the mindset of "let me just make this program work." That mindset led me to a 50% by the time the withdrawal date came around (which would've been a B-, but I thought I was failing) so I withdrew. I enrolled in the class again 2 years later, this time with the programmatic maturity to understand what the class was really about, and why that information mattered. Although the classwork takes the format of programming assignments, they are really about the underpinnings about C/languages (e.g. memory management, pointers, etc.). If you want to learn it well, you should break things! Rewrite your labs in different notations (e.g. array vs. pointer) to learn the differences. Become intimate with C. The reason I mention my backstory is to help advise students who are on the fence about taking the class now or later. Some people can handle AP early on. But two years ago I honestly didn't care about freeing memory or understanding where my variables were stored. I gradually developed that interest after taking a few more CS courses/ being asked such things in interviews, and I am very happy I had the opportunity to take AP again. I got a lot more out of it, and the class was immensely more interesting. The class has 10 labs, of which 1 (lab 8) is optional. In the past, Jae had a policy of only granting class-wide extensions and every lab would be extended. He has changed his policy, for the better, to allot everyone 7 penalty-free late days each, to be used whenever (with a max of 2 late days for a given lab). This is a great policy, since it allows you to manage your time a lot better. The class also has 2 midterms and a final. The all-or-nothing nature of many of the questions means the grades are relatively polarized--you could do extremely well or extremely poorly, for missing 1 simple thing. If you get above a 90, you really know what's up. So I mostly wrote this review to call out the author of the last post (December 2013) regarding handling of the final. To give readers some context, several people in the class missed 5 points of a 20-point question for different reasons and proceeded to somewhat aggressively mail the list-serve arguing over which wrong answer was "less wrong" and deserved 2 extra points. Several TAs and Jae explained the reasoning to the rubric in response. To insult Professor Lee's English, when he so eloquently and rationally addressed each concern from the email chain in a class announcement, is incredibly rude and borderline racist. Full disclosure: I missed 10 points of the same problem for a different reason, and though I disagreed with the severity, I had the decency to not make personal attacks. Though I found grading in the class sometimes tough, and I did not do as well I as would've liked, I learned *a lot* and became a much better programmer. Much of this is due to Jae. He is one of the few people in the department devoted exclusively to his students. I have personally experienced how he uses student feedback to iterate on his teaching from semester to semester, in order to better serve his students. He organized a class hackathon this semester, complete with pizza, Insomnia cookies, and t-shirts, to help students connect on an informal level. He stayed there the whole time, until 5:30 am, making sure he chatted with everyone at least once before he ran off to take his son to soccer. He learned my name despite the large class size (I never attended office hours or anything either). He is one of the best professors I have had in the department, and I would recommend taking his class to anyone mature enough (as a programmer/student/person) to handle it.

Dec 2013

I agree in general with the May 22 2013 reviewer on some of the basics (don't go anywhere near anything taught by Shlomo Hershkop, the exams are a bit of a crapshoot, details on labs can be a bit overwhelming but the detailed specs are ultimately a net positive) so go read that and then I'll focus on a few points where we differ to some degree/where things have changed: - This not "just a programming class." Getting familiar with C means getting familiar with a lot of low-level system functionality. If you don't understand pointers and memory management completely intuitively, you'll never really understand what's going on in higher-level languages like Java. Jae Lee definitely gets you acquainted with pointers and memory management. - But you will learn a lot about real-world programming. For example: I hated the listserv early on and sent the professor a frustrated email about it, but I came around eventually. A lot of the big (and small) open source projects are built around listservs and all that comes with them. This class's listserv gets you used to the number and type of emails (including repetitiveness), the personalities that appear (the noob who asks a question he could've googled, the guy who replies to everything within 10 seconds but is kind of an asshole, the Benevolent Dictator For Life, i.e. Jae Lee, etc.), and so on. - YAXing (as many extensions as you want) is gone as of this semester. By all accounts, that's a big improvement. Also, we had two midterms this time around instead of just one. - I felt that the exams assessed the material quite fairly, although they generally played to my strengths and I did well on them without studying, so people who studied a lot and still did poorly likely feel otherwise with good reason. - Focus on the principles, not the details. C, C++, Unix and TCP/IP all have a really deep underlying logic and if you can wrap your head around it you're set. Everything is there for a reason. If you remember the reason you can derive the details on the exam. For example, in Unix and C "everything is a file" (external devices, actual files, other programs, etc.) so when you write to stdout you're writing "to a file." When you read from stdin, you're reading "from a file." Sockets can be treated exactly like a file. BUT because "everything is a file," a "pointer to a file" (FILE *) can't possibly be an ordinary derefencable pointer -- dereferencing, after all, is the act of visiting a location in memory and reading some information out, which you can't conceivably do with a web socket -- so if you worked through that logic, you wouldn't make the mistake some people did of thinking that a file pointer can be dereferenced. So, principles, not details. In general, I liked this class a lot, though a grading dispute on the final exam made me seriously question Professor Lee's judgment/command of the English language. However, given that I did not witness any other such problems, I'll be charitable and assume it was a truly isolated incident.

May 2013

I definitely wasn't alone in that I had a lot of mixed feelings about this class. I'll start by saying that is certainly the only viable option for taking Advanced Programming. (Sidenote: If you're even thinking about taking Shlomo Hershkop's course, you're better off dropping out of school than wasting your tuition on an insulting elaborate practical joke). However, I wouldn't call this class an amazing one that you absolutely have to take before you graduate, unless of course it's a requirement. It really is just a programming class. Full disclosure: I have no plans to take OS and I'm not sure when I'm going to use C again. The general theme of this course was "trust me - this will all be useful later." As a result, the subject was as uninspiring as it gets, unless you happen to love learning about large amounts of syntax and technicalities of programing languages. The best part of the course was the labs (programming assignments). They were very well written were never had ambiguities. These assignments are the same every semester, and solutions are provided immediately after the deadline. Though this technically makes it very easy to cheat, keep in mind that the labs are the core of this class, and there's no point in taking it if you're not interested in working through each of them. Because they were so detailed, they could be a bit overwhelming to read the first time through, and it is very important to follow the instructions to the letter. Ultimately, they were very enjoyable to work through, and I can honestly say I learned almost everything that I learned in this class from working through the assignments. Rubrics were provided for each lab that clearly stated how points were awarded. I personally didn't find the lectures that I attended all that helpful. The ones at the chalkboard gave good introductions to topics, and I profited the most from these. He'd often go over something too quickly, and then be asked to repeat it three or four times more. Occasionally, he'd repeat a large portion of the previous lecture, though it was impossible to tell when he would do that. Ultimately, it was clear that he made the effort, but had trouble keeping everyone in the large classroom on the same page. There were a lot of times when he'd explain something simple, or say "you remember this from last time, right?" and then five minutes later someone would raise their hand and ask about it. When he did hour-long demos from the computer with the lights out, I found it very difficult to focus. I'd always try to follow along with him, inevitably miss one step and therefore be lost for the rest of the demo. The pacing was also strange, as the last three weeks were the only time we spent programming in C++. Almost the entire first half of the semester was dedicated to the C language, and the remaining time was spent on systems programming in C. I understand that the training in C might be important for people who plan to take OS, but for everyone else it seemed like overkill. I really never got the point of the whole YAXing policy. Looking back, the deadline for every lab besides the first one was extended, and roughly half were extended twice. Sometimes, the announcement of the extension was within 24 hours of the original deadline. Talking to previous students and looking at CULPA reviews, I see that he's been doing this same practice since he started teaching. I can't help but wonder why. It would make a lot more sense for him to just tell us how long we truly had for the assignment so that we could plan ahead. At this point in teaching the class, he probably knows how long he actually plans to give the class for assignments. The mailing list was something about which I seemed to have the minority opinion. I was really not a fan of it. It might've worked better with a smaller class, but for a class of 140 students it bordered on absurd. There was so much showing off and subtle attempts to suck up to Jae. Some attempts were not subtle at all; for example, when the final exam solutions were mailed out, one student sent out an email saying that the exam was very well designed, and that this was the best course he had ever taken. People would also use the mailing list to tell the class about how they went further and did additional work. The worst part of this class, and by far the most frustrating, was the evaluation process. Jae said on the first day that it is very difficult to write an exam that assess what we truly know. After seeing last semester's exams, it is clear that he is making the exams substantially more difficult by the semester. He always said that working independently through the labs was the best way to prepare. As someone who did just that, I can frankly say I've never felt so unprepared for exams as I was in this class. The issue wasn't my approach to the labs, nor was it that I wasn't studying hard enough. The midterm was about the same length as the final even though the final was given during final exam period. There were a total of 17 questions on the final, and every single one of them was either a (very) short answer or multiple choice, with absolutely no partial credit under any circumstances (and trust me, there were plenty of places to mess up). Questions would be asked on code fragments that were as long as 3 pages. Single short problems would often test 5 ideas at once and carried a high all-or-nothing point value. To add insult to injury, there would be multiple questions testing the same trick. It seemed crazy to me that single trick multiple choice questions carried the same amount of weight as entire programming assignments. The only reason I didn't feel worse when walking out of an exam where I had to make a semi-educated guess on most questions was because I knew that no amount of preparation would've been sufficient. Ultimately, the final curve is very generous, with half of the class receiving at least an A-, and this will save you at the end of the semester if you work hard and have the right amount of luck. The grades on both exams truly ranged from 0 (yes, zero) to 100, with the median on each around a 50.

May 2013

Advanced Programming is a great course which makes you a better programmer. It introduces you to C, C++ and some system programming. It also introduces the UNIX environment if you're not familiar using a shell or an editor like vim. Jae started slow in the beginning, spending a lot of unnecessary time on C. He rushed through C++ in the end because of this. The class gets most interesting in the middle when you build a simple web server. The labs take anywhere from 2 - 14 hours of work. Lab 7 is the longest. None of them were really hard, but he extends the deadline for pretty much all of them. The midterm was just as hard as last semester. It's not bad though because the class average is really low (around 50), so you can get a good grade. The final was much easier than the midterm. A lot of people complain that this class is hard - it's not. It's of average difficulty and has an acceptable workload for a 4 credit course. Jae's a great teacher, but he's not very approachable. He does care for his students, but he's very curt and to the point when you talk with him in person.

Dec 2012

Basically I was really excited to take this class because the other reviews were raving about Jae. When I saw he was teaching again after he got his PhD, I was like YES, and now at the end, I'm just like meh. Well, the start was good. He set up a listserv to encourage class participation where students could ask questions and interact with TAs and other students. Everything was explained slowly for people who have never been exposed to C, but then he started to get behind on his lectures. That was sort of when things started going down hill. The labs were fun, but he would not have covered the material for them, and so he had to rush in class to cover what we needed to know on the labs, rather than take a good amount of time explaining things. Inevitably, he would have to YAX (yet another extension) them so he allowed people a reasonable amount of time to finish them. He also changed the labs from counting 40% of the course grade to 15%, which in my opinion has hurt a lot of people. We spend A LOT of time on doing the labs, which is why I think they should count more. That's where we do most of our learning, and where we can demonstrate we have an understanding of the material. The midterm was really hard. After he gave us the midterm from fall 2011, which seemed very doable, the actual midterm was a disaster. The average was a 50 with a standard deviation of like 23. As someone who did well on the labs, I figured I was going to be fine on the midterm, but when I saw the midterm, I panicked because it seemed incomprehensible. I feel like I could have done a lot better. The second half of the class felt rushed. The C++ things seemed VERY rushed. The last two labs are C++ oriented. Honestly, I'm on the verge of taking the final and still don't feel like I know that much about C++. I think Jae was very stressed this semester with a class of almost 200 people and that detrimentally affected his teaching ability. Overall, I wasn't blown away by this class. I feel like I didn't really profit from his lecturing style, but I have to agree that the labs are very well designed.

Nov 2012

Jae's class is carefully thought out. Assignments are meticulous and error free. He actually teaches material in class. So you will learn things from him instead of having to teach yourself everything. The entire class is extremely well executed. You learn a tremendous amount from working through the assignments. The class is incredibly rewarding. Jae is very detailed and his lecture notes are previded which are a wonderful summary of the book and his lectures. He answers questions in class but does not get bogged down. He moves through the material swiftly but does not gloss over things. I can't say enough good things about Jae and his course. I feel lucky to have taken it.

Oct 2012

Literally the best TA in the world. I've been fortunate enough to have him as a TA for three of my computer science courses, and every time I've needed help, he's been extremely responsive and helpful. He'll help you debug your code and patiently explain theory over and over if you need it. Don is very patient during office hours. He was also the only TA in my COMS 1004 course who wasn't trying to make us all get Cs. His TA office hours are always packed because it's pretty known what a great TA he is. I pretty much love him.

May 2012

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.

Jan 2012

Jay was great. The course started a little slow and could have gone faster on the non-programming parts. Because of the slow start and the time we spent on make and git it felt rushed by the time we got to c++ at the end. The lectures (always sent out) were really clear and full of examples. He set up a mailing list that ended up answering most of the tricky problems in the class. From the questions the people in the class were split with some people advanced and a lot starting from a very very basic level. Sometimes the advice on the list was really helpful and in depth and sometimes it just gave the answer with no explanation (or the wrong answer). One of the TAs (Arieh) seemed to be really good and on top of the list. It might be good to offer a weekly recitation for people who feel theyre running behind, or offer a basic and honors section of the class.

Jan 2012

Jae was a good teacher who cared about the students and put efforts in teaching, but as previous review mentioned, not mind-blowing. He covered the C language very thoroughly and did an excellent job in teaching pointers--which may be one of the hardest part of C syntax. However, he spent almost half of the semester just teaching C language and as a result, the rest of lectures (netcat, building a web server, C++, etc) were very rushed. Many of my friends who had no knowledge of how web servers work struggled. Example codes and other references were provided but was hard to consume even after attending Jae's lectures. Grading was fair since there was no partial credit on midterm or final, but because of that, it did not truly reflect how much a student understood the material. Median grade for almost all labs were perfect grade--so labs did not affect your grade that much if you're in the top 50%, the average grade for midterm was very high while the avg for final was around 60, which made the final exam the only differentiating factor of the grade for most of the students. Also, even though the final covered materials from about 6~7 labs, the test only focused on 2~3 labs and *everything* was one word answer with no description allowed--no coding, no partial credit, etc, which penalized students who "almost got it" very heavily. One thing that made Jae's class great was its clean organization. The organization of lectures (order, increasing level of difficulty, etc), mailing list, rubric for grading each labs, lecture notes and lab manuals were all very useful and carefully crafted. Overall, it was a good class and I did learn quite a lot.

Jan 2012

Jae is my idol. He is such a genuine, honest, and open teacher. Jae loves his subject and knows EVERYTHING about it. Jae was very responsive to student input regarding class administration. The only reason the class was because of students who took advantage of Jae's niceness and petitioned for extensions on every lab, nearly all of which were granted. I learned so much from this class. Judging from past CULPA reviews, it seems barely anyone has been able to do what has been deemed even a "competent" job teaching this course, so the fact that Jae made this class so useful and well-run while dealing with such a difficult course is a testament to his teaching ability. The bottom line is: if Jae is teaching Advanced Programming, you should take it with him. No other professor has been able to do even close to as good of a job. Jae taught well, tested fairly, and is a generally awesome person. What more can you ask for? I wish every professor would be like Jae. Jae deserves his gold nugget rating.

Dec 2011

Jae was an okay teacher with a fair grading scheme, but I wouldn't say he was mind-blowingly spectacular. Take my review with a grain of salt, as I got senioritis halfway through the semester and never went to office hours. The semester started out well enough, with a lot of good explanation of pointers, C syntax, etc. But as time went on, he started to fall behind in his lectures. As a result, the lectures were less focused on explaining and teaching material and more focused on explaining what you need to know for the labs. Labs also took a similar route. I started from knowing the functions I would need for the labs to Googling everything. Thankfully there's stackoverflow and cplusplus. He would also always extend the lab due dates to reasonable dates for everyone. Tests were fair. He emphasizes that doing the labs on your own and understanding what's really going on will be the best preparation for the exams, and he means it. I didn't need to study much else beyond reviewing the lab solutions. Jae also set up a course listserv in which he (Jae), the TAs, and the students could all participate. Anyone could ask or answer question, post articles related to computer science in general, etc. It's a good system, but you have to find a way to sort course e-mails from the rest of your inbox; the listserv totaled 766 e-mails throughout the semester. Overall, someone with any initiative and the ability to adapt to CS languages shouldn't have a problem with this course, and there's plenty of resources to help you along the way if you seek them out. But don't expect to come out with god-like programming skills. It's just a CS course.

Oct 2011

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!

May 2011

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.

May 2011

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.

Apr 2011

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.

Dec 2010

I'll be blunt: Angelos Keromytis is not a good instructor. He might be pretty smart and know his stuff, but he just has no idea how to be a professor (sometimes literally; there was a period of 5 or 6 classes where I didn't see him at all and the TAs taught both the lab and lecture classes). A good professor spends time crafting detailed but concise slides with concrete, succinct examples; Keromytis copies code off the web and pastes them into his slides as if they were his own. (Seriously, Google the code. You'll find the exact same contrived examples online that only seldom work; most of the time they'll only serve as basic skeletons of what you need to do to get your code to compile.) A good professor is welcoming and encourages student participation and questions; Keromytis is intimidating and sometimes even humiliates students. For example, about 3/4ths of the way through the course, when a student wasn't sure how to change permissions on a file, instead of replying something reproaching but nevertheless sane such as, "Use the chmod command, as we've been doing for the past two months," Keromytis responded, "Are you kidding? You're kidding, right?" This is not a good way to encourage students to keep asking questions. As if asking questions helped most of the time (see next paragraph). A good professor teaches and presents students concepts and ideas; Keromytis' ego comes across more than his material, and when asked questions, tells you to just look at the man page. Due to both the nature of this course and the professor's incomplete slide examples and his poor teaching abilities, you'll have a lot of questions about what to do. However, half the time when asked something about a particular C function or paradigm, either on Courseworks discussions or in class, Keromytis will just tell you to refer to the man page. While I understand that this class is supposed to mold you into a competent programmer who is fearless of elaborate technical documentation, there is something worthwhile about having a human being explain something to you rather than just reading it online or on a man page, and a good professor shouldn't just tell you to refer to something else nearly all the time. ..Although this professor might be an exception. I feel like I've learned more through Stack Overflow than Keromytis could ever hope of teaching me. In the end, the only saving grace in this class were the two TAs. They seem to be the only ones that cared about us. They would take the time to read through our code line-by-line, helping us find bugs, and they would actually help clarify concepts. Their accents were a bit hard to get through at first, and the English and grammar in the assignments were sometimes confusing (since they wrote them all), but they mean no harm and will gladly clarify if you ask. Not to mention if you write to them about a specific bad grade you received and give reasonable arguments for why you think you deserved more credit, they will entertain your request, and if you present a good enough argument, this usually entails you getting at least one or two points back. I might sound bitter, but don't think this is because I got a bad grade. I didn't. Keromytis is just an astoundingly poor specimen of a professor. I got a good grade in the class, but it was due to my own hard work and the hours I put into labs and homeworks. I wish I could say Keromytis helped me along the way. I can't.

May 2010

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.

May 2010

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!

Jun 2009

Jae is a God. No, not just a god, he is a Three-Wolf-Moon shirt on steroids. Not only does he know his stuff, he knows how to teach it. Granted, this was the hardest class I'd ever taken in my life, but the long hours of work and sleepless nights have made me into a better programmer and students. There is a reason as to why people were basically begging him to revive the Data Structures in C class and teach it also; he was just *that* good. The classes were engaging, he would answer any question and repeat things as necessary, and really wanted to stress it all so we would understand, even if we had to go through it multiple times. The most lovely thing about this class is the listserv; through email, all students in the class could give advice and help each other on the homework (code-free of course!). Writing your own web server was daunting but once you're done, you'll be amazed at what you've been able to accomplish. He is professor material, for sure. Columbia, be smart and make him a prof with automatic tenure; our Computer Science department needs more wonderful people like him.

May 2009

Jae is the best teacher I have ever had, hands down, and definitely golden nugget-worthy. He is knowledgeable and approachable. He will never hesitate to review a concept that anyone is having trouble with and his explanations are unfailingly clear and highly informative. There are two required textbooks for the course, but most of us rarely had to crack either open since his syllabus and teaching ability are so great. One of the things I particularly liked was that he set up a mailing list at the beginning of the semester in which anyone could ask him, the TAs, and our peers to clarify concepts, etc. - this was extremely helpful, particularly for the labs. He is always understanding of his students' tight schedules and tries to be flexible by granting class-wide extensions for the labs. This gets to be a little excessive by the end of the semester, and you start to depend on the high probability that you will have more time to finish the assignment, and here's a tip that took me ages to figure out: DONT! The course covers the C programming language in depth, offers a good introduction to the UNIX environment, as well as an introduction to C++. However, he designs his lectures and labs to offer sufficient background for a variety of higher-level CS courses, so you will learn a lot more than that! As Jae said at the beginning of the semester, his goal in this course is to take "programming students" and turn them into "programmers", and I believe he did just that.

Apr 2009

Jae's lectures are always interesting, sometimes funny, and certainly relevant and helpful for completing the lab projects. Though many of the projects are rather time-consuming, they are all quite easy if one pays attention in lecture, reads Jae's lecture notes, asks questions on the mailing list, or goes to TA office hours. Jae is sympathetic to students' difficulties due to external influences and sometimes gives class-wide extensions on the projects. The curriculum is a quick (but thorough) overview of C, C++, and UNIX programming and is very good preparation for many of the advanced CS courses. There are 10 lab projects (one is optional), each of which one has about a week to complete (before the inevitable extension), and a final exam.

Dec 2008

Jae does an excellent job making this class interesting and informative. He learns everyone's names and is always helpfully giving extensions for every lab assignment and responding to the class email. I learned a lot about how unix worked and how to write good c programs, including completion of a web server. The assignments are well thought out to build and each other and simulate real life programs.

Dec 2007

I would not be writing this review if not for the spectacularly bad experience I had taking Prof. Keromytis class. I found his lectures unispired and generally incoherent. For a programming course I find it important to be given examples but his lecture slides were what seems like incomplete ideas carelessly put together so that there would be a semblance of a lecture note. I later found out most of the slides were taken straight off of books, other websites, man pages, etc. As a matter of fact the only good lectures were those where we had guest lecturers. He tended to be somewhat condescending in reponse to questions and requests and I got the impression that he was intentionally misinterpreting the question to make you dumb when in fact that was not the question at all. His labs and homeworks were generally repetitive and again uninspiring. Many of the labs and homeworks were repetitions of one another or just annoyingly tedious...sort of like asking someone to do long division to the 100th decimals. Overall, the worst CS class I've ever taken in my life.

May 2007

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.

Dec 2006

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.

Mar 2005

I have to dissagree with what other majors have been saying about this course, if not what they have been saying about Professor Sklar. Professor Sklar is the nicest person in the world and will do everything in her power to help you if you actually go to her. She is pretty quiet, and won't come to you, even if she thinks you're doing badly. If seek her out though, I have never seen a professor go to such lengths to help her students. She even has an aim sn just to help students on the nights before big assignments are due. She is usually a little bit late everywhere but she's a fine lecturer and presents the material she has to present clearly (ps people complaining about her writing code on the board a lot, all of the code up there is usually on the website). The class however, is a complete nightmare. None of the annoying weekly labs are that hard, and the homeworks are definitely resonable, but you switch languages every week. I suppose if you really know you're stuff (ie you've programmed in pretty much all of the languages others have mentioned some before) you can skip a bunch of the lectures and labs and do fine in the class. However, even if you're a major, if you're just taking the class right after 1007/1004 you're going to be in pain (even if you did well, I got an A in 1007). And looking up syntax/googling everything for all of the assignments all all the time. The department is pretty ridiculous to expect second semester majors with limited experience to do very well in the course. Moral of the story: unless you're programmer extraordinare go to office hours and make lots of friends you can run to at 3am for help

Jan 2005

Professor Sklar is a wonderful teacher--extraordinarily helpful and kind and a clear lecturer. However, Advanced Programming does not live up to expectations--it's more of an Intro to Programming in Several Different Languages (and it may even be easer than 1007). It doesn't go enough in-depth into the subjects it covers, and the assignments aren't especially challenging. Covers basic C/C++, PERL, PHP, and Unix tools.

Jan 2005

This semester, we were told that the course was to be "watered down." I see that all of the other CULPA Advanced Programming reviews talk about how they always had to Google stuff, but I only had to Google stuff once in a while. We covered C, Perl, PHP, a little UNIX/shell scripts, and C++. I had lab in 9 in the morning, so I would cut it often, but going to them makes you get the labs done faster (for the same reason you get HW done faster at a library). The course is not curved, but that's a good thing; I think the average is around an A- (although no A+'s are given). I'm glad I didn't have to constantly Google stuff like the previous reviewers did, but the class was still -literally- a waste of time. If you can get notes (and if you can't, there are abbreviated versions posted online), and lab handouts from a friend, you'll do fine by attending neither lecture nor lab. The lecture does not teach you anything you can't learn by reading a handout.

Dec 2004

This class wasn't too hard, but BEWARE if you're not a cs major. I thought I was doing OK throughout the semester, and I got quite a shock when i received my final grade. the class was not curved AT ALL. If you don't REALLY know your stuff, you won't even get a B in this class.

Sep 2004

Suhit is a great guy who is always willing to help and has creative ideas for making a boring course a lot more interesting, esp. with developing a challenging but useful project to work on throughout the course. Unfortunitly for me it was a little to tough at times. But he really puts forth his absolute best effort to every student and is an upstanding guy. I don't know if I would suggest taking a 4 credit class at all over the summer, but if you have to you would be lucky to do it with him. I actually enjoyed the course a lot more then i expected. He is a phd student, but i hope he gets a chance to teach a real semester course where he doesn't have to cram all his ideas into a short time frame.

Jan 2003

As much as people may say that AP was a disaster from the start because the CS dept messed it up, Sklar did not in any way help the situation. I learned absolutely NOTHING from her in this class. She wasted half of the class time writing code on the board, which could have been printed or posted online to the same effect. The rest of the time she read her useless slides, which were posted online. The best thing to do was to skip all classes and learn any new material by searching for it on google.

Jan 2003

Professor Sklar actually speaks English well enough to explain herself to her students. That right there puts her ahead of all but 3 or 4 CS professors. The fact that she makes class interesting, that she genuinely cares about her students, and believes in the department enough to take on an insane workload because she knew students needed her? That's just icing on the cake. In a department bereft of professors who care about education, and filled with academics who manage to make simple addition incredibly difficult, Professor Sklar is a breath of a fresh air. It's probably unfair to judge her based on the frenetic chaos that was AP; it was thrust on her in August, and it was a doomed course even before then. She's teaching it again this Spring, and here's hoping that she could figure out what the hell this course is actually supposed to do. The department certainly picked the right professor

Dec 2002

First of all, it's a required course for SEAS students so many of you can't really get around it. The point of reviewing this course is more to alert students who are going take it to some of the difficulties they may face (she's teaching it again Spring 2003). That said, Prof. Sklar is not a bad teacher--not at all, especially when compared to many other SEAS and Physics/Chem/Math professors. For the most part she means well and is quite flexible and open. I think the main problem with the course was the overly aggressive syllabus--which has more to do with the CS department and the unfortunate fact that it is pretty much still experimental than with Prof. Sklar herself. Officially, the course is to "better prepare students for courses like OS and Networks". However I felt it was trying to cover such and such topics just so that the department can suppose we know them when in reality we only know _about_ them. _In short, in this class the syllabus is more important than you_. As with most other CS classes, there are some very prepared people with extensive C and UNIX and internet programming backgrounds who find the course and the lectures a joke. The ultra-motivated student with a lot of time in their hands may enjoy the "sink-or-swim-ness" by swimming very hard and doing a lot of reading and experimenting on their own. The average student may also do well by doing the bare minimum and choosing cheesy ways out in programming assignments but will unlikely feel satisfied with the experience.

Nov 2002

I cannot think of another class I left so often thinking, "what?"... too much information taught way too quickly by a professor who assumes you know more than you do and who does not use a microphone in a large lecture classroom. She means well, and does care about what the students think, but her teaching is less than what one would hope... she thought that writing out a long java program using servers and clients would show us how to write servers and clients in java, but while giving us the code offers us the opportunity for rote memorization, it does not show you HOW to get that solution. And instead of teaching us C++ which would have actually built off of our knowledge of C, she tried to teach us CGI in one day, javascript in one day... you get the idea. Of course it isn't entirely her fault that there is too much information in too short a time. This class was a bad, bad idea. The only perk is that the game, once done and all unnecessary elements for the purposes of the homework are removed, will probably be cute. Oh, and she had the TAs teach us parts of the class we were responsible for exclusively in recitation -- bad idea... some TAs were good, but most were, well, not good.

Nov 2002

Prof. Sklar is invested in her class and respects the delicate line between challenging vs. overwhelming students. She actually wants student feedback and because of this she doesn't undermine the integrity of the class. A rare thing in cs, there is no one "holding the grade cards" except the students, whose participartion is equally proportional to the grade. Her exams and assignments can be fun and will never cover anything that wasn't presented or isn't relatively easy to look up (but plan on taking the time to do so). When she makes a mistake, she compensates and makes sure it is cleared up. She is also extremely organized and even tries as best as she can to pick up the TA slack.

May 2002

Despite the grumbling from other people in the class, I found this class very valuable. As a graduating senior heading out into the computer science workforce, I found the presentation of a broad range of topics very helpful. Though Prof. Shulzrinne didn't have time to go into great depth about any one topic (except maybe C programming), I felt that the overviews given (along with references to website where we could get more info) gave me a much better understanding of the tools & languages that are out there and what can be done with them. Other people in the class hated how we had to go searching for documentation around the web to find how to do certain things, but I thought it was actually very good preparation for the "real world" of software development jobs, where research of this kind is an essential part of the job. The class was taught exclusively with PowerPoint slides, which at times were the same as reading "man" pages, but Prof. Schulzrinne did provide a lot more related information in class (i.e. go to class). I don't know if the class really should be a replacement for softe, because (having taken that prior to this course), I found they were both useful, and that students will probably get more out of AP if it is taken after softe. Finally, and maybe most importantly, I need to commend Prof. Schulzrinne on his accessiblity (via e-mail). He answered all of the [many] questions that came to the e-mail mailing list, and always seemed to reply to e-mails very quickly. How many other professors do you know who would write back to you within an hour when you send an e-mail to him at 12:05 AM on a Saturday morning??

Apr 2002

This class is supposed to replace Softe, and from the initial looks of the syllabus, it seems very worthy. This is the first time it was given, so expect some changes, but it covers a bunch of real tools in the marketplace, such as BASH, C, XML, SOAP, RPM, TKL, among many others. Its also apparently looked at as a precursor to Operating Systems for students who like to focus on coding instead of the theories behind it. What happens as the semester goes on, however, is that the usefullness of the subjects as they're taught varies inversely with their actual importance in the "real world". The class ends up wandering aimlessly as Schulzrinne simply presents bits and pieces of each subject through his powerpoint presentations. Then when homeworks come around, they're often on subjects hardly covered in class, and you're expected to google your way to tutorials provided elsewhere. This is especially the case with XML/Java (an very active & useful topic), where a few scant lecture slides leave you with nothing useful for the homework, and you end up learning it as though you're not even in a class that's supposed to teach it! Oreilly books to the rescue! When Schulzrinne ventures into talking about the marketplace of OpenSource vs PeopleSoft vs Proprietary and the like its like reading a weeks worth of slashdot. It occured to me that the people that are the most interesting to listen to on those subjects are out in the industry actually shaping their fates, not in the classroom. The bottom line is that, common to other Schulzrinne reviews on CULPA, he expects you to learn it based largely on unspecified non-class materials. And common to most all CS classes I've taken, the HWs serve as a good lesson in doing the HW, not necessarily in learning the subject (to be fair, the C assignments were a bit better as we spent about 5 weeks with it). I finish each one thinking about how next time I have to use whatever tool I'm going to have to learn the syntax mostly from the beginning anyway. The syllabus will probably improve after it gets reviewed a couple times, but the core experience is not much more educational than getting a linux machine and playing with these technologies on your own time. The only difference is that here you'll get a grade and 3 credits for it. I don't know if its better than softe, but from conversations I've had with friends it sure sounds like there's significantly less work and stress.