Many of the reviews so far are unfair and lack perspective. If you're into thinking, actually understanding why, and experiencing what it is like to work as a software engineer, Professor Ferguson's class is the one to take. Yes, the instructions are vague. Do you think your manager at work will give you a step-by-step outline of what to do? If you're at an elite organization that solves tough problems in the world (honestly doesn't that sound nicer than being a coding monkey???) then your manager will say, here is the exciting problem - solve it. Your will need to then reach out to people at your organization, do research online, use your brain. Yes, if you're new at a project and your boss is good, you can reach out to your boss AFTER you exhausted the other avenues. Otherwise, why does your boss need you over someone else if they always need to hand-hold you ever step of the way? Professor Ferguson stands in the middle where he provides helper code, provides recorded "how-to" examples to get you started, and is always there to help, whenever you ask. I've actually never seen a professor make himself so available to his students. Your manager probably won't even give you as much time! If you're working on something important and novel after school, often there is no one "right" answer. Prof. Ferguson involves some such questions on his homework. Yet, instead of being excited, I saw many students get flustered and not know what to do when they are asked to think for themselves. For example, he asked students to create an ER diagram on some data. Students asked him questions such as "is there a one-to-many relationship for x and y data?" That is a coding monkey question! Ferguson pushes students to up-level their thinking to that of a best-in-class engineer. For example, the best engineers out there say, "based on what we are trying to achieve and what data we have, here is my recommendation on how we organize it." There are many other points on why Prof. Ferguson is one of the top professors I've ever taken, but I'll leave you with one more. Many professors tell you to memorize some rule, you memorize it, you answer on the test, and then you forget. Professor Ferguson asks you questions where you end up understanding the why and internalize the why. For example, everyone who has taken a databases class knows the different types of data storage, such as a star schema. However, do you actually know how to take some data that is not pristine, wrangle it into a star schema, and then query it? In what cases would you use a star schema over another layout? What data should actually be on what table? How do you take the data from Third Normal Form to a Star Schema? I bet if you didn't take Ferguson's class then you will need your hand held when you start working as you wouldn't actually know the answers.
Someone posted this on Columbia Confessions last semester and it was the most accurate depiction of my experience in the class, so I thought I would share it here as well for future students: "It’s 2035. You receive an email titled “COMS4111 Final. After spending 3 hours figuring out how to install a Python 3 emulator, you finally manage to open the Jupyter Notebook. Question 1 has 27 parts. The instructions have been removed in order to shorten the exam length. You get another email from Ferguson saying he’s holding office hours 3 minutes before his wedding. A single tear rolls down your cheek. “Just like the industry, you whisper." Let me give you a quick high school style literary analysis of this passage to help those thinking about taking the class understand better. The author uses hyperbole when they write "2035" as a reference to how late many of the assignments, grades, etc. are released despite the teaching staff claiming they will be released the next day. The author then goes on to evoke the pain of setup in this class: "spending 3 hours figuring out how to install a Python 3 emulator," as much of your time will be spent fighting with your computer to just get the software you have to use connected and running. The assignments are very long with many parts, and the instructions are very confusing, a point alluded to in the metaphor that the instructions are almost as if they have been "removed". As the author illustrates, office hours do happen at random times and you have to be ready to hop on the call at any time of day, and possibly you too will get the chance to hear about his girlfriend. The author then begins to conclude this masterpiece by emphasizing the visceral emotions one feels through the imagery of a teardrop. This effect is compounded by the author's choice to use the second person throughout the passage. Finally, you are left reminded of Ferguson's constant belief that the undefined aspects of the assignments and acceptance of most solutions as long as they work are "just like in industry". By using such evocative imagery, the author, dare I say the artist, is able to capture not just arbitrary details, but the human experience of taking Ferguson's class. All in all, it was a decent but very chaotic and time-consuming class.
I think Ferguson's other reviews sum up his class pretty well. He is a very nice guy. I have a learning disability and he reached in the very beginning the semester about it, which meant a lot because I feel like I usually have to fight to get the accommodations I'm supposed to get (It's surprising the hoops you have to jump through with some teachers to get the extra time accommodations for tests that DS has already decided you need). That said his homework will take you forever. They aren't even that hard, just very tedious. There will be a bunch of typos. TAs and the Prof will give you different answers to a clarification question. Questions are often answered in one long Piazza thread instead of separate posts, which makes it annoying to search for. The lecturers are pretty boring and often have only 10 minutes of useful content. OH and the informal recitations with the Professor are basically mandatory. I also haven't gotten my grade back yet, but according to everyone I've talked to, even the TAs, most people get a grade in the A range... I just don't know if the time I had to sink into the class just to get it all completed (not even well lol) was worth it.
He's a good professor and once you actually get to know him, a nice guy, but the class itself is a total disorganized mess. I can understand how challenging it would be to design an introductory class based on basic database/SQL concepts because, well, it's not all that challenging, to begin with. SQL really isn't a programming language at all and it's very easy to learn. Basic concepts like "data cleanup" and writing the correct SQL query to get the data you want are really not all that hard. Basically, he could spend two or three weeks running through a few examples of various SQL queries/terms, show everyone how to set up basic database software, run through a few basic definitions from the textbook, and that would be the entire class. Because he does not want to run the class this way, (not to mention it would be far too short), you're basically stuck having to google your way through the majority of the class to teach yourself the concepts that were given very little, if any, time in a lecture. Going to the various TA office hours becomes mandatory as well. Thus, much of his lectures are "filler" material that hardly pertains to the class assignments/homework at all. You'll often find yourself saying: "Well, that was nice to know and quite interesting, but how does this relate to the class assignments?" Well, it doesn't, because again, the basic concepts of this class are not really all that hard and can be explained in a few weeks, so he fills each class with things that are certainly database related, but are not useful at all for doing the homework. Again, from a class design perspective, I can see why he does this, but it makes going to the lectures tedious and incredibly boring. The main problem with this professor is how INCREDIBLY long the assignments take. You'll spend hours on google and working with the TA's to complete the overly long assignments not only because you'll have to teach yourself how to do them, but also trying to resolve the various technical/error messages that will arise as you do the assignments. I think I spent more time trying to resolve various error messages in MySQL Workbench than I did learning about databases. Oh, and the midterm was one of the most stressful experiences of my entire life, mainly because of the way he phrases/asks the questions. The way he words the questions are so ambiguous that you'll be on piazza constantly looking for clarification on whether your approach to the question is correct or not. Doing the assignment involves knowing lots of SQL and getting your queries to run right. To make things more frustrating, every question has a subpart, and those subparts have subparts, so the entire exam is VERY long. The entire assignment took me somewhere in the range of 30+ hours and it was a disaster. Also, when do you want clarification on a specific question, you'll find that you get different answers from different people. If you ask Prof. Ferguson, he'll give you one answer, but the head TA will give you a different answer, and another TA will give you a totally different answer, and maybe another TA will tell you something else entirely. Basically, you'll quickly discover that nobody really knows what is going on or has any idea how to resolve the issues you/the large majority of the class are having, so you'll just become even more confused. Making annotations that accompany the answers you give in the assignments is basically mandatory because nobody really knows what is going on. I hate to be so negative, as he's a nice guy and all, but by the end of the class, I think he realized just how much of an absolute and total mess this class turned out to be and just gave the large majority of the class an A. Oh well!
Prof. Ferguson is a nice guy and seems to care for his students' learning. However if would like a well organized course instead of an unimaginably chaotic mess I suggest you try one of the other sections.
This guy needs to have his silver nugget taken away. His good CULPA reviews are deceptive (notice all the disagrees). This class was my worst CS experience at Columbia so far -- the reviews are right that Ferguson is extremely kind and accommodating of tough circumstances; however, that doesn't balance his extremely out of touch teaching style. The lectures are messy and unorganized, don't help with the homework, and he often attributes his disorganization to "helping us gain real-world CS experience." There's a very clear line between encouraging students to make their own design decisions and giving so little instructions that Piazza becomes a hot mess. Throughout the course, I found the assignments to not be conducive to learning at all. You're basically expected to self-learn SQL, Neo4j, and various complicated database system concepts with conflicting instructions from the TAs. The midterm was ten questions with up to 12 sub-questions for each question and further sub-questions for those sub-questions taking 40+ hours to complete. Assignments take multiple (3+) weeks to be returned and are basically impossible to do without further TA/instructor help. I will say that Ferguson makes himself extremely available (to the point of impromptu 4 AM office hours) and towards the end of the semester, realized how difficult the assignments were, thereby giving us 5 free extra credit points. However, that doesn't deny how difficult this class was and how little it taught me.
One of the best professors I've had at Columbia. He truly cares about his students, explains concepts clearly, and I think he does a good job of making himself available for OH. Sometimes he sends out an email indicating that he's having office hours in 20min which is short notice but if you are really having trouble, he's open to meeting with you one on one and help you solve your problem. Also, there were office hours pretty much every day thanks to the TAs. Truly a great professor.
Taking Professor Ferguson's section of Intro to Databases was such a mixed experience. Let me start with the good: - Professor Ferguson is awesome. He has an interesting sense of humor which some people find sassy, but I love it. He's also incredibly kind towards students, always willing to help, and is one of the most understanding professor's I've had. - He also holds an insane number of OHs, which is really helpful around due dates. It feels like he has an OH whenever he's free. He'll only announce them a couple hours in advance though, so you'll need to keep an eye on your inbox. - His section of Databases is a lot less theory-oriented, which means less time spent memorizing arcane definitions, and more time spent on working through real-world examples. At least for me, that's a big plus. And because Professor Ferguson has such extensive industry experience, it provides an interesting perspective that some other CS professors don't offer. Then, there's the bad: - Lectures are dry. Professor Ferguson admits it himself, so he usually skims through 200 slides in 20 minutes, skipping most of the concepts. His expectation is that you Google it yourself when doing the homework, but this means you aren't learning the content systematically. Instead, you'll be scraping scattered tidbits off of the Internet, which sort of adds up by the end of the semester, but the learning experience ultimately feels unsubstantive and hollow. - Homework assignments are incredibly vague and disorganized. If all the instructions and expectations were clear, they would be pretty easy (at least compared to other CS classes I've taken). But I ended up spending days trying to figure out what we were expected to do for each question and obsessively refreshing Piazza for updates. - This would be fine if at least the instructions were consistent. However, the TAs, Head TAs, and professor often seemed to be on different pages. For example, for a homework question, a TA's clarification on Piazza would be different from what the Head TAs explained during recitation, which would be different from what Professor Ferguson went over in lecture. This was pretty common, and incredibly frustrating because now I needed to spend even more time attending multiple OHs and scrolling through Piazza to gauge the "consensus among the TAs", as strange as that sounds. I also often had to rewrite my solutions whenever conflicting "clarifications" were made by different people. All of this isn't to say that this is a bad class, it's just poorly organized. At the end of the day, I think I would recommend it because I did learn some useful things. However, just know that all the inconsistencies and vagueness will be incredibly frustrating and anxiety-inducing, especially if you are a perfectionist type of person. Grade-wise, pretty fair, not too bad. Not really a factor you should consider compared to the stuff I've mentioned above.
Honestly one of the worst classes I've taken. Lectures are so slow and the assignments are extremely confusing. Very disappointing
Professor Donald is absolutely one of the best professors I have met in CU. He is a very kind person and really takes care of his students. The course delivery is good and course materials are well organized in his GitHub repo. His homework does match with the content he teach in class, so as long as you listen to his class carefully, you will be okay. Midterm and final are take-home exams, which in general contains around ten coding or short-answer questions, which are pretty like homework questions. Donald is the most accessible professor who will almost hold office hour everyday. You can easily find out some OH time spots. Also Donald holds review session to help students review class content about a week before homework deadline. He also gives some useful hints to guarantee students to be on the right track. He replies email very quick and could solve your question in a very short time. I really appreciate Donald to provide a good database class and I strongly recommend his DB class to all students.
This is the most disorganized course I've taken so far. Homework instructions are unclear, piazza management is a mess, lectures are so slow and boring. He is probably the worst professor I've taken class with. Just avoid him.
This is the most disorganized course I've taken. There is no clear homework submission detail, no clear expectation for the homework, no clear instructions and a super super super messy Piazza. This professor use piazza post as extra credit, leading the piazza posts to a place full of duplicated and junky messages. Please just avoid this professor if possible, super bad experience
TLDR: Very good professor. Getting an A is more than doable. Longer Review: Even though the lectures might not be that relevant for the homework at times, they are very interesting and it is good to learn from a leader in the field like him. The class is divided into a programming track and a non programming track. Unless you are a CS major or really want to get good at programming databases, I would take the non programming track as it still is has tons of SQL. For both tracks, the homework seems really confusing at first. This causes lots of stress. However, Professor Ferguson makes videos which really really help. Also, he and the TAs hold many office hours and are always available to help. You also get a certain amount of late days (I believe it is 5?). As long as you don't procrastinate and use the videos & office hours, the homework's become very doable. If you procrastinate and don't use the help provided, you better be really smart otherwise you will do pretty poorly.
I really enjoyed this class, and Professor Ferguson was an excellent instructor. He was also very available: he held in-person or video office hours all the time, especially near homework or exam deadlines. Also, all of his lectures and online OH were videoed and posted to Courseworks. I got the impression taking this class that other sections may be more focused on theory than practice - in this section, most of the homework (and lectures) were focused on how to work with databases than learning database theory. We did spend some time on theory, but as little as Professor Ferguson thought he could get away with, which I really liked. Most of the semester was spent learning SQL, but we spent some time on relational algebra, a little bit of time on graph databases toward the end of the semester. About half of the homeworks were programming projects in python, using pymysql. Time consuming, but certainly doable and taught me a lot. There was sometimes some ambiguity in the project guidelines, which generated a lot of questions on Piazza, but I think the consensus from Professor Ferguson and the TAs was that you could make whatever design decisions you thought were wise, as long as you included your rational in the README. Basically, I thought the assignments and grading were very fair. Later homeworks (and both exams) were turned in in the form of jupyter notebooks, and a lot of the lectures were available for download in that format; it was a bit of a pain to set up at first but absolutely necessary. Components of some homeworks were also to submit complex SQL queries. Professor Ferguson was also just really understanding and adaptable to different circumstances. If you really need an extension, he will almost certainly grant it. Also willing to listen to student feedback in general: when I took the class (fall 2019) Professor Ferguson used a baseball database for an in-class example nearly the entire semester and as the database for several homeworks. I personally didn't mind this, but some students found the specific terminology to be confusing. Professor Ferguson took this into account and said he would not plan to use this database in the same way in future semesters.
I honestly have the world of respect for Professor Ferguson. There were times in the semester that I was complaining a lot about this class. As someone who had never taken programming or computer science before, I walked in and I was immediately extremely confused. I went to the lectures, but I felt like they might as well be in French. However, Professor Ferguson realized that there was something wrong with this class. He asked for a lot of our feedback and drastically restructured how he taught later in the semester. Now, don't get me wrong, it wasn't perfect. But the fact of the matter is that he went through a world of effort to make the class better for his students. There was also some confusion pertaining to assignments, but I think that will be refined over time. Also, his office hours were incredibly helpful. He would make extra office hours in the weekend to help students. Again, with zero programming experience, this was key for my success in this class. The extra credit opportunities were also really helpful. Sure, he has his sassy moments, but I think he has a lot of respect for his students and a high commitment to the class.
Professor Ferguson is the kindest professor I have ever had at Columbia. He is on a mission to singlehandedly take stress culture out of the computer science department. Take his classes. Go to his office hours. Be his friend. He will be there for you, and his first concern is always your well-being.
One of the few classes in Columbia where you will learn some real software development. Don is an excellent professor. The course structure is loosely defined and there are no guidelines that he follows. In spite of this, he dives deep into anything that students gain curiosity on. He teaches the course to make students learn and not just slog for grades. Therefore this course is a sure shot 'A' unless you really mess it up.