professor
Jae Woo Lee

This professor has earned a CULPA silver nugget

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.

May 2017

Disclaimer: AP has been my favorite class at Columbia. The word around the street is that Jae is not as good in OS as in AP but I think people who say this are being unfair. Kernel hacking and OS theory are by nature tougher beasts. There is no easy way to approach the material without severely watering it down. I found AP to be more enjoyable but only because I never felt lost. Yes there were some frustrating debugging moments but I always knew the path the success. OS was different. I felt completely and utterly lost multiple times while doing the hws. I questioned my love of coding, my humanity and my sanity, all while cussing out this class and the kernel documentation. Jae thrusts you into the wild with just the basic necessities (the roadmap for HW7 was generous and appreciated) and we were forced to find our way home. Some can consider this bad teaching. I think of it as tough love. It was necessary to push you to the next level. AP was for teenagers, OS is for adults. Once I became more comfortable with the kernel and its ways (around HW7), I found the class just as enjoyable as AP. Overall, great experience. I only refrain from ranking OS among my favorite courses since I am pretty sure it gave me PTSD. Maybe in a few years I will look back at OS with endearment. The tests....They are much worse than AP's... coming from a guy who got 100 on the AP final. The T/F and multiple questions are really impossible to prepare for. Although the curve evens it out, I think it doesnt give students who've mastered the material a good opportunity to shine. If you loved AP, you'll love this class. You learn a ton. Some example HW's were building a scheduler and a filesystem for Linux. I maybe would've liked if Jae spent more time on OS theory and less on Linux specific stuff.

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

This was hands down the hardest and most time-consuming class I have ever taken at Columbia. It was also my favorite. If you really enjoyed AP and think you would enjoy getting into the nitty gritty details of Linux, take this class. Jae is a good lecturer, but it seems that he is still figuring out how to teach operating systems, so his lectures are not as great as his AP lectures. Still, it shows that he put a lot of thought into the way the class and assignments are laid out. I found the order of the material to be pretty natural and easy to follow, but I'm sure the syllabus is still changing every semester as he figures out how to teach this class. Although I found the lectures and readings easy to follow, my team and I really struggled with the homeworks. However, I'll admit that part of the reason that we struggled so much was that we did the readings right before the tests rather than before attempting to do the assignments. So, if you want to make your life easier, do the readings before you get down to coding. There will still be some shooting in the dark involved, but not nearly as much as if you only rely on your knowledge from the lectures. That being said, what made the class truly enjoyable was having an amazing team. None of us knew each other before OS, but we became close friends by the end of the semester because we were spending close to 40 hours/week with each other for this class. It seems like an exaggeration, but I promise its true. We got pretty decent grades on most assignments, but we made very little progress on other assignments (despite the crazy amount of hours we dedicated to working on them). The tests are classic Jae-style trickiness. The curve was pretty generous though. If you are interested in the material and aren't afraid of some hard work, go for it. You are only at Columbia for so long, and you can get a lot out of this class.

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.

May 2016

Have mixed feelings about this class. Took AP with Jae many years ago and can say that it was significantly better run and more structured than OS. He seemed much less prepared to teach this class. The content wasn't terribly interesting. We spent a lot of time on UNIX APIs and not enough time kernel hacking. It was an 8:40 am class so no one really showed up. It didn't really matter since Jae would just talk about a couple of functions from a man page for an hour any way. Most of the learning is done on your own by reading many chapters from 3 textbooks. The first midterm was poorly written and essentially required you to know random facts from the textbook and didn't really test conceptual thinking. The second was slightly better but still overall not a great test. The HWs were hard. Required a lot of reading of man pages, kernel code and experimenting. Doing it on your own was a miserable experience that led to many sleepless nights. Always felt pressed for time on the group projects. I never felt intellectually challenged by any of it but did feel like it was a lot of worked. There was never an aha moment where I appreciated the beauty of an operating system. It's just a mangled mess that we deal with since that's how some bloke decided things should be done many decades ago. Ensure that you form a good team. They don't have to be incredibly smart, just very hardworking, sincere and accountable. Mine didn't do any work which led to a lot of incomplete homeworks since it's kind of impossible for one person to finish the HW on their own unless they're willing to devote well over 10 hrs/week to it. Overall, I was slightly disappointed in this class given that I thought AP was fun and easy. Jae needs to step up his game here. You might want to take the class with Jason Nieh who is an OS researcher and will focus more on kernel programming, but be warned that his workload is even worse. I do think that every CS major should take OS. It's surprising that Columbia doesn't make it a requirement. That said, I begrudgingly took it. TAs for this class were great fwiw. A+ to them for their hard work.

Apr 2015

This class was probably the most immediately applicable class I ever took, and it's easy, too. Jae teaches you C, much like in the Advanced Programming Course, with an emphasis on the subtleties of memory allocation and pointers. In the last 5-ish weeks you make the transition to C++ and focus on references and object-oriented structure. During all of this, you're also learning about fundamental data structures like linked lists, trees, and graphs. It's a crash course in everything you need to know to get your foot in the door for programming and helps a lot for physics, chemistry, economics, or whatever you're trying to do (if you're not a comp sci major). Highly recommend it.

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

So Jae taught this course in Spring 2014 because the normal OS professor was on leave. I'm not sure when he will teach the course again, but I wanted there to be a CULPA review so that people can go into this well-informed. --- The Course --- I learned a ton from this course, though I didn't necessarily realize it as I was slogging through. Jae reformatted the course and taught it with undergrads in mind, which was appropriate given that the class had many more undergrads than in past years (no doubt because of Jae's popularity). As such, much of the first half was actually an extension of AP (lab7/http-server) used to teach OS concepts such as concurrency, memory sharing, and inter-process communication (user space programs to teach kernel stuff). It again demonstrates Jae's theory of teaching, using previous knowledge in order to bridge the gap to new concepts. With regard to content, Jae put a great deal of time into UNIX programming compared with hardware knowledge / kernel hacking. Jae explains that the earlier stuff is more applicable and the latter stuff is changing (e.g. we didn't cover hard disks, probably because SSDs sort of shift that paradigm). I buy his explanation. The pacing of the course wasn't great, with probably too much time spent on UNIX programming on the front and too little systems/kernel work at the end. Of course, this is understandable given that this was Jae's first time teaching OS and that he completely restructured it. --- Homework --- A few individual assignments (that are pretty easy) with mostly group projects (up to groups of three). Having a good group is obviously helpful. All the projects run on Arch Linux, which you will set up on VirtualBox. The assignments usually didn't involve much coding, but rather a lot of understanding how the code runs and scouring the internet. In other words, frustrating yet also good practice for the real world. The assignments have good underlying structure, but still need refining (again, should get better over time). Sidenote: the listserv from AP carries over as well, and will save you hours of struggle if you follow closely. --- Exams --- I got destroyed on the midterm, but in hindsight it was one of the best crafted CS exams I have ever seen. It definitely tested your ability to read code and apply the concepts we learned. The final was very different and a bad evaluation of our mastery in my opinion: 25 multiple choice questions about very specific things we covered (i.e. very un-Jae-like). Both exams unfortunately do not provide room for partial credit. --- Lectures --- Not incredibly interesting, but still important to really ingrain the material in your head. Jae mostly worked off of powerpoints, which I found ineffective. The few times he used the board were better. For me, printing the notes/slides beforehand and taking notes directly on them worked best. --- Grading --- Jae curved to a high B+, which I consider pretty generous. Just be very VERY careful to follow homework instructions exactly as stated. Lots of times grading occurs on scripts, so the slightest problem could send your grade down just for not properly following basic instructions. --- TAs --- Jae carried over the best AP TAs and I assume he would do so in the future as well. There was also a contingent of Chinese grad student TAs who were friendly, but generally less helpful. I doubt I've covered everything, but hopefully someone after me can fill in any missing gaps. On the whole, I would say to take the class with Jae if you are an undergrad (and if he ever teaches it again).

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.

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.

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.