I rated this class "Very Hard" because if you didn't get to work in teams or have the professors essentially giving you all the homework answers, it would be impossible. This class is an embarrassment to the MCIT program. If you are interested in linear algebra you would be better served watching YouTube videos and taking an online class in probably any other medium. The professors write homework that are challenging but then essentially show you step by step how to do them in the OOH so everyone gets a good grade. The lectures are completely worthless as it is just the professors reading word for word from their PowerPoints - which are so terribly curated that there is a new page for every bullet point added on a slide. The concepts in this class really aren't all that complicated. But the professors find a way to overly complicate things with notation designed to confuse or by not being able to coherently explain the big picture. It is a real shame that this is the quality of class on this subject in this program as it is so important to Data Science. I would strongly discourage anyone from taking this class - even if you are really wanting to because of the subject. Save yourself the time and money and buy a Gilbert Strang book instead.
The lecture videos are equivalent(or even worse) to an audiobook of the textbook. Although the professors are really kind and trying to help, it would be better if they put effort into making the videos and the lecture structure more helpful. It would be 10times more fruitful and even easier to just watch some open course lectures on the internet if you are really interested in this topic. Recommend you to spend your 3300 dollar to another elective.
This course is very math notation heavy. The concept in the slides is very abstract. I feel like more concrete examples and more practice problems are needed in this course. However with that said, the course content is complete and the knowledge you learn here will be foundational for machine learning and artificial intelligence. The professor Jean and Jocelyn are both very friendly and helpful and will help you in your homework and programming project if you attend their office hours. The programming project also served as a good introduction to the syntax and coding in Matlab. The homework is very similar to 592 (a lot of proof based answer). So if you feel you are interested in mathematics, this elective is a good choice ! Personally I love this course and would recommend it
I did well in this course but cannot say I gained too much out of it. Prior to this course, I hadn't had much exposure to linear algebra, and my last calculus class was in over a decade ago in high school. The course felt like reading an acclaimed work of literature in a foriegn language with just bare minimum knowledge of that language - The professors are extremely kind and helpful, but the course was too notation heavy for me. Toward later weeks I became mired in deciphering notation I just picked up a week or too prior and quickly lost sight of the purpose of the applications of the approaches we were reviewing in this class. It was neat to get to try out Matlab and be able to understand how matrices play a part in common technical processes (e.g., visual search). However, I still get the feeling that I wasted one of my electives.
Great class if you like math. If you actually want to learn something and you don't have any previous background with the material, this class will be extremely hard. Given the target audience of this program, that will probably be many of the people that take this course. You should really spend some time exploring linear algebra and calculus before taking this course, if you aren't already familiar. This is set up more like a review of linear algebra, and less like a class to teach you from the ground up. There are very, very few worked examples and a lot of it is left up to you to figure out. There are homework assignments every week and 7 projects in the course. That means that some weeks you have multiple deliverables, which can be extremely stressful, especially if you are taking other classes/have other life commitments. Yes you can work in groups on the homework and projects, but that's not as amazing as it sounds unless someone else in your group falls into the "I've already studied linear algebra" camp. Despite the challenge, I have really enjoyed the course and the professors are extremely willing to help you with homework. As the other reviewer noted, it's not that hard to just get by in this class and get a solid grade. If you want to learn though, that is another story. I think it is really disingenuous to say that this class is easy, and reductive to say that taking it is a "no brainer".
I think the main problem with this course is that the material is presented in too abstract a way, and are basically copied out of the textbook. I ended up almost always looking at Youtube or other sources to understand the material. This would also be a lot of work to try doing by yourself - be sure to get a partner or two right away.
The content is clear and of high quality. But some guys may find it too math notation-heavy. It would be a pretty easy task if you had exposure to linear algebra before. You can work on assignments and projects in a group of 3. So a solid team member will do a great help. And the instructors offer enough help with assignments. The final is a bit more difficult than the weekly assignment, but the final is graded very leniently so that you would earn credits for writing what you know. Overall, it is not hard to get A. Maybe a good option to boost your GPA.
Interesting subject matter and reasonable workload for an elective. If you have a decent grasp of Python the first several assignments are fairly simple - mostly writing functions to perform different arithmetic operations and/or searches. TAs held recitations where they more or less went over the expected answer in Pseudocode and these were immensely helpful. The course does a great job of introducing you to a variety of concepts in traditional AI (A* Search, Minimax, etc.) and some of the more interesting concepts going on in Machine Learning (Reinforcement Learning, Neural Networks, Natural Language Processing). It was also good exposure to a variety of helpful Python libraries like NumPy, PyTorch, and several NLP libraries. There were also a ton of extra credit opportunities, but the course itself was weighted so that you could already have a very high grade from just doing the HW and weekly quizzes - unlimited submissions were allowed for both.
In my opinion, this class is terrible and should not even be offered in it's current form. The slides were pulled straight from a textbook that is extremely dense and notation heavy (without ever explaining the notation) and the lectures read straight off the slides. The professors wrote the textbook so they think it's easy to understand. I found that watching the lectures was not only useless, but it often made me more confused and frustrated than if I just googled the topics. This is supposed to be an introductory course with no pre-requisites besides calculus but it was far beyond that level and I feel that it could only be beneficial or enjoyable to someone studying pure mathematics. The professors are far too engulfed in the subject to the point where they have no idea how much lower their students' understanding is. When students asked questions on Piazza, myself included, they were often met with belittling responses from Professor Gallier saying things like "this is obvious" and "I already explained that" when the student is clearly asking the question because their prior explanation was too high-level to understand. I believe that the professors are very intelligent and perhaps they mean well (Professor Quaintance is very nice and has decent office hours), but I don't believe this class is effective at all. The only thing that made the class bearable was being able to work in groups, otherwise it would be much worse. If you wanted to actually understand all the material it would take over 30 hours a week. You can get by based on the design of the class with much less, but it will still be extremely frustrating and you won't learn much. If you love math and theory and have a linear algebra background, who knows, maybe you'll like it.
I get the impression that most people find this course very challenging. But honestly the hardest thing about it is really getting a sense of the mathematical notation used extensively throughout the course and the initial week learning Matlab. But that's really only because it's a math course. Outside of that, the concepts and projects are very easy and a lot of guidance is provided. If you run into difficulties, both profs and TAs have been very helpful in providing guidance in the right direction. Also with the way the deliverables are set up for Fall 2020, if you are on the ball and do well for every homework/project (you can work in groups of 3), since the final exam (which is OPEN BOOK) is 15%, you probably only need 70% and above in the final to get an A. Really a no brainer, would take this elective again.
The instructors are very nice and easily accessible, always willing to help. However, and maybe this is an unpopular opinion, I think they struggle with explaining concepts to students who aren't as familiar with linear algebra as they are. A lot of the time I'd see students asking for concepts to be explained on Piazza, only for the professors to repeat the same explanation that got the student confused in the first place. There seemed to be no attempt to recognize where (multiple) students are struggling and offer a different explanation for the concept. I and other students I spoke with had to look to outside resources for the majority of this course. Also, one of the hardest parts was deciphering what was critical to study. In the words of a past TA, only 1/4 of the course content is relevant to homeworks and exams. The way the course content is presented would probably require 30+ hrs a week to understand, and although I would love to have that time to study linear algebra, this course shouldn't require that. The professors teach it as though students are doing this course full time, with no effort to present the material in a more digestible way. They present it in a way that in order to understand one concept, you have to fully & completely understand every other concept they've ever taught. Maybe this makes sense to do, but I think some things should be taught using abstraction, so you can piece concepts together as you understand them, even if one presented earlier only really "clicks" for you later on. I know there are other students with different backgrounds who enjoyed it though, and I'm still thankful for the professors' help. If you have a strong background in linear algebra, you might enjoy taking this course and talking theory with the professors. If you have no or only some background - even if you prepare for this course like I did - you might regret taking it. I ended up with an A and have a decent understanding of the concepts now, but only because of outside resources and with plenty of avoidable frustration in the process.
A few years ago, I've seen a chief data scientist, presenting research based on a solution to an unsolvable optimization problem ( He was a Ph.D. and a visiting professor at a university ). This mistake can happen to anybody in the data science field including myself, so I was inclined to learn optimization. // The first half of the course covers important concepts of Linear Algebra. Mathematical notations/explanations can be frustrating if you are new to this subject or/and if English is not your first language like me. Sometimes, notations can be different from what you'd expect ( For instance, the uppercase "K" was not a matrix but a constant scalar ). However, you will eventually get used to those notations after finishing the first half. // In the second half, you finally get a chance to learn about optimization problems that are frequently solved in the industry, such as quadratic optimization problems. Homework and easy MatLab projects help you to review what you've learned by applying them to actual problems. // Overall, it's a great course. I also took CIS521 this semester, but it only gives you a basic outline of various types of AI models without teaching optimization. Hence, CIS515 will partially fill out that gap for those who want to design/train the model properly. But, for those who have never taken ( Linear Algebra, or Statistics ) nor have comparable experience ( e.g. Have done empirical research using dimensionality/noise reduction techniques. ), this course might be far more tricky than CIT596.
Interesting course! I generally liked the lectures. They give a broad overview. For future editions of the course, it would be great to slim down the "old" AI stuff such as BFS, DFS applications and focus more on contemporary applications of AI for instance cognitive cloud services. I was disappointed in the quality management of the course. Latex expressions not properly compiled in most of the HWs, errors in exam questions, errors in master solution of the exam, inflexible autograding.
Great curriculum and assignments that are relevant, fairly graded, and just the right amount of challenging. Assignments require a ton of Python. The class is admittedly more algorithm-based than statistical machine learning (there's only a couple weeks of reinforcement learning and neural nets), but still a fantastic course to take for aspiring DS or MLEs. I think the final grade reflects effort, as it is heavily based on homework, which you could reasonably get 90+ on all with effort.
This is a great class that allowed me to become comfortable with python and also laid out the fundamentals of machine learning algorithms. Each assignment was a thoughtfully crafted puzzle, and the TAs were very helpful when I got stuck. The first 1-3 weeks focused on getting a solid foundation i python, and afterwards the assignments were focused around translating algorithms into code.
My favorite elective course so far. I felt I have learned a lot and I especially enjoy the weekly assignments.
Professor Chris Callison-Burch is fantastic. He is charismatic, genuinely kind, and actively giving his all to improve each iteration of the course. When changes are made that are broadly unpopular he takes the student bodies concerns into account, and truly is trying to provide a high quality course. If you are new to Python the first couple of weeks can be very heavy. The weekly assignments vary in length and in complexity. In my experience with the course, the longest assignments took 20ish hours, the shortest took 3-4 hours. I would say the average was 8-10 hours total. The assignment are engaging and interesting and well worth the effort to complete.
What a fun class! This course was an approachable introduction to AI concepts and made me a much better Python programmer. The weekly assignments were put together well and (for the most part) pretty straightforward if you read the book/watched the lectures. I wish I had taken it with CCB only because he's so well reviewed and so engaging... but overall it was a still a positive experience. Assignments allowed for unlimited attempts to the autograder, and the tests were hard but only accounted for 20% of the overall grade... which made things very manageable. The concepts were tough but the class was definitely structured for student success. Overall I would recommend - particularly if you're looking to up your Python chops.
Not going to delve too deep (others have mentioned a lot of comprehensive reviews) BUT if you are interested in finding out how to solve the likes of Sudoku, Pacman, finding paths -- creating a mini Google Maps of your own with different levels of difficulty -- among others, and doing so the right way (!) this is the course for you. I found the variety of tasks that AIs can do to be fascinating! A pretty steep learning curve, but a lot of extra credits so that balances out. Super enjoyable, BUT don't sleep on the extra credit assignments until it is too late (which was what I did).
It is quite a lot of work both in terms of length of the recorded videos as well as coding homework especially if you’re not Python savvy. But contents are very well structured and fun like other reviews have mentioned, and staffs including professor CCB were super accessible. There were also a LOT of extra credit opportunities. Quizzes were unlimited attempt, homework was unlimited submission and usually ppl get 100. Two exams 10% each, mean at ~70. One double sided cheat sheet allowed but it really doesn’t help much.
For someone who has no prior CS experience before taking MCIT, expect a workload of 20 hrs for the first half of the semester. The second half of the semester will be relatively less challenging as you are more familiar with python. CCB is a very good lecturer and you should always watch the lectures instead of just reading the slides. If you are unlucky, you might find yourself trapped in some bugs for a long time. However, you never find the class boring as the homework topics are super interesting and the bugs you have never let you feel completely hopeless. TAs in this class are super helpful. Extra credits will be given and you should always take them because the final exam will drag your grades down. The course content covers a lot of 'old' topics. I doubt this class will give you the ability to talk about modern AI with your CS friends. Nevertheless, the class is well structured and interesting. It gives you just the right amount of challenge.
This has been the best elective I've taken so far. Heavy workload towards the beginning of the class but evened out after a few weeks. I liked the content quite a bit. Certainly a broad overview. The exams are a bit tough since they are based entirely of the textbook readings which can be long. Thankfully the exams aren't weighted very heavily. No final project either. Good class to take after 596.
This class was mainly effort based because the quizzes and HW were multi attempts. The two exams were only worth 10% each. This course was more math heavy than I thought it would be. You don’t have to understand all of the math to get a good grade in the course but to truly understand what is happenings requires math - which I thought the lectures did a poor job at explaining, especially towards the end. The assignments vary widely in how much time they take. There are 2 (maybe 3) HWs in a row in the middle of the course were the TAs practically give you the code and therefore the assignments take less than 5 hrs. Then there are others were the instructions are vague and you have to find a lot of information out in your own. Some of the assignments have timeouts, so getting the right answer isn’t enough, the code also has to be efficient. Overall a good class. It just barely touches the surface of AI. Definitely an intro course. My Python skills really increased and my data structure skills really got locked down
521 was a great class. CCB did an excellent job of balancing listening to student concerns with keeping a structured class. Considering the size of the fall semester class (570 students between online and on-campus!!), it was really well run. It's the only class where I felt like I just didn't have enough time to delve into everything I wanted to. Tons of extra credit, including EC assignments and participation in PhD projects. CCB has provided quite a bit of follow-up content for those wanting to continue on in their AI learning. I'm really happy I took this class.
One of my favorite courses in the program!
The learning curve for both python syntax and algorithm implementation was steep at the beginning of the course. Workload is steady; expect to write about 15 functions/week in this programming-heavy course. The prof is a GEM, he makes the course fun, he clearly has a passion for teaching that comes through in lectures and office hours. Although it was difficult for me, this was one of the MCITO courses I enjoyed the most.
Very nice course, give you a good understanding of data structures and software design.
This is a well-organized, quality course, but by no means an easy one. Python has a reputation as a relatively simple language, but the level required here goes well beyond nested for loops. If you're not already comfortable with, say, dictionary comprehension, OOP, and quickly getting up to speed with machine learning libraries, you'll have your work cut out for you. It's a programming-heavy class, with 10 assignments amounting to 70% of the overall grade. By contrast, the two midterms are noncumulative, open-note, and only count for 20% of the grade. These exams can still be quite difficult, though, since they go into the weeds of the course textbook and cite algorithms and concepts missing from the lectures. Bottom line: it's a class with either an assignment or a midterm due every week. For the sake of full disclosure, I wouldn't have minded a lighter course for my final semester, but I don't regret taking it either. The many positives include genuinely interesting material, fun and well-thought-out assignments, and an enthusiastic Professor. If you're really fluent in Python and looking to go into AI/ML professionally (or academically), this class is a no-brainer. If not, you should still enjoy and get a lot out of it, but be prepared for a more hectic pace and workload.
My favorite elective in this program. I'm glad I took it with CCB. He is expert in the field, yet his lectures were easy to understand. Not only did he find us opportunity to listen to seminars by different professors in AI world, he also offered lots of AI related research as extra credit. The homework was fun (for the first half of semester) and helped with my internship hunting since it covered some search algorithms and implementation. Exams were open note but since homework are 100% autograded, it's not hard to get an A if you put sometime into the homework. I enjoyed the course, and would recommend to anyone who's interested in practicing coding, learning introductory AI, or even just find a fun course.
Great class that I would recommend to anyone. It has some of the best and most engaging assignments in the whole program. Chris is a great instructor and a very nice person. The textbooks used were genuinely interesting. The only negative thing I can say is that the exams felt a little unfair, yet each one only counts 10% of your course grade. Most assignments are autograded and the last assignment teaches how to use GPT-3 which is an absolutely fascinating tool. If you are considering this elective, do not hesitate to take it!
This class would be a great follow up class if you enjoy 594 (algorithm part) and 596. The structure of the course grade is simply fair. Heavier weightage for weekly Gradescope assignments that allow for multiple attempts if you really want to strive for good grades (plus extra credits AI assignments to cover up for your 20% midterm+final short fall). Though the assignment instructions sometimes require a bit of deciphering to get the final 5-20% test cases to pass, you would save a lot of time to ask or check in Piazza if you have dabbled on the problem for more than 1-2 hours. I personally have completed few AI/ML/Computer Vision courses elsewhere, but this class really wants you to get your hands dirty to understand how the algorithm works with exams to really check if you grasp the concept behind each topics to just rather know how to apply ML on dataset/problems. This is the course when you finished, you have the confidence and the mastery to visualize the problems and going through the steps to build your agent/perceptron/NN/NLP to solve those problems.
I overall enjoyed this course - it is challenging and sometimes absurdly time-consuming, but full of interesting projects and I appreciated the grading scale that focused on homework assignments rather than exams (midterm and final were only weighted 10% each). I struggled a bit in the second half of the course as things got more mathematical, but still feel like I learned a lot and have a good foundation for going deeper into particular areas of AI. My biggest complaint is that some assignments only took 1-2 hours, while others took over 20, so it was hard to plan for in that sense. Would still recommend to anyone as a great elective!
This course is very easy for two reasons. First, the structure heavily weights auto-graded assignments: only 20% of the grade is exams. Getting an A+ on every assignment is straightforward. Second, the content is pretty shallow. It's a survey course, introducing you to a vast field of research. It would be impossible to go too deeply into any one topic. As a result, you can complete assignments without meaningfully understanding the material. Nonetheless, the course was interesting at times. In particular, it helped demystify neural networks for me, pulling back the curtain on LLMs. Understanding GPT is a real-life benefit for everyone, even if you're not working in machine learning or data science. I recommend taking this course directly after 596. Search algorithms and probability feature prominently. Having that material fresh in my head was helpful.
Overall a great class. Its tough in the beginning if you're not strong in Python. It will definitely level up your Python skills. The assignments range from very easy to pretty difficult. In particular, the Week 1 intro to python assignment is a doozy, and one of the hardest in the course IMHO. For the harder assignments, I would say a lot of the difficulty comes from subtle implementation details in Python, and not the concepts themselves. This is a very broad overview of the field of AI, and the instructor makes it really fun to learn. The lectures help you understand the material, and the textbook is a must read (and also a good read). Generally, if the professor asks you to read something in this class, do it. Good to pair with another class, but pace yourself in the beginning. The exams are low stress and fair (MC and short answer).
At the beginning of the semester, the class was a bit of a pain due to there not being enough office hours/ TAs. The professor was able to turn this around by scheduling more office hours at times that were convenient for everyone. It ended up being beneficial to not have as many office hours as a typical core class would have, because it really forced everyone to team up, communicate as a class and struggle with the material (in a positive way). I think it's worth taking, it gave me some exposure to C++ and llvm that I would not have experienced if I didn't take it.
Overall, I enjoyed this class, I am glad I took it, and I am glad it's over. IN GENERAL: I gained a working knowledge of Python and a basic understanding of search algorithms in AI and reinforcement learning. Much of the content was interesting to me because it built on concepts I learned earlier (search algorithms in 594/596). I liked the textbook: it's accessible and incorporates worked examples that make the content clear. I appreciate the professor's approach to grading: two exams are worth 10% each (the rest came from 10 HWs and weekly quizzes, which one could submit multiple times), and he was generous with extra credit. I found the content in last few weeks to be largely incomprehensible and didn't understand what I was doing in much of the last two assignments. TIME COMMITMENT: I am relatively new to programming, and Python was new to me when I began the class. So, the first three assignments took me 20-30+ hours each, and the last few took me 20+ hours each. Most other assignments didn't take nearly as long. For some of the earlier assignments, I started too early (before the HW recitations), which were helpful and would have saved some time, so I do recommend attending those.
This was an awesome class, and the most fun I've had in MCIT. The class provides a very good overview of AI, and Professor Callison-Burch is an excellent teacher. If you have a good grasp of Python, the workload will be moderate. If you're new to Python, you'll need to pick it up quickly and should treat this as a class with a heavy workload. Like most MCIT courses, the second half of the course tends to be more difficult, and there are a lot more math equations in the second half. While some of the algorithms discussed in the second half are ultimately based on linear algebra and multivariable calculus, the material is presented in a way that you'll be fine if you don't know/remember how to multiply a matrix or take a partial derivative. Finally, it's a good idea to start early on the final homework assignment, which will require getting up to speed on PyTorch--honestly, not starting early on that last homework is my biggest regret from this class.
Interesting material. Passionate and engaging professor. Assignments are fair and satisfying and most use an Autograder. Exams are tough but open note and only worth 10% each. Assignments are 70% altogether. Quizzes/Flash cards are the remaining 10% of grade. My semester, there were lots of Extra Credit opportunities.
I wanted so much to love this course, and though I marked it as Disliked I should clarify that there were portions I liked very much, and then portions that I really disliked. I agree with various other reviewers that the course spent a significant time on breadth with short segments on all the possible new technologies out there (it felt like every other lecture was talking about some other language or library). The first half of the course was very manageable and I really enjoyed learning pandas and SQL, but the homework assignments seemed to get more vague as the semester went on with frustrating troubleshooting to get the exact format the auto-grader wanted (I had to talk to three different TA's on one problem before finding out I needed to cast something to a data type that didn't make any sense for the question and wasn't in the instructions - even the last TA seemed irritated). Also, as someone else mentioned the final project on top of the final exam was very hectic, so plan accordingly if you plan on taking other courses. It was a heavy workload for me working full time with just the one course. The last thing I'll mention that I really disliked was the exams. The instructor only allows a single double-sided cheat sheet for an extremely large amount of data. If the questions were on overall concepts/ideas I wouldn't have minded, but there were a lot of super nitpicky questions about things that honestly no one would care about or would just look up at a job in the real world. As a person that switched in my role at work ~6 months ago to being a Data Scientist I don't have a ton of patience for being tested on nitpicky things that don't help me in my day to day job.
A lot of SQL and Python in course. Data analytics in first half then a lot of graphs, ml - supervised and unsupervised learning followed by neural networks Too many topics to get really deep into each one - it can become overwhelming Homeworks are spread around two weeks deadlines but, the autograder is very picky. You might need to go to office hours just to debug how the autograder is grading your code in Google collab The tas can be very picky about the labels and titles of graphs too. The homework is doable but, you do need to put in the time to do it. Some assignments are longer and harder than others. Depends on your background and skillsets on how fast you get through it. Specifically, the aws assignment takes a very long time to set up the console - almost 30 mins to 1 he to get start the homework assignment which made the whole assignment take more time. I think there was a cap of 4 hours to use the AWS console so that made it hard to take a break while doing the homework. Tas and professors are very nice and helpful The exams are very difficult and the cheat sheet is not so helpful when it's very specific theory answers. However, there was curve atleast for exam 1. End of course is very busy with a group project, homework and exam. Definitely plan out what type of team you are looking for vs. coursework vs. Potential work schedule. Some methods were a bit outdated compared to what I know from data science and analytics industry but, a good starting point. Overall, take the class if you want an intro to data analytics and enhance your SQL and Python skills.
Pros -Good introduction course to many analytics, big data, Spark, and machine learning topics. The course covers a lot of topics -HWs are every two weeks and spaced out well. Not too terrible to figure out. -Lots of sample notebooks and code provided to help with walkthroughs -Interesting topics if you like data science and analytics -topics flow logically through the course and lectures largely align with homeworks Cons -HW uses a finicky autograder that isn't always on point. Semi-dependent on TA help at times to figure out what the autograder is looking for -The course goes an inch deep into many many topics. You won't walk away with a deep understanding of anything but an intro to lots of different data science topics -some of the topics such as the deep learning weeks and unsupervised learning weeks get too 'mathy' for the speed at which this course is talk. The lectures will be quite theory and math heavy and not address enough of the practical coding side of thing (which is what you're graded on in HWs). -Some of the slides get confusing to follow.
My main qualm with this course is that it is misleadingly named and marketed. I went into it assuming we would study big data systems in depth, and apply them to data analytics tasks. This is NOT what this class is (CIS 5550 may be though - I didn't take it so I cannot comment). Instead, it is an introduction to data analytics class, where examples come from big data. I work as a data scientist. Hence, this class felt like a waste of time and money for me. The topics were too easy, without enough depth for a graduate course - it is unreasonable to expect to cover CNNs in half a module, time series in another half. On top of this, the assignments were made unnecessarily tricky by confusing instructions and an autograder that only considered some interpretations or made weird assumptions. Finally, the TA team was subpar compared to other MCIT classes, and I even felt that the instructor who was assigned to Piazza did not know some of the topics. On the positive side: if you are looking for a general intro to data analytics and its associated libraries, with barely any math, this is the class for you! The videos are overall clear and manage to cover a lot of ground in a short amount of time. The project is a great opportunity to dive deeper into a given area. At the end of this class you have the tools and frameworks to learn more. I wouldn't say this class is enough for you to become a data analyst/data scientist, but it does get you most of the way there; self-study/additional courses on the underlying mathematics and on experimentation would be a great supplement.
This class is laid out as follows: weekly lectures and unlimited-attempt quizzes, 5 hands-on homeworks (spaced two weeks apart), two non-cumulative midterms, and a group final project. The only part that I liked was the homeworks, although those had their own set of issues. You'll need to keep the long list of FAQs on one tab because the homework itself doesn't have enough instructions to know what they're asking for. It was almost comical the way the homework instructions would repeatedly admonish you to 'Start Early!!!" but the TA Recitation for that homework wouldn't be scheduled until 3-4 days before the HW due date. Despite those issues, I still enjoyed the HWs overall. This is the bread and butter of data science to me: manipulating Pandas dataframes, writing SQL queries, using Apache Spark, creating classifier and regression models. This is honestly the only part of the course where I felt like I was learning anything. The lectures: I found these lectures to be some of the worst in the entire MCIT program. They're long, rambling, and yet somehow don't convey any usable information. They're far too theoretical and they pretty much never show any actual examples of solving data science problems. I got to the point where I was skipping large portions of them because I couldn't retain any information being conveyed. The exams (which, thankfully, allow a cheat sheet) test you on a bunch of random minutae from the lectures that you'll probably never have any use for. I would have much preferred a timed proctored open book session of homework-style coding problems so that we could demonstrate that we know how to use the information from the course. The final project is so open ended so as to be kind of useless. You don't really learn anything new from it, you're pretty much just re-using code from the homeworks unless you're proactively out there looking for new techniques. I'd have preferred to just have a HW6 where you get to code something new. Overall: Wouldn't recommend.
This was BY FAR the most industry-relevant course I've taken in the program. It walks you through the essential steps of the data pipeline, from sourcing and wrangling data thru data prep and feature engineering, and finally training and tuning various models. The assignments provide excellent hands on experience with each step in the process, and uses libraries such as pandas, spark, sklearn, nltk, etc that are all immediately useful in industry. The professor also relates these concepts to cloud computing, which is a must-know in today's tech/job market. I wish all courses in MCIT were this practical.
Out of the 9 courses I have taken, this is by far my least favorite. There are many flaws to this course but I will just name two: 1. The course touches on way too many topics. Rather than deep diving into a particular area or code base, we seem to switch it up every few lectures. This does not allow the students ample time to thoroughly understand the concepts. This doesn't necessarily affect the ability to complete the homework (you will have to utilize various outside resources anyways), but it severely impacts how well you will do on the already tricky/nitpicky tests. 2. Homework: Each homework has consistent and troubling errors throughout. For most courses, FAQs and tips posted to Ed are simply tips to help you with your homework, not constantly calling out errors in the way the questions or assignment is written. In order to pass the autograder, you will need to study the FAQs to ensure you not only implement correct logically, but also implement to where it'll pass the broken test cases. This course could have been so much better by simply focusing on a few topics rather than try to touch on everything. The pandas and SQL portions were very informative and interesting, but then afterwards it went off the rails. I absolutely would recommend avoiding this course.
A broad overview of the data science pipeline from data wrangling to modeling. A ton of optional notebooks are provided to enhance skills and explore the topics covered each week. The homework is interesting but currently provides little feedback about what is wrong with a given input - this results in extra time "spinning wheels" when better problem descriptions or autograder feedback would save student time. In some cases, the course still felt like it was in "beta" mode with homework being updated after release. I enjoyed the course but am conflicted by it. I wish they focused more on the tools to achieve data analytics as a scale rather than a broad swathe of the data science pipeline. Upon completion, you are a jack of all trades, master of none.
This is a great course. The material is interesting, and thoughtfully constructed. The homework assignments allow for great depth of understanding, and often work through interesting datasets. Assessments are fair, and teaching staff accessible. Reinforces concepts learned in both 550 and 521, without be overly repetitious.
I think this is by far the most practical course I've ever had in MCIT. The lectures are long and boring. I learned most of the course materials by doing homework and checking API documents. Homeworks are due biweekly. It is totally manageable unless you start one day before the deadline. Yes, auto-graders can be annoying but I think the format, content, and difficulty are on point. Exams are tricky. The good thing about this course is that the average isn't crazy. If you do your work well you should be fine. As someone with 0 background in CS/stats, I think this is a must-take course. The workload is manageable. It covers lots of topics without getting too deep. You will get some practical skills after this class.
I took this course after taking 5410 (the practical ML course) and 5550, and this one was a crossover between the two with a bit of additional material sprinkled in. I though it was actually a perfect complement to the other two classes, strengthening my understanding of the materials while also giving some practical experience doing the same work in a distributed environment (5410 is exclusively local assignments). Additionally, the instruction of the material in this course is kind of rambly and not very effecitve in my opinion, so it was actually super helpful to have already touched a lot of the bases so I wasn't completely lost in the lectures. If you're taking the MSE-DS program, you're going to have to take these 3 classes no matter what, and I'd definitely recommend taking this course 3rd of the 3. The assignments aren't too difficult, but the later assignments do involve large data sets, distributed environments, and large models that take time to run, so keep that in mind since it's harder to try a bunch of things and iteratively get closer to the right answer, because it might take 10 minutes each time you want to test and answer. It pays to really understand the code you're writing first so you don't wait for your model to train for 20 minutes and then not get any points from the autograder. Exams were moderate, and even with a slightly below class average score on both, I ended up with an A- by getting full points on the assignments, so that can guide where to put your effort in the course if you're strapped for time.
I really hated this class. The number of homework assignments is low, but as a tradeoff, doing the homework mostly feels like stabbing around in the dark, and the lecture content is very long and rambly - this course has the most lecture material of any course I've taken in MCIT. I found it somewhat difficult to get help from course staff. My interest in the material was pretty low, so that's a factor, but I found the class downright dreadful.
As someone on a data scientist career path, this course was absolutely fundamental to my learning experience. Considerably more hands-on than CIS-550 (which I disliked, but is useful), and more focused than CIS-521 (my favorite course, but far more breadth than depth), CIS-545 is indispensable for anyone who wants to learn how to acquire, process, use, and derive value from big data. This involves learning about developing data pipelines, cloud infrastructure and high-level services for distributed systems, and statistical modeling (ML, deep learning, even some computer vision). I really enjoyed the course, the very applied and hands-on homework, and the final (collaborative) project. The exams were fair, and not very long. Highly recommended.
Overall, the course was a great beginner to intermediate level dive into the world of data analysis. Based on the previous reviews, I can understand how someone whose already into data science will find this an intro course. However, when I signed up for MCIT, the program was being advertised for those who are not professionals in IT field. The course covers topics that will set you up on the right track if you want to learn data analysis. It goes over pandas, sql, spark, mongodb (basic setup), aws (academic setup), and ML. It is designed in a way such that you learn by doing assignments. The HW are long and engaging with unlimited tries. A final project of your choice where you will implement everything you have learned in a group of 3-4. Major negatives: The feedback from autgrader is basically pass or fail. The lecture content though informative but can be long . Edstem responses are slow. I personally had no issues jumping into TA office hours but other people had some complains
The lecture covers an interesting range of topics and is probably a good (practical) introduction to data analysis (not necessarily "big", though), but unfortunately fails to provide a solid theoretical foundation. In my opinion, far too much time is spent on explanations on how to utilize certain frameworks or libraries and not enough on deriving the underlying concepts. In addition, on the rare occasions when some math is used, notation is inconsistent and explanations more hand-waving than thorough. Home works are mostly auto-graded with unlimited submissions, which is necessary since the assignments often fail to specify how the results should be formatted. Overall, probably a great course if you are interested in learning to apply standard tools and frameworks to real-world problems. Not so great if you would like to understand the theoretical basis upon which data science is built.
I have quite a bit of background in SQL from an application engineering and reporting perspective, so the first third of the course didn't feel particularly novel to me. But, nonetheless, I benefited from the exposure to pandas/dataframes and using python notebooks (Google Colab). It felt like only a couple weeks were spent on actual big data in the middle of the course, covering Apache Spark. The back half of the course covers supervised and unsupervised learning, which could have been a course by itself. I would have preferred that a course on big data would have spent more time covering how to actually work with big data rather than spending so much time on ML. The last few weeks of the course are intense - the last homework, a large group project, and the final exam is a lot, so keep that in mind when considering your course load. The rest of the course is easily managed. There are only 5 homeworks, usually with due dates 2-3 weeks out, which gives flexibility in your schedule. But be warned that they can take a lot of time to complete. I would guess I spent 8-14 hours on each assignment. So don't plan on completing them in a single evening after work (unless you already know the subject). Overall, I'm glad I took this course. It filled some holes for me in working with data, and gave me enough of a background in supervised and unsupervised learning that I could probably build some half-decent models and validate their accuracy/recall. But I really wanted more exposure to Apache Spark.
The course had one of the fewest homework in my experience at MCIT. In total, we only had 5 HWs, can be done ahead of time, and are submitted every two weeks. However, the learning curve between HWs is pretty steep: for a comparison, if I recall correctly in HW1 we are doing minor Python stuffs and web-scraping, but in HW2 we did a graph exploration using Spark, and so on until we did a lot of deep-learning stuffs in HW5. So, yes, for me who is relatively new to the field, that was quite a lot. However, preparing and tackling the assignments early helps a lot. There is a final project. Exams are mostly multiple choices in Gradescope, short answers at most. Also, in my experience, the final grades are curved. Overall, I liked the course, but for someone with experience, it might feel a little too light.
If you took 550, i will not recommend you take this course, because there is quite a bit of overlap in terms of SQL query stuff. Overview: the first half of the class was mostly just spark SQL query practice. so it wasn't difficult or interesting. the second half of the class superficially covered clustering techniques, time series analysis, neural networks, kafka streaming, etc. I don't think the course helped me develop any marketable skills given how little lecture time was given for each topic. There were only 5 assignments and they only focus on a few specific topics and don't really cover all of the lecture content, so what you learn from the assignments does not help strengthen your understanding of the lecture material. There was a final project at the end, but I don't think that project added much value to my learning experience given that the technical guidance that I got from TA was not very insightful. Positives: 1) Through this class I have learned that I will absolutely not want to be a data scientist/engineer. 2) The effort is low compare to other electives like 550 and 547. 3) I got some exposure to the kind of tasks that a data scientist would do, and having that perspective may help me with my job in the future. But seriously, I cannot recommend this course. It is not worth $3200.
This is very much a survey class of data science and data engineering rather than a deep dive into any specific topics. As long as you go in with that expectation you will get a lot out of this class. If you're looking to get an introduction to what data science is or already have a basic understanding but want to reinforce the concepts then you'll probably have a good experience. You'll finish the class with a good understanding of what data scientists do and will understand what terms like machine learning, neural networks, data wrangling, etc, all mean. If you already have a strong background, such as if you work in data analytics, and want to get a deep dive into more advanced topics then this probably isn't the best class for you. The lectures are quite long and rambly and the amount of video you'll need to watch is higher than most other classes. Professor Ives is good at breaking down topics but I feel that many of his videos could have been condensed into a few key points in a fraction of the time. I ended up watching most of them at 2x speed. But they still do a great job of introducing concepts and I learned a lot from them. Assignments are due only once every few weeks so this is a great class to take if you have a busy schedule. I never felt too rushed or pressed for time with the homework since you are given a while to complete it. Generally, you write some code and then an autograder will immediately tell you how many points you got on that section and you can rewrite it as many times as you'd like. It's a little frustrating sometimes because the grader won't provide any feedback, just will tell you how many points you got. So it can be a little challenging to figure out what went wrong. But otherwise, the homeworks are fair and provide a great opportunity to reinforce what you learned in class. You'll get quite comfortable writing SQL queries and will be fairly familiar with some of the libraries you can use for machine learning analysis. There is also a final project in the latter part of the class that's very open ended. You pretty much just have to pick a data set and some plan for analyzing it that will allow you to demonstrate what you learned in the class and can do almost anything with it. You should not expect to get much support from staff when taking this class. The TAs were pretty much MIA all semester and questions wouldn't get answered for a while on Ed Discussion. You should also expect to do most of the project on your own. We're supposed to have gotten feedback from TAs along the way but practically none was given. Office hours would also frequently get canceled without warning. So if you're someone who likes to interact with course staff and attend OH then keep in mind you may not be able to as much as you were in other classes. Although hopefully this will get better in future semesters.
This was the first course where I felt that I was in a master's program. Topics thought can be viewed as more niche but they are quite fundamental to computer science. Even if you don't end up working on compilers or analyzers it will give a good grasp of how parts of those things work. Assignments are challenging but the professor does a great job explaining it details the high-level logic of each assignment and gives partial pseudo-code that you can work with. Overall I think the professor is the one who makes this course 10/10. But be ready to struggle at the beginning of each assignment and get up to speed with C++ quickly.
Software analysis skills are vital for software engineers. You will learn about the different methods currently used for automated software analysis, what they can be used for, what are their limitations. You will also learn about the tools available on the market (You met one of them -Valgrind- at CIT-593) and you will try your hand at writing your own analyzers as well. The lectures are easy to follow and understand, but working with LLVM caused quite a lot of struggle, due to its minimalistic documentation. The course staff reacted to this problem, however, and compiled a good tutorial for the next iterations of the course. You will need C++, which is not C, this is why I strongly advise you to study C++ before the course; else the first weeks can be pretty hard.
This course is a good foundation for those who are planning to learn compilers in the future.
I don't have too much to add to the earlier reviews, which I found to be very accurate, both in terms of pros and cons. The material and assignments can be quite challenging, but the Professor is a super nice guy who continuously strives to improve the course and students' experience. Untangling LLVM IR is part of the process, but I highly recommend learning the basics of C++ ahead of time; if you can explain how iterators work and loop through the contents of sets and vectors, you'll be in great shape. Beyond that, just be sure to stay on schedule, attend office hours, and work with other students to understand the concepts and what the instructions ask of you (the Professor encourages reasonable collaboration). The final exam is open-note and comparable in difficulty to 595. There are a few kinks left to work out—one assignment in particular took us all of October—but overall this is a good model of how an MCITO elective should be.
I took this class because of the previous positive reviews and because I wanted to learn C++. Ultimately, I very, very, very much regret taking this class. I thought it was an absolutely gigantic waste of time and am near positive I will not use 95% of the course material ever again. First, while most homework is in C++, it is almost entirely using LLVM, which is a really annoying and poorly documented codebase to use. Despite getting perfect scores on most assignments, I do not think I could professionally use C++ or market it as a skill since I touched only a very small portion of C++. Secondly, I do not think the material is useful/marketable for most software engineering roles. During this course, I began my first role as a software engineer at a large tech company, and none of the senior engineers have ever come across the material presented in their professional lives, which gives me pause as to whether I ever will. If you had specific interest in testing, then I could see it being useful, but the parts useful for majority of engineering roles could probably be accomplished in a week or 2. While this is a matter of opinion, I found the lecture videos to be unbelievably dry and boring, like watching paint dry. It is clear the professor is an expert on the subject, and the videos aren't necessarily bad quality, but I found them incredibly unpleasant to watch. Additionally, there is a large disconnect between the lecture and the homework. You could reasonably complete all homework assignments without paying much attention to any lecture. I found this to be somewhat frustrating since it was unclear which part was actually important. And lastly, I thought how homework releases and support worked were very frustrating. For the assignments due later in the semester, the directions became borderline unintelligible. You pretty much had to sit through the 2 hour recitation in order to understand what is actually being asked of you. In an asynchronous program, I would prefer that the assignment directions give enough info for someone to be successful on their own. Secondly, it was annoying to have grading switch from autograding to normal submissions for the last 2 assignments. It felt like the professor/TAs just did not have the autograding in place on time, which was a letdown. Also, I found the TA responses to be generally sufficient but much slower response times compared to other classes I took, which was not great on assignments with 1 week turnarounds. Maybe it is my fault for taking this class, but I had a truly awful experience and wish I had a time machine to tell myself not to take it. I would encourage anyone considering it to dig into LLVM and the topic and decide for themselves whether they actually care about the material, and not just go off the good reviews.
- Course provides significant exposure to C++ through the LLVM compiler API. Great class for learning more about compilers and code testing techniques. Cornerstone for a career in software development/engineering. The class is graded very fairly. Unlimited attempts with an autograder are provided for each assignment. TAs are very helpful. Recitation is held once weekly + open office hours. Professor is highly engaged. Assignments are challenging, but with determined effort + carefully going through lectures, can be tackled in a moderate amount of time. Lectures are very helpful and well-put together.
A good course to learn how to program with object-oriented language especially Java. The homework and exam have fair difficulty. However, if you want to learn more and truly want to handle that, I would recommend you to finish all the projects by yourself, even those that will not be graded.
Amazing course, professor puts a lot of time and effort to constantly improve it and is highly engaged with students. He is an researcher in the field, so if you ask he will give lots of examples, supplemental material and advice. You get to learn a lot of different software analysis tools (think about valgrind) understanding the underlying theory behind them, which by the nature of the topic knowing such theory is crucial to effectively apply the tools in real life settings. Theory can be abstract at times and requires careful understanding of terms, algorithms, and big picture. Professor says he constantly changes the labs (hw assignments) trying to make them more fun for students so likely will change in further offerings. In our semester labs were really cool making C++ programs to analyze other C programs (e.g. divide by zero errors, segfaults, etc.), which were really cool (albeit time consuming) projects, you get to write programs that will intercept real world compiler to analyze programs. Besides software analysis per se we learned C++, LLVM, and Z3. There are 9 labs probably 5 of them would be highly marketable on resumes. In a way this course feels as a continuation of 593 + 596, if you liked them you will enjoy.
Excellent course, I learned so much and I am glad I took CIS 547 as an elective. Professor Naik is very nice and helpful (it was not uncommon to see him directly respond to Piazza questions each week) and his lecture videos are clear, organized, and polished. He actually has all of the videos he uses posted publicly on Youtube (just search for Mayur Naik) so if you are interested in the course you can check out his videos to learn more about what the material entails. Homework is a coding project due weekly or sometimes biweekly and several weekly small quizzes, which you get a couple attempts each. All assignments are in C++, some more challenging/time-consuming (e.g. lab 4/5, lab 9) than others. I had zero experience with C++ so the first few projects took a lot longer than they probably should have, so like others have said, reviewing C++ may be helpful to prepare for this course. LLVM IR was also very frustrating and confusing to understand but luckily the TAs and professor were there for me when I felt stuck.
The assignments in this course are still works-in-progress, as it has not been run very many times for the program; however, the professor is extremely supportive and willing to provide additional resources so this made up for any rough patches in the course design. The material is interesting and focuses on what automated tools can be used to find bugs in software, including industry standards, and feels very current. If you are confident in programming C and Java then learning C++ is not a significant obstacle as it combines C syntax with principles of object oriented programming. Some of the lectures are dense but overall I found the topic very interesting. The most interesting and useful skill I learned in this course is how to instrument LLVM intermediate representation; this means using the LLVM compiler (popular with several large software companies you've heard of) to create an "intermediate representation" of code in between a language like C and an assembly language. You then "instrument" this intermediate code by automatically injecting extra code which can help you to better understand the functionality of the program. For example, you can figure out which branches of your code may be associated with bugs. These projects feel very practical. One downside to learning these interesting techniques of working with the LLVM compiler is that the API for LLVM is extremely dense. It is also difficult to find easy-to-apply examples on StackOverflow and other online resources. A study group can be very helpful to crowdsource how to work with LLVM given the limited information available. This is not a fault of the course necessarily but can be a frustrating byproduct of learning something that feels so new and useable. If you liked working with assembly in 593, you may enjoy this course! But, if you hated it, you may still enjoy it - all labs are written in C or C++ using LLVM API.
This course has a really dedicated and knowledgeable professor. The recitations were the cornerstone of the class. The material is relevant and increasingly important and ultimately I think this course will help me be a better programmer going forward.
Overall I recommend this class for students who are interested in learning more about compilers, testing, or C++ coding. I doubt that the course will be directly useful to most software engineers or test/QA engineers beyond introducing some testing strategies and advanced testing libraries that engineers might use, but it provides a lot of hands-on C++ coding experience and usage of the LLVM compiler API. The course isn't as detailed as an actual compilers elective, but in its absence it's a good elective for people who want to do more low-level coding. The lecture material can be a bit dry; on the other hand, the professor is really great and his open office hours/recitations are a joy to watch. Projects are a big jump up from lecture content and the project recitations are essentially mandatory in order to get the projects done.There is only one final exam and it is open note, and generally it was fair and similar to the provided practice exam. This summer the TA and professor support was lacking and it was difficult to receive personalized help on either private office hours and Piazza. Due to the TA shortage the professor switched his OOH to private office hours midway through the semester which was a huge loss in terms of learning opportunities.
Excellent course if you want to learn about how to test and analyze software (i.e. become a software engineer). It touches on what software analysis programs major companies use and is thoroughly interesting. The homework assignments are some of the best in MCIT and you gain an in-depth understanding of why companies ask you to send them bug reports (when your program crashes). I recommend if you want to become a software engineer.
For my taste, this course is too focused on a few aspects. After completing it, you probably have a good understanding of how to detect division by zero errors in your code. I missed a bigger picture though in course though. What about efficiency analysis or other types of errors? I could finish the assignments at the beginning by myself, after the middle of the course only with support of the TAs. Rather than fully understanding what was going on, I was too often just tweaking my code in order to get full points (i.e. could have been any content). Also, the assignments cost me too many long- or all-nighters.
The course will be easy if you know the concepts already. But can be tricky for the novice since the lectures didn't explain the concept very well.
Useful statistical and graph theory course. The content would be super helpful to your career if you work in the data industry. Def not an easy course. Tips: Do practice questions + search Youtube Videoes if you feel not clear about some topics.
Overall, I enjoyed this class very much and learned a lot. It is, however, somewhat different from the other classes in the program. As the other reviews mention, there is a lot of technical material and many acronyms to remember. There were weeks when I had to go through the lecture material several times. However, the important concepts come up multiple times and while it might seem a bit overwhelming at first, things fall into place over time. The course had a mid-term research paper instead of an exam. It was interesting to have a different type of assignment but I did find it challenging to write the paper and for me this was one of the harder assignments. The course also had a final, which I felt was a fair exam. There are quizzes which I found to be more challenging than those from other classes. There are several projects and a couple of homework assignments. For most of the projects, you work with a partner. The projects were overall straightforward and not too difficult. The exception is the last group project which was quite challenging and required a higher than average amount of time during the week. With the exception of the last group project, there is not a lot of coding required, most of the project is the analysis of your results. The projects are done in C++, but a basic understanding of C will get you though 99% of the coding. Professor Kim is very active on Piazza and most of my questions were answered very quickly. He does about 10 recitation sessions where he covers the key material from the previous week or two and this is a great time to ask questions. I highly recommend attending these session and the office hours. He is more than willing to explain the material, multiple times if needed. I appreciated his knowledge in the subject and his willingness to help his students. I really enjoyed this class and I highly recommend it to anyone who has an interest in this material.
This is an excellent follow on elective for anyone who really enjoyed 593 and 595. The work gets very technical and there are a lot of new acronyms to learn. Unless you are coming from an electrical engineering background, there will be a lot of new material and new terms, especially once you get to the LTE topics and beyond. The projects are done in C and C++ and can be time consuming but most are done in teams. There is also an emphasis on writing in this course, including a midterm research paper, which seems to be unique in the program.
The general structure of the course remains unchanged for this semester. Professor Kim is still a very ardent teacher who offers a lot of time in office hours and recitations. One point to note is that only the last project is done with another teammate. The other projects are done individually in this semester. The topics of the course cover various common physical and system architecture layers of the various networks, including WiFi, 4G LTE, 5G NR, and LoRa. Other relevant networking knowledge are also introduced in appropriate context. As opposed to what normal software engineers would concern, these underlying layers are often hidden from our point of view and we would mostly treat the physical transmission of signals as "black magic" that just so happens to work. However, throughout this course we would notice that these network characteristics and capabilities are essential to make good application design and technology choices, in particular for students who are concerned with IoT and mobile application development. It would be a shame if this course will not be offered in the future semesters.
This is a great class to take if you are interested in networks and want to learn more about the wireless domain or IoT. To get the most out of it, I would recommend either taking it after or alongside 553 Networked Systems. There is some amount of overlap as 549 is designed to review some of the core concepts from 553 (TCP/IP/CSMA) in the first few weeks, but it quickly diverges to focus on wireless technologies. Even the review portion itself I didn't mind since it was coming from a different perspective. Also, although this is not an EE class, there is more material related to the link and physical layer compared to 553. The class itself is challenging and the material is very dense, but after all is said and done I feel like I have a good grasp of how wireless systems work. The workload can be pretty heavy at times, especially if like me, you haven't written many research papers. Most of the projects don't require much code, but the last group project is conceptually very challenging. Professor Kim is a gem and due to the small class size he is always quick to respond and hop on a one-on-one session. Even if you don't spend much time working with mobile networks or IoT after this course, wireless technologies are ubiquitous and understanding that paradigm will no doubt be useful if you're working with networks at any level.
The topics are interesting. The professor is very dedicated to teaching and would hop on a Zoom call with individual students within 10 minutes of a Piazza post. The only reason I selected 'dislike' is that the course material is too memorization heavy for my taste... I seriously don't think I'd remember much of the technical jargon and inner workings of 4G LTE the week after final exam.
This one became my favorite course. It is dense and some topics, if you want to go deeper into them, are rabbit holes really but I have learned a lot. The course creates a perfect base for continuing development in the mobile networks domain either in the lower layers fields or software. Professor Kim is really great and as there's not many students in the course everyone can actually have 1-on-1 session with the Professor if one struggles with some topic. In my view, the course offers rare journey to the phy and mac layers and makes you understand how things really work. And - look up for acronyms, eventually they will sink inside, but when I have started to face them and listen/read some additional materials I was done, but on final I recognized them all at a glance. Enjoyed the course and wish it were for 2 semesters rather than one. There are also self-paced (optional) projects and demos that show how to create your own container, how to set up real IoT device and how to emulate the real LTE system (eNB and UE) physically! I started to speak the same language with my portfolio companies on my main job after that course (they work in the network/mobile/RF/IoT fields) so really appreciate it!
Took the class because of the low workload. Wasn't all that interested in the material going into the class and left the class even less interested in the technology. Pros: -Light workload Cons: -one attempt quizzes that make up a large chunk of the grade -a tough final project that could really use better instructions and debugging tools (really most of the assignments were quite lacking in this department) -boring lectures about boring material You probably won't learn anything useful in this class, but if you need a to take a light semester or add a filler class its not a bad option.
This was the most difficult course that I've taken, but it was also my favorite. It is incredibly well structured and the professor is the best MCIT professor that I've had. Professor Kim is always available, and since enrollment is low, his students get the VIP treatment. The difficulty comes from the sheer amount of knowledge that you have to internalize. Think 593, but a bit more volume and a bit harder projects. The projects are decently straightforward, though. The project outline documents/helper videos are very well-made and thorough. Look out for the 4th project. It's more complex than the others. Luckily Project 5 is fun and very hard to mess-up or do poorly on--a respite as you review the massive amount of material needed for the final exam. Oh yeah, the projects are done with a partner, thankfully. The midterm is a literature review style research paper--it's less horrible than it sounds. Pacing is great in the course, leaving extra room for tackling the paper and 4th project. Still... DO NOT PROCRASTINATE ON EITHER. Trust me. Like 593, the zombies will catch up to you in this course if you stop moving. If you go steadily, it isn't bad at all. Regardless, you learn extremely fascinating topics from an industry guru. Enrollment in this course is usually pretty low. Many in the program want to be FAANG software engineers, but if you take this class seriously you can be a shoo-in for more niche ISP/network operator jobs. Big $$$. I've seen several job posting that request LTE/5G infrastructure knowledge and NS3 simulator experience that would be a perfect fit for a 549 alum. I think it deserves more consideration as IoT and mobile networks are becoming ever more important.
This course has an intense workload, although you learn a lot as a result. The lectures pack a ton of material in, the quizzes are the most difficult in any course (but you do get 2 attempts), and the projects are a lot of work (but fortunately most of them you do with a partner that is the same throughout the semester). Professor Kim knows the material well and really wants every student to succeed, so he often responds to Piazza posts in less than 15 minutes and makes himself readily available via Zoom to whoever needs help. The course starts with TCP/IP, ethernet & Wi-Fi, then moves to the history of cellular communications from 1G to 5G, as well as IoT. The reason I did not give this a "really liked" rating is I wish there was more time dedicated to 5G (5G is the last 2 weeks of lectures) and less time for IoT (which is 3.5 weeks of the lectures). The midterm is a research paper which is peer graded, and there is only 1 exam (the final) which is similar to the quizzes and homework assignments.
This is an excellent course that thoroughly covers how wireless networks and the Internet of Things work. There is an immense amount of technical information to absorb, and sometimes it's easy to get overwhelmed by the dozens upon dozens of acronyms. Fortunately, Professor Kim is extremely accessible and dedicated to making sure that you understand the material. This is a challenging course--on par with, say, 593--and the workload is heavy. However, you are paired with a partner for most of the projects, and if you put in the effort, you will do well.
This course is both great, and extremely frustrating. Some weeks the lecture material is well put together and practical, while others overly dense and abstract. In the case of the latter the professor seems to speed run the topics while reading off their prepared script. With careful viewing and reviewing this can be overcome. The group project is the cornerstone of this course. I found it to be a fantastic learning opportunity, however this can also be a nightmare with the wrong group members. All in all this course has vital content for anyone who wants to journey into the world of software engineering, but needs to be navigated carefully.
This course offers must-have skills for a software engineer. Understanding how databases work and building web applications. The challenging part of the course is, besides learning databases theories and SQL, you need to spend extra time picking up a few programming language or framework on the side. E.g. you need to learn React.JS and node.JS for the final group project, also need to pick up python/pandas to do data cleaning and preprocessing. I took this course with a little knowledge of python and javascript, and still spent a lot of time picking up those skills and doing the group project. However, it is a very rewarding experience as now that I have a decent project on my resume that I am comfortable talking about any technical details.
Big disappointment with this course. Many reviews will state that this course is a must-take if you hope to get a job in web development, but alas this is probably the least informative course on offer in the whole program. Very high level introduction to SQL (the 'advanced sql' week is basically just table joining, which is about as basic sql as you can get imo), a single week touching on modern NoSQL tool like MongoDB (document based db) and Neo4j (graph-based db) which is great but barely gets you past a simple select query, and a surface level overview of javascript that aims to get you just familiar enough that you can copy paste some code from the second assignment into your final project to make a UI in case you've never done web development before. Things that are missing from this course: real advanced sql like window functions and sql functions that are specific to different engines (like postgres vs. oracle vs mysql). Deeper dive into NoSQL (they mention that they're very rapidly becoming the most popular db management systems, yet get less than an hour of content). Real web development chops to connect your db to something useful (doing more than just displaying a static table of results – how about interacting with your data, caching it, preventing sql injection attacks, when to work with data server-side vs client side, managing state in react applications, etc). I get that there's only so much time in a semester, and that in a course focused on databases they should rightly avoid going into all the million things you could learn about web development. But here's the kicker – I came into this course knowing 0 sql, basic javascript (from a codecademy intro), having never built a website or done web development outside of squarespace, and yet I was able to learn all the things I mentioned were missing in this course via youtube and stackexchange and reading the plethora of actually fantastic documentation out there. You could easily condense the first 7 weeks of the course into 2 and spend a good deal more time on NoSQL and maybe even an extra week updating the outdated javascript week to include modern technologies (or at least a version of node that isn't in the 'end-of-life'). I'd be upset about wasting one of my 4 precious electives on this course if it weren't for the fact that it's a requirement for the dual-degree program. If you've got to take it anyway, it's not a terrible course, just a bit outdated and definitely not worth the money spent or taking up a spot you could use to learn something worthy of a Penn graduate level course.
Must-have for SW engineering - this course teaches SQL and web dev. I started off very enthusiastic and lost steam partway through, mainly because most of the lectures are focused on database concepts, which can be dry. The lecture quality wasn't fantastic, but not bad either. However, the assignments involve practical coding in SQL, MongoDB, and Neo4j, which are useful in just about any engineering role (SQL in particular). The group project was the highlight, mainly because my team worked well together and we worked on a project that "mattered" to each of us. The assignments can be time-consuming and the final project required lots of self-study and googling. All in all, I strongly recommend this course in spite of some of its pitfalls/challenges.
This is definitely the most intense course in MCIT that I've personally taken, but it has also been the most useful course I could have ever taken as someone who came in with 0 experience in web development, SQL and statistics / data / discrete math. I've come out of this course as a full-stack developer. I had wanted to take a bootcamp before this so that I could learn more "practical software engineering", but this course has brought me further than I expected and I'm now confident to build my own side projects and apps. However, it comes with a strong caveat that I spent almost all my time aside from my day job on this course (around ~30 hours a week, unlike other courses where I averaged around only 8-10 hours a week). Relating to databases, I found the course materials to be very well designed (except the last large part of query optimization which was so, so bad). The tutorials were quite intense and usually have many questions and go deeper than the lecture material (every one of them had so many questions and ensured you thoroughly understood and explored the material through practice.) As someone with 0 SQL / MongoDB or even just db experience, I actually felt that I became so familiar with SQL at the end of the first 2 weeks by doing that ridiculously long tutorial and only sitting through the first 2 weeks of crash course on SQL. They also ensured that you know how to set up a Oracle / MySQL database which was super useful and practical. I also became very familiar with NoSQL databases like MongoDB and a graph database like Neo4j, which is a good spread on the database types I can now tap on for my side projects. Although many of the reviews said that this course was "mostly database theory", I actually felt that the "theory" learnt was very relevant and useful in the practical sense. Besides just learning about database theory, the group project actually gave us a lot of opportunities to apply those theory directly in practice. My group implemented database design, normalization, indexing, query optimization and transactions, etc., by applying the "theory" taught in class which was so much harder to learn by yourself as compared to the implementation where we just had to google the appropriate syntax to achieve the "theory". These "theories" were what made our database design elegant and our queries fast, as compared to simply setting up a database with no theory. However, one thing to note is that the last part on query optimization (lectures 8-9, 12-13) were really bad. The lectures do not cover the required learning objectives well at all even though I rewatched them countless of times. You are probably expected to read the textbook by yourself to learn more, which is a huge time commitment on top of the intense HWs, group project, etc. I ended up reading almost every required chapter which was around ~50 pages? Relating to web development, I was super afraid coming into this course as almost all the reviews had mentioned that you would have to learn React on your own. Indeed, in week 3, they spent 1 hour each on HTML + CSS + JavaScript, React and Node.js, then expected you to work on a HW2 that was extremely guided. However, the group project required you to build a web app, which heavily relied on your web development skill (although you could get by with team mates who were already strong in it and if you just did the database part). To maximize what I got out of this course, I had bravely offered to work on the entire frontend of the group project, hoping to ride on the grades pressure to force myself to master web development once and for all. I spent the first few weeks reading docs and grinding javascript practice, followed by developing some small projects on react and node.js on my own. All these were actually manageable in the first few weeks and paid off as I ended up developing a very huge portion of our group project, which ended up as one of the awarded projects. Something I would probably recommend is to split your architecture into 3 layer and have each person work on it in parallel after the requirements and api specs are out. This helped our team to be way ahead of all the milestones and I managed to complete the front end 1.5 months ahead of the final deadline. However, we could have started earlier on the query optimization which ended up eating into the last 2 weeks of final exams studying (and was arguably the most challenging / unpredictable part of the project). As a result, we pulled through 1 crazy final week to complete the query optimization, report, video demo and final presentation, all in 1 within 5 days after the final midterms. All in all, I would definitely recommend this course to someone who is very keen to learn practical software engineering and can afford the time to do so. However, if you are looking to take a relaxing course or to get your As without significant effort, avoid this course at all costs. The grading criteria for this course is very well spread out (50% on "theory" midterms, 25% on group project and 25% on 6 intense biweekly homeworks), every graded item has a significant difficulty to it, and there is NO CURVE, hence it would very difficult to do well unless you put in a huge time commitment to ensure every graded part was well executed. The median grade for the first midterm was around 75%, which already set most people back from the grade A by quite a lot.
I am not much better in databases than I was at the beginning of this course. Most of the course is incredibly dry theory. Much of it is not, or not enough, tied back into practice. Hands-on, there is a total of one or two weeks of SQL and one week of NoSQL. Everything else is either theory or web dev. For example, the final two weeks are query optimization, a very important topic, but not at all taught in a way in which you will be better at applying these concepts whatsoever. Overall, this is the most boring, "missed opportunity," course I have taken so far in the program. Honestly, as an SWE that does a lot of work with databases, I will probably end up taking a MOOC in DBMS, this class just has not really done much for me.
This class was so frustrating that I’ve had to write down my grips with the class throughout the semester as a form of therapy. This is the result. See the last paragraph for some positives about the course. My issues with this class can be broadly broken into the following: material is lazy, bad TAs, and in general the course feels like it’s out to get you. Material is Lazy Almost all of the lectures were recorded in 2019, which is more than three years ago as of this writing. This wouldn’t be a problem if the lectures were actually good. The videos don’t have enough explanation, it’s just the professor’s voiceover reading each word of the slide out loud. The slides read like condensed gibberish. The steps in logic are often not explained, leaving listeners confused about how one thing leads to another. There are way too many “self paced exercises” where material is typed up in a PDF for the students to learn by themselves. The issue is, these are often the more difficult parts of the material that would really benefit from someone walking through it. Instead we’re left to our own devices to decipher these exercises. Now this wouldn’t be a problem if there was a good TA support network, which leads me to the second thing. Bad TAs To the TAs’ credit, they do respond to questions on Ed Discussion in a timely manner. Some of the TAs very clearly make an effort to help and are very nice. But the positives stop there. Sometimes we receive a completely unnecessary condescending comment from a TA. I would like to remind TAs that the material should seem easy to you because you are a TA. The rest of us are literally here to learn said material. You’re supposed to help us do that, and being patronizing is not helping. Second, TAs are also responsible for recitations, where they walk through some example problems using class material. This can be heavily hit or miss depending on the TA. I once had a TA during recitation copy an answer from somewhere else to explain a problem to us. When asked how they got to that answer, they literally said they did not know. Third, the TAs are awful at grading. I’m sure every student had a few grading mistakes that required regrades. With almost 300 students, 14 assignments, and 3 exams, that’s way too many grading mistakes. There are a few times where even if your answers and explanations are correct, you will be marked fully wrong if your write up does not match the exact specification. The rubric could explicitly tell TAs to accept various correct answers and TAs would still take away points if it does not match exactly to the solution they were given. I once had a grader give a counterexample to why my solution was wrong, without even checking that my solution covered their counterexample completely. Even though grading mistakes are almost always corrected upon regrade request, it is still incredibly frustrating. This happens so often that it’s hard to believe these are genuine mistakes. It really comes off as contempt for the student or TA incompetence. Course Wants You to Fail This course seems to be doing everything possible to trick you. The problems are intentionally worded poorly and TAs are told to resist any clarification. We’re constantly asked to write solutions to HW problems in a specific way, but are often not taught how to from the course material. For example, we’re often asked to write solutions in a closed form format, but we were never officially told what closed form format means. Looking up “closed form” online gives us different definitions than what is used in class. Eventually we’re expected to submit answers in closed form even without prompting from the problem. We then get docked points for not doing so even though that requirement wasn’t in the problem. In the probability unit, we were told to define a probability space for every solution but were not told how to do so from lectures. The TAs got so many questions regarding this they eventually wrote up a huge guide on Ed Discussion. This guide should have existed already without students asking for it. If the class is looking for a specific way of writing a solution, we have to be told how to write it! It’s not like the class doesn’t know this. During the induction section of the course, the professor walks through clearly how to write an induction proof in lectures. But for some reason for every other topic they fail to outline in lectures how solutions should be written. The course is intent on shoving as much math notation down our throats as possible. When something can be easily explained using plain language, the course material prefers to have everything in math notation. I remember a TA saying they “don’t understand why students have so much trouble with notation.” I’ll tell you why. It’s because we’re not mathematicians. We navigate everyday life with language that is perfectly capable of describing the concepts you’re trying to teach. We’ve had very little experience looking at math notation, how can we be expected to be able to read it accurately and easily. Math notation would be a lot easier to learn if we had a sentence in plain language that translates long chains of notation. But that would be too much work for the lazy course material. This class requires a ton of work outside of actual learning because students have to constantly double, triple, and quadruple check answers to make sure the way they’re written fits neatly into draconian grading standards. I think I speak for a lot of students when I say that we actually appreciate a difficult class (see reviews on CIT 593), but this class simply did not give us the tools to succeed and actively tried to make us fail. We have to spend more time looking for supplementary learning material online. If we learn how to solve a problem from other sources, we have to hope that the answers we write based on outside learning will be graded fairly by TAs and accepted as correct. More work in this class in no way means more learning, it actually detracts from our appreciation of the material. Compare this course to CIT 593 - Computer Systems. CIT 593 is known to be a lot of work, but the work serves to reinforce our learning. I would strongly recommend students not take this class and CIT 593 together because that will highlight just how bad this class is and heap on more frustration. Positives It’s a shame because the material in the course really is interesting. The problems are all interesting little puzzles and I feel like we’re building up a toolbox to find real solutions. Professor Tannen is extremely helpful in office hours. I often think if they just took clips from his office hours and edited it down into additional course material, this class would improve manyfold. He tries to sprinkle humor into the material and problems which does help take the stress off a little. This course can really benefit from a revamp of the teaching material and from hiring TAs who are thoughtful, good communicators, and actually interested in helping others learn.
This course is currently one of the only courses in our curriculum that allows an open-ended group project in the form of a web app. For those hoping to add one of these projects to their resume, as well as dip their toes into backend and frontend work, this is a good course. For others, the course is still a good one to learn the basics of database theory, but it may be annoying to spend more time on front-end and non-database work if you are primarily/exclusively interested in database internals. The time commitment was average but would be significantly greater if you don't have prior front-end, SQL, or general web development knowledge. The project pacing seems to be a bit skewed and the final month is heavier with homework, project code/demo/report, and exams 2 all due. The two exams are fair and the second isn't cumulative.
This class was a major disappointment. We spent so little time learning frameworks like MongoDB and Neo4j, and instead used the majority of the time working on theory, most of which isn't applicable to the real world. We spent 1.5 weeks learning SQL, 1 week learning MongoDB, 1 week learning Neo4j, and 1 week learning NodeJS. This is simply not enough time to truly learn. Not to mention, the workload was intense, as most the homework has 10 pages of problems and requires mastery in a topic that you only spent half a week learning. Yes, the final project is really cool, as you get to build an actual application that interests you. However, it's simply not worth it to me. You'd be better off learning databases through self-studying, instead of taking this class. At least then, you'd spend more time on building and writing queries, instead of proving relational algebra axioms and functional dependencies.
This class touches on many topics like SQL, React, general web development, NoSQL. It moves at quite a fast pace, especially in the first few weeks, so some prior SQL knowledge will help tremendously, as well as finding yourself a good group for the project which you'll work on all semester. I found the class to be essential for someone who aspires to become a software engineer (which is most of us) so would strongly recommend taking it. Assignments are only due biweekly so if you start early, they are quite manageable. There are 2 non-cumulative midterms each worth 25% which I thought had good coverage and were fair in terms of difficulty level. This class has so much potential but still fails in some areas. For example, we spent only a week on React, but multiple weeks on the nitty gritty of indexes and I/O calculations which I've mostly forgotten already. If MCIT is meant to be a condensed program that gets people without CS backgrounds to find jobs in the tech industry, then its courses must be made more practical.
Pros: - Learned SQL, MongoDB, and Neo4J. Also exposed to Javascript, HTML and CSS, but not a lot of instruction on them. - Dr. Davidson's lectures are clear and well-articulated - Unlike other courses and electives, the assignment instructions are well-written, so that I generally understood what I was supposed to be doing - There is a lot of content and I got a good value in terms of the number of topics Cons: - This is the highest workload of any class I've taken at MCIT excepting only 593 and 596. - I felt torn in multiple directions by the need to work on a group project and individual assignments at the same time - The group project felt like it was about web development instead of databases, and there were hardly any supports or resources built into the course for it - Some topics, such as NoSQL languages, were so late into the course that they felt like an afterthought, but I wanted to spend more time on them - The course only takes a mathematical approach to databases, there is a TON of math, but not a lot of real-world applications or problems presented - There is a lot of jargon in the lectures and content which I felt detracted from my learning experience - I was so stressed out the whole time in this course and felt the learning curve and workload were too high and I didn't get any chance for topics to sink in - The difficulty and scope of the assignments (you needed to find 2 databases with thousands of rows of data for the final project all on your own) did not seem to enhance my learning experience; the challenges presented did not make me feel like I understood the concepts better when I worked through them. Writing more complex queries did not necessarily translate to a deeper understanding. I am not sure I would take this course again. My goal was to learn SQL and see if I enjoyed WebDev, but, I do not feel this course was a good fit for those goals in hindsight. I think this course can be improved by reducing the workload, adjusting the order of topics presented, reducing jargon and including more real-world applications.
This class provides the most tangible "resume boosting" experience for those looking to get into SWE - by the end of the course you will be proficient with SQL and have had significant exposure to MongoDB, Neo4j, JavaScript, and React. However, the lecture material can be dry and hard to follow at times, and the workload for the course is VERY back-loaded. The good: most of the content covered/skills acquired in this course is very much in demand. The professor makes herself available on Piazza even more than the TAs which was very impressive. The project is by far the most important project you can work on in MCITO - it serves as a "capstone" in which you find yourself basically using everything covered in the program to deliver a fully-functioning web application which makes API calls to a MySQL database hosted on AWS. The not so good: the material is not very engaging in some weeks - it feels like the professor is reading from a script and the result is it can be hard to follow along. The project milestones do NOT force you to pace yourself as I had hoped - I spent close to 40 hours per week in the last two weeks of the course because I had to learn React/JS and then apply that in the construction of the web app. My advice would be to start the front-end dev at least 4 weeks before the end of the semester if you can, to give yourselves time for the unavoidable roadblocks you will face (unless you already have web dev experience). Overall, I learned a LOT in this course that will serve me well in my career, and I would say it is the most important elective for those who want to go into SWE or even PM because these skills will always be in demand. I just wish the lectures were more engaging and the spacing was a bit better. But all in all, I am glad I took the course!
This class is primarily about databases and goes into depth with relational databases and gets a little into NoSQL databases (MongoDB and Neo4J). The project utilized React with Node.JS connecting to a large database. The amount of work you need to do for this course really depends on your partners for the project. I ended up having to do the majority of the work for our project which resulted in some long weeks. So make sure you choose a motivated team. Overall the class was good and worthwhile.
Didn't have too much coding experience before this class so it took me hours to get through homework. Wished the lectures covered things more in depth as the homework is more difficult than what is covered. TAs are super supportive and helpful though!
From this class, you will learn valuable skills that are essential for any SWE or programming job. With that, I believe you can learn these skills from other resources in about two weeks and without the hassle of watching the course's lecture videos which can be, at times, unnecessarily dense. I won't tell you what to do. But if I could go back, I would have chosen a different elective and spent a couple weeks learning the below skills from other resources. That being said, if you want a job involving work related to the underlying mechanics of DBs, perhaps this course is for you. The most valuable topics I learned from this course: -Basic database structure and what are/how to use primary keys/foreign keys -ER Diagram -What is SQL and how to write queries -What is NoSQL and how to write queries for MongoDB and Neo4J -Differences between SQL/NoSQL including advantages/disadvantages for each P.S. This course does not teach you web dev. Homework 2 touches on React and node.js but it does not provide adequate instruction on either topic.
After taking the course, I don't feel this course is as helpful as others described to swe. It was a very theoretical course, but it lacks continuity. The structure was loose and the topics covered from week to week were not related to each other. The quality of the TA wasn't good, as often I only saw one TA answering all the Piazza questions (but was rude). The instructor team wasn't transparent about the grading on final project, and our mentor (a TA) was non-existent throughout the process. The only thing I got out of this course was a full stack web, but none of the knowledge was gained from the course material or interaction with staff. I learned and did that with my awesome teammates.
I took the course with Prof. Naik over the summer and I like this course. I worked with a good team over the summer, and we learned a lot from each other. The course was made up of 25% Midterm 1, 25% Midterm 2, 25% Group Project, and 25% Assignments & Quizzes. I don't think either professor will make much difference, but having a good team will. Overall the skillset we learned was directly relevant to someone who is aspired to become a full-stack engineer.
A well-built course that provides a lot of good knowledge on SQL and NOSQL systems. I've definitely enjoyed this course a lot. I think the final project is a great culmination of the semester's topics as well. Things are prepared ahead of time, assignments are graded fairly, and TAs provide a lot of great help.
One of the worst courses I've taken in my schooling history. It's unfortunate because the professor was very patient and explained concepts very well in office hours, but the course was certainly not set up by him. The best part of this course is the final project where you work in a group to create a full stack web site. Although it's something you can certainly get done with free online courses, and to be honest, you'll need to do some independent searching for information - because this course really doesn't teach any web development. The worst part of this course is the grading. For assignments and exams, there is a mix of open response questions and multiple choice. The TAs might dock you for points even though you answered the question - but you may have missed some random bit that wasn't specified in the instructions. You can request regrades and they double down with more made up instructions. Some of the exam questions require you to write queries in an open textbox - and if you miss a parenthesis or quotation mark, you're losing points.
I did not like how this course was set up and found that the material grazes the surface of way too many database topics. I would rather the class focus on a few key areas of DBMS to avoid confusion and frustration for students. The homework assignments were very confusing and long. I found myself running out of time to complete two of them because I couldn't figure out what was being asked nor could I figure out where to find the information within the lecture material. The course requires a semester long project where you and a team of 3 others work together to build a web app that utilizes databases. This unfortunately required students, on top of the normal course content and assignments, to learn React and other web development topics on their own (so basically teaching yourself an equivalent of a web dev course with little to no guidance). I found the project to be extremely labor intensive and wish it was worth more of the final grade given the amount of work required. Each team is assigned a mentor TA that you meet with monthly to go over your project progress and they are supposed to provide feedback to adapt your project as you go. Our TA told us each meeting, including one before the final presentation, that our team was great and didn't need any changes, but then turned around and took points off for "not utilizing our databases differently enough". We weren't able to contest this because the class was then told once the project grade was released that we were not allowed to submit a regrade request on it. The main upside to this project is that it can be on a public GitHub repository which means you'll be able to use this as a portfolio piece. The course, and its staff, was completely disorganized. Students would make posts on Ed Discussion days leading up to the due date for assignments and still not receive responses from TAs or prof until days after the due date. TAs would give conflicting responses to student's questions which led to lost points on assignments due to this confusion. As mentioned, there was a semester long project. In the beginning of the semester we were provided with the spec on the project and in said spec students were told that they would have a chance at extra credit (up to 5% on the project grade) if their team's project won in any of these areas: Best overall, most complex/technical, and best looking. Many teams put in extra work aiming to win in one of these categories. The last week of class the project grades were released and no announcement of winners was given. I had made a public Ed post inquiring about the winners and was told by a TA that the staff had recently decided (without telling the class) that they didn't want to pick winners or offer the extra credit anymore. That infuriated me since I had to sacrifice spending more time on the last HW assignment for spending more time on sprucing up our project for extra credit. Thankfully I and other classmates were able to convince them to stick to their advertisement of EC from the beginning of the course, but I find it completely insane that the course staff would attempt to take away the EC without any prior announcement.
I learned A LOT from this course. I think it is very, very well structured and covers a wide variety of topics related to databases (especially given it's still an introductory course for DB topics). I disagree with other reviews about the lack of structure/unfair expectations regarding building a web application for the final project. The final project focuses its grading largely on database topics (everything we are taught through lectures) and the web application portions using Javascript are largely guided by an early assignment done early in the course and its related code templates. Furthermore, I'm very grateful that we were given a chance to wrestle with these challenging topics (DB and more) and were given the chance to integrate topics into a capstone project. I believe the guidance, lectures, and assignments prepare one adequately for success in this course. It's a lot of work, but I think that's an obvious requirement if you want to learn something completely new. The course staff and instructor work hard to provide a good learning experience in this course and I definitely had a fantastic one.
Just too easy. Needs a complete overhaul. Maybe make this an optional class or offer a harder version for people who'd prefer that. I'd taken only one other CS class in my life but I didn't learn much new here. Class averages were way too high on everything, AND there is a curve up.
550 is great- course material is extremely useful and interesting, the material is well organized, and the professor is good. The final project is a highlight of MCIT, and something I mentioned in almost all of my job interviews. You work in groups to make a full stack web app with a relational database, deployed over AWS. Most groups use React for the frontend and Express for the backend, both popular web development frameworks. This does require a bit of self-teaching to learn JavaScript, but it is definitely worth it. The homeworks aren't usually too challenging, though some of the theory can be tricky to understand on initial encounter. There are two exams, non-cumulative, both fair representations of the material learned, not overly difficult.
Many courses in MCIT will vary dramatically based on your background knowledge, but 550 might take the cake. If you have experience with (a) SQL and (b) web development, I can imagine this course being pretty average for the program. I had neither, so at times it was exceptionally difficult instead. The first two weeks are essentially a SQL boot camp, which I found brutal but valuable. My bigger issue came with week 3, where we were simultaneously introduced to HTML, CSS, JavaScript, React, and Node. The lecture materials provide a very light survey of these topics before you're given an assignment where you have to write several advanced SQL queries and integrate them in a simple React/Node-based web app—which, if you have no prior experience with web dev, is far from simple. Then you have the middle half of the semester, which focuses on database theory and involves some 595-style math. Contrary to many others, I didn't find this portion that grueling, but I have to agree that it's not very practical knowledge either unless you're looking to go into database administration. The final few weeks shift to NoSQL languages, which are fun but somewhat perfunctory, especially as everyone focuses on the massive group project. If you can do this project right, I think it's an invaluable asset ahead of SDE job applications. Unfortunately, I personally felt like I wasn't able to take full advantage of it, partly due to weird group dynamics but even more so because there was simply no time to actually learn the necessary skills *on top* of everything else going on (as mentioned, 550 absolutely did not give you that knowledge itself). So yes or no: do I recommend 550? It depends. If you either have a strong SQL base going in or are prepared for 2-3 brutal weeks where you go from beginner to advanced right out the gate, then great, that's the first hurdle. The bigger one is whether you think you can reach the final third or so of the course prepared to tackle the group project. I strongly advise anyone going into 550 to try and complete at least a basic React tutorial before they reach that point, because otherwise the course's biggest selling point, its professional relevance, will be largely moot.
This class changes so much every 2 weeks that you don't really learn anything well. Just when you start to figure out a certain language or technology you're immediately off to a new. Could you honestly look an interviewer in the face and honestly tell them you know NodeJS after working with it for 1 week? This class should be 2 or 3 things and stick with each for a month plus, not switch from one language to the next every week. I would not recommend this course.
There were a few good parts - learning the basics of SQL, MongoDB, and Neo4j, and setting up a RDS instance on AWS. Those 2 assignments (out of 6) were well designed, and the assignment on building web apps with React was useful enough for the project. While some of the theory seemed useful, the teaching was abysmal. I feel like this professor wants this class to be "rigorous" so makes the lectures, assignments, and exams as confusing as possible even when the ideas are simple. The theory is then never connected to practice, for example we go through relational algebra and calculate page IOs but never learn how to actually optimize queries in the real world. We also never learn about tradeoffs in database design, e.g. for a transactional heavy database vs a data warehouse and never practice setting isolation levels after learning the theory. The project was actually well designed, although the milestones were amateur hour -- the course designers definitely do not know best practices in web application building. I already have significant web application experience, so the project was fun and we went way above and beyond, but this course would be a terrible way to learn the important nuances of building websites. I would just take a course elsewhere for web design. All in all this course was the most annoying course I have ever taken.
One of my least favorite courses in the program. This was my first elective and not sure if this issue exists for all electives, but TA support is nearly non existent. You can post a question on Ed and not get responses to it for days. The professor is the most active in answering the questions. The TAs didn't care about your success and you knew it. The class is overall not difficult but what makes it hard is they don't release hw solutions at all. This hinders the learning experience quite a bit as we never really know what we did wrong; or if there was a better way to do a problem, we would never know either. The final project was a painful last few weeks. I highly recommend spending time finding a good group with a diverse set of skills (data cleansing, query optimization, front end). The project took me longer than any other project I've ever worked on in MCIT. If you're not familiar with the parts you sign up for, it will take you a long time so start early if you can. This was said in other reviews, but at the end of the course, you are jack of all traits (two weeks in SQL, one week front end, one week mongoDB and one week Neo4j etc) and master of none.
Weeks 1-2 and 13-14 were super interesting (SQL & MongoDB/Neo4J, respectively), but a lot of time was spent on theory that doesn't actually come into play when working with databases in the real world. That said, this course did a great job preparing me for interviewing. DB questions came up almost universally in the SWE interviews that I did. Overall, course was a lot of work (especially combining in the project/final exam timeline), content was a bit over-the-top, but it was super useful preparation.
This course definitely feels like it covers some of the most practical material in the MCIT program but the execution and organization were not the greatest. There's a lot of very different topics that are thrown at you and are covered only briefly before moving on to the next topic. For example, HTML/CSS, Javascript, Node.js, React were all covered in the same week, with only a brief introduction before an entire assignment was due the week after. Some of the topics like relational algebra and query optimization were also quite abstract and took a while to get through but were only covered very briefly. On the bright side, the group project is definitely something you can put on your portfolio, but it can also be a challenge depending how your group is.
Really good course, people don't like the theoretical weeks but having watched CS 186 (Berkeley's Databases Course) concurrently with this course, this is exactly what they teach (and more). The theoretical parts are also highly relevant for data engineer interviews/roles (how to normalize data, diagramming skills one -> many, many -> many relationships, etc.) and just generally good-to-know knowledge for all software engineers. Only frustrating part was dealing with the group project (would honestly lookout for bad teammates and being prepared to code in React/Javascript), and the grading system for this course is harsh (A, A-, B+ were 90.5/89.5/88.5, and then it drops to B which is 80.5...) with two heavily-weighted 25% midterms. I ended up with a 96% on the group project after putting in more than 60 hours into it, and 92% overall. This course is not for the faint of heart. And for those who won't put in the time for the group project - be warned, your teammates will grade you poorly as there is a peer assessment part.
Amazing lecture videos, good TAs and professor, fun and challenging homeworks, not sure how you could not enjoy this course to be honest, great way to start the program.
The hardest parts about this class are keeping up with the lecture material, completing the homework, and not making dumb mistakes on the exams. The final project, on the other hand, is pretty straight forward. Our group had zero front end experience and ended up using the skeleton of a past homework assignment for pretty much all of our final project's front end and we did fine. This was the "easy" way to approach the final project and is always a fall back option if you take this course. If you can, find group members that have some experience with client-server architecture. If you start moderately early and put in a bit of work each week, you can come away with a solid understanding of React, Node.js, and SQL. The final project is either a chance to get super creative or simply an opportunity to explore the basics of what it means to make a full-stack webapp. Careful though, the weekly assignments and exams are sneaky difficult.
For me this class was the most practical class I've taken so far in the program. I appreciated both the breadth and the depth of the material. The projects are time consuming but very rewarding. The web development component of this course had a steep learning curve for me but ultimately was very beneficial to my learning experience, and the group project tied the whole class together. I did feel that the first half of the course was better structured than the second half -- the last few units especially were very rushed, which is something to watch out for. After taking this class I definitely feel prepared to tackle technical data science interviews using SQL, which was my personal goal, and I appreciated exposure to HTML, CSS, MongoDB, and Neo4j. However (this seems to be an unpopular opinion) my favorite part of the material was the level of theory and mathematical rigor - these provided a deep understanding of the workings of relational databases, rooted in the fundamentals of relational algebra. Overall, I strongly recommend this class!
Well, this is a hard one to rate. The class starts very strong, effectively picking up where 593/595 left off by teaching you how flaws in C code could be exploited to gain root privileges. For a few weeks, I felt this would be the general format of the course, learn how databases, web interfaces, and applications work behind the scenes, and learn how to exploit well-intentioned code. Yet a significant portion of this course is dedicated to a deep dive into public key infrastructure, which is, unfortunately, a deeply theoretical discussion. And to summarize its major conclusion "don't build any cryptographic security tools yourself, use what is available and use it correctly." Which, based on my mathematical maturity, is certainly great advice. I wish six weeks weren't spent discussing the theory behind it and were spent learning how to use said cryptographic tools correctly. After the cryptographic sojourn, the final weeks pick back up where the first part of the course left off. You once again get back into learning how websites and browsers work and common exploits that can undermine those systems (spoiler alert, never click on a link). Also does <script> alert(0) </script> work here? If you get a pop-up this website has a security flaw. If you aren't comfortable with web development the last project will take a fair bit of time. But, once you get the exploits working, it is rewarding.
Take it! Pros: 1) The material is actually interesting, especially the web security portion of the course. 2) The lectures are well done; I appreciate the conversational way Professor Angel explains things - he's not reading from a script. 3) The projects are challenging but fun; it's very satisfying when you can get the attack to work. 4) You reinforce and deepen your systems knowledge (from 595) by learning about and conducting buffer overflow attacks. 5) It's really fun to learn about the web by examining its security issues and exploiting them. 6) Now I know what that little lock icon in my browser means. 7) I learned basic HTML and JavaScript in a very hands-on way (in the web attacks project). 8) There's not much hand-holding so you become more "scrappy" in figuring out how to do things; I suppose that's the ethos of hacking. 9) This material is foundational and will be relevant to any software engineering job. Possible cons: 1) I often felt frustrated at how long the projects took simply because we were left to figure out so much on our own; much of this was the kind of productive struggle that strengthens you, but some of it felt like wasted time that could have been saved with a few helpful clarifications up front. 2) The middle portion of the course goes into depth on cryptography, and some of the mathematics involved are tedious; but to be fair, you can't really understand cryptography without understanding the mathematical principles we use to define and ensure security. TLDR: This is not an easy class, but it's satisfying and valuable. I sometimes felt frustrated, but overall I learned so much, and I would definitely take it again. I would recommend it to everyone.
This is a good elective and I would recommend it, although there are a few kinks I hope will be worked out after this first semester. The content of the course itself is really interesting and a lot of it actually came up in my onboarding at work as a software engineer. We learned in equal measure about classic vulnerabilities in C programs (fun for students who enjoyed 593 and gdb); the mathematical theory behind cryptography; and modern web vulnerabilities. Prof Angel is a fun lecturer and his open office hours are great — he knows the course material well and can dive into industry applications as well. The coding we did in this course isn't necessarily about best practices of any specific language (C, Python, JavaScript) but about being able to hack together something that works in those languages. Some cons: we didn't have any TA-led live events such as recitations, and didn't have any practice ungraded assignments to learn from for assignments/projects. Support on Piazza and OHQ could have been better; private office hours were often cancelled/rescheduled last-minute. Weekly quizzes were single-attempt which caused unnecessary stress, although the lowest 3 scores were dropped at the end. In general the course was a little more difficult than I think was necessary because of these reasons. On exams: they were open-book/open-resource, though still difficult because they ask for application/critical thinking behind the theory we learned in class. Midterm median was 74% and final median was 85%. Overall: This class was one of the most challenging — but also one of the most rewarding and interesting — courses I've taken in MCIT.
My favorite course in the program so far. If you enjoy computer/cyber security concepts, this class is a must take. You will have projects in buffer overflows, attacks on cryptography, SQL injection, and web app vulnerabilities.
Interesting content with highly-applicable hands-on projects to actually understand what is being taught. The projects & HW are a lot of work, and there are extra credit problems that dive even deeper (and are even more work, with a couple at the end actually being unsolved problems). I appreciated that most of the projects and HWs are based on actual attacks that happened to companies or open source software. Weekly quizzes are only 1 attempt and only 2-4 questions, which are high-stakes given the quizzes are 15% of your final grade, but your lowest 3 quiz scores are dropped (so only your best 11 quiz scores count). Proofs popped up for a couple weeks which was an unpleasant surprise, but it’s not as intense as 592 & 596 as far as proofs go (there is a specific "security game" formula for proofs you learn). The content is split into 3 overall sections: C vulnerabilities, Auth/Cryptography/Encryption (with surprisingly only a small amount of overlap with 582), and web security. There is a crash-course in HTML & JavaScript, which is mostly the first 2 weeks of https://www.edx.org/course/programming-for-the-web-with-javascript, and the majority of the videos are optional (they’re just included if you’re interested). The final project does involve HTML & JavaScript (including jQuery), which is straightforward if you're already familiar with web development, but still a decent amount of work, and if you're not familiar, you'll learn what you need to quickly! Best part: the final is not proctored!
I really enjoyed this class! I think it has a good coverage of security topics. The class consists of 3 parts: 1) hardware attacks (require you examining stack and using pointers) 2) Cryptography - very theoretical and some math involved (modulus and exponents) 3) Network security - web based attacks. - Pros: contents are interesting, professor is knowledgeable about the topic. projects are fun, like opening backdoors; injecting code in a website etc. - Cons: projects can seem open-ended (but not really) and can get frustrating, I had spent hours trying all kinds of tricks and still not working, went to TA office hours and turned out I wasn't looking in the right places. Always go to OH when you are stuck! - Not a pro or con: exams scores don't add up to 100 - kinda bugs me when it says a question is worth 3 points, but the total is 58 or something, so it is really 8.6 points for that question which is a lot.
| Material | Broken up into three major chunks: low-level vulnerabilities (e.g. buffer overflows in C), cryptography (starting with historical ciphers and then transitioning into modern cryptographic objects), and web vulnerabilities (e.g. cross-site scripting with JavaScript and jQuery). Depending on your background, you may need to put in more work in some areas. I had previous experience with C (593 and 595 are required pre-requisites), so the first third felt pretty intuitive, but the remainder was either maths (probably around the 592 level but different application) or web dev (no prior experience). But you won't be building a web app a la 550, but rather breaking an existing one. I recommend starting the projects early in case you find that you need more time to pick up the necessary bits of a language. This course uses C, Python, JavaScript, JQuery, HTML, and technically CSSs but I did not find CSS necessary. | Assessments | There are weekly content quizzes in Coursera, and apparently the bottom three are dropped (we just found out after final grades posted). There are four homework assignments that are short answer. These are based on course material or required readings, generally more on the theory side of content, although one felt more like a project. Three projects are applications of vulnerabilities covering the three major chucks of material. These are mostly autograded. Two exams, with the split between the mathy chunk. | Overall | The material is definitely interesting and provides some good background on security of computer systems that is probably applicable even if you're not planning one becoming a software engineer. The optional readings aren't assessed but worth the read anyway. The instructor had office hours twice a week and really helped clarify some of the more difficult topics. This is the first iteration of the course, so obviously there are things that could be improved, some of which occurred during the semester. The TAs were good but I'm hoping there will be more in the future.
This was a good class, but not a perfect one. The topic is fascinating. I learned a ton about a wide range of computer security issues. I liked the professor's lecture style. I also think I have a much better foundation on general web security issues. It's a great course, and I recommend taking it. That being said, there were a few negative aspects of it. 1. Lack of TAs - The TAs were great, however there weren't very many of them, so it sometimes took a while to get help on an assignment. Additionally, there aren't any recitations which would have been helpful. 2. Too Much Encryption - We spent 2-3 weeks on low level stuff, 6 weeks on encryption, and 4 weeks on web security. I thought the class was too encryption focused. I loved the low-level attacks (buffer overflows, etc.), but I don't think we spent enough time on it. 3. Assignment/Test Scheduling - This class felt like it was staggered strangely. The last project ended up being the most difficult, but we only had 2 weeks for it (along with another simultaneous homework + studying for the final). Aside from all those complaints, I think it's a great course that achieved its goals. I would take it again.
One of my all-time favorite courses! The material and projects were super interesting, the instructor and lectures were great, it covered a lot of interesting topics but also managed to go into a certain amount of depth on all of them. There were 3 main parts focusing on application security, cryptography, and web security. There is a strong focus on cryptography which I understand isn't everyone's cup of tea (there was a lot more discussion of mathematical concepts than I expected), but you do projects and homework assignments where you get to apply the theory in fun and interesting (and challenging!) ways, so I ended up still enjoying that part. The projects tended to be really time consuming, so it is definitely not a light course, but I thought they were well designed and I enjoyed all of them. Note that the application security part of the course goes into a lot of detail on C, the stack, and assembly language, so if you hated 593 you probably won't like that part.
<script>alert(1);</script> By taking this course you will know what something like this means and examine each website with a completely different mindset. You will learn how to manipulate stacks to your advantage, and have a whole new perspective on the code you wrote in 593 and 595. You will have a much better appreciation for how things are actually secured, by diving deep into common hashing, encryption and certification schemes such as RSA, SSH, SHA256 etc. This is a course that teaches you very little actual coding, but requires you to really use coding creatively to solve problems. Be prepared to spend a whole lot of time feeling frustrated at homework. Be prepared to feel lost in exams, but through these challenges, you truly learn a lot. However, due to the huge amount of time needed, I do not suggest pairing this course with any other courses, nor with any other out of school commitments. This is a course best served alone!
This is a really interesting class that does a good job covering both the theory behind security as well as modern tools for preventing attacks. Professor Angel has a clear and accessible lecture style and was able to break down some really tricky topics into a way that could be easily understood. With that said, this class is very, very challenging. I found it comparable in difficulty to 596 if not slightly harder at times. I would only really recommend taking it if you truly have the time to devote to it. Unfortunately, due to a full time job and variety of other commitments while I was taking the class I wasn't able to devote as much time to it as I would have liked. As others have noted, the assignments are quite open-ended and are designed in such a way that you have to figure out a lot on your own. They're only really a positive learning experience if you can do them without feeling rushed and take the time to explore different approaches. Thus, if you are genuinely interested in getting the most out of 551, I would recommend having a light schedule outside of it.
Not going to lie - this class takes work. However, I really enjoyed learning the ins- and outs- of major areas of computer security. The projects approach the topics by having you construct working attacks, which was probably the most fun and interesting way of learning this. Also, It made me never want to construct an app that requires user input (lol). Lectures are good, Prof. Angel adds enough humor to keep them engaging. Assignments take time - do not wait to start them. As someone else posted, there's a lot of "productive struggle" in the assignments (the professor stated this up front), but sometimes it presented an impediment to just getting started. My only real gripe is the grading structure of the class - assignments contained very few points, and partial credit was sparingly applied, so missing a question or two here and there sometimes took a chunk out of the overall grade.
Remember Dijkstra? Ever wonder what would happen if the nodes in the graph could send messages back and forth? In Networked Systems, you learn about the nitty-gritty details of how computers talk to one another as well as the implications of their discussion. The algorithms covered in 596 take on a different color in a distributed setting. The course focuses on the data link (bridges/switches), network (routing protocols), transportation (TCP/UDP), and application (peer-to-peer overlays) layers of the OSI model. Dr. Loo's explanations of the material were refreshingly detailed and well diagramed. The project is among the program's most rewarding. Your task is to implement the routing protocols that drive today's internet and construct a basic peer-to-peer search engine in a group of four. Have a strong group pre-selected for the course as it will make your life easier and the class more rewarding.
This is a very group oriented course so I think your experience will really depend on your group. I had a really difficult time through the group project that made me lose faith in this program and the staff. There is not a lot of support for this course. The professor and lectures aren't bad and the group project itself will teach you a lot about networking and Github. The material isn't shockingly difficult, but my group project experience was absolutely awful. I don't think I've ever had a group project experience as bad as this one.
Even though I found some of the lecture content (hardware and electrical engineering-adjacent material on the lower network layers we learned about in 595) and delivery a bit dry, I still highly recommend this course to not only students interested in systems but also those interested in software engineering at large. The projects were a lot of fun and I believe this is the only course so far in the program where we're able to work in an industry-sized codebase rather than a toy project — don't worry though, the TAs split out the codebase and work into bite-sized amounts so it's manageable with your group of 4. Similarly to 595, the course workload is extremely light other than the amount of time the projects take. For those who want to go above and beyond, there's no shortage in additional hands-on learning opportunities with all the project extra credit options available. The best part of the content, in my opinion, is that the class teaches, and has us implement by way of the projects, really interesting and industry-relevant distributed systems concepts: the theory behind a lot of graph algorithms when we don't know the entire graph; and large-scale systems design concepts such as exponential backoff. Finally, we all know Professor Loo's patience and fast Piazza answers from 595, but in this course he really shines as an industry expert in the field. He's actually founded and advised startups in this industry, and was able to relate many of the theoretical concepts with actual open source projects, tools, and companies off the top of his head during open office hours.
This class is great because of its projects. The lectures are light and introduces many system designs involved in networking protocols and DHTs. The OOHs were great where prof. Boon talked about many interesting topics like video streaming, content distribution, datacenter etc. The real value of this course comes from the projects which I think gives you a lot of software engineering skills like reading an already developed codebase and using the API's in it to extend the codebase to support new features. This course will force you to learn git in detail where you will be branching, merging, and of course handling merge conflicts. The projects have plenty of interesting ECs which if you implement, you will have an system almost similar to their real deployed versions. So, I would recommend this course to anyone interested to learn network programming and gain software engineering skills at large.
I came to this course with a deep background of photography and finishing it with just that and no additional knowledge. The course covers many specific topics with no content that binds them all together. Where are the overviews, summaries, interviews, industry-wide application examples? The Prof jumps to the course content directly every week and goes deeper and deeper into the subject with no hint whatsoever on how that knowledge can be applied. The only link between the course content and assignment was the TA office hour. Without it, one could never dream of working on the projects. There was very little learning about the actual course content in the projects. Instead, the key learning was always about numpy, dealing with arrays, matrices, hacks for getting things to work in python. It was a huge disappointment taking the course!
This is a critical subject area that all computer scientists and software engineers need to be familiar with, making this a course that most students should take. However, I feel that the course itself fell flat overall. Yes, there is a very interesting group project that covers routing, distributed hash tables, and distributed search. It is a great way to learn those concepts. However, the project specs are not very well-designed for group work. You can work in a group of 4, but it is very difficult to break the work up. Many times this required synchronous code-alongs which, while good for peer learning, are incredibly difficult to arrange for working adults who live far apart. It felt like everything took far longer than it should have because of this. Additionally, the project often lacked guidance, further causing a bit more wasted time; team of 2 or team of 4, it probably would have required the same amount of time. The project was hard because of inefficiency and ambiguity, not necessarily because of the topic itself. That said, good project, just needs better design. As for the lecture material: I have never found Boon's videos to be effective. I did, however, find the textbook to be solid. I read it cover to cover and feel that I got a good bit out of it. Luckily the course follows the textbook for the most part. So, if you don't get much out of the videos, you can just read the textbook (you can get the PDF for free). The best content from Boon and Kim came in the form of the recorded office hours, which were like the missing lectures we should have had all along. Although not of high video/audio quality, the content is quite engaging, as we watch Boon draw out the network and interaction between the various components. The tests are surprisingly tricky, albeit open book. Most questions require thorough answers of at least a couple of paragraphs (some shorter, some longer). Average grades were not good, but they might be curved. The project was worth more than the exams, so completing the project will bring your overall grade up. To succeed in this course: Proactively find a good study group from day 1; interact with each other frequently via Slack and Zoom. Agree to some methodology for managing the project and make sure everyone knows how to use Git. Start on the project as early as possible. Read the textbook first, then watch Boon's corresponding videos. Watch the recorded office hours from previous semesters.
I liked the class because it had stellar staff support and opportunity to learn the network programming with hands on project. It had lighter workload when the project deadlines were still weeks away. However, do keep in mind that the course project (there are 2) used C++ and the code base was industry sized (not your average toy project). The main challenge was to team up and start tackling down the project by milestones. The TA office hour and recitations were very helpful when you got stuck, and the professor was kind and knowledgable whenever you have questions from the lectures. He's always ready to teach in the OOH. I strongly recommend go to the OOH because the lecture itself might be a little dry.
If you want to learn how networks and distributed systems work, this is the course for you. The course is comprised of 3 open book exams, which are very fairly graded, and a 2 part project. The project is made for groups of 4 (and I think it's required you have a group of 4) and is where most of the learning will take place. You'll build a distributed network capable of handling node failures, all from practically scratch in C++ Whether or not you have a good time in this class weighs heavily on the groups as the group project is pretty intense and requires good collaboration as you'll be doing a lot of code merging/pair programming. The professor is awesome, the exams wont break you, and you'll learn a lot!
Very interesting lecture material. Great introduction to distributed systems with a strongly correlated practical projects. The projects were hugely helpful in understanding the theory and putting it in context.
There are two substantial group projects in this course, completed in groups of 4. I enjoyed the projects and found them to be very challenging and time-consuming. (These projects are much more challenging than the 4-person group project in 550, say.) It was key to go into the class with a group of students I had worked with before, as we spent many, many hours working very closely together. I would not take this class again if I were not already part of a group I knew well before signing up. Given the difficulty of the projects, I appreciated the light lecture content and easy open-book exams.
The most enlightening aspect of the course is the opportunity to attend Prof Loo's office hours. Even though for most of the time, not many of the coursemates are showing up (which I think is a shame to pass on the opportunity to interact with one of the industry experts on the subject matter), he still provides lots of insights regarding the coursework and beyond the materials. I personally enjoy these opportunities. In terms of the course content, there are some overlap with CIS 5490 when this course touches upon TCP and wireless communication. The two projects (basically one whole project, but split into to 2 parts and subdivided into milestones) requires some deeper understanding on the concepts present in the lectures and their implementation in C++ and ns3 library. Once you get the mental model of the whole project though, the required bits are not that hard to finish, especially with competent teammates. The project has plenty of EC opportunities for the interested students to delve into and learn more. I have even implemented an incremental version of the Dijkstra algorithm and made it work in one of the ECs I attempted! That was one good piece of code that I would not forget anytime soon. I would recommend the course for those who wish to have some deeper understanding on networks, systems and software engineering. This course would give you a taste of working in a large code base and collaborating with teammates, in a low-level language and implementing algorithms that form the basis of the modern internet.
Excellent course. A lot of work. In many courses, you could complete the final project yourself if you really had to. In 555, that would be impossible. You need a stellar group to succeed.
Though I'd heard this complaint before about other courses and never found it to be true, I agree that the assignments and the lecture material are fairly disconnected, and as a result you should expect (and indeed you are encouraged) to read documentation while completing assignments. While that might sound like a criticism, I actually kind of enjoyed it - I presume this was done to simulate what it is actually like to work in such an unexplored and immature space. That being said, while it's unreasonable to expect a four month course to teach you everything there is to know, I wish the course had branched out to various crypto a little less and focused more on just ETH and BTC. Even as an avowed crypto skeptic (and now more certain than ever that I am correct), I found it very interesting to learn more about this material, but in retrospect, if there had been a course on cryptography, I'd have taken that instead.
Super interesting topic. Good lectures. But... I dropped the course after a month, since the massive amount of time, I spent on HW, was too frustrating for me given the return. For me, the HW were too much workload. From my point of view mostly because there is a big gap between lectures and HW (meaning I couldn't transfer much from the lecture to the HW), and within HW, instructions make sense if you know what is meant. I didn't, so there were too many passages, where I did not even know what the goal of the particular passage was. That was burning tons of my time while some more details in the instructions could have easily avoided that for me--without giving away the learning curve. On the one hand, the class aims to throw you into real life business waters ("go figure it out yourself style"). On the other hand, IMO those real life business waters typically come after you had the training wheels on at university (and in this course, the training wheels were too small for me). Also, I personally didn't like that the coding is a very low puristic Java level. Goal of the HW (at least the ones I saw) is basically to replicate features of commonly used libraries without using them. I would have learnt more, if the HW would teach you how to properly apply the commonly used packages, since this is what I am typically doing in my real life business scenario. I think it would be great to split the course into two courses (it is odd to me that the instructors perfectly know the feedback from students that this course has the workload of substantially more than 1 course unit). In the first course ("teaching you how to drive a car"), you get to know the main concepts and apply them with commonly used high level packages in HW--basically keep the current lecture and design new HW. In the second course ("teaching you what is going on under the hood"), you code on a low level in the HWs, while the lectures pick up the underlying concepts--basically the current HW with new matching lectures. The split into two course would naturally relax the high workload. And I think the first course would be more MCIT friendly and--even though there are students that score well in the current course--the first course would be more applicable to a wider audience of the MCIT program, including me.
This course has been the hardest I have taken throughout my entire MCIT journey. The HW assignments ask you to build a search engine incrementally, which will come into fruition in the final project. The HW assignments alone take a long time, especially if you want to get all the edge cases right. There is a public test suite available to make sure you get the basic functionalities right, but the hidden tests are very robust and will definitely catch you off-guard if you were not careful. The project was very demanding, and in order to deliver something in the end, you need to get every step of the sewrch engine right, from crawling to ranking to integration with the frontend, so you must apportion your time very wisely. Overall this course has made me a much better software engineer and I would really recommend anyone who wants to experience creating a project from the ground up at least once in school to take it. The reason I did not super like this course was that it was very very stressful and challenging, and in this first offering there were a few things the teaching team needs to tweak to make this a well-administered class. Hopefully in the next offerings these wrinkles would have been sufficiently smoothed
Coming from a non-IT background prior MCIT, with only 591-596 under my belt, this course was far more than a stretch for my abilities and mental health. Mastering the high workload & expectations in abilities for the whole semester has put me under huge pressure. I would welcome if you/the university seriously considered to make this a 1.5-2.0 credit course as this would better reflect the effort that this course requires. To me, keeping the workload manageable for students is an important quality that I missed in this 1 credit course. As a full-time student, I took the course because it was the last opportunity to take it prior my graduation and I wanted to embark on a challenge that advances my java programming skills and understanding of the web. I really valued the lectures modules as they span a variety of topics that also tie in well with other courses of the program (e.g. 582 Blockchain & Cryptography (old version), in which being familiar with http request & response was great for homeworks; 555 also added for me an additional view on the 582 encryption deep dive topics). For me, mastering homework assignments based on the lectures would have been impossible without extensive TA sessions in the first half of the course. Most TAs though were really great and engaged, the best TAs I have seen so far throughout the program. The homeworks really stretched the understanding from lectures and often I could not see why I would code something in a certain way for it to be useful in a later homework or the project. I would have loved to get more hands-on coding insights from the professor to even further improve my coding style. I could also well imagine a separate course for advanced Java programming (e.g. hands-on coding to deal with concurrency, or extensive & right use of the logger, was not part of 594). (O'Reilly books are a good resource but did not feel sufficient to me) For the final project, it would be great to have access to a list to see which TA was responsible / had experience in which project part. It would also be great if one could reach out to respective TAs who were responsible on the same project part more on a 1:1 basis, rather than only EdStem & TA Office hours.
This class is exceptionally well put together and informative – probably the best course in the whole program. I'd say it's likely more useful than even the other 'classic' courses like 5500 and 5450, and there's plenty of crossover with these courses. Unfortunately, this class is also way too much work for anyone doing this program part-time. The assignments are incredibly lengthy, probably 2-3x as much work as any other course I've taken (this was course #10 for me so I think that's a fair assessment of the workload in comparison to the program as a whole). Expect to spend 20+ hours on the weekly assignments. If you can, start the first assignment on day 1 and don't stop – you may be able to build up enough of a lead on the assignments that you never truly fall behind. In my case, I had to take a week of PTO mid semester in order to work exclusively on these assignments and get far enough ahead that I could realistically continue to work and not get fired. The lecture videos are excellent, and the professor was extremely responsive during the course, so on all measures besides the workload this course was 10/10. Just be very cautious when enrolling here that you do in fact have enough time to complete the work. If you do, it's worth it. If not, it won't be worth it as you won't have the high quality project to show for it and your mental health will most certainly suffer.
This is a pretty difficult class to rate since it's new and a lot of details are still being ironed out. The best part is the lectures which, for the most part, are well-made and informative. Prof. Haeberlen has a very concise lecture style and tells you what you need to know directly without any extra fluff. He does tend to speak very fast though to a point where I'd need to rewatch parts to catch what he was saying. The course is less strong when it comes to assignments. The first nine weeks have weekly homework assignments which were all long and tedious and then the rest of the class is spent working on a group project which is very challenging. I would say the homework assignments were roughly comparable to the Solo Project in 594 in terms of workload and time required except here you're doing them once a week. The consensus seems to be that the weekly assignments take about 15-20 hours to complete but certainly could be more in some weeks. Later weeks when you're working on the project will probably require even more time. This is separate from watching lecture, reviewing, taking quizzes, etc. On one hand, the assignments were a great way to get familiar with the Java API (especially with multithreading) and with designing a large scale program; however, I'm unsure of how useful they really were from a pedagogical perspective. The first assignment is building an HTTP server completely from scratch and then later on you build other tools like a key-value store and a basic version of Apache Spark. These all are used for the final project which is essentially building and deploying your own version of Google. While I understand that the benefit of these projects is to have us become familiar with the inner workings of these existing tools I felt as though they weren't entirely useful for a couple of reasons. First, we were making pretty trivial versions of all of the tools. For example, our web server could only use HTTP 1.1 and our key-value store was very simplistic and incredibly inefficient (tip: this will be a huge bottleneck for the project, spend a lot of your time fixing it upfront or the rest won't work well). Thus, we weren't really getting a full picture of how real world tools like Amazon S3 work when we were basically just making minimal viable product versions of them (which is already very difficult to do). The ones we built likely have little in common with the real versions and can only perform a small subset of their functionality. In a real world setting, the programs we built would likely be pretty unacceptable since we were incentivized to focus more on their functionality rather than good coding practices. Second, I feel like we would get more out of this class if we had the opportunity to use already existing tools. In my opinion, the final project would be a lot smoother if we could actually use Amazon S3 and Spark rather than spending most of the time trying to perfect very basic versions of both that work just well enough to make our final product function but would be pretty useless for most other applications. The lectures already give us a good background in how these tools were built behind the scenes plus we'd get familiar with how they actually work in practice and would be well prepared to use them in our jobs post graduation. Throughout this semester, there were many occasions where assignment requirements were modified because of bugs people found or changes in what the professor wanted us to work on. This required checking Ed Discussion pretty frequently to make sure you didn't work on an old version. This probably will be less of an issue in future semesters but it's definitely something to be aware of. Overall, I'm not really sure if I would recommend this class. On one hand, I learned a lot about system design and how the web works but on the other hand the assignments were quite long and stressful most weeks and took away from most of my learning since I had to spend most of my time doing the homework (which rarely felt useful) instead of focusing more on the lectures and making sure I understood them at a deep level. I would only really recommend taking this class if you feel like you can set aside 20-30 hours a week for it otherwise you'd be in for a very stressful semester. If you work full time I would definitely not advise you to take any other classes along with 555. As a bit of a comparison, I would say 555 has the workload of 593 with the difficulty of 596. It's without a doubt one of the hardest, if not the hardest, class in the MCIT program. Looking back at it, I probably would prefer to read a book or take a Udemy class on system design and take another elective instead.
This is a course which I liked very much but would only recommend this course to those who will be able to spend significant time in this course (the project may require upto 30-40 hrs/week). This course is an advanced programming course in java so you need to come with at least intermediate skills in java programming and be comfortable writing substantial program every week roughly comparable to the final projects in the core courses. My only java skills were from CIT5910, and CIT5940. So, it took me some time to get acquainted with threading, lambdas, streams, but taking this course has greatly increased confidence in my programming skills now. The topics covered are also super important for system design interviews and mostly focuses on the existing systems and how they have been designed.
This is a very chllenging but useful course. For me, 555 takes around 15-20 hours per HW, if with EC then sometimes it can go up to 25-30, depending on the score you want to get (A or just passing). I found the EC costs more time but also make you learn a lot more, and it becomes handy when the final project uses our own homework implementation of server, key value storage, mini Spark, crawler, indexer and page ranker altogether. The course aims at introducing the basic structure and design of distributed system, so the services we built in homeworks weren't super fancy but they are certainly a good introduction of the concepts, and exploration of cloud services offered these days. Each homework has 15 points worth of EC, and that all goes to making more features on your implementation, that time is totally worth it if you like to be extra (like me)! I have to admit the schedule for homework is very tight. There's no room for break, since those deadlines are one week in between. Content wise I agree with what people said in MCIT Central and Slack. The topics are broad, but not as in depth when compared to some other electives. It's certainly fun topics and a reliever that we don't have to deal with complex lecture AND homework at the same time, though. The exams were open book, and not as difficult as the homeworks. I didn't have to spend too much time worrying about them. I took the class during Fall 2022, its very first trial offering. The professor re-designed and used the brand new homework assignments. Given the circumstance, it wasn't too bad, but I wish there were more help for the questions we had on the homework and autograders, since no one except the professor has finished the version of homework we got, we mostly have to rely on the professor answering questions and clarifying things. (The professor was awesome and very responsive!) I was lucky that I'm not working this semester, otherwise I'd be a little more annoyed by the various bugs/improvements we discovered during the term. Improvements: starting spring 2023, the instructor team developed and tested the autograder for 5550. The on campus and online cohort used the same version of homework which utilized Github setup and Gradescope autograder. As such, I believe it becomes more friendly to students, but would still advice those with at least intermediate Java coding experiences and sufficient time consider taking the class. I personally agree that this may be one of the most useful electives of MCIT/CIS if you want to go with software engineer route.
Conceptually, this class is awesome. The topics covered are really fun and apply a lot of interesting math and programming techniques. Unfortunately, the class is really shoddily put together. The instructions on homework and projects are extremely lacking in detail. The lecture videos do a good job of covering high level basics, but you need to know some pretty fine details that are never covered to succeed on the homework and projects. You need to know python, numpy, linear algebra, and multivariable calculus all to some degree. And basically none of these things are really taught to you in this course; they are either extremely glossed over or completely omitted. It's extremely frustrating to say the least. Instead of providing what you need in lecture or in the instructions, you have to wait for the TAs to post a walkthrough for every project before you can even begin. And most of the time that isn't enough, so you also need to either attend the live session where they talk about it (scheduled for Fridays at 9pm, of course), or watch the recording. Sometimes these aren't available until 2 days before the projects are due. TA support is almost completely missing in this class. Questions on Piazza are often answered days later. When you do get a response, it's often subpar and only half answers your question. Ultimately, I am leaving this class largely disappointed and feel like there was a lot of wasted opportunity.
This course is essentially a copy paste from previous courses and online material. The HWs are impossible to accomplish from the lectures alone. You seem to be tested more on your numpy, scipy, python familiarity more than lecture material for the projects. On pretty much every project, I understood the theory of what needed to be done, but I had to spend hours figuring out how to implement it with numpy. It's a good thing then that the projects account for 55% of the course grade Their grading system is the worst I've seen out of any other course in MCIT. Their 3 HWs account for 15% of the course grade. Which means that each HW is 5% of your final grade. Now, alone, that might be fine. But they grade HW out of 10 points instead of a padded point value like 100. What this essentially means is that TAs are forced to take off more points than they would otherwise. For one particular hw, there were only 3 questions. Messing up one measly question means that you lose 1.667 points off your final grade.... for one incorrect question. On top of all of that, we NEVER got feedback on anything we got wrong, because they were too lazy to make new problems for subsequent semesters. They did not ant to reveal the answers. What this amounts to is never knowing what we actually did wrong. How in the world do you improve if you got no feedback? I would ask specifically for more feedback, and they would not give it. The icing on the cake is how unaccepting they were of their own terrible course. There were a few times when I needed the benefit of the doubt... as it has been a crazy semester with a lot of personal matters going on. They did not even budge the smallest amount. I don't know which kingdom the professor thinks he rules over, but we are human down here. I probably would not recommend this course to anyone. The lectures are even ripped off slide for slide from his older courses. I don't think he put any real work into this course. I think you'd be better off watching online resources than taking this course.
I have very mixed feelings about this course. The topics were interesting, I felt like I came out with some good foundational knowledge about CV, and I got to make some cool things in the assignments/projects. But overall the course was stressful, especially since I had never taken linear algebra (which is not a prerequisite but basic knowledge of it is 'recommended' - you will have HW assignments that require it). I think it's the kind of class where the TAs can really make it or break it, and I have to say that in spring 2023 they were not helpful most of the time. In the end you can still do well if you put in the work, though. I do recommend doing the EC project, even though it doesn't necessarily have a big payoff for your grade, because that was by far the most enjoyable thing I did in the class and it was a cool way to apply what I'd learned. I know a common complaint about this course is that it's dated because CV has come a long way in the last few years, or that there's too much focus on some of the more basic image manipulations, but that didn't really bother me - I think a lot of the stuff we learned was still interesting and reasonably relevant. You'll get good experience working with multidimensional numpy arrays and vectorizing code, which is super useful! And with the extra project there is room to explore some more state of the art stuff.
Great intro to computer vision. Course materials included both classical computer vision (e.g. edge detection, image transformation, image morphing, etc.) and neural network. Professor started doing social hour every week in the second half of the semester, which gave us an opportunity to get to know the professor better and ask questions. The projects require familiarity with Python and NumPy
It's a good course. The prof is great, the TAs are real helpful, you will do well if you put in the work.
Fantastic course into CV. Lectures are pretty informative and clear, and the TAs were super responsive and helpful. Most of the course teaches classical CV (manipulating matrices to transform images), then the last few weeks you make models (predicting on images). You get to understand the behind the scenes of what Photoshop or any other photo editor does, and honestly every week my mind was blown in lectures. This was my final MCIT course, and it has been my favorite (amongst 591-596, 550, 521, 582). I do think it helps if you come with linear algebra and Python knowledge. I had medium-advanced knowledge in both areas prior to the class, so take this review from that perspective. Most weeks, I did lectures in 2 hours and homework in 3-5 hours, relying heavily on the TA walk-through videos to get started. Previous reviewers seem to have different opinions on this course... Maybe the course staff adjusted? I didn't feel some of the things mentioned from past semesters, and would strongly recommend.
Despite the other reviews, I'd say that this class has great content. Topics are super cool (at least for me), but I have to say though, this class suffers A LOT from the Instructing team's assumption that the students are generally already able to do a lot of linear algebra and stuff. HOWEVER, doing this class for a good 3-4 months, I came to realize that while the lin-alg and numpy topics are heavy, they are very REPETITIVE (!) All we need at times is just either inverting matrices, transposing matrices (or both), solving the resulting matrix equation after the transformations, plus the simple matrix addition, multiplication, etc operations. Thus, a class like this ADDED WITH an even one class or recitation about doing the matrix transformations (+ how it translates to numpy) would be superb.
This is very good introduction to robotic course, but this is not an easy one. I agree that you should least some foundation in multivariable calc, linear algebra, trig, and hs physics before taking this course. I am working full time single parent with young kid at home from design background. the last time I took some serious math course is like 15 years ago (though I took some coursera multivariable calc, linear algebra...), so this course is difficult for me. I am able to work out the answers and labs on my own with a lot of time and devotion to understand and following the content. Though it is allowed to have a team member working on a all homeworks togather, I did not find one (retrospectly. I strongly encourage people to get a homework partner) due to my messed-up schedule and time zone. However what I found most frustrating is the technical platform (virtual machines) that is difficult to use and constantly crashes. I did not ask for clarification with TAs but did required many extensions which are granted in time without too much hassle. I generally pull about 2 all-nighters + some day time to do the homework each week(20-30 hours). But overall, I really enjoyed the content of the course. Even though I may not get A in this but the content is well organized and well delivered. the assignment (though difficult) is well structured to reinforce the learning of difficult concepts. I am amazed for the progress that I made with the course in such a short span of the time.
Summary: Overall, this is a great course if you have the time to focus on it and are up for a challenge. I don't have a mechanical engineering (or any engineering background for that matter) background and I learned so much in this course. They told us this is basically the MEAM 520 course with some changes so yes it is more mechanical engineering than CS. I have taken calc, but it's been a while and I'm pretty well versed in linear algebra. You will want to have at least some foundation in multivariable calc, linear algebra, trig, and hs physics before taking this course. The labs use python (and numpy) but you could probably pick-up what you need during the course even if you have never used python. This was probably the most time-intensive and conceptually difficult course I have taken so far and I've had all As in 7 other courses. Even if you have a mechanical engineering background, this course is still going to take a significant amount of time because the problem sets and labs are just a lot of work (especially the labs). If you have this foundational knowledge, the interest in the subject, and the time (18-20 hrs per week), I would highly recommend taking this course, despite the flaws I go into below. If you are working fulltime, I highly recommend taking this course by itself or with a very very light course. Now the Areas of Improvement: The lectures are pretty good, but need more examples. The assignment instructions sometimes require some translation, but there are no recitations going over them so you waste a lot of time clarifying things on piazza. The TAs this semester were terrible- probably the worst I've experienced. They typically didn't know what they were talking about, said contradictory things, and even when they did know what they were talking about - they were terrible at explaining it. Terrible. But the worst part was they obviously looked down on online students. They were all on-campus MEAM (mechanical engineering) students so this is all trivial to them and they constantly made it known, even though they really didn't understand the concepts deeply. This really made the course more difficult than necessary and was demoralizing. The grading on the problem sets and assignments could use some improvement. The weighting of the questions is bizarre and the graders seemed to be hoarding points like gold. I had to go back and forth fighting for regrades and have the TAs be very condescending to finally get the head TA to say ("actually you do have a point - points back"). Ultimately, if they got better TAs, added recitations to explain assignment expectations, and updated their grading rubrics, this would be a favorite course.
This is not a CS course. This is a Mechanical Engineering course where you get to use Python as your calculator. The lectures of this course really don't do a good job explaining what you need to do well in the class. Most of the lecture is just abstract examples with variables and there are not enough or neot good examples for how to approach problems for the problem sets and the labs. It is nice that you can work together with a group, however, the lack of proper lecture matrial to tackle the course content is what makes the class incredibly frustrating. Would not recommend.
The professor is great and TA's are great. It was easier for me because I had a mechanical engineering background, so I was used to the physics nature of the class. Other people might find it difficult. Programming assignments are medium.
I enjoyed aspects of this class, but other parts of it were just frustrating. The lectures were brief with few examples, which made the material more difficult than I think it needed to be. It was definitely made for people with a STEM background. The course uses concepts from trigonometry, calculus, linear algebra, and physics extensively. I had very little training in math or physics, and I survived with some tutoring, but I wouldn't recommend it if that's your background as well. The topics covered were interesting and useful if you want to get into the robotics industry, but it really is just the mathematical foundations of robotics, and not at all how to use programming tools to code a robot's movement. I personally think the latter would have been more useful since there is not a robotics track in our program, and we can't pursue this topic further within our degree.
Things I liked about the class: 1) It gave me a great introduction to blockchains, cryptography and cryptocurrencies, and served as a launching board for me to venture into this rapidly growing space, which is getting more and more news coverage these days. 2) Very manageable workload. It is probably the lightest course of the program. 3) Weekly discussions on current events. It feels more like an ask-me-anything type conversation with Professor Falk, who is very open in sharing his latest research/work/projects. These discussions are in addition to the weekly professor open office hours, and are my favourite part of the course. Do attend them if you can. Things I disliked about the class: 1) One-attempt quizzes. Quizzes make up 20% of the grade, and are questions about the theory/concepts presented in the lectures. To do well in them, you need to have a great level of understanding of the material. 2) Dry lectures. I am probably spoiled by Dr. Farmer's 593 lectures, but most lectures do feel like a read-off of lecture slides. Some concepts were not well-explained in my humble opinion. 3) Less TA support available than core courses. Normal given it is an elective course, and it was not a big factor given most assignments were not too complex. However, most students spent the most time working through the last part of the 5-part final project. Make sure you start early and ask questions on Piazza to get help. Overall, I enjoyed this class and would take it again. This course attempts to cover subjects that are constantly growing - it is not perfect but it does give you the fundamentals. If you are already curious about what's happening in this space, I think this course is a no-brainer.
interesting material, not tough workload for first 10 weeks, 5-7 hours per week, last two projects are tough though bringing it all together at around 20-25hrs per week then. I enjoyed the piazza discussions working through the homeworks and the lecture videos are well done.
Unfortunately this course won't be offered in the future in this format so this review may not be super relevant, but I think the iterations they've done on this course has moved it closer to being worth your time. The first half of the course is actually really well done and an important topic to understand well beyond just crypto. It covers cryptography and distributed consensus, the backbone of the internet, cloud services, etc. I was taking 5550 at the same time and it covered many of the same consensus protocols, though this class covered them more in depth. For that alone I'd recommend this class. Plus, Professor Falk is great, especially in his weekly unstructured industry chats, which were optional but a highlight I'd recommend attending. The crypto portion of the class on the other hand was disappointing. It's really out of date at this point, covers quite a few blockchains that are basically irrelevant now, and at it's core is just kinda thrown together, poorly organized and poorly delivered. If you are interested in the course because of the crypto, don't bother. The assignments throughout are short and pretty easy. Once you get to the final project (which is broken into 5 pieces) things get a little longer, but remain pretty simple, with the exception of the final peice where you actually attempt to connect to blockchain testnets. Then they make you rely much more heavily on public documentation without guidance, and that documentation is poor and in some cases just wrong because the library has been updated/replaced since the assignments were created. But fortunately if you run the starter code with no changes you already get 75/100 so you don't have to worry about that impacting your grade too much. Hopefully when they redesign the course as a half credit course they just cut the second half and focus on the good stuff.
I thought this course was a nice intro to blockchain and cryptography. I did learn a lot, but I'd only take this class if you're specifically interested in blockchain. I found debugging difficult, but I don't think this was really in the hands of the teaching staff because blockchain is so new (for example, testing can be hard because the only way you can test involves spending some crypto). I will say that the lectures can be improved. I found some modules so extraordinarily unclear and it felt like the professors were sometimes mumbling their words. Unfortunately, the one attempt quizzes are based entirely on specific parts of the lecture so I spent a lot of time on those, trying to decipher what the professors meant. Things I liked: - Final project is cool (learn some flask and database stuff) - Nice introduction to vyper Things I wish I were different: - HW coding assignments can be too easy - Current events discussions scheduled right in the middle of the work day - Lectures unclear
This is a poor course that I strongly disliked. It can effectively eradicate your interest in Crypto. Teaching quality is poor. I feel no excitement or passion in his teaching. Office hours got canceled randomly. I'd say if you are interested in Crypto, you might feel better by just reading some books rather than taking this course.
This class is about Blockchains and Cryptography, which as we all know is kinda like the wild west. This class reflects that feeling, it doesn't really feel polished or put together very well. I had frustrations at times with the clarity on homeworks, and with some of the material in lectures. However, I think that the material in this course may end up being some of the most important material that I studied in my entire time at UPenn. The Byzantine Generals problem in and of itself is mind boggling important, and I think this class is a great jumping point to start learning about these technologies. This class is probably at its best if you are already into Blockchains and Crypto and are willing to put a lot of time into side studying. However, if you are like me and knew nothing going in, you will at the very least learn about some really important technology.
I have no idea what the professors are saying. It almost sounds like a stream of consciousness from the way they teach or like a fever dream. The slides say a bunch of technical jargon with no clear connection between any of the specific topics. I can watch like 20 minutes of lectures and feel like i retained absolutely nothing. In fact, i can watch in 30 second intervals, rewind multiple times, and feel like I have no idea what this professor even just said. Good thing the assignments are easy.
This is a great course if you're interested in Blockchains. Granted, I have not done much of my own personal research, but no lecture, course, friend has taught me as well as this course about blockchain, especially the Ethereum, Bitcoin, and Algorand blockchains. I enjoyed learning about hashing, what a blockchain is, and the primary project is to create an exchange (like NYSE) which can exchange Ethereum for Algorand (on their test blockchains). There are interviews and story lecture videos which also paint a good picture of the blockchain universe. Like every course, you can put as much time as you want into each week and assignment. Take the opportunity to ask the professor whatever questions you have about blockchain technology. Blockchains are like the wild west, and there is plenty of (job) opportunity in this arena. My regret is not asking the prof how to setup my own Ethereum wallet--that tells you my level of expertise...
This course sucks. It's easy at least, and until the last few weeks, a really light courseload. The lectures are really hard to understand and offer very few examples that help students understand the material. Honestly, I feel like I didn't really learn much in this class and that's mostly because the lectures were just awful. Don't really recommend this class, but I guess you gotta do what you gotta do.
I've completed all but one required courses for the MCIT program and this course has by far the lightest workload (until the last few weeks) unless you are very keen on diving deep into suggested readings. The TA support was also the lightest I've seen (e.g., office hours was sparse, responses on edstem can take a few days), however it was not a problem until the final project. The material was interesting (especially with recent events) so I am glad I had the opportunity to be exposed to the material. That said, if I were more focused on gaining/practicing programming skills, I would have picked a more intensive course.
Lectures/Textbook/OOH: The course seems to be the in the middle of a re-working, so the lectures are from someone who taught the class two professors ago but are overall pretty good, the textbook was a decent read and could help consolidate some knowledge, but both didn't translate well to the programming assignment homeworks (see below). The professor's office hours, to her credit, were fixed up to be a good source of help on the content after starting off a bit like being tossed in the deep end and expecting us to know how to swim in the content. Programming Assignments: The homeworks are a mix of old and new but all of them need a lot of love to fix their PDF descriptions for what's expected as they are a major source of the difficulty of navigating this class. The lectures and textbook, unfortunately, needed a Rosetta stone to translate from what you read/watch to what you need to do. The advice I got from a TA for translating from Lectures/Textbook to programming assignments, which stunned me, is to look at LeetCode problems and solutions for relevant homework modules. E.g. if the homework is on LinkedLists, go look up LeetCode problems on LinkedLists and review their logic and code to make sense of the textbook and lectures. Don't sleep on M7PA, it is VERY important to have that one wrapped up before the final gauntlet month of Solo > Group > Final (with lectures and quizzes still to do). It is no gimme, and is very important. Keep in mind that M7PA + Projects + Final = 50% of your grade, so that last 5-6 weeks of this class is a true and utter grind. Plan your vacations and daily life accordingly. OHQ/Ed The LeetCode advice from above proved to be a great help paired with Youtube videos and lots of GeeksForGeeks. Especially as, to me, the OHQ availability was often a poor source for help; e.g. TAs not infrequently missing their scheduled times, or completely booked in 5 minutes of opening as (I think) everyone had the same problem of less-than-ideal instructions assignments. Off the top of my head, of the about 12 OHQ sessions I attempted to join: at least 2 didn't have a TA the whole time, 1 I had to wait for after posting on Ed they were missing, 3 I got locked out of the queue (or left hanging), and of the remainder only perhaps 1 did I get an answer during the session. The others which were unanswered I was told I'd hear back after they looked at my code, of which once I got good advice and the rest I never heard from them again. My OHQ experience was a cherry on top of a difficult course for a non-Java dev like myself, as it just made me feel all the more alone in a rough ocean of a course. Ed: This is an active Ed class given the above issues. Read it daily for ideas and knowledge sharing, and then post early and often when you have problems in your assignments so you don't exclusively need to do an OHQ to finish your work. Hours: For weeks 1-6 and 8: 10-20 hours/week, variable depending on how good you are at Java going in (I was/am bad, so the high end). For weeks 7 (M7PA), Solo project, Final project, and Finals: 20-40 hours/week, see above variable. Difficulty: Expect this to be tough going in and it might feel less terrible. Expect it to be the 'cake walk' of previous years and reviews, and it could be a rude awakening. Learning: I gave this a neutral because, despite the sheer chaos it threw into my life, it was counter-weighted by me feeling like I have an immensely better understanding of programming, and programming well, both in Java and generally in this field. The Solo Project, while a slog, got my mind thinking about how objects and classes connect in a way that my brain actually feels re-wired for thinking more programmatically about things. It was a hard fought learning experience which I feel could have been less intense than it was, but I am definitely for the better from it.
This course leave much to be desired. There are weeks where I feel a quick simple coding assignments would allow for better mastery of the topics such as Byzantine Network. The grading for both quiz and coding assignments would do much justice to students with multiple submission considering the instructions and questions sometimes are poorly written or paraphrasing (they do this to create the confusion as not to be word for word to the slides). I feel like Brett Falk lecture videos are more clear and easier to follow with. The course is split 50% cryptography (first 7 weeks) and blockchain (final 7 weeks). Personally, I would prefer much heavier weightage on Blockchain and really get us to start coding Solidity/Vyper smart contracts right after midterm rather than just merely put aside on the final two weeks of the semester with just two sub-assignments. Midterm is fair with being open book because it's applying math/concepts to the problems. The course, despite being rated Easy, should not be curved upward as to penalize students who may have worked meticulously to pass the test cases only to be shot down with few unclear instructions along the way or working with slow Ethereum testnet server for the final assignment causing unconfirmed transactions to pile up.
[1] Interesting concepts. Learned a lot about how cryptography works and the practical usage of blockchain [2] Assignments was hard to understand in terms of what actually needed to be done. I mostly completed them by a bunch of trial-and-error [3] Few final parts of the course were getting way more difficult. Couldn't even complete 1 assignment [4] Quite generous grading
This wasn't a class I was originally planning on taking, but because of the MCITO scheduling, it ended up being my only choice for summer. That said, I enjoyed it more than I thought I would. I particularly enjoyed the section on cryptography - that would be a great topic for a class in and of itself. The blockchain-specific content was interesting and I feel like I have a much better grasp of the existing blockchain structures and processes that are actually out there. Workload was generally light, except for the last part of the final project (which is broken into 5 separate parts, each worth 20% of the final project score). My main gripe with the class is that the wording on quizzes was often unclear - it seemed like close reading skills were being tested rather than comprehension. This also translated to the midterm - I ended up doing multiple regrade requests for questions and explained how the question wording could be misinterpreted (I got all of those points back). Hopefully, they clarify those questions for the next run of the class. Assignments were not difficult once you understood what was expected. I am thankful to all who were able to attend open office hours and clarify quiz and assignment language. I have mixed feelings about the assignment instructions, though: on the one hand, it felt like the bare-bones instructions made the assignments harder than they needed to be; on the other, it made me go out and really figure things out on my own, so I think that I maybe learned more, overall. Up until this point, most classes I have been in hand-hold you through the assignments. This class does not do that, although usually everything you need to know *is* actually in the assignment instructions. My advice for future students is to attend/watch OOH and be proactive about starting assignments early and asking for help on Piazza. Know that most of what you need to know for an assignment is contained in the instructions, even if you don't see it right away. Work hard on each section of the final project - they build on one another, so if you don't get an early part correct, it snowballs into a bigger issue.
While I enjoyed the topics being covered, the teaching quality is disappointing. One of the instructors has lots of room to improve the presentation and teaching skills to make the concept more understandable. YouTube was my best friend to help me understand key concepts, not the lectures. The coding assignments are barely scratching the surface of the topics. More in-depth assignments should be designed to help students learn. I feel like I did not learn much after completing the course.
This was the only MCIT course that I truly disliked. The best thing about 582 is its very light workload. If you have a decent grasp of Python, you could probably get away with spending a couple of hours or so a week on the course, until you get to the final project. And to be honest, it is nice to not be overwhelmed with coursework. But ultimately, the course suffers from too many flaws. The homework is frequently not very rigorous--in most weeks, I wrote less than 20 lines of Python. The homework instructions also tend to be bare-bones, and it often feels like the burden is on the student to figure it out. Finally, quiz and exam questions are often written unclearly, and the hardest part can be figuring out what a question is actually asking. I can't recommend 582 to anyone in good conscience because it was the lowest-quality course that I took in MCIT.
This class was not awesome. It was put together horribly and took a ton of time just to decipher what the instructions were asking for on any given homework assignment. The quizzes are really silly and some, again, are indecipherable.
Worst reviewed course on mcitcentral? Check. Took it anyways? Check. Bad idea, but still got an A? Check. Would take again? No, never in a million years.
Copypasting from my course evaluation in PIT: "I am mightily impressed with the quality of this course. Out of seven MCITO courses I've taken so far, this one is the best. The Exchange Server Project alone made me learn so much new and exciting things I'm seriously considering to follow some of these vectors after graduation to start, for example, writing smart contract all by myself. The best feature of the course, at least to me, is its broad view of the underlying tech. Unlike all other MCIT courses were I was guided by hand, so to speak, this time I was presented with a series of connect-the-dots puzzles that allowed me to choose freely what I am going to learn and how deep should I go. Some of my classmates complain bitterly about a "lack of precise and clearly worded instructions" but I think they confuse leading and trailblazing with blindly following orders. How can anyone call himself or herself a Master of whatever if the person in question can't or won't do extra research on the assignment... After all, life itself is fuzzy and imprecise at best. In all honesty, the course was difficult to me, mostly because I couldn't have enough of it and wanted to learn more, which takes a lot of time. Exchange Server Project alone took me over 120 hours, not because it's inhumanly difficult but because I was developing and testing my code fully locally, which made me a much better user of Linux functionality and utilities not to mention Flask and SQLAlchemy, which I met for the first time in my life. Thanks to 582, now I am knowledgeable enough to deploy a Flask-driven app in the cloud, for example. Not a tiny achievement considering that I was also totally new to Python, to begin with. The cryptography part of the course made me --- finally! --- able to read the books that were way out of my league before I took 582, such as Applied Cryptography by Bruce Schneier, etc. Even the quiz questions that appeared tricky worded at first sight, turned out to be fair and on the point after close examination. Perhaps, the course would become even better if it covered the consensus protocols in more depth. All in all, it's been occasionally bumpy but truly enjoyable ride."
This is the only course I genuinely disliked among all 10 I’ve taken to finish MCIT. Up until the very end, homework is fairly easy if you get it right, but debugging is quite difficult if you get it wrong. On top of that, staffs are generally NOT there. Average response time on Piazza I’d say is a week. My questions were never answered before due date. Slack group for self help was a must. Office hours with TAs weren’t that helpful either. One attempt quizzes make up a decent percentage of the grade, dragging down grade. The very last part of the final project was quite hard to get right. I spent hours debugging trying to get from 70 to 100 and no luck. No help from TAs either. It’s 30 Dec today, and we still haven’t got the letter grade while the last graded item was due on the 13 Dec. Overall poor support from course staffs. You’re on your own if you take this one.
This course struggles to stay on task. The lecture material is poorly aligned with coding assignments, and as others have said before me, support is limited/ documentation is poor. The workload is light, but almost frustratingly light. The only difficult component is the final part of the final project. Getting a 75 on this component takes only a few hours, but getting from a 75 to anything higher is hardly worth the frustration. This is the only course out of the 10 I have taken, that I thought was poorly constructed.
I ended up enjoying this course more than I expected. I feel I have a good understanding of cryptography now, as well as how some of the more popular blockchains actually work at a high-level. My newly acquired knowledge allows me now to state with confidence that some people I’ve met before that talked about "the blockchain" and seemed to be making up stuff about it definitely were :-D 3 other highlights: 1) Slides clearly are updated each semester with updated data (e.g. crypto prices) and new trends (e.g. NFTs). 2) Midterm is open notes (you can even watch Coursera videos during it if you want). 3) No final exam! (just a final project which spans 5 weeks with pre-defined deliverables each week, although the last week took a good 20 hours to figure out, well beyond the normal weekly workload for the course, so try to work ahead a bit in that final project). 3 things to be aware of: 1) The quizzes are tricky, 1-attempt only multiple choice questions that comprise 20% of your grade. 2) It's not an investment class, so while you'll learn the technical details behind a good amount of cryptocurrencies, at best you'll know which crypto technology is appealing to you and which is not, which may or may not mean it's actually worth investing in. 3) Solidity (the most popular programming language for Ethereum smart contracts) is covered at a very high level with no actual practice using it. The 2 smart contract assignments instead are in Vyper, which is the 2nd most popular, and very difficult to debug since you can't print out debug statements. Vyper was chosen because it is a more familiar python-like syntax.
I'm a light programmer in Python so I feel good about the first half of the course. I don't even have to go over the course to complete the homework and also it only takes less than 4hr/w or so. But the second half of the course is horrible to me. I barely know nothing about java and transition of the programming habits from Python to Java was harder than I thought. Normally it took me more time to understand how classes and methods works than really completing the programs and debugging. In this case, I have to say the contents of courses still need to be improved. Or it would be like this, not useful for a-little-experienced programmer and not understandable for completely starters.
I came in with zero experience in coding and found this course to be very difficult. I like that Python was a very good introduction and overall the class is enjoyable. I feel as though the homework is very difficult for what we’re learning for the week though.
If you are someone who has already wrote another language for years(Python and R for me), it would not be a hard class for you.
I think it was a great course (and a great experiment). The Fall 2020 version of this course is, from what I was told, one of the first CIT 591 with both Python and Java usage. Python was generally easy, but then going to Java was quite challenging. The only downside is that the course only covered data structures in Java in like 1 or 2 weeks (while in 593 we had a full 2 months talking about each data structure) and thus for Java newbies creating such structures were a bit challenging, while in Python we can easily create lists/dictionaries/sets/such.
The hours required per week and difficulty level of this intro course can vary a lot depending on your prior programming experience. I did not have much prior experience and found some of the homework assignments to be challenging and time consuming. Guidance from TAs was really helpful and I was impressed with the quality and availability of the TAs in this course. The second half of the class focuses on Java and I found this section to be more difficult than the first half of the class which focuses on Python. I felt outside supplemental resources were valuable for explaining object-oriented programming concepts more clearly than the lectures. Overall, even if you don't have much prior coding experience, if you put in the time and effort and go to office hours to ask questions, it's possible to do well in this class.
Great intro to programming (had never formally coded before). Would be more challenging if I didn't have more detailed Excel experience. Good textbook, good lectures, projects were challenging but not impossibly so. Recitations were critical for success.
Loved this class! I came in with some light programming experience, but not in either of the languages covered in class. Python is so intuitive, it's a breath of fresh air if you're moving from more intense languages (I've only ever done a bit of C). The homework assignments were a lot of fun, and weren't too challenging. I thought the midterm was very easy, but struggled a bit on the final. Just because the final is open-book doesn't mean it's going to be easy!! The class itself seemed well structured, and I liked the way material was organized. I think this is a great introductory course to the program
A moderately light course to introduce students to software engineering in the MCIT program. First half covers Python while second half covers Java. Homework is fun but education. Of the homework assignments, the first 7 are solo projects while are last 2 can be done in collaboration with a partner. Grading is fair. The midterm and the final are take-home exams, and we are given more than enough time to complete them over the span of a few days. Overall well organised video lectures. I have found the recitation and open office hours to be very useful. Instructor is very approachable too.
Excellent introduction to programming course. I have previous programming experience so I did not find the assignments too hard, however, I can see why someone who has never programmed before can be overwhelmed a little by the projects. Great instructor and great depth of material covered.
591 is a good introduction to both Python and Java, but unfortunately lacks depth in both. The assignments were both challenging and fun, particularly towards the end of the semester. It's easy to do well in this class just doing the minimum (quizzes and assignments), but the optional practice opportunities are a great way to get more out of the class. Assignments are bi-weekly and took me around 10 hours each.
The assignments are fun, but the course is ineffective at teaching the material. The first half of the course is done in python, which I had a bit of a background in so it was not that hard, but the second half is in Java where we moved way too quickly through the material and the lessons were not great at helping students understand the material.
CIT 591 is extremely well designed and supported by the course staffs. From professor, to head TA, to the entire TA Teams, the course staffs are fantastic. They offer tremendous support for the students. The assignments are designed perfectly, which enable students to further enhance coding skills and design skills. Most of the TA Teams are so knowledgable and helpful. I learned a lot from the private office hours. The only potential advice is that midterm and final can be organized in a more challenging way, for instance, placing a time constraint or making it closed book. The current open book take home offers great flexibility, but a little bit too easy compared to the difficulty level of the assignments.
Provided a great intro to a lot of topics with excellent assignments that really solidified the information. The course content, however, lacked context when introducing new concepts so the lectures themselves were abstract until you got to the assignments.Be ware of the autograder. It's a black box that has a major impact on grades and causes lots of frustration especially when passing all the provided unit tests and getting high marks from the TA. For your assignments, ask lots of questions about discrepancies between the TA grade and the autograder grade so you can develop a better intuition for how they craft the auto grader unit tests. Ultimately, this is something that needs to be addressed because it flies in the face of good unit testing practices, isn't reflective of how unit testing works in the real world, and doesn't provide a chance to learn why you're failing automated tests but still meeting the assignment requirements.
I love this course. I have 0 background in Java, which makes the course a bit harder. But I really enjoyed it and the lectures are well prepared. The TAs are almost always helpful. Thank you everyone for making this course great.
In retrospect this class was very decent (I am writing this in reflection upon graduating). Starting out in the program, this class is a very good introduction to "this is how stem classes work", and programming of course. I learned to be extremely detail oriented, test for every possible case, and to build stamina in preparation for exams. I remember being very overwhelmed taking this as my first class in the program while working full-time. 3 years later, I would say I am now just used to working weekends and nights to finish assignments and it doesn't feel nearly as terrifying and stressful as it did that first semester. If you have concerns, they are valid. Have a good support system, meal prep, schedule your time. You can do this!
The Java portion of the class is definitely trickier than the Python section and the assignments get longer towards the end. But the grading is fair and it was a great intro to both languages.
The second half (Java) might be little bit challenging for those get used to the hassle-free Python
I came into this course having taken several MOOC's in the Python Programming Language and one MOOC in Object Oriented Programming with Java. While I was still exposed to new ideas and mindsets through this course, I believe this prior preparation made the course very easy. There were a few projects that ate up a lot of time (15 - 20 hours or so a piece) but by and large the content was digestible within a couple hours each week. For those interested in MCIT Online, and curious what MOOC's might be good to try on your path to this program, I completed the following MOOC's in the order listed: 1)Python for Everyone Specialization - Coursera - University of Michigan - Professor is Fantastic. 2)Python 3 Programming Specialization - Coursera - University of Michigan - Good Foundation. 3)Introduction to Computer Science and Programming Using Python - edX - MITX - Very Rigorous. 4)Object Oriented Programming in Java Specialization - Coursera - Duke University - Great Foundation.
I came into the course with a bit of prior programming knowledge and found the course to be relatively easy. However, I do agree with many others that the course material is lacking for those with little programming experience. For people taking the course in the future, it might be a good idea to take another introductory programming MOOC just to gain some familiarity with basic programming so that the course won't be too overwhelming.
The first half of the course is taught in Python and the second half in Java. My only experience with programming was from a couple months before classes began when I learned a bit of Python on my own. This helped me tremendously in the first half of the semester where I didn't have to spend much time learning new materials and just used my prior knowledge to do the assignments. If I had not learned Python beforehand, I'd say the learning curve would've been quite steep. There's a big leap from week to week, and I don't think the course materials were adequate. The midterm was in Python only and was take home so there was little stress. I started struggling a bit more when we started learning Java just because I've had zero experience with it. I ended up purchasing a Java class on Udemy which helped me get up to speed. The content provided by this class was again insufficient. They barely scratch the surface and rarely explain to students the "why". Definitely expect to look for outside resources when taking this class. It just seems so ironic that I learned all my programming through a $10 Udemy course rather than the $2500 class I paid for. The final exam was open book and on Java only, but due to bad integration of VS Code and Codio, I know many students had terrible technical issues (luckily I took it on the last day so most issues were ironed out by then). We couldn't even set breakpoints for most of our code though so it was back to print statements for debugging which was painful. I hope the technical issues get resolved for future semesters. I'm not saying the class was all that bad though. I thought the assignments were fun and the overall structure of a proper class have really motivated me to learn. The prof seems like a really nice guy and he is really willing to help during his office hours, which usually go for almost 2 hours. The TAs were also very helpful. I think there's a lot of room for improvement, and improvement takes time!
It is effective at teaching you Python and Java. The assignments are pretty clear and serve as great practice for getting comfortable programming. They can become time consuming if you get stuck debugging, or if you go into the assignment without a good understanding of what you need to do. With that said, the grading is pretty generous, and the exams tend to be easier than the homework assignments.
This is a fantastic class, and Brandon is a fantastic instructor. Yes, you start fast and furious with Python in the first term and Java in the second, but the course structure and the quality of the instruction/projects makes it quite enjoyable. This is my weekly breath of fresh air after 592.
Overall a fantastic introduction to software development - well taught, well graded, and well paced. Coming in with some coding experience certainly made the earlier half easier, but at a certain point, the assignments become more robust and time-intensive. Plus, Java classes require you to think a bit differently. The problems may not always prove logically difficult, but the sheer practice and repetition even made the more seasoned developers better. Especially with the framework of most code already provided, it becomes more of a fill-in-the blanks practice. No regrets for me whatsoever.
I took advantage of the preview weeks for this course and found the course load very manageable until the very end of the course. I was a novice to programming at the onset of this course and left comfortable with the ability to pick up new programming languages in the future.
591 is a great introductory course to programming in Python and Java. The assignments were clearly written and the TA support staff is very robust. If you have programmed before, this class is straightforward! If you haven't programmed before, I would recommend learning a little bit of coding before class starts. For people completely new to coding, the class moves at a somewhat fast pace. The Java portion can be daunting if you are unfamiliar to OOP languages. Overall, this was a great class with fun assignments too!
Excellent content and instructor. Very much enjoyed the assignments. My biggest advice would be to not simply skim through the lectures. Make sure you understand the content.
Awesome and fun class. It's hard to judge how much time this class takes, some weeks are very light, some took me over 15h.
Brandon is nice.
I believe since this is the first course it seems like most reviews depend on the amount of programming experience the student has prior to the course. for me, I just had the MOOC problem solving and some python experience from Udemy. I had really put in the efforts and clocked about 25 hrs per week, and went deep on learning the intricacies of setting up IDEs and everything on the lectures. after all I believe it depends on what you put in for the results to show. I would recommend attending the intstructor office hours, The professor in Fall 2021(I am not sure if we are allowed to mention names here but he is pretty much the only one teaching the course until now) is super awesome. and often the professor's office hours have only 12-20 students attending at least for my cohort. Which is amazing it is even better than an in-person class to get that kind of face time. The professor is amazing at keeping everyone on pace, and taking all kinds of questions. Especially after the second half of the course, it gets better since the ones attending are pretty much sticking with it. I am glad I did not try to waive out of it, and I gained a solid base for CIT-5940, also another excellent class with another big brains professor, and amazing welcoming office hours. I highly recommend jumping and experimenting with your own ideas based on the course.
I've never coded before this class. I found the lecture content lacked any kind of grounding background information. The learn by doing didn't work for me because I wasn't equipped with all the tools I needed to succeed. There was little information about how to actually think about and solve the problems we were asked to do in our homework, and the grading feedback was infuriatingly sparse. I don't feel equipped to code successfully in other classes, and I worry about my ability to succeed in this degree because of the lack of support. The professor is good. But some of the TAs and their lack of feedback makes it near impossible to know what you did wrong or how to improve. Thankfully, I didn't fail the class, but I wish they'd make this more accessible to absolute beginners. And don't get me started on ProctorU.
I came into this course with some Python experience and a background in Control System Programming. Overall the course was easy with my background. The homework varied in complexity and some required substantially more time than others. On average it was probably 10 hours or less per week (I believe one homework took around 20hours but we had multiple weeks to complete that homework). Starting the homework as early as possible is helpful. This class did not require any external resources. Creating your own cheat sheet while going through the lectures is helpful as you then have a nice quick reference to look at once you complete the course.
For context, I had taken introductory programming classes in college a few years ago and come from a mechanical engineering background. I really liked the introduction to Python. It's perfect as a first experience and provides the basic knowledge needed to further learn it by yourself once the course is done. In the middle of the semester there was a switch to Java which I didn't find extremely hard (the teacher provides the starter code and, with some observation, you can find your way around it). Assignments were medium difficulty, except one in the first half and the last two, but with office hour help they should be doable. Start early in the week. You can also drop your worst graded assignment so it's not considered for your final grade. I think the course was curved at the end as well.
Course difficulty is a bit subjective, however generally I think if you have any bit of programming experience (ex: took a class many years ago, etc...) the course won't be too difficult. However, regardless of background, the course is rewarding in helping one get acclimated to coding. Assignments were where most of my learning occurred as lecture videos were not too helpful. Lectures were simply too short and explanations sometimes lacking. Pacing was also a bit of an issue, as the jump from Python to the Pandas library to Java can be a bit much to handle if you don't have some prior experience in the latter two. In the end though, learning to program is really about getting reps in, so spending the time to do optional ungraded assignments was helpful for understanding concepts.
The last two weeks were much harder than the rest of the course. The final was much harder than the rest of the course. I loved it, learned a lot.
Even with 0 experence in programming, this course was way too easy. Not enough coding practices and 30 seconds lecture videos.
I really liked the first half of the course in which we did Python. It was just challenging enough to be accessible. However, the Java portion was a surprise, and I felt like the videos did not present the materials we were supposed to know in detail enough and that the assignments went beyond the level taught in the videos. Tips for future students: Brush up on both Python and especially Java, and use a lot of supplemental resources for the Java portion.
If you have any prior experience in programming then this class will likely be a breeze. I took an introductory CS course previously and found 591 to be lacking in comparison. The lectures were mostly the professor reading off of slides and rarely went beyond definitions of concepts. These were followed by quite long example projects which weren't always the most helpful. While the Python section of the course was fine for the most part, Java was pretty unsatisfactory. Crucial OOP principles like encapsulation or polymorphism were brushed over and very little detail or explanation was given. Overall, the focus was more on Java syntax rather than good programming practices, and I feel like this is not the best way to set a good foundation for new computer scientists. The homework projects were pretty fun to work on for the most part, but many were quite long and it's questionable how useful they were as pedagogical tools. If you are new to programming and taking this class, I strongly recommend getting a textbook to supplement the Java sections in this course. It will likely explain concepts much more deeply and will give a lot more details do parts that were insufficiently covered in 591 but crucial to know. With that said, I do give credit to the professor and TAs for being very helpful in office hours, recitations, and Piazza. Definitely use all of the resources available to you if you have questions. If the course were more detailed was designed better overall, it has the potential to be a solid introduction to programming.
This is a solid course. Very good introduction to programming. They cover all the fundamentals, from lists to object-oriented programming and connecting to databases. Overall I was pretty satisfied. The assignments take some time. I just feel some assignments require techniques that were not fully explained in the lectures, so we end up doing more research than we should. But that is a minor complaint. The course was pretty good.
Good introduction to oop. If you’ve had prior experience it may feel slow but if not it’s a very well thought out introductory course.
I came to this course with zero coding experience before, and found very comfortable to follow the pace of this course. No supplement learning materials is required for Python part. However, I do need to find some Youtube videos for the Java part to help me understand the materials better, especially some abstract concepts. Homework can be a bit challenge at first but it's not too hard. They are great to help consolidate the knowledge learnt in lecture. I didn't have time to go through all practice assignment (non-graded) since I am working full-time but they are also really well prepared. I didn't go to office hour or recitations often because I like trial and errors when it comes to programming (like if I only look at the coding example then I wouldn't feel like my brain is absorbing the information). But they do give demo or hint for HW so it's good to check out if you got stuck on HW. TAs are also nice and helpful.
Note: I had significant python experience, and very limited java experience before starting this course. The first half of this course is python which I would say is very easy. The assignments take only an hour or two per week and the lectures are things you can find just by reading python documentation. What I wish is that they had covered OOP in python since I feel like it is an important concept to grasp. If you have no prior coding experience I think this is a good intro as it goes over some important primitive data structures and give simple applications of them, but it may take you 2-8 hours per week to do the homework. There is a midterm project in python which was almost exactly like the practice they give you to do and was really straight forward. The second half of the course is java. You start learning the basic java syntax as well as OOP. The course gets a little harder at this point and the last two homework assignments can take significant time since they are much larger applications of what you have learned, so start those early. I would say overall it was a good intro to python/java and provides basic understanding of how the language works for all skill levels. At the end of this course you would definitely be able to code basic programs (likely inefficiently), and will probably not fully understand how to apply OOP to system design.
This is a review of 591 coming from someone who knew Python very well but not inheritance or Java, so your mileage may vary. Resources were widely available through code examples from the lectures as well as using docs on the web for language/method specific help. The TA's were helpful on EdStem to address anything relating logistics or setting up coding environments and IDE's. The lecture quality was similar to the MOOC specialization and were short videos that showed basic examples of how concepts were applied in the course to certain scripts. However, for someone new, it can be overwhelming relying on the lectures alone. Therefore, make sure to make some time to research on YouTube if you are completely new to programming. Assignments and exams were very straight forward as the specs and template code they give you is very easy to follow. For someone new, some of the later assignments can be daunting at first, but are easier to approach once you plan it out via drawing/debugging your code output. A lot of the boilerplate code makes inserting the methods you code on your own very simple to run. One thing I found very helpful in the course was Test Driven Development. A lot of engineers I know in tech had an intro course in programming, but all the test cases were written for them. This doesn't help later in classes such as Data Structures and Algorithms where you need to test the data structures you implement. Therefore, I thought that was a great part of the course! Overall, I think that the course was well designed from the perspective of someone who already knew some programming,
First of all, since I have no programming experience, I am fully aware that I will need to spend additional efforts to learn this intro course. But the course content and the materials are not as helpful as the other MOCC (free online course resource) I found online. Especially when I found out that the Java part of the course content is identically the same as another course from Udemy, I have not been clicking on those links from 591 anymore. (Not gonna lie, even the course examples are the same examples from the Udemy course, but 591 is a 20% subset of that course). Brandon and our TAs are the reason why I give a Neutral rating. TAs are always responsive from Piazza, and Brandon usually willing to stay longer during the office hour to ensure all the student's questions got an answer.
I'm someone who came into the program with limited programming knowledge (my degree was in literarature and business, but I took some introduction Python courses before applying to MCIT). Honestly, the homework were my favorite part of this course. They aren't too hard, but definitely pushed students to learn more than what the course materials delivered. By saying that, I meant most of the codes are not directly derivable from the slides, and the predetermined stubs given by the instructor have not been clear in what and how functions should interact with each other. Every homework has such great leap from the prior one and I can see someone who's completely new to the language spending over 20 hours trying to learn a new concept that's not properly delivered by the slides/lecturer reading off the slides. With all being commented on the course, I understand that the lecturer Brandon is new to this course, and he and TAs are indeed very dedicated to 591 if you notice his public official hour recordings are normally over the 60 minutes guideline. He actually put in a lot of efforts providing students with what they need to learn. However, as the whole idea of oMCIT was for students being free to learn the course content under all conditions, I know there are a lot of folks who aren't able to attend to every recitation and office hours, which put them into a less advantaged position. For me, I feel that there are 3 homework that takes more time but most of the time outside of homework I did end up spending less than 5 hours per week on this course. To sum up, 591 is an introduction course so maybe it is why most of the course was on the easy side. But if someone comes in with 0 background, he/she will not be able to finish the homework and practice assignments without referring to material outside of the class. The homework projects were fun and the course support was phenomenal, but the course is due for a completeness review and maybe supplementing additional texts and codes demos rather than keeping the current 15-20 second videos that just reads off the slides. It's purely waste of time and I'd rather just read the slides myself.
This class covered a lot, but the material was not that well-structured. Several times the homework assignments required extra knowledges that was not being taught at the time but would be taught in the coming one or two weeks. But I still really like the assignments. They were pretty challenging and each of them can take you to the next level. However, I think the amount of workload was not consistent and was reduced to some degree during the second half of the course.
For those who have zero to little coding background like me, this is a good introductory course. The lecture videos, practice coding assignments are good and enough to prepare for the exams (which I think was fair in terms of difficulty). Attempt all the homework assignments and as much as possible, apply best coding practices in your submissions (not just coding for the sake of passing the grading rubric) - ask Prof. Brandon and the TAs for help. I have taken advantage of private OH, piazza, and make time to attend the instructor OH twice a week. If you feel that you have enough OOP knowledge, take a waiver exam instead. Otherwise, this course is designed for those with zero to minimal coding background.
I came into this course with some prior experience so was relatively easy. But if you have never coded before it will require you plenty of time to get accustomed to the syntax first of Python then of Java. The course is well structured and does its job of introducing you to software engineering.
It was a good introduction course to programming. As long as you spend decent amount of time each week and practice the assignments and homework in a timely manner you should be able to do well. The course is well-rounded, I personally did minimal additional reading to supplement my knowledge and pass the course. But, for someone hasn't programmed before it might be good idea to pair the coursework with a standard textbook in python and Java.
I really enjoyed this course. I love the breadth of material covered, I thought the workload was very reasonable, and I thought the general approach to grading and evaluation was really fair. You have to take this course, so you're going to, but I bet you'll enjoy it a lot.
Great introduction to programming and the MCIT program. Projects were challenging, but manageable. Final project allowed students to work at there level and incorporate prior coding experience.
I enjoyed this course and thought it was straightforward. The workload varies significantly week to week, and in particular the final few assignments took a lot of time to finish. If you have no prior experience programming I would suggest getting one of the recommended textbooks, especially for the Java section - I took Java in undergrad a few years ago and I had to refer back to my notes to better understand some things. The midterm and final both had optional practice assignments; I’d recommend completing these as they helped a lot for the actual midterm and final. Instructor office hours and recitations also were great for giving hints and elaborating on assignments.
Overall the course was fine, but I felt like it wasn't quite sure what it wants to be when it grows up. While it is nice to cover both Python and Java for the sake of awareness, I think that we could have gone far more in-depth with "Software Development" and Computer Science by simply focusing on one of the two languages and going further in depth with it, building something neat and worthwhile. If the purpose of covering Python was to establish some core concepts in programming, this was unnecessary. If the purpose was to give us a baseline in Python, this was inadequate (I would estimate that half of the students already knew what was covered with Python, as it was very basic). Important concepts like version control and databases were only given minor attention in what seemed like more of an afterthought. Unit Testing, while arguably important, received far more attention (and required far more time) than necessary, and we could have used that time to explore additional concepts. At the end of the course, I was left asking, "What exactly was the overall goal of this course?" Was it to be able to write unit tests and javadocs blindfolded? Or, was it to survey all of the fundamental concepts of software development? Or, was it to get good enough in a language to say, "I know this language." The homework assignments tended to be somewhat rigid in what the final outcome was supposed to look like, and this is because most everything is auto-graded. Auto-grading for a $100 MOOC is fine, but for a $2500+ course, I would expect a bit more of a tailored approach, a bit more hands-on work from the TA's. Lastly, this course left us without any portfolio-building projects. I would have much rather had a "Intro to Software Development with Java" course so that we had time and depth to build something real-world, instead of a regurgitation of many of the concepts covered in the free computational thinking prep course.
Coming to this course with a fair amount of experience in Java and some experience in Python, I did not learn as much as I hoped to. I did enjoy the assignments and felt that I got some valuable experience working on them, but I found that the areas of the course that were new to me (like the data analysis with Python section) were confusing and I relied more on external resources to figure them out than I hoped to. Professor office hours and TAs were very helpful in general though! I appreciated the lighter workload as well.
Coming from Python going into this course none of the concepts were new to me. Though I still spent in total probably 15-20 hrs/week, but that's because I like to go slow. Material presented clearly and content was well-organized. Easily digestible and all the info was on the slides which is nice if you want to skip videos. I liked the assignments and thought they were the perfect intensity. Intro level course, nuff said. My 2 cents: I took a Udemy course on Python and enjoyed it more. I would have liked the material (both Python & Java) to be presented in a less prescribed "read off the slide" manner, make it a bit more fun or interesting. I think an intro-level course needs that. But, most universities teach the way they do so nothing against MCIT there!
This class is incredibly organized. For those who say it's hard - there are PLENTY of resources for you to succeed. If you find it harder, there are practice projects available every week. I found that I did them early on, and then sort of stopped once I became more comfortable. Some homework's will take you 20 hours, some will take 6. Really depends! Professor Brandon is AMAZING - his instructor OH are super awesome to attend (even for the conversation). TA OH will be critical for succeeding if you are struggling understanding the concepts of coding and how to approach certain things. Also, Piazza is an amazing resource. Students help eachother out all the time and post helpful answers! One thing I would keep in mind to succeed - learn how to debug. Early. Just look up some youtube videos on it. Try to figure things out yourself first before attending office hours. Lastly, remember that looking at someone else's code and trying to find a problem is HARD! Show the TAs grace. That isn't easy for anybody. Also... a hw is dropped, so if you are feeling super stressed and don't have time, take advantage and skip an assignment!
You pay 3k dollars for a course. What you got is far less than a free Codecademy course.
I had previous Java and Python experience, so the material wasn't exactly new and weekly workloads were minimal. I gave this a maximal rating from personal experience -- I thought it was a good overall view of programming. That said, if you're a beginner, as in someone with NO previous experience, I would expect to spend 10-15 hours per week on average for the class. Some weeks are light, with only quizzes. Other weeks have full-fledged assignments that will take you 4-8 hours alone, not including lectures.
I came in with a background in mechanical engineering (some Python experience, no Java experience) and this course wasn't too bad. The first half in Python is fairly straightforward, but the difficulty and potential for confusion increases in the second half of the course with Java. However, Brandon and the TAs are very helpful in assisting with questions through Piazza (I didn't go to any OH). The lecture videos for this course are excellent. I highly recommend coding along with each and every one of the "code demos" in the lectures. I would watch Brandon write a few lines and then write them myself, run them, play around with them, and only move on when I felt I fully understood what he did and why he did it. Getting through the lectures takes much longer this way, but I felt like I didn't need to do most of the practice assignments before hitting the homework. Homework is due every 1-2 weeks depending on the size of the homework. Every homework felt fair since all concepts are always covered in lectures. The last two homework assignments can be done with a teammate but are completely possible to do one your own with maybe 25% more time.
I have learned Python before but I'm a total novice when it comes to Java. That's why I didn't even try to waive this course as I thought that 591 could lay a firm foundation of Java for me. But I was wrong. It only scratched the surface of Java and the short videos (40s) are really not conducive to learning. Brandon is a very nice guy but he is not a Python coder as his demo code is not pythonic. Honestly, 591 did not meet my expectation of Penn. And if you have coding background, definitely try to waive this course.
This is a great course overall. However, having very limited programming background, I found it challenging. I would say I probably averaged more hours/week than most as I double/triple checked a lot of my assignments and tried various ways to break my code. Great overall structure with the opportunity to learn a lot. The second half of the course (java) was harder and required more time for me, particularly as I knew some python (covered in the first half of the course) going into this class. Watch the recitations when you can to help you better understand concepts. I watched them a couple days after and was able to speed them up and save some time. The TAs and professor were extremely helpful.
Pretty easy with prior software engineering experience. I didn't learn many new concepts, just syntax for Java and Python.Toward the end of the course homework assignments get more time consuming, but everybody's lowest hw grade was dropped. I can imagine that if you don't have programming experience though, this would be a very difficult, fast-paced course.
Like a lot of incoming MCIT students, I had a good amount of experience with Python before this course, but none with Java. That made the first half of the course pretty straightforward and easy, but the second half tougher (still not very tough, but it definitely took more time). If someone came into the program with literally zero programming experience, though, I could see this being much more difficult and time consuming.
I came into the course being comfortable with Python but knew nothing about Java. I really liked the course and its structure. It's a great foundational course! It lets you practice a lot of concepts. Homeworks are fairly asking to practice what was taught. The teaching team is quite good and the professor is really knowledgeable and very responsive. The final is a bit trippy with VSCode. Practice it early in the Java section and make sure to do a practice exam.
I think it is important to say this as 591 is the first course in the program. If you come from 0 programming background you can survive this program, not only that but you can thrive. You need to estimate how quick of a learner you are. This course can take 10-20 hours. I spent about 3-4 hours on content and practices, with 8 hours per assignment almost every week. The midterm is generally some of the higher grades in the course and is good to see as even if you struggle at first, most people do very well in this course. Since its an intro course it has the most TAs, TLPs, and graders of any course. Which is very helpful for questions.
Relatively easy if you come into the class with basic exposure to Python and Java, otherwise, I can imagine there being a steeper learning curve. I appreciate the broad range of content covered in the class but I did not like that the lectures tended to tell us how to write code rather than why we design code in a certain way (to be fair, it was not totally neglected but I felt that the course could have done a much better job at this).
Came into the class with no prior programming experience and found the course very fulfilling and challenging. Between watching the lectures and working on the programming assignments, I spent 25-30 hours most weeks on this course (and enjoyed every minute of it)
I came into this course having completed a couple programming bootcamps but no professional experience. I found the course easy and not very time-consuming. I knew Python already but learned Java in class, so naturally I had to spend more time once we reached the Java portion of the class. Still, I learned a fair amount and feel I can write code more cleanly and deliberately after taking this course. Professor explains very well. Homeworks have a very clearly stated rubric, so you know exactly what to expect. If your code matches the expectations, you will get full marks on the homework, so the path to an A is straightforward.
I found the class to be highly manageable. Java was a lot more challenging than Python for me but the course structure sets you up for success. I feel very proud of the programs I developed! I averaged 12/hrs per week but you can go way over that if you do every practice assignment. One homework is dropped and I ended up giving a partial submission to the last homework as I had fallen a bit behind due to work and a trip I took around the same time. I'm reviewing this course as medium difficulty with the caveat that it's the only course I've taken so far through MCIT.
-I took this course in Spring 2020 (all Java). I didn't have much programming experience before taking it. -The good: I appreciated the assignments, which were very challenging for me. -What didn't work for me: I'm not a fan of learning to code from videos (too passive), so that was a bit of a struggle. My main criticism is that the class seemed to be under-resourced. There wasn't much synchronous TA support. (Sometimes Piazza just isn't the best venue.) If you wanted a 15-minute office hour slot with a TA, you'd have to book 2 weeks in advance (if you were lucky even to get a slot), and of course, it was impossible to know whether you were going to need help at that point. (They offered an hour or two of drop-in office hours a few days before a few of the projects, but no other drop-in support was offered.) This is even though TAs were paid very little, and even though the class size (and budget, I'm guessing) was quite large. This was a big weakness for an introductory course, IMHO. After having taken other classes (especially 593 and 595), I've realized that it actually IS possible to have substantive synchronous help from TAs, which would have made a huge difference for me in an introductory class. I suffered in silence so much, and honestly, if it hadn't been for my minimal previous experience with coding, I'm not sure I would have stuck with it. I'm hoping this is better now!
I was a bit surprised and perhaps disappointed when the lecture content for this course ended up being less than a minute in length for some videos and often didn't provide very much information, but as I took the course and looking at it retrospectively I don't think it hindered my learning capabilities in any way. In fact, I feel if there were long, drawn out lectures where we watch prof or a TA code I would probably zone out and not take away much from it. The real learning comes from diving into the project assignments and figuring out how coding works. What does the formatting look like? What is a variable? How do I create an algorithm? and so on. I liked that the course started off with Python, one of the arguably easier languages to begin with, but found the transition from Python to Java a bit painful. I felt lost during the second half of the course and struggled harder to keep my performance up. By the end of the course I felt like I didn't learn much of Java. Once I got into 594 I was shocked to have a completely different experience and felt like I had been writing in Java for years. I must have picked up more Java than I had realized when taking 591.
If you are completely new to coding, it be might be challenging to grasp all the new concepts and syntax. Optionally, I recommend you skim through the Python and Java Tutorial on w3schools.com prior to starting the class. It will be great practice transition into MCIT.
If you have any previous coding experience, this course will most likely be very easy for you. I enjoyed learning about object-oriented concepts in the Java portion (second half) of the course. I do think that using two languages in the course is probably a mistake -- just as the students who haven't coded before start to get comfortable with Python syntax, they're asked to switch languages. It's hard to internalize concepts and learn general patterns when you're bogged down in syntax.
Excellent class. I had some knowledge of programming coming into the program but this class, especially the last few projects, really help you learn how to put it all together.
Good intro course. Most of the assignments were pretty straightforward and didn't take too much time. A couple homework assignments at the end of the semester were more involved.
Overall, a great intro to computer programming. This said, having talked to other MCIT students who enrolled earlier and some friends in the field, trying to cram Java in for half the semester was tough to wade through. Ideally, I'd love a 0.5 credit for Python and a 0.5 credit for 'Thinking like a computer scientist', or making them pre-requisites on Coursera, prior to diving into Java for a full semester where it could breathe a bit. That said, the semester as it is was still a great start to programming and I feel like I learned an immense amount in a short amount of time. I HIGHLY recommend doing the Coursera Python and Java courses from the same professor, it can make your life much easier. And do all the practice assignments, it's worth it. Be ready to check out sites like GeeksForGeeks for deeper understanding of topics gone over in class.
TL;DR: This class is fantastic! It covers many immediately-useful concepts to propel a complete beginner to a functional programmer. If you already have programming experience, it's an easy class. The first half covered Python, but in a way that's suitable for absolute beginners. After the basics, we covered important topics like file import/export and data parsing. I was already familiar with coding, so the Python module was a breeze. Python midterm was an open-book take-home exam. The second half covers Java. In my case, I already had experience with object-oriented programming (OOP) through C++, so I had minimal difficulty with the concept of OOP and Java syntax. However, for a beginner, it can be quite a left turn and the course covers a lot of material, fast. The focus was on teaching functionally useful concepts, such as Collections and RegEx. Final exam was not easy, but partly because we had to use VSCode through Codio, which was clunky to say the least. My advice to anyone taking this course: Do ALL the assignments even if they're optional and don't explicitly count towards your grade - they helped me hone my programmatic thinking and become comfortable with syntax and useful object methods.
Generally, I find the course to be a very good introduction to programming. I like the professional organization of the course. They really deliver what they announce. Exams are easier than the homework assignments. Personally, I have been programming in my job and academics since a couple of years (Python and others, but no Java). Yet, I never received any formal education on programming which I was looking mostly forward to in this course. And indeed, I received some of it (unit testing, abstraction, and assignment by reference are crossing my mind). But was it worth the time and the money spent? Maybe I should have given the waiver exam a go and accepted a bumpier start in more advanced (Java-based) modules.
@ Beginning coders - do not be fooled by the overall rating for this course. You will be surprised by how many people in this program actually have prior experience in programming, and more often than not these prior coders will be the ones who are active on Ed. Don't let this discourage you! You're not alone. Just be aware that the lectures are very easy but do nowhere near enough to prepare you for the assignments. The midterm on the other hand was much easier.
This class was a great introduction to programming for me. It was very difficult but also very satisfying and a valuable experience
The course moves fast and the homework assignments can be challenging, so start on them early. If this is your first exposure to programing, I recommend taking Python and Java MOOCs and/or reading the recommended books before the semester starts. The lectures are short videos and do not cover the difficulty of the assignments. Use the recitations, office hours, piazza and optional assignments to fill in the gaps. The TAs are an incredible resource. The midterm and final are not difficult if you understand the material.
I came in with little coding experience(completed the majority of Harvard's CS50). The python part of the course seemed well developed, the Java part seemed less so. I learned a lot since I don't have much experience. Earmarking 15 hours a week for this course, did well for me. In addition, having the expectation that the hw appears hard at first, and then gets better, and achievable to finish. I appreciate that deadlines were moved back, when it appeared the class was having a difficult time with the homework. In addition, a dropped homework and curve.
This course is fair and if you study the homework and practice problems, you should be fine for the exam.
In my opinion the best out of the first three core courses, extremely well structured and well taught. Very good and thorough explanations in the lecture videos and during recitations. Exercises work very well in deepening the understanding of the lecture material. Difficulty of the course is subjective, if you have some undergrad background in maths the material will be easy to grasp. The only negative aspect was the quality of the exercise's grading, it often felt like the graders (not the TAs!) had no clue what they were actually doing. But well-reasoned regrade requests were usually accepted.
this course felt like eating vegetables for me, not necessarily designed to be enjoyable for students but probably required for success in the program.
With math being my least favourite subject in school, I came into the course knowing that it would be really challenging for me, and it was. The course is split into 3 sections, first on some basic terminologies, counting, functions etc. second on probability, and third on graph theory. I struggled a lot during the first section of the class where I felt that a lot of terminologies were introduced without proper explanation. Some sections of the course material were so concise that I could not figure out how we got to the end result. I had to watch many Youtube videos to supplement my learning and grasp the concepts. I did a lot better in probability and graph theory however, perhaps because I got used to the flow of this class and the first section set me up well. There were 3 non-cumulative timed assignments, and I found them to be quite fair. The recitations and prof office hours are must-attends. Recitations go over additional problems which helped me a lot with the assignments. Prof office hours go over any questions students may have, which were typically directly related to the assignment for that week. TAs and prof were fantastic. I just wish the materials (Coursera videos) were elaborated upon more, knowing that there are a lot of people without a quantitative background taking this class. Overall I felt like I learned a lot so no regrets!
592 felt like a clean slate especially for someone who struggled with math in the past. Perhaps it's due to never having spent so much time on math before, but I thought the course overall felt rewarding. The problem sets were challenging, and sometimes harshly graded (as were the exams), but I think one should embrace that rather than not. It forced me to re-evaluate my own logic and ability to reason, which definitely has improved compared to before taking the course. You really need to understand the concepts thoroughly as making mistakes can be costly. The course can both be frustrating at times but also rewarding. I can tangibly say I learnt a lot. My only gripe is that I thought lectures could be improved. As there's a wide variety of backgrounds that students are coming from, I could see some benefiting from lectures that specifically reinforce some key concepts. I see the need for students to be taught a more traditional college math class/approach, especially with 596 awaiting, but I sometimes found lectures unnecessarily difficult to understand. Though, admittingly, I also can see a counterargument being to avoid spoon-feeding students.
Challenging but worthwell. More examples in the lectures would be nice, but I guess the videos are already very long. Professor Tannen is awsome and very approachable. Office hours are super helpful if you are struggling. This class builds a strong foundation for discrete math, and logical thinking in general.
This was a great class. Most of the topics covered were new to me, but the lecture videos were thorough enough to cover all the pertinent information, but also concise enough to be digestible and easy to follow. Some questions on the homework assignments felt particularly tricky or overly difficult, but not impossible. There were times where I would spend hours working on a single HW question which was frustrating, but helped me understand the topics thoroughly. The exams were easier than the homework assignments.
This is a hard course. There is a lot of material and the homework is long and difficult. The course really requires you to think in order to solve the exercises. That being said, the exams tended to be easier than the homework. I thought professor Tannen did a great job If you do not have a math background (like me), the beginning of the course can be overwhelming with all the mathematical notation and concepts. However, it did get much better as the course went on. That being said, the grading can be annoying because some graders do not give you points even if the answer is correct, so you will probably have to ask for regrades a couple of times. Overall, it boosted my mathematical confidence after having terrible teachers in high school and made me feel like I can take on harder topics. Props to Tannen for that!
Learned tons in this class and having moved on to some other MCIT courses it is clear that the 592 curriculum was meticulously designed to provides us with the foundation needed to be successful in the future courses. Highly recommend attending professor office hours and TA recitations. They both greatly enhance the learning.
Having prior experience in discrete math and extensive statistics, I find this course to be unnecessarily complicated. I am already familiar with most of the material, but I still have to invest almost 10 hours a week just to maintain an A average. Concepts that are covered at the undergraduate level and even perhaps some high school curriculums are made convoluted with extensive use of specific mathematical jargon which, while technically right, isn't conducive to getting the foundational concepts across. Please note the use of the word *specific*. If you have prior background in the foundational topics covered in this class, be prepared to set that prior understanding aside as you have to conform to the strict terminology used in this course. The rubric will cause points to be deducted for using different, but mathematically equivalent, notation and terminology. Likewise, the TA-ing could be better. Some of the TAs seem to only grasp the material at an intermediate level, enough to accomplish the job, but insufficient to thoughtfully critique and accurately critique homeworks and give alternate explanations to difficult concepts. Most importantly, the head-TA carries an attitude when interacting with students that make one unlikely to seek help again, be it for logistical or scholastic reasons. On the flip side, the TAs and Professor Tannen are the class' saving grace. TA's like Alex N. have some of the most patience I've seen in student staff. Professor Tannen also displays an eager willingness to help students regardless of how many iterations he has to go through to explain 1 topic. The class may not be enjoyable, but Professor Tannen and some TAs certainly make it palatable for a core requirement.
Challenging material, but well taught. Professor Tannen was helpful and active on Piazza. Homework was difficult and tests were reasonable. Lots of extra credit opportunities and typically awards a generous curve.
First two weeks of this course were so hard for me. I hadn't done much math since college and that was calculus which is not needed in this class; so my most recent exposure to this kind of stuff was really high school. Once I got the "math brain" restarted, and I understood what was being asked in the proofs, this class got a lot more smooth.
592 will help you to become stronger in problem-solving and will make you a better programmer. You will dig relatively deep into the Probability and Graph Theories and this material is quite enjoyable. What's not enjoyable is the myth that the average grade is in between "A and A- and if you work hard you would be fine". It ended up absolutely untrue for my cohort, where the estimated average ended up between "B and B+". The overall grading policy is so so. Sometimes you get a good grader that appreciates and reads through your solution and sometimes it's gonna be "the solution is wrong" type of feedback. The most upsetting part is that the professor has a huge ego and is not willing to take any feedback from students (even the simple logistics requests could get him on edge). To summarize, I appreciate all the knowledge I have acquired working hard, but these authoritative teaching and grading methodologies are quite questionable.
I have a math background, so I thought that this course was challenging, but not too difficult since I had seen most of the material before. I really enjoyed it, and it made me better at writing proofs, and I see the material everywhere in the other courses. I ended up taking about 6 hours per week on the course, but out of necessity not because it was easy. I would recommend spending more time than I was able so that your homework scores would be higher than mine were which is a lot easier if you chip away at the problems over multiple days.
Hard class, but I learned a ton. I thought it was structured very well. It's pretty cool to go from 0 math background to inductive proofs in 4 months. I loved graph theory, and thought it was a different, but interesting way to think. Professor Tannen is awesome. I didn't attend anything live, but I thought his office hours were very helpful.
At the time I took this course it had been 10 years since my last interaction with rigorous math. The early part of the semester was a struggle and it felt as though proper support material was lacking. The leap between understanding lecture material and thoroughly understanding the weekly homework assignments was stressful in the courses mid-early weeks (emphasis on weeks 05 and 06). In the second half of the course the transition to Probability and then to Graph Theory, was welcomed. These topics, though at times rigorous and mentally stimulating, seemed more intuitive. The exams were fair with the proper preparation. You will need to at times search for outside materials to aid in your understanding. I believe the Professor and course staff had a genuine care for our success, and I commend their attentiveness to constant communication. Overall, I feel I learned a great deal from this course.
Probably the worst course ever in my life. The course contents are good, but the way they are organized and explained is really poor. For example, in the probability section, he never even mentioned the concept of "identically and independently distributed" (iid), which is so standard and essential that every sophomore in the Stats department knows it. On Piazza, I saw some students are still confused about the linearity of expectation. This won't happen if the concept of iid is clearly taught. Also, some of the notations used in the class is non-standard and confusing, especially those in the topic of functions (mapping, bijection, etc). A very concrete example is that in an assignment, many students on Piazza are so confused with the set of integers and the integer interval. I don't believe any analytical math textbook would use those types of notations or describe a question in that way. The grading is mysterious and frustrating. I totally understand that grading proofs is never easy, but it is not an excuse for the nonsensical grading. Asking for regrading can be risky to you. I have asked for regrading once. The TA admitted that my argument is correct, but only half of the points are returned. After that regrading, my assignments were nitpicked here and there. I even got several points off just because I didn't align the question and page numbers! What a hostility! Since then I never asked for regrading again, otherwise I could fail the course in the end. The course itself still has something good. The design of the assignments is really trying to help you understand those core concepts, but again, sometimes the descriptions of the questions are very confusing. In summary, I did learn something from the course, but the overall experience is very unpleasant and humiliating.
I think the course is of the right level of difficulty. The last part (graph theory) was not taught as well as the others, but it's still acceptable. The exams for my semester were a bit easier than homework. To me, in terms difficulty, 1st > 2nd = 3rd, though the 2nd one was graded more harshly. One piece of advice is try not to leave out any potentially important details in your proofs and answers for the exams. Otherwise you may be unpleasantly surprised by the sometimes strict/unreasonable grading rubrics. Overall, it's a solid course well put together.
If you have a degree in math or some relevant major like natural science or math finance, you will find the course content is pretty easy. If you never learned anything about Graph, the third part may be challenging. But the exams are much easier than the assignment and the practice exam. Generally, it is easy to leverage the course to get a great GPA in your first semester.
This is my first review for a class since I commenced the program. Through this platform, I believe my voice can be heard, and I have several points to discuss regarding the course. 1. Difficulty: • 1.1 Class Structure: • The material isn't inherently difficult, being straightforward. However, while lecture notes provide very basic examples, intricate proofs, particularly in graph theory, are labeled as "self-paced." • For someone with an applied math background and a job requiring daily math application, the course was uneven in difficulty. Graph theory, usually considered simple, was particularly challenging due to its presentation. • A reliance on lemmas and words for proofs without proper guidance makes the subject harder for those accustomed to mathematical proofs. • 1.2 Homework (HWs): • Canvas quizzes are basic, quickly completed in under 15 minutes. In contrast, recitations only offer a few challenging problems. Yet, homework often expects students to integrate multiple concepts. • Topics, notably in Graph Theory, are introduced in isolated Powerpoint slides without context or application, yet we're expected to integrate them seamlessly. Many of the answers to HWs in this part depended more on pure words rather than a traditional math proof. • Real-life problem translation into math can be ambiguous, particularly challenging for non-native speakers. • Rigorous, formal, and math heavy answers are sometimes not valued more than simplistic pure word answers. • Even if it is said that material from each previous parts of the course are not going to appear in the subsequent parts is not true: you must master everything. There was, for example, a question in a graph theory HW that depended on a self-paced concept from part 1 of the course merged with a self-paced concept from part 3. • 1.3 Exams: • Exams are generally easier than HWs. • The practice package, while useful, overemphasizes select problems. For instance, in Time Assignment 2, three out of seven problems were based on a single example from the practice package. The performance from people that, for some reason, did not read or understand that problem, was affected enormously. • Errors, such as one in Practice Assignment 2, can lead to wasted time, affecting performance on other questions. (Even though everyone had full points back for that question). 2. Teaching Assistants (TAs) and Grading: • TAs' Expertise: • Most TAs are helpful; however, some lack in-depth mathematical understanding. There were instances when I was misguided, leading to incorrect HW submissions. • At times, external sources like YouTube or other materials seemed more enlightening. • Grading System: • The grading rubric is opaque and rigid, not accommodating multiple valid solution methods. • Certain conventions, like the "multiplication rule," must be explicitly mentioned, unlike standard mathematical practices. • Grading seems more contingent on the grader's understanding than on solution validity. Detailed answers, even those spanning 5 pages, often face deductions due to minor errors without weighted consideration for thoroughness. 3. Professor Val: • Professor Val is knowledgeable and makes sincere efforts in teaching. • His office hours are insightful, offering significant hints and support. • Addressing the above-highlighted concerns could elevate the effectiveness and engagement of his classes. Conclusion: This course has valuable content but could benefit from improvements in content presentation, grading fairness, and TA guidance. Addressing these concerns can enrich the learning experience for future cohorts.
I found the course lectures very useful, and sufficient to understand the concepts -- as long as I stayed focused and engaged while watching. In my opinion, the real learning in this course happens in the homeworks. The assignments were challenging: They took a long time and required reviewing a lot of material, and thus were great to help solidify the concepts in my mind. My main complaint would be that the practice problems provided for the tests are worse than useless -- they're fundamentally different from the test problems, and sometimes even deliberately misleading. The professor himself said multiple times that the test questions aren't like the practice questions, but instead are like the homework questions. To me, that makes the practice questions not only unhelpful, but potentially harmful to a student who spends hours reviewing and solving them, only to find very different questions asked on the test.
I think the experience of this course will depend on your general comfort with formal mathematics. As someone who had completed up to Multivariable Calculus ~8 years ago, I found the course to be quite time consuming and challenging. FWIW my sense is the content is just hard if you're not used to formal logic. I found the distance between lecture content and weekly problem set to be pretty wide. The professor will introduce a topic quickly using a formal definition, and proceed to move seamlessly to a rigorous proof. You're expected to do the same thing when going from lecture to a challenging HW set of 5 problems. As someone who learns best through practice problems and repetition, I found I lacked the problem-solving confidence to close this gap weekly, and apply new, abstract concepts to pretty challenging problems. Many students (myself included) leveraged TrevTutor, WrathofMath, etc.. to supplement the material. I found the sample problems in other sources to be less rigorous then the courses. This meant that often I would have to compress time spent completing the HW, as TAs and Professor provided "hints" to the problem near the end of the week. The instructor is clearly talented, but this course would greatly strengthen its offering if it gave students more of the tools to succeed.
This is one of those classes where I hated it while taking it, but learned to appreciate it after it was over. I personally believe that the lectures should have been structured better and come with more diagrams and examples. I didn't use any outside resources and felt the content of the lectures was JUST enough to get you through the homework. That being said, the professor and TAs were approachable, and others in the class were super helpful. I spent an enormous amount of time on this class, definitely more than I should have. Honestly some weeks I'm sure I put more than 25 hours in. It's so easy to get bogged down in one problem or obsess over whether your answer is really correct. If you find yourself super frustrated, seriously take a break and see if you can attend the next private office hour section or use the rubber duck method to talk through the problem.
First, let me say that I feel that the concepts in 592 are critical for computer science, and I enjoyed the concepts themselves. However, the course itself does a poor job of effectively conveying them, especially considering how critical they are for the degree. The course was far more difficult than it needed to be, while covering far less content than we could have (if it had been better designed). I felt like the goal was to stump us on the homework more than it was to provide us with proper scaffolding to build a solid foundation in the concepts. I spent hours every week scouring the internet for additional instruction so that I could make sense of what the homework was asking for. During our session (Spring 2022), the TA support was lacking and almost non-existent. Many of the questions on Piazza were answered by other students, sometimes leaving us more confused (some student answers are better than others). I don't know if this problem is because of poor TA management from Prof. Tannen, or if they were very shorthanded, or if the course just isn't well-designed for incorporating TAs. Early in the class I never asked for regrades; but after I learned enough, I came to realize that the TA's were doing a poor job of grading. By the end of the course, it would take nearly 2 weeks to receive grades on an assignments, and feedback was sometimes non-existent. My experience has been that students with a strong math background (e.g. engineering) will enjoy the course and sometimes say it is too easy, but those with a weaker math background will find the course to be quite horrible. Students strong in math should test out of 592 instead of messing up the curve for everyone else. Each week's lectures averaged 40 minutes, while the homework took about 10 hours. I found myself spending at least an extra 5 hours each week watching MIT's lectures on the same topic or using Khan Academy to help. There is no required textbook; but I had to read 3 textbooks to get a strong enough foundation in the concepts. Additionally, this course is "Math Foundations for Computer Science", but it was rare that computer science itself was ever mentioned. I understand how these concepts connect to CS, but I feel it would have been far more useful if some of our homework problems incorporated CS topics (e.g. algorithms). It would have been even better if some of the homework required a bit of Python code. Grading was incredibly sporadic, depending on the TA. They were then flooded by regrade requests. We haven't received final grades yet, but I hear that previous classes had a curve. If the course is curved, I might receive a hard-earned A; if not, it will be a solid B (my first non-A in a very long time). My advice to incoming students: If you do not have a strong math background, I suggest that you read "Book of Proof" cover to cover before starting this course. Then, as you go through the course, watch MIT's Open courseware lectures for 6.042J Math for Computer Science on the related topics before starting the homework. My advice to MCIT staff: Find a good textbook that meets the objectives of this course, then adjust the sequence of the lectures so they align. Have all-star TAs record microlessons on how to approach problems in the key concepts. The recitations are just too little too late, and they are hit or miss depending on the quality of the TAs.
Class was reasonable, but sometimes it’s hard to see the applicability of some of these concepts in CS
Grading is unbelievably harsh, when you get correct answer but still lose more than half the points. Curve at the end is a relief.
This course took a lot of adjustment for the first 6 weeks. It's a lot of completely new notation and information (even for someone with a decent math background), and it was a bit overwhelming for the first half of the course. The lecture material never seemed to be enough, and our class utilized our Slack channel to share supplemental lecture information we could find, etc. I will say as the semester progressed I became much more comfortable with the notation, how the lectures were presented, etc. and ended up needing less and less outside help to understand the material. The recitations and Open Office Hours with the instructor were extremely helpful to me in understanding the Homework problems which were often quite a leap in difficulty from the examples given in the lectures. You need to come prepared with good questions though. The instructor will ask you if you've read the lecture material and will refer you back to it at times, so make sure you've digested it before coming with questions. While the class was very difficult, and I sometimes wanted more help than the staff would give I will say it was extremely rewarding when you finally did figure out the answer to a homework problem, and I learned a significant amount in this class because of struggling through the homework. Overall by the end I really enjoyed the content if you can make it through how overwhelming the first half of the semester feels.
This course is a disgrace to the UPENN name. Lecture videos are just a verbatim reading from slides. The professor shows few examples and doesn't hold his proofs to the same standard he expects his students to be graded. The homework difficulty is 10x what is shown in the lecture and impossible to complete without referencing outside materials. I shouldn't need to learn the materials from YouTube when paying 3k for a UPENN grad course. The other question that needs to be asked of the course is: Why? We are studying towards a Masters in Computer Information Technology. Why is this course graded so heavily on robust written proofs? I understand that these mathematical concepts are essential for algorithms in computer science, but I am not a mathematician. I need to understand the concepts and how they work... not prove that they do. This course rarely mentions the computer science connection to the concepts taught. Grading is arbitrary and based on a rubric never made clear to students. Alternative solutions, while valid, often lose more than half the possible points per question. Professor Tannen is not helpful and incredibly rude. He routinely mocks students during office hours, to the point where only a couple of students cared to join by the final weeks. He even mocked his own TAs occasionally and contradicted what was said on Ed Discussion. Many TAs are lovely and try their best with the little leeway Tannen allows. The head TA should not be allowed to continue in her role. She frequently talks down to students on Ed and during her open hours. She spread wrong information in Ed discussion on multiple occasions and disagreed publicly with her colleague TAs. She is a disgrace to the university and should be dealt with before she is allowed to continue tarnishing its image. I've never been so disappointed in an academic experience as I have been with this course.
I had some experience with proofs and discrete math concepts before this course, and it was still a hard course! Overall I learned a lot and enjoyed it though. The assignments always took me a long time (math always has taken me a long time), but putting the time in got me good grades on them. Exams were tough but I always felt that I had been graded fairly. Wish there weren't three exams, the first one was my first experience with ProctorU and that was really stressful since I have baseline math test anxiety. But don't panic if you don't do as well as you hoped on the first exam - the second and especially third were easier, and easier to study for in my opinion. I do recommend checking out the recommended (not required) textbook readings if things aren't making sense to you from the lectures, sometimes they're a lot easier to understand.
While I do believe this course is very challenging and you come out of it having learned a great deal, which is a benefit, I think that the class is so poorly organized and instructed that it almost equally takes away from what you learn. The professor is pretty rude and not very flexible for his students, I found him being quite degrading to "stupid" questions in office hours to students and not very approachable on Piazza. My biggest issue with the class was - there is about ~1 hour of instruction via videos. I am sure that the in-person course gets much longer instruction. 1 hour is NOT enough to be taught these extremely abstract concepts. They should have additional optional lectures. Then, there are a bunch of "self-paced examples", which essentially is the teacher not wanting to really teach you fundamental concepts and proofs, but throwing them on a word doc and trying to get you to do it on your own. This course will require you to depend on TrevTutor, Khan Academy, and the likes on Youtube. Unless you are very good at this stuff and have taken courses like this that make your mind think in a specific way, if you are working full time I would heavily recommend NOT taking it with another course. Give your brain ample space to learn, comprehend, understand, and retain this material. I took this with 591 and wish I hadn't, even though in the end I did get an A. I had to attend at least 2 TA office hours a week - 1 early in the week to solidify course concepts (often what is on the slides in unclear or confusing and not explained), and 1 later to clarify HW questions. I did not find instructor OH super helpful. I think this was critical to succeeding in the course. I recommend: 1) Finishing lecture material by Tuesday 2) Attending OH Tuesday / Wednesday 3) Beginning hw on Wednesday 4) Finishing up HW by Saturday (attending OH as needed) 5) Coding hw in Latex Saturday and re-reading on Sunday Study as you go along. Make notes. Don't just attend lectures and depend on slides to be enough. Nothing is open note!
I would describe this course as difficult but satisfying. I had to spend many hours (especially at the start of the semester) trying to internalize the concepts thought, but when I finally managed to grasp them, I truly felt that I learned something new. My only complain is that the lectures are not always the most useful in teaching the concepts. There were some topics that I felt that I could learn the same topic by watching a 15min youtube video than an hour of lectures (but I had to watch the lectures no matter what because they contained hints for the HWs). However, the recitations and office hours were actually pretty helpful in making up for the shortcomings of the lectures.
Having come from a sparse math background this class was difficult for me. Tons of proofs. Individual problems on some assignments could take me hours. I felt like most of the homework problems relied on discovering a clever trick to solve. There were some very frustrating weeks. The lectures/slides weren't super helpful. However, open office hours and recitations were very helpful, absolutely necessary in fact. For as difficult as the class was for me, I do feel like I learned a lot. Lots of people seemed to have started out poorly (myself included) as there were lots of questions about dropping the class, however, there are quite a few extra credit opportunities and the grade seemed to be curved quite a bit. Overall I liked the class despite its faults.
How you fare in this course definitely depends on 1) your background, and 2) how much you prepared for the material. I hadn't taken a math course since college around a decade ago, so I was apprehensive for this class. I'm not going to lie, it made me cry, and more than a few times. Echoing other reviews, the class is split into three sections on counting (stuff like combinatorics), probability, and graph theory. The first section is ROUGH; I suggest really trying to learn how each proof pattern works and attending recitations. I have a background in probability, so it felt more comfortable to me. Graph theory is weird, but if you do well with spatial reasoning, you'll probably be okay. The material is nice in that you start to recognize how to use stuff like permutations and such to solve other problems later on, so it is well-tailored. Three things helped me succeed: 1) preparing with some books that are free and related to the course material (i.e., Levin's Discrete Math book [helps throughout the course] and Diez et al.'s OpenIntro Statistics [n.b., particularly on disjoint and independent processes]), 2) having a proof pattern that was my my-go (by-cases in my case), and 3) using everything at my disposal to understand a problem (since I hadn't done things like math with exponents).If you do these things, I think you can at least pass. Sometimes (and what felt like often at many points), the material will be hard to understand because some videos or other lecture content was too in depth (what is with the pizza cutting thing?) whereas other materials don't do enough to connect the dots. Don't be afraid to clarify EXACTLY what a question is asking you or, in your answers, EXACTLY how you know something is true. The course staff won't help you toward an answer, but your fellow students and the course staff can help you understand what is being asked of you.
This class is hard but it's not unmanageable. The lectures are good. The first section on combinatorics is probably the hardest of the three sections. I found graph theory to be the second hardest for some reason even though you are told that it should be the easiest. Office hours are a good thing to attend with the caveat that sometimes listening to your peers ask questions can potentially create even more confusion for you. I think a lot of students in this class actually do themselves a disservice by going to third party resources to learn the material. There are too many things that are course specific (i.e. if a principle is not proved in lectures you need to prove it in your homework problems... but if you're looking at some other website they might have proved it as part of the same topic lecture so then you start to assume you can just reference it) and hearing too many voices I think confuses some of the fundamental concepts. If you're not strong in math this class is going to be rough. However, I think there is a huge intimidation factor going on. People talk about this class being really hard, and the first few homework might be a shock, but if you go to office hours and read/post on Ed then it's very much attainable to get a grade you're happy with. Last thoughts on the exams: they're fair but they are long (or at least can be). With the except of the last graph theory exam I took essentially the full 3:45 to complete the exam. That's a hard thing to schedule if you're busy with work and family and the exams are not open note. So prepare accordingly and you'll be ok. Unlike a lot of the homework questions, I don't think the exam questions really had any level of "gotcha!" to them.
Poor quality course. The lectures are insufficient in learning the material and concepts were not conveyed clearly at all. Many times I had to use external resources to understand what was taught in the lecture. I don't understand how anyone can say these lectures are good quality and how a concept can be taught using 1 slide of material that is extremely hard to understand. Homework materials were vastly harder than lectures and lectures do not help with tackling the homework. Grading in terms of homework were also extremely poor. Students lost points for no apparent reason and lost points if something as simple as "why does 1 + 1 = 2" was not stated. Professor is not helpful at all during his office hours. Awful attitude towards students who are seeking help. Students are not allowed to discuss the homework in anyway with the TAs or other students so there was very little guidance on completing the assignment. The one positive aspect of this course is the TA quality. TAs were, for the most part, very responsive and helpful. The head TA Irvane is extremely helpful and knowledgable. For anyone preparing to take this course, there is a lot of work involved
I have taken Linear Algebra and Calculus before as prior background. However, 592 required the discipline to adapt to a different way of approaching problems. I have never had a theory course before and I found the course to be quite challenging. The content of lecture does not prepare you entirely for the homework assignments as it encourages you to think about how you can apply theorems and lemmas from lecture in different ways to prove claims/statements. From someone who is used to grinding practice sets and computational problems, I had to supplement my learning with YouTube creators such as TrevTutor/Kimberly Brehm for Exams 1/2 and WrathOfMath who has a whole playlist of Graph Theory for Exam 3. A lot of the practice problems in Discrete Math books such as Rosen are simpler problems to develop mastery over concepts, however are not the same difficulty as the homework sets. My advice as someone who did average on the exams but took a LOT of time to do the homework would be as follows: - Make sure that everything is explained and your work/logic process is shown in your proofs. - Do not assume anything prior for the problems that are not in the problem statement itself. - Attend Professor OH and recitations or watch the recordings. They are invaluable to getting the most points possible for the homework Overall, the class was very challenging and took a majority of my time between taking 591 and 592 at the same time. However, I felt I learned a lot and developed a sense of intuition from the course on how to approach problems and learn topics conceptually. Tannen is a great professor and I highly recommend anyone who takes this course to take advantage of all the resources available to them!
I am not particularly enjoying the course but I understand this is an important course. It does help me become a more logical person.
Having studied mathematics many years ago, I found this course to be relatively straightforward. The first part of the course was challenging, since it took some time to re-acclimate to formal mathematical reasoning. Most of the real learning takes place working out the homework solutions. The exam problems are generally less difficult than the homework problems. Also, the latter half of the course is more straightforward than the first half. Overall, I liked the course, I liked the instructor, I found the teaching to be clear and accessible.
This course has a steep learning curve in the beginning, mainly because I had never learned discrete math before (though I've taken many calculus classes). The first midterm was tough because of this, but it gets easier as the key concepts are reiterated throughout the course. HWs are the best I've encountered; they take time to unpack, but their connection to the course material is very clear. Exams are also fair and the final was easier than previous midterms, which was a nice way to cap off the semester.
Coming from an engineering background, I found this course to be very difficult. The lectures were not adequate and external resources were required to fully grasp the topic. I did not find the recorded lectures very helpful. It seems like the professor has such a deep knowledge of the topic that he struggles to bring it down to our level. That being said I did like the professor. The homework took on average 10 hours a week and is due every week. The TA Recitations were helpful as were the Professor's open office hours. The grading is all over the place and multiple times correct answers were graded as incorrect. The grading also took multiple weeks to be returned which leaves you wondering if you are approaching problems correctly as there are often multiple approaches to the same problem. I found Book of Proof by Hammack to be a helpful resource. The exams are closed book which I found difficult as I have not had to memorize anything since undergrad.
I come from a STEM background and am constantly amazed every week at how difficult this class is. I've done well in the class but only with a huge amount of time and effort. Homework is so difficult sometimes it takes me a day to just get started (aka just reading through them all and starting to understand the questions). Lecture notes have felt like French to me at times (I don't speak French). Advice: Be prepared to spend a ton of time on this class. Try different textbooks, youtube channels - anything to help you understand the materials. Don't let any concept pass by, no matter how small, without deeply understanding them because you will be tested on them. Prof Tannen is very helpful but he can only be as helpful as students' questions go - meaning he can't give out free hints at every question thrown at him. So come to the OOH with thoughtful questions and your life will be a little bit easier with the homeworks.
Great course, I think. Quite a rigorous introduction to (mostly) discrete mathematics. I thoroughly enjoyed the experience, it felt like weekly GRE logic exercises at times (but you have to also do the proofs). Maybe a bit hard if you have not touched math for some time or are coming from a non-quantitative major.
The first 1/3 of this class was the hardest. The math is very foreign and it's easy to feel overwhelmed. TA recitations were outstanding--they were a huge help and I couldn't have passed the course without them. I found that the pacing of this course was very difficult. Every week there is a set of lecture videos, a quiz (unlimited attempts), and a homework. However, when the midterms come along there is no pause on those weekly assignments. So the workload goes drastically up and down throughout the semester, which I found frustrating and doesn't reflect the fact that many online MCIT students are part-time students who have other obligations. I think the course would be greatly improved by slightly condensing the material in exchange for a dedicated exam week.
For background, I have taken up to college calculus but nothing more. This class takes high school level math and makes it unreasonably difficult with complex and unnecessary notation, but once you give in to the frustrating rules and grading and learn to play by the classes rules, it becomes a lot easier. The feeling is that it gets easier as you go, and I think that's less of a product of the material getting easier, and more a factor of getting used to notation, proof patterns, and the way the graders want you to answer problems. By the middle of the semester I started finding the proofs to be rewarding and that helped a lot in driving motivation. On Ed, the TAs are responsive, and in office hours the professor is helpful in explaining concepts and giving homework hints. However the head TA is really rude to students on Ed, within a week I felt uncomfortable asking questions on Ed since I knew I would get a confusing and condescending response. Overall, the content is not difficult but the class is, and the earlier you can view the class as an exercise in logic and solving questions with proof patterns and notation, the earlier you'll succeed.
Great course, cemented combinatorics and probability, both topics I found quite tough throughout high school and undergrad. First third of the course (combinatorics and proofs) was more time-consuming at about 15-20 hours per week, and then second two thirds (probability and graph theory) were less, requiring around 12-15 hours per week. Exams were well-written and fair. The TAs/graders can be harsh but definitely go to TA office hours if you need help on an individual homework problem (they'll nudge you in the right direction), and watch recitation videos! The recitation problems were a bit harder than homework/exam problems but really helped drive home the concepts. I never attended recitations/instructor office hours live, and only watched instructor OH recordings for the weeks before exams, when Val went over the practice problems' solutions. I didn't find I needed outside resources to study and really focused on understanding the lecture videos while carefully taking notes. If a recorded lecture was 10 minutes long, I would spend about 30 minutes watching/rewatching/pausing to take notes. I felt this approach really helped because I'd then understand what the professor was intending me to and follow a similar approach as presented in the course to the homework/exam problems. Everything you need is within the course if you can figure out what to hone in on (this will take a bit of getting used to the first couple of weeks of course). Make sure you directly state/apply all the terminology/concepts mentioned in lecture in the homeworks/on the exams for full points! Be as comprehensive as possible, and don't let the whiners/complainers on Piazza/Slack get you down. Be confident, and you got this! I definitely felt annoyed at some points in the course due to unfair grading etc. but if you consistently work hard, you can get a good grade! (I got an A+ and it definitely was rewarding at the end of my first MCIT semester). The class is justifiably hard but I think it lays a good foundation.
Awful course from start to finish. Prof Tannen is frankly bad at this job and should be pleased he's still employed. You can be terrible at explaining stuff, or you can be sensitive and unreceptive to students (ie. the customers). Doing both just makes you hilariously unfit to be an instructor. The grading is abysmal and inconsistent. Prepare to ask for a regrade on everything because the unintelligent TAs can't understand any answer which isn't 100% what the rubric says (even if it's still correct).
Using latex for the first time can be painful, but you will get used to it after the first few weeks. Homework was difficult but it felt great when you finally solved a problem after staring at it for an hour.lol. Open office hours were super helpful for getting homework hints. And most of the time, recitation can help you out of those annoying math terminology with more intuitive explanation. (Depends on the TA) Overall, I think the lectures were pretty well structured and intense.
The lectures are somewhat helpful, but many people use outside resources to supplement their learning. If you are not familiar with proof writing or logic, this course can be a rough start since the assignments are proof-based questions. This course is challenging as the grading rubric is unforgiving. Overall, the class is difficult (in part of the grading), but once you understand how to write proofs and understand what the graders are looking for, it becomes a bit easier.
This is a very tough class that is all proofs and theoretical math. I did not enjoy it and did not find the concepts useful to my career. Although, I understand you have to include a class like this in a Masters in CS program
Is 592 hard conceptually? Not really. Is it hard to get a good grade? Not really. Is is hard given the resources and course structure? 100% I’m sure in the long run the application of the math will be even more evident (especially in 596), but it seems the cost outweighs the reward. The three parts of the course felt disjointed from each other and from actual code. The proofs we graded strictly - only if you didn’t follow their precise way of thinking or writing. And some of the course employees were just downright rude and unhelpful. Val is an enthusiastic and seasoned lecturer (it shows). However, the aforementioned issues all detracted from what should have been an otherwise interesting and fun course. My best advice to the program would be to try to actually compress the modules more and add some application in. My best advice to students would be to learn early what they’re looking for and how to think - it will serve you well come grade time. Even if you’re grades aren’t what you want them to be, the curve helped significantly as well.
I liked the content of course. In my opinion, it covers a fair amount of the most important concepts. I guess for a person with a soft spot for math (not a necessarily a math background), the course is definitely feasible. I strongly disliked the grading though. Occasional grading mistakes happen--no problem. But in my case, it turned out to be my job in way too many regrading requests to make sure that I am graded fairly. Based on the forum, it was similar for peers as well.
Honestly, the last time I studied math was in high school but I must say I liked 592 with prof Tannen! This course are basically split into 3 parts, with timed assignments to test how well your learned during the semester. The first and second parts were nothing outside of high school concepts (sets, combinatorics, basic probabilities that does not involve derivates or complex probability models). If one puts in 5 hours weekly in videos, recitations and office hours, he/she should be grasping the concepts. Now, homework is another beast. For most of the weeks there are 5 questions that covers the concepts for that week. For most of the time (and being a non native English speaker), I found the questions rather ambiguous and require a lot of the follow-ups to really understand what the questions mean and want. Also writing the assignment in Latex is another thing you have to cope with as it added additional time spent for this course. Luckily, the professor and TAs of 592 are very helpful and always responsive in Piazza. By going to a private office hour or just watching the recordings of office hours you should generally get some hint on how to solve the problems. I personally found the homework being graded under stricter standards at the beginning of the course for missing to mention certain concepts, to a loosen standard when we are in graph theory and most the answers are lengthy proofs.
I haven't taken a true math course (i.e., Calculus, Geometry, Algebra) in ~10 years. This course required a lot of work from me to understand/review the concepts. Even after this course, I still don't particularly enjoy proofs and am taking at least 1 semester off to give myself a "brain break" before taking 596. For HW, don't be afraid to ask questions. The language of the problems can be unclear at times. For HW and Exams, explain every little step you do. For example, 1 rule used is the multiplication rule. When using the rule, ensure you state that you're using the rule AND why you're using the rule, specifically right when you use the rule. Also, there is a HW assignment due 2 days after Exam 1 and 2 (there are 3 Exams). I'd recommend learning some of the new concepts the week before the exam to help prepare you for the HW due right after the exams. Professor Tannen can definitely seem a bit cold at first but is super nice and willing to help. Try to go to his OH or watch them afterward when possible as it is helpful to understand course concepts and the HW. Most of the TAs were extremely helpful. I'd recommend going to various OH to find TAs that work for you. I'd say this is similar to every class where some TAs don't explain things in a way that make sense for your or don't understand the concepts to the extent to which you wish to. Don't be afraid to request a regrade for assignments. I had a couple times where I couldn't understand how I got points off as I thought I clearly explained the concept the TA took points off for. At least 1 time, the TA that regraded my assignment said they did not understand why the original grader took points off as I definitely clearly explained the concept correctly.
The homework is hard and time consuming. Waive the course if possible.
This course is divided into three distinct sections, 1. Counting and proofs, 2. Probability, 3. Graph theory. IMO, this first section was interesting, I hated probability, and then I absolutely loved graph theory. This class really is hit or miss for a lot of people. Some love it and the material makes a lot of sense to them, others hate it and have trouble grasping the topics. If you're struggling, office hours, recitation, and piazza are key. This class gets a bad rep, but honestly if you put in the work, seek help when needed, and try not to stress too much, I think it's a very manageable class.
I found this course to be consistently challenging but never prohibitively so. Weekly assignments are a healthy level of difficulty -- almost like solving riddles or puzzles. The tougher problems are both frustrating and rewarding. All told, I learned a lot, and my thinking in all things mathematics feels clearer having completed the course. There seems to be significant variation in student perception of this course. The subject matter is not rocket science but the exposition for each topic can be terse, so having a grasp on the "language" of mathematics is helpful. For those without a strong math background, I'd recommend spending some time reviewing related online materials beforehand. I worked through part of a MOOC called "Introduction to Mathematical Thinking" (free on Coursera) before taking the class, and it helped me a lot.
The course is very time intensive. The lectures are super helpful, and well recorded, but for me (with 0 computer science knowledge) the assignments took forever. The workload builds up every week, so if you stay on top of it and understand all the concepts, you will be fine. I was impressed by the TAs who are so engaged and willing to help. The grading and tests in this class are fair (until the final, I think it was not only way too harshly graded and tricky).
The entire course is proof base so be ready to write. That said the professor is not open to student feedback and prefers to scale the students grades at the end instead of making changes in his teaching style. By not open, I mean he will not just say no, because x. He simply says this is how it has been done for this course for years now, not changing it now. This is the only course in the program of the 5 I have taken which was like this. The homeworks will take up more time then most course if you do not come from a heavy Math background. Even coming from Economics I found the coding courses more able to go from 0 to 100, instead of this course feels like it goes from 50-100 skipping over early content.
This course is definitely challenging; the course material itself is actually very straightforward once you understand it, but the way that the professor presents the material in his lecture slides can be unintelligible at times, especially for individuals with little mathematical background. Coming from a STEM background, I personally was able to navigate the material with just the lecture notes; however, many of my coursemates had to seek additional sources outside of the classroom to grasp the material. The second part that adds to the difficulty of this course is the fact that you don't know what the TAs are expecting for your assignment and exam answers. I spent a huge chunk of time towards the beginning of the course trying to be as comprehensive as possible in my answers in fear of losing marks. Don't write five-page answers, but do expect to spend some time towards the beginning of the course gauging the TAs' expectations.
I really enjoyed everything about this course - the topics were very interesting, the lectures were well done, and the assignments were pretty fun. Some of the homework questions were definitely tough, but I enjoyed thinking about them overnight and then having a 'eureka' moment the next day when I came back to it. I also didn't think it was as time consuming as some other people. I never attended office hours live, but would look through the videos when I was stuck on a problem. Overall, a great course!
There is no flexibility. You can't miss any assignments. I think some of the topics are not very useful for CS. It goes too deep into specific cases that are not relevant in my opinion. The HW assignments are hard. Exams are way easier than them, so that's good. Overall is not a bad course, but I think they could make it a little more flexible and relate it to CS more. Also, if you have math background then you can skip the videos, go straight to assignments and go back to materials as you need them for clarification. I ended up doing that because of time constraints.
Professor Val is an amazing teacher, slides can be intimidating but in OH he would take the time to explain anything at length. I came without discrete math background and materials were challenging every week, only when studying for exams I realized how much I was learning. Content doesn't feel connected to CS at times but everything will make sense in more advanced courses. Used text books and TrevTutor Youtube channel. Do not let any module pass without complete understanding as each topic builds on the previous one.
This is one of my favorite of the six core classes. I found the material challenging but do-able. I found most of the lecture materials to be sufficient to do the homework. I did use a few textbooks to supplement the lectures and the recommended textbook, but I didn't feel the need to search for other resources. After having taken 595 and 596 (which for me involved a ton of time searching for good and relevant external resources), I really appreciate how the lecture/professor office hours prepared me for the homework, and how the homework set me up for success on the exams. Although I don't like passive learning (lectures), I felt like the homework assignments were well designed and allowed me to learn the concepts quite well.
This class was a beast for me. My highest level math class was pre-calculus in high school over 10 years ago, and stats in college.. So this class was extremely difficult for me to grasp. I tried to attend every recitation and office hour, but nothing was getting through to me. The level of "math speak" was too much for me. I could never really get the hang of understanding anything the professor was talking about. I nearly failed the class as it is exam heavy, but miraculously passed the final with a 96.. I attribute this to my private tutor that I hired to teach me the concepts and review for the exam. I would not have been able to do this class without a tutor to help me, since my math background was so poor. I struggled terribly with this class and it was traumatizing LOL. I had a mentor who told me this class was easy, like HS level math.. That was definitely not my experience. My recommendation to anyone similar to me is to find a tutor early on. There is no shame in getting extra help where you need it. In MCIT we all come from different backgrounds, making the experience different for all. Contributing my experience to even out the reviews.
I would recommend taking this class alone and not pairing it with another course. The workload to be successful in this class is very intense and overwhelming. The assignments are 5 questions each (give or take a few multi-part questions) and in my experience each question required an essay long answer or else I faced the risk of losing points for missing a critical piece of verbiage that aligned with the TA rubric. HW assignments took up the majority of my week and I often spent anywhere from 20-30 hours weekly just on the assignments. The lectures and professor were not helpful for me and I instead had to rely on outside sources like TrevTutor, Wrath of Math, or MIT lectures on YouTube to gain somewhat of an understanding of the material. When I did attend prof OH, I would see students mocked for not understanding concepts that created a very unwelcoming learning environment. The exams are intense and we were not permitted any reference material or resources. Class averages on exams tended to gravitate towards the low 70s and high 60s with the exception of the final exam being in the 80s/90s (this will be your saving grace). Three 3 hour long exams that are similar in formatting of the homework assignments, but greater in length and often times difficulty made it hard to be successful during testing or to provide a complete response on each prompt. I disliked how difficult the course was given the lecture quality we were provided and felt underprepared for the exams with the given material, recitations, and resources of the class. It's possible to have an assignment average in the 90s and tank the exams, but still end the course with a B or higher thanks to the curve. Overall, I do feel like the course successfully taught me how to approach critically thinking about problems and to craft proofs mathematically that did come in handy when taking 596, but I do not feel significantly stronger in math concepts, outside of writing proofs, from this course.
This is a hard one to review. To start off, Professor Tannen is a fantastic professor, his office hours are great! He is very approachable and explains the concepts extremely well. Personally, I enjoy learning with professor Tannen a lot. However, besides professor, many aspects of this course need some major improvements. First, the grading timeline was previously communicated as 4 days after submitting assignments. However, the grading ended up taking almost a week (or longer than that). The same case applied to the final exam, when the grading was also delayed for more than a day. And when grading experienced delay (which is totally understandable), there wasn't enough communication to ensure that students are aware of situation. Also, the difficulty level of exams (timed assignments) seems too easy compared to the homework assignments. A lot of methods covered in assignments and practices were not even tested in the exam. I hope the exams could cover some more challenging questions to test students' effort on mastering the topic. Besides, the limited support from course staff (mainly TAs) is also a major pain point. There are a couple of TAs who were responsible and great in explaining the concepts. However, the overall quality and amount of TAs were not as ideal as other classes. Piazza questions were answered in a very long time. Some of the TA recitations were skipped for no reason and no prior notice. Some TAs didn't prepare for recitations well, and provided wrong solution to recitation questions. These all had negative impacts on students' learning process. Overall, I like the professor a lot, but didn't enjoy the course quite much due to the lack of TA support and timely feedbacks.
The type of thinking required in 592 (proofs) is very different than most students in this program likely use on a regular basis. The open-ended nature of hw/test questions and having to explain yourself in great detail both in English and in proper mathematical notation means that it's hard to predict how long or how difficult a particular problem/hw will be. More often than not, the majority of my time and energy was spent just trying to get started with a problem. Once you identify the correct approach to take, tackling the problem itself wasn't too bad. The video lectures are okay. They do typically give you enough to get started and are structured well, but they definitely don't give you all the detail needed to adequately tackle the hw. I definitely recommend attending open office hours with prof Tannen or watching the recordings as there are tons of extra tips and nuggets that he drops in those videos. I would also say the hw does prepare you well for the exams. I did not do any of the exam prep except reviewing notes and previous hw. For most other courses, I haven't needed to attend office hours very often and haven't needed many TA sessions, but I watched almost every office hour for this course and had quite a few TA sessions as well. If you're willing and able to put in that level of time and effort than you can do well (I got an A+ in the course). It's also worth noting that I took this course by itself and was simultaneously starting a new job and have a toddler. Oh last thing - I basically didn't use the textbook at all.
Homework problems offered some good enlightenment opportunities and the lectures and recitations were great learning resources. It’s not easy but well worth the effort and not time consuming to the point of busy work. All homework is purposeful.
Overall, I enjoyed my learning 592. Val is very approachable and knowledgeable. The TAs are very helpful as well. I didn't use any external materials to help with my learning, but other students have found Trev Tutor helpful. 592 really requires you to be focused as Val would assume that we remembered whatever he taught us before.
The recorded lectures are decent at introducing the concepts but unfortunately aren't a very good indicator of the difficulty of the homework or timed assignments, which are quite a bit more difficult. That being said, Professor Tannen's Office Hours are probably the most useful out of any course I've taken so far. He does a good job of clarifying what the problem is asking for and provides some helpful hints on how to set up the problem or even works through an analogous problem so you know what to expect for the homework solutions. So I would highly recommend attending those when possible or at least watching the recordings. The course itself is like 3 mini-courses: the first is on counting on proofs, the second is on probability, and the third is on graph theory. There is a timed assignment (like a midterm) after each section. They are non-cumulative but the concepts sort of build on each other, e.g. a lot of the graded material for graph theory involves proofs. The first exam was definitely a lot easier than the second.
This course laid a very good foundation for writing proofs and algorithmic thinking. Here's my quick tips that may be helpful for future students: 1) If you don't have a strong Math background, try to take this course on its own so that you can allocate more time to slowly walk through the lectures and think through the hw and practice problems. 2) Form a small study group to bounce back ideas. 3) Watching prof office hours is very important in solving hw problems. Watch all of them. Make sure you bring questions about hw problems to the OH. Problems in exams are very similar to hw, so make sure you understand (and memorize if needed) the hw solutions pattern.
Be prepared to struggle if you are not from a quant-heavy background. For someone with a limited math background, this course was intense. Although I understood the concepts and theory, the application eluded me. Prof. Tannen's office hours are key to getting help on homework, and recitations were helpful as well. I wish there were pre-course materials to familiarize oneself with proofs and how algebra is integrated into the problems. I felt completely clueless, and it seemed like everyone else breezed through it. I was surprised with how much I learned during the semester though, but I do not want to repeat the experience. Recommend attempting every extra credit to get a small grade bump at the end.
The course materials are way too easy comparing to data structure classes taught in other universities. Getting even A+ in this class still leaves a big gap in terms of the data structure knowledge that a technical interview would expect you to possess.
The quality of this course made me rethink if I should continue with MCIT or not and made me regret whether I should have just gone with Georgia Tech's online program instead. The course content is what you will just get any other college level discrete math. Like others have said, the presentation is really bad and unnecessarily hard. All that professor does pretty much just read off a slide and go through proof and with no examples. Worst part is that he is really bad at going over the proofs. I think this course would have been better if he left proof part for us and just solve more questions. The homework problems seem to be made by students in previous semesters that did well on this course. So the quality and language of these problems are subpar. Many times, you just have to assume things and solve the problem. Kind of funny for a class that emphasizes accuracy in language and taking off points if you aren't clear. It really pisses me off that I had pay money for this class. I would have been happier if they pirated a whole course on Youtube by someone named Kimberly, her content is so much more well put together and is better communicator.
This course is difficult but extremely rewarding. The math is unlike most math classes I've taken before and my philosophy background was more useful than my math as this class primarily focuses on logic and explanation. Professor Tannen explained material thoroughly and clearly, however, attending/watching office hours is a must to get a complete understanding. I do think that the course itself provides enough information/practice to fully learn the subject but some students in the class prefer some youtube channels to better explain concepts. This is mainly personal preference and up to how you learn best. The workload is heavy and require discipline to not fall behind, especially for exam weeks as you typically have homework due alongside the exam. TAs are also extremely helpful/friendly and try to help you as best as they can, short of giving you the answer. Overall, this class provides a great introduction into how to think like a programmer and its themes recur throughout almost every class in the program.
There is no getting around it. This class is difficult. Most of the math I have taken is not proof heavy, so this was my introduction to proofs. This class is very important to succeed in 5960 in that you need to to understand proof patterns and each component of the class well. The math itself is not difficult but coming up with proofs is time consuming. The only way you will succeed in the class is by doing all the practice problems they provide as well as doing extra problems yourself. Overall the course is well taught and structured. The first third of the class is proofs. You learn different ways to prove statements. This is definitely the hardest portion of the class. The second half is the probability portion and the third half are graphs. I feel like these two sections were generally easier than the first both in terms of the exams and the concepts. All the homework problems are difficult and require significant time to complete, but are necessary to understand all the concepts surrounding each topic. Exams were a bit easier than homework and were fair. You have to watch/attend Dr. Tannen's OH and TA recitations to succeed. There is a very significant curve at the end. It is a guess but it seems the class average was curved to B+/A- range.
The current format is still weekly homework + quiz and 3 non-cumulative tests on counting, probability, and graph theory. The recitation videos are great summaries and 1 per week must be watched. The problem with the course is that they (intentionally) do not cover all the basis necessary for you to really fully understand the material. By this I meant alike not giving you all the ingredients to cook a dish on top of having to figure it out how to cook the dish. People relish the fact that they feel they learned a lot and grew, I agree on this, but it is nevertheless a poorly planned course. There were countless times when I had to screen cap a slide in the video and ask how did they reach a conclusion that was an obvious logical leap. There were exceptions and caveats to every other thing that I had to find myself and it just feels dang bad. To give you a taste of how poor the course is structured, there was one homework question that was so easy it could be solved without taking the course at all. I thought this was a trick (as you'll get used to be suspicious soon enough), and spent like 7 additional hours on just this one fucking question. It turned out that the question only required brute force solution and nothing mathematical really. I was furious and wrote a hopefully-calm note to the instructor complaining about this misleading question. Hopefully you won't see it. Would HIGHLY recommend go over some discrete math courses on whichever platform beforehand, even just glancing through. The course should be curved and the last test should be easy (I got 50 on the second, 100 on the last, go figure lol). I am somewhat grateful for mercy but can't help but feel that it is like covering their asses for not teaching the material well and slightly felt a little manipulative like a boyfriend who slaps you and then shower you with gifts.
I passed this class without a math background, so it can be done! If the lecture content alone is not enough for you as it wasn't for me, here are my biggest recommendations: 1) buy one of the recommended textbooks(!!!!), 2) make sure to watch the TA office hours for the example problems, 3) make sure you're understanding the material in the lectures and not just watching just to watch, 4) when solving the homework, state everything EXPLICITLY, 5) if a homework question is difficult, you don't understand it yet. In most of the assignments, the question seems daunting, but generally there is a "trick" behind it that simplifies solving it immensely. Also, don't forget to consider corner cases. The questions in each homework do relate directly back to the material, even if on the surface it is difficult to see how at first glance. If you're using a particular theorem, you had better well state it. Make sure every possible logical leap is well-explained and accounted for. Finally, be prepared to fight for every point. If your answers are carefully justified, you will get a whole lot of points back on homework problems by requesting regrades. Overall, I learned a lot through this course, but it didn't come easy or naturally for the first 6 weeks on proofs, that's for sure.
I loved and enjoyed this course very much. The topic is interesting and professor Farmer explains everything in a crystal clear way. The bit is a simple concept, thus bit-level processes (the topic of the first part) are also simple. I must add, that I completed the Nand2Tetris -- self-learning -- project a few years prior to taking the course, which "pre-cabled" my brain for CIT593. Showing the memory status all the time during the whole course helped a lot both to understand what is going on in a computer and to understand pointers. The hours include the extra HW problems as well.
The crippling anxiety induced by this course almost broke me. I felt impossibly lost in the first half of the semester, even after attending every office hour and TA sessions regularly. Impenetrable lectures gave way to incomprehensible assignments. I cried at least once every day I worked on this class for the first 6 weeks. Ironically, I found the week on induction to be the easiest week of the semester - induction problems are always identified and always follow the same step by step process. The class does get easier over time although the firehose of mathematical terminology never abates. Probability was the easiest segment of the course for me, because it's always possible to gut-check your work in a way that's not easy with the other two segments. Non-cumulative exams are a blessing, as is the curve at the end. The material in this course needs to be taught in the opposite direction - first high level concepts and intuitive explanations as much as possible, then examples of usage, and only then formal mathematical definitions and how to apply them. Towards the end of the semester I stopped watching the lecture materials - I would skim them to see what concepts were covered and what terminology was used, and then I'd attend recitation, read the textbook, and supplement with YT to learn the material enough to approach the homework. Grading towards the end of the semester is more lenient. Through blood, sweat, and many, many, many tears, I managed an A. If I never have to take another class like this again it will be too soon.
Course structure is good and covers most important topics of Discrete Math that set you up for future success. Homework assignments, though words are obfuscated to prevent cheating, were well thought and provided a good amount of practice with the topics covered in class and helped you prepare well for the exam. The grading bar is not clear very frequently, and many regrades requests could result in score improvement if you feel unfairly graded. However, I did find that the lectures could benefit from a revisit. I needed to supplement my learning with outside materials to fully understand the material (props to Discrete Mathematics: An Open Introduction by Oscar Levin and TrevTutor YouTube). This is not necessarily a reflection on the instructor, as discrete math can be a challenging subject to teach. Dr. Tannen has been very helpful in his OOH, so attending or reviewing it could be very helpful to your exam preparation. The course itself is hard but doable with a lot of practice and outside material readings. Tips: make sure you understand homework solutions and also go through all practice problem sets for the exams - it could account for 80% of exam success.
Class was harder than it needed to be and the course materials were insufficient. I heavily relied on outside materials like khan academy and trev tutor to understand the concepts from the lectures, as I found the lectures mostly a waste of time and incompréhensiblement. The teaching style leaves a lot to be desired.
Enjoyed overall - lectures were all you needed. Consistent pace and difficulty ramp. Well taught. Studying for exams when homework assignments are due are the only rough spots.
There are not enough materials and practices covered in the course to do homework alone, need spend a lot of time to study extra by myself. And TAs grade homework irresponsibly. A good math course should encourage different solutions and creative thinking. But every time I have a different way to solve the problem than solution, I got punished for different thinking. I have to request regrade all the time to have TAs take a look carefully.
I found this course to be fairly difficult, especially the first section. The material itself was not necessarily difficult and I generally enjoyed learning it. Some of the proofs and concepts from lecture were difficult to follow, but the main issue I had was with the homework. Some questions were a leap in difficulty from lectures and quizzes. It was not always clear how to solve a problem and I would spend countless hours on just trying to find the right way to do it, and sometimes the questions were not clear. They seemed hard for the sake of making this course more difficult, and I didn't feel they offered much in helping my understanding, but certainly added to my stress and made the course much less enjoyable. The recitations and professor open office hours are critical to success in this course. The recitations helped clear up the concepts in an easier to understand way, and the open office hours professor Tannen would answer questions about the homework, sometimes offering valuable hints. The exams were fair, and overall easier than the homework. While they are not cumulative, concepts from earlier sections will be needed to solve some of the problems. If you have a firm understanding of the concepts, you should do well on them. I found the third exam to be the easiest, followed by the first and then second. The practice exams are lengthy and at times even more difficult than the homework. This really affected me on the first exam, as I believed I was not ready. I didn't make any effort on the next two practices due to this and did fine on the exams. I needed outside resources a lot for the first section. I mostly used TrevTutor (youtube) and Book of Proof. I used very little for the next two sections. As far as a time commitment, I spent about 17 hours a week. A few weeks were bad, and I spent closer to 25 on them, while a few easier ones, only 12. The exam weeks also have a module to complete, so plan ahead. Fortunately, these modules are introducing a new section and were generally easier than the remainder of that section.
Incredibly frustrating course. Those with quantitative backgrounds or prior exposure to the subject will find the course to be easy. Those of us without that background spent a considerable amount of time augmenting the course material with external resources. The lectures and recitations do not prepare you for homework or exams, where the grading is pedantic, punitive, and unpredictable. Solutions that are 80% correct may lose 90% of the points because of rubrics designed to inflict the most damage. The homework problems were generally highly obfuscated brain teasers, meant to deter cheating. I've never worked so hard for such poor grades. I believe most reviews for this course would much worse if not for the "curve" and for a much easier third exam.
This course is very thoughtful and challenging. I enjoyed working out my math muscles (my last math class was in high school) and seeing how concepts from discrete math tie into computers and programming. The workload did not vary between weeks, and the homework assignments were puzzles that were very satisfying to solve after I spent enough time with the week's materials.
Very enjoyable class. Professor Farmer is an expert online teacher. Every concept is explained in detail, there are no skipped steps. The assignments are difficult but they are fun and engaging.
Overall… I enjoyed this class, and found it to be an interesting introduction to math topics I hadn’t really learned as an undergrad (aside from probability). Tannen’s teaching style maybe wasn’t for everyone, but I thought the lectures were adequate and the homework problems were scaffolded in a way that felt very intentional. I really liked him as a professor… a bit abrupt at times perhaps…but pedagogically knowledgeable, witty, and an incredible mathematician. Attending his office hours was always worth the time spent. There weren’t enough TAs, but the ones they did have did a great job. My only real criticism of this class was the use of the proctoring service HonorLock. I had two major technical glitches, one of which ultimately took over 2 hours to resolve and I did poorly on the test as a result (I didn’t have time to get through all the questions). I never got the opportunity to retest, which was frustrating. Honorlock just doesn’t run smoothly. Overall though…. I enjoyed this course and the content was fun, approachable math that I didn’t have much previous exposure to.
This course was a journey from transistors to C-language. Prof. Farmer does an excellent job of tying the story together coherently and supplements every section with well-crafted assignments that deftly reinforce the concepts. Personally, I already had quite a bit of experience in intermediate C++, so the concepts taught in this class weren't "new" to me and thus I was able to breeze through most assignments. But if you're new to these concepts, then they are absolutely valuable to learn, especially in the digestable way that Prof. Farmer has presented the course material.
Very hard and challenging but every minute is worthwhile. The prof took the time in his lecture videos to explain everything clearly and TAs are awsome at answering questions.
Favourite course out of the initial trifecta as you learn a great deal both in breadth & depth in a short amount of time. Some may argue that the contents, especially initially, are too conceptual, but I enjoyed the more wholistic content. The course moves fast and assignments are challenging. They require quite a bit of concentration (and time) as things can get confusing. The exams were by far the most difficult I've taken, however I thought they were an accurate and honest measure of my understanding of the course content. Grading was pretty harsh, but in hindsight I did not have a 90% (or even 80%, at times) mastery of the course content and my exam grades reflected that. Everyone can do well on assignments though given you spend enough time and thought on them. Overall, I thought 593's difficulty & content is what one should expect from a CS masters at Penn.
This course covers too much irrelevant information in the first half and then rushes through the more important part of the course in the second half which leads to a lot of trouble by the time you reach the final project and the final exam. Most of the course is really simple and not that time consuming, with the exception being the final two C assignments and the final exam.
The content can be a bit difficult, and it is very dense with a lot of different things to remember. However, I think the quality of the course was excellent. The lectures are great, and I feel like the homework assignments are challenging but manageable.
Really like this course. It has a very broad coverage, from transistor to CMOS to logic gate to assembly then to C. Such a great journey! After taking this course, I feel I started to understand what is actually behind the machine. Strongly recommend!
This course is one of the best structured courses in the program alongside 591 imo. The lecture slides from each module directly coincide with the HWs. The way the course is taught builds each topic upon the last. I think it would be a good idea to make sure you understand the content for a previous week before moving forward. Most of the course is straightforward along with opportunity to earn EC on some homeworks. The difficultly of the courses slightly increases in the last few weeks of the course when you need to study for the final/complete the final project in C. For me getting used to the syntax of C was were I struggled a bit. Outside of the syntax the logic for most of the code you write in this class isn't any worse than coming up with the logic for the programming assignments in the later half of 591. While I didn't have time to attend the recitations live, watching the recordings and exam review sessions were extremely helpful when it came to studying for the exams. Overall, making sure you understand the material each week while doing a fair amount of practice, will get you an A.
1. Since I'm a software engineer, I found the first 2/3's of the course much more difficult than the last 1/3. Once we were writing Assembly and C, I thought things were easier. That seems to be the opposite experience of most students. 2. Time Management. For me, each weekly assignment was 8-12 hours, plus 3-6 hours of lectures, readings, and recitations. Don't wait until the weekend to start on the assignments! 3. Mid Term. The difficulty was a surprise. Practice test seemed a lot easier. Doing the assignments alone will not prepare you. The mid-term made it clear that I did not deeply understand the material. The first half of the course is very heavy on diagrams and logic, which, to me, is easy to underestimate. 4. Use Piazza to get help from instructors sooner rather than later. 5. Very well organized and really interesting subject matter.
I absolutely enjoyed this class and found the material engaging and manageable. There is a lot of reading and information to go through, but I felt I was able to handle the workload well. It wasn't until the last section of the course when programming in C that I began to feel the struggle. I had a hard time picking up C (and still struggle with it today). If you are working full time it might be best to take this class on its own given the amount of material you'll have to go through and not necessarily the difficulty of the course. I found the professor to be friendly and involved in his student's learning. Dr. Farmer was welcome to students reaching out to him for help and was very useful for getting unstuck.
This is the best core course. Practical, interesting assignments help you to truly understand important concepts at a deeper level; there is no "busywork." Dr. Farmer is both an incredible teacher and a very kind person. Lectures are extremely clear, with good visuals. It feels like you are building a computer from the ground up. The things you learn in this course will truly make you a better C programmer. This course made me feel passionate about computer science and that I could succeed. The more time you put into this course, the higher your grade will be, but it is demanding and can be exhausting. Study groups are helpful. This course also consistently has one of the most engaged and enthusiastic TA teams.
This is a hard one to review, only because the course is built very well out of all the courses I have taken and very structured but the workload/exams are unforgiving. Prof Farmer is amazing and takes so much time to explain every little concept in detail but there are assignments every week and all of them require a lot of time to do. The exams are also closed book with the final being cumulative and the overall grading being absolute. So though I thought the course is designed very well to teach you the concepts, I felt the exams/project/assignments didn't need to be as hard/time consuming as they were.
The course is very packed. A lot of layers of abstractions all the way from the wires and transistors to the CPU and eventually programming such CPU. Liked it a lot for the knowledge. However, I still think that having students code all the machine code, assembly, and C sequentially is a little bit much (to be done in approximately 7-8 weeks, that is!). Maybe it would help if a little bit more of a C-language bootcamp-ish can be added each week we are doing C (which was only about a month or so). Overall, good course. Really enjoyed the insight and the challenge!
Course content is a little challenging, but not terribly so. The biggest issue with this course is the time requirement. The homework requirements are over the top and feel a lot like busy work for the first 2/3 of the course. Instructions for a lot of things are really ambiguous and make things harder than they need to be. Professor Farmer is not very engaged beyond his 1 hour of office hours per week. All in all, there are some good takeaways from the course, but it has room for improvement.
Can't say enough good things about Dr. Farmer. One of the best courses I've taken in my life. The course takes you through module by module and transitions between concepts so smoothly. In one moment you're typing 1s and 0s in, and then you're coding in C with very little gaps in between. The TAs (Katie Pizziketti, Eri Arai, and many more) were amazing. I wish I could learn everything through Dr. Farmer and these awesome TAs. The material itself isn't challenging, the course just has high expectations of you to really dig in and learn the concepts so you can apply then in different scenarios. As it should for a grad-level course. I really loved it!
This class was great! The content was interesting, assignments were well thought-out, and the course content is thorough. The TA staff is incredibly responsive on Piazza. This course is tough--the content itself isn't too challenging, but there is a lot to understand and the assignments take a lot of time. I thought the first half of the course was fairly relaxed, but the second-half made up for it. There is plenty of extra credit available after the midterm, which are extra problems / extended learning opportunities on each assignment. I'd recommend attempting some EC to give yourself a cushion at the end of the semester (30% of your overall grade is due within the last week or so). I didn't do any extra credit aside from e.c. exam questions, and finished just under a grade cutoff. However, I ended up getting the higher letter grade, so I think there is a small bump at the end. As others have said, the final is difficult and requires a solid conceptual understanding of the second half of the semester in order to do well.
Tale of two halves. The first half was super interesting, consistent workload around 10 hours per week, really well taught. The second (especially the last four weeks) half has a huge difficulty ramp with workloads in the 20 hours per week easily.
I had so many a-ha moments while learning 593. That's why I'm really grateful for Dr. Farmer and all the TAs. I have learned some of the materials before, so I might be biased. But if you are willing to spend extensive amount of time on the materials, it will pay off. The midterm and final exam are definitely hard, but they are still doable. TAs are so helpful when it comes to HWs. So, if you care about GPA, good news is that it is totally possible to get A or even A+ thanks to extra credits. However, you might have to double the amount of time to get all the extra credits. And brace yourself for the last two assignments about C.
This is definitely my favorite class that I've taken so far. Dr. Farmer is incredibly concise, sincere, and passionate about the material. The TAs and course staff this semester really went above and beyond. I came into this class with prior knowledge of C/C++, but now I feel like I have a real grasp of the many layers of abstraction that make C possible! The material is essential if you have any interesting in working with systems, but also sure to make you a better programmer no matter what language you use. The assignments were challenging, insightful, and never boring. The exams were very difficult, but I also felt they were fair. Rather than having you regurgitate material, they make you think about how to apply the concepts in new ways. In fact, I came away from both exams knowing something new which I think is pretty rare and valuable. 593 sets the bar for what an MCIT online class can and should be!
The material is self content and easy to understand. The topic is very interesting and kind of an eye-opener. I really hope Dr. Framer will teach more courses in the future! The assignment are a little bit tedious for the first few weeks, but it will become more challenging in the second half of the semester. EC takes quite an amount of time, but all efforts paid off when you receive the final grade.
There is nothing particularly hard about this course, its mostly content that many of us will not use in the field. This course could be slimmed down and rebuilt to include more relevent content. It wastes a lot of time going in the extremely fine details, but does not make use of them in the homeworks. I do not fault the professor he is a really nice guy. Not only that but he cares about every student. The problem just comes down to how much time has to go into a course like this for a mandatory course, on topics many students will not use in the future. I got lucky and this was my summer course where I had the most time, so it was mostly a time sink. Nothing to special about it either way, just basic, and I feel like less was retained then most classes. Information firehose is the best way to describe this course.
This class is fantastic and has been my favorite in the program so far. The assignments are great, and its amazing how much content is covered in the span of the semester. Dr. Farmer's lectures are super clear and easy to follow. Beware that the second half of the class is significantly more work than the first half.
The professor made very good lectures and you can learn a lot from assembly to C. Very deserve the time.
Dr Farm makes the complicated and abstract content really structural and easy to understand. The TAs are helpful Recommand who is going to take it starts the hw as soon as possible, personallly it takes me at least 24+ hours after week6.
I can see how this course would be hard for some. It builds up from the abstract bits to transistors, then to hardware and C. However as I was taking it after 6 classes in MCIT, I feel that the concept and practice wasn't challenging. The last few weeks with projects in C was when I got really excited, because it dealt with coding. Prior to that, the homework are more time consuming and requires detail review, since the volume was massive and you could easily lose points here and there. The course itself was designed logically, and Dr Farmer and TAs were very helpful and responsive. I feel that this is the best core course in the program and wish some other courses could be more like it.
Professor and lecture quality are top notch for this course. Difficulty for this course is not the material but with time management as there are so many topics covered and long assignments due weekly, it can really feel demanding at times to get everything done.
Great course! This course takes your CS journey into the hardware. From electrons up to the C programming language, you will get a thorough understanding of how your programs relate to the machine you are running it on. The instructor is incredible. Great with office hours and very responsive. The TA's were very helpful as well. What makes this course hard is the workload and the exams. The workload is quite intensive throughout the semester and gets even heavier in the last couple of assignments. The exams are also tricky. However, if you are passionate about computers you will love this course the same way that I did.
This is a well-organized and taught course. The course starts from a transistor all the way to C program and also touch some basic idea of OS. Professor Farmer explains all the abstract ideas very well such that the course material can be easily understood. Because of the great lecture and the course material can be smoothly digested, I consider this course as medium. The load of homework is heavy but also the homework is extremely well-designed and tightly connects to the lecture. Due to the heavy homework load, don't bother with EC (extra-credit) questions in the homework if you run out of time. The last two assignments are very time-consuming, start it as early as you can. There is 1 opportunity to postpone one deadline of homework for at most extra 3 days. Use it wisely if you need it.
Hands down the best designed and executed university courses I have ever taken. I can't say enough good things about the course but I have some quick tips that may be helpful for future students: 1) Recitations and TA Office hours are very helpful. Try to book at least one 121 TA session a week even when you think you can handle the hw yourself. It's useful just to talk through the concepts of the lecture with the TA. 2) Try to start hw very early (no later than Wednesday). Get as many Extra Credits as possible before week 9. Before mid-term, try to finish everything early to start watching the lectures in the second half in advance. 3) Try to learn some C before the term starts. Textbook "the c programming language” and https://www.learn-c.org/ are recommended. 4) Practice exams are very helpful. Study the slides, then try to work on the practice exam closed book, then go back to the slides to revisit the material where you made mistakes in the practice exams.
Most organized course with the most passionate professor and TA staff! I didn't find the material particularly hard to understand, but you cover a lot of ground over the semester and learn tons. The workload & difficulty of the material is significantly more in the last few weeks when you hit the C programming portion. So worth the effort though! I am amazed at how much we learned!
The course is too easy for even an undergraduate-level data structure course. There are many important topics in DS that this course has not covered. That being said, the Recitation is the best part of the course. Join live sessions if you can. You will have loads of pair programming with classmates which helped me a lot in solving Leetcode type of problems.
The course was well organized. I took the course with 593 and ended up spending 90%+ of my study time for 593- I wish I had put more time to fully understand each concept presented in the course.
There's a lot of great things to say about this course. It's amazing how much content is covered. The first 10 weeks are devoted to binary representation, logic gates, assembly language, trap calls and more, while the last four weeks are devoted to tying everything together in C. The course starts out with a recommendation by Professor Farmer to treat this course as like 'zombies'. Don't let it sneak up on you. One zombie is manageable, but if you take your foot off the gas and get encircled by them, heaven help you.... Taking this course over the summertime was tough without any sort of break like you'd have in Spring or Fall. Assignments will be due every week and none is easier than the last. Grading-wise, there are no surprises. The content covered in the lecture is directly applicable to the homework, which is perfect for my learning style. I didn't feel that the textbook added too much to my understanding of the material. I treated it more as a reference manual and didn't end up completing the readings past week 5. The midterm was well calibrated as far as the difficulty was concerned, but the final exam snuck up on me. I was not expecting it to be that difficult.
I like the Assembly and C coding homework assignments and if only the exams were to write a code, I would have done very well in this course. The exams are more grounded on whether if it's a trick question or not. You will learn a lot in this course but as I said, the exams are more on if you will recognize if it's a trick question or not - so your exam results may not reflect how much you have learned in this course. Given that, do your best to get an A+ in your homework (60%) and attempt all the extra credits (not just for the grade but for learning purposes). Ask help from TAs and if you can't make it to live recitations and OH, you can always ask in piazza. The TAs are all great - and I did very well in the homework assignments because of the techniques taught in recitations (especially the ones led by Puneet and Leo).
The content is great! Prof. Farmer really masters his topics. However, the assignments were unnecessarily rough time-wise and the penalty for late submissions is a whole 25% of the assignment grades. The midterm and final exams are impossible to finish in the time given and it's unrealistic to have to memorize the actual syntax of assembly and C programming languages. I would have preferred shorter and/or take home/open book tests. The time commitment took all the fun out of what would have been a very fulfilling course. Did I learn? Absolutely. Was it relevant for future jobs? I believe so, because understanding what's underneath the machine definitely makes you a better programmer. Did I cry, though? Of course I did. Many times.
I just barely pulled an A (did EC on about 3 of the 9-10 assignments that had EC, one of which was the last assignment) at a 93.XX% final grade with EC. Scored ~84% on the first exam which was about 10% above the class average, and ~83% on the second exam which was about 15% above the class average. My overall homework average was ~97%. I'm sharing the above because based on what I've discussed with students who took the class before me and my own experience, this is a decent benchmark for an A: homework grades in the high 90s and test scores of mid-80s. I also feel like there may be a tiny bump at the end because a number of students are pleasantly surprised when the grades come out. This course is not curved but if you want a high grade, the EC is the curve. It's time consuming though and so I only did it for the first two assignments with EC and then gave up because I got 0 points on an EC that has no partial credit. I was ~guaranteed to get an A- without extra credit and the above grades. EC also only adds at most ~2% to your final grade. Class is interesting but time consuming. I only watch lecture videos, and only refer to recitation slides when studying for exams - never go to OH or live recitations. With that in mind, I spent around 10-12 hours per week watching lectures and doing the assignments, reading Piazza as necessary because most of what one wants to ask TAs has probably already been asked. The three weeks where I spent a LOT of time were week of the midterm (30+ hours studying putting everything together), assignment 12 (22-25 hours), and assignment 13 (27-30 hours). A handful of weeks early on in the course and when you just start C are very light, but as everyone says, final assignments are super time consuming. Studying for the final was easier because everything has built on itself and you know what to expect based on final assignments / how the midterm went. I recommend making sure you understand the lecture videos/slides (I took notes on the slide handouts themselves and ended up with an 800+ page PDF) and then just repetition. This course requires memorization and the more you go over materials, your understanding grows a little with each successive review. It's not too difficult conceptually, but I think the sheer amount of material makes it a bit daunting at first, but everything is broken down so that you can learn it well.
593 sets the bar for what all classes in MCIT should strive to be, and Prof. Farmer is the highlight; he is engaging, sincere, and his lectures are clear and comprehensive. His passion for the subject matter comes across in every single video. The course structure is fantastic and it builds week over week to give you a fantastic understanding of computer systems. One small thing that I really appreciated was that when Prof. Farmer referenced a concept learned in a prior weeks lecture (that you might have forgot about), he would always do a great job of concisely reminding you of what it meant, so you didn't have to dig into your notes to find out. Another thing I appreciated is that unlike other MCIT classes I've taken, you don't need to spend hours searching for supplementary material online. Keep in mind the workload is steady throughout, but really builds up in the final 4 weeks, so plan ahead!
Very interesting topic well taught. Only criticism that the workload is artificially high, both in assignment and exams. There is no need for a 4 hour exam.
This has been my favorite course so far in MCIT. Though it might not help a lot with SDE interviews (which are heavily algorithm-oriented), it builds foundamentals, promotes "literacy" in computer science and helps you know what's under the hood, as computer science is far more than coding, algorithm, data structures, etc. Course content is pretty interesting and well-organized but assignments could be quite time consuming. However, it's all worth it!
If you're coming right after 591 or if you have good experience with Java, this course should be on a very light workload going into it. Assignments are not too time consuming and only 1 final exam. Overall the course I felt was what you make out of it because it doesn't force you to learn the concepts but covers all the basic info. So if you spend the extra time going through the non graded recitation problems or outside courses, you might enjoy it more. I would pair it with 593 or 596 to help with the course-load in the other courses.
This is a transformative course taught by a gifted teacher. It transforms you from a programmer to a student of computer science. It does so by claiming to let you look "under the hood" of the computer. This analogy, albeit accurate, does not capture the magnitude of what is revealed. It would be more accurate to say that it opens the door to a universe hitherto unknown to most students. But the door is not suddenly flung open lest you be blinded by what you see. Rather, Dr. Farmer gently guides you through layers of abstraction (which without his masterful guidance might resemble the circles of Dante's Inferno), opening one door after another, showing you bits and transistors and logic gates and circuits and memory and microprocessors and assembly language, until you reach that unapologetically unforgiving language called C. You job is to keep up, which requires work - a lot of it. None of the concepts taught here are difficult in isolation, but since they build on each other, it is absolutely essential to master each concept through abundant repetition and practice before the next door is opened. It is an all-consuming semester-long experience that most will find illuminating. Those who don't, will come to view it as a necessary evil. No one will argue with the word "necessary". Whether you love it or not, you will come to appreciate the generations of human ingenuity that have fueled the science of the computer and will realize that you are standing on the shoulders of giants the next time you program in a comfy high-level language like Java or Python.
This is my favorite class I've taken so far. Such interesting subject matter (although, be warned, this class covers a lot of ground). Each week takes you up another level of abstraction in building a computer, and Dr. Farmer and the TAs do such a great job of fully explaining one topic before moving onto the next. I learned so many fascinating things about computers, and I'm definitely going to be a better programmer for it. The exams are hard, I'm not going to lie. But the reason they're hard is because they want you to comprehend the material, not just memorize it. Make sure you understand the topics on a deeper level because they will ask you questions on the exam that you hadn't thought to consider before. Always attempt extra credit on the exams and homework if you have time because it can change your letter grade by the end of the course.
The course material is not that hard, but the sheer volume of homework will have you spending 15-20 hours a week plus more on the final 2-3 projects. The tests, however, are overly difficult for some reason, requiring serious in depth knowledge in order to be successful. There are extra credit opportunities, but the grade boost isn't necessarily worth the extra hours of effort (unless you have time, then go for it!). Lectures are top notch. Dr. Farmer's materials should serve as benchmark for the rest of MCIT. They are clear, concise, and you don't need many external resources (with exception of learning C syntax at the end). The TA staff is also the best I've encountered thus far, always willing to help and answering quickly on Piazza. Although the material kind of dry unless you're already an engineer, the thoughtful course design made it much more enjoyable.
To me, the best class in the CIT core. The first half is a bit dry, but I'm writing this review a year removed from taking the class, and all the memories are good ones. Although the homework can be repetitive, it pays off later in 595 and CIS 547. The foundation that this class builds is - to me - the most important part of the CIT curriculum.
I can go very deep on this, but the course takes too much emphasis on hardware side. True, it's required to have some understanding on a computer hardware, but few in this program cares about the side; it's just "good to know" type knowledge. some homeworks ask excruciatingly niche parts of the course materials, for which I have no idea how to apply for practical purpose. much more emphasis should be put into the C course materials, but that is not the case. we barely touch double pointer use cases, how to efficiently allocate memory and clean up after uses. you'll learn more via the assignments that you just heard from lectures. simply horrible course design. The worst? UI of the general course page and weird quiz pop-ups. few minutes of videos and having to click multiple times distracted me so many times, so were the quizzes. make the quizzes multiple choices, and just create at most 3 lecture videos so that students can stay focused during the session. the UI is simply appalling. and also.. don't ask students to submit multiple files and blah blah for a single homework.
Hands down the best course I’ve taken online, on-campus, anywhere. It’s a difficult job to cover so many interesting yet dense topics, from transistors to assembly language then to C, in such a short time. But Dr. Farmer and his team did it seamlessly. I got the lowest grade from this course so far in the program but like it best.
Hands down my favorite course out of the core classes. Incredible learning experience to come out understanding computers down to a very fundamental level. Lectures are informative, and in combination with the readings and assignments, the course materials are all you need to really understand everything and succeed. All that being said, it is a hard class, time consuming, and the assignments build on one another (so if you miss something in one, it might come back for you the next week), so staying on top of the material each week is really important! Exams are really tough, grades aren't curved, and Prof. Farmer thinks Cs are good grades that demonstrate you've learned a lot, so that can be a little stressful. But it's totally possible to get an A/A+ in this class if you can put the time and effort in.
Overall, I want to say I liked the course. The videos were recorded by Chris Murphy but our lecturer is Dr Rubin. The homework assignments are on the easy side, but it still was very useful for you to understand the usage of data structure and basic big-O analysis (though it could be topped with 596 materials to make it more helpful preparing for job interviews). I spent around 2 hours weekly going over the videos and another 2-5 hours tackling the homework. This was a great companion class to go with 593 or 596 until the last month, in which the workload skyrocketed on the last two projects. Final exam was fair and it highly aligned with the practice exam, I think most of the people got a decent score.
I didn't find this class terribly difficult. I took 592 at the same time as this class, and this class felt like coming up for air after drowning in 592. Yes, there is a lot of material every week, and yes the homework assignments are sometimes quite lengthy, but the lecture material is far and away the best I've ever seen. I agree wholeheartedly with another review here that said "I never felt lost". As a result, while I sometimes had to spend a little extra time to get the assignments done to my satisfaction, it always felt engaging and even fun. I've heard many complaints about the workload towards the end of the semester, but I didn't find the last few assignments or even the final project to be terribly difficult or time consuming. Maybe an additional 5 hours a week for the last individual assignment and the final project, and I even did substantially more work on the final project than my partner did. Tom Farmer's office hours were useful and he would often code up little demonstrations on the fly to answer questions, which I appreciated. The army of TAs for this class were great, and I was always able to get help when I needed it. I attempted and received most of the extra credit for the assignments in this course and on the exams, which amounted to what seems to be a 3-4% bump in my final grade (I was at an 89.9% and received an A). To help give a benchmark for an A, my assignment/project average was ~94% (without EC), midterm 99% (with EC), final exam 75% (with EC). Agree with other comments here that the final exam was very difficult - too much material to truly prepare for and tricky exam questions that were considerably harder than the practice final.
This course takes diligence and time. The materials and assignments build upon the previous weeks', so it's key to make sure you have a comfortable understanding of previous materials. Some weeks were very interesting, other weeks I found very perfunctory (do I really need to practice converting hex to ascii? that's why computers exist...). The assignments are thoughtfully designed and the professor and TAs extremely helpful. Overall it is a very solid core course that helps you understand how computers work from the 0s and 1s.
The most time consuming class in the core, but a great class that really changed my perspective on CS and gave a lot of useful insight on how computers actually work. Dr Farmer is the best professor I've had in my 8 classes in MCIT, great lecturer, great office hours, and great course design. Exams are quite difficult, there is a ton of material, the final is cumulative, and the exam takes every bit of the time you're allotted. Homework assignments can take a long time, so make sure to start early, and ask for help since it is easy to make subtle bugs in assembly or C that are difficult to catch. Textbook not very good, it's a better use of time to rewatch lectures than read text.
It was really difficult for me to understand without any engineering background. I usually spent all my weekends for hws and stayed up until 2am for 3 days in row for the last few weeks. It was difficult, but you can definitely find yourself immersed into the material.
I've taken a lot of classes in my academic career and this is absolutely top 3. The professor's ability to start at the smallest building blocks then build every week was incredible. Each week builds on the next, so stay focused!
Pros: Structured excellently -- everything needed to succeed is provided in the course. Cons: Excessive and unnecessary work. Assignments were so long, and in my opinion much of it was needlessly repetitive.
Course is very well curated. It helped me understand a lot. However the workload was crazy, it is bit theoretical (first 5-6 weeks). I was working full time and hence at times I struggled to finish homework on time (i didnt take any other course). One grouse I have against the course is, no body told me that during exam we will not be provided IDE. So we have to code "blind". I was not prepared for it.
Very well taught course, covers the fundamentals from transistors to the C programming language. Great video lectures and recitations. Exercises complement the lecture material very well and deepen the understanding. The workload increases significantly towards the end of the semester, if possible I would suggest to earn as much extra credit in the first 10 weeks and skip the EC questions of the later C programming exercises. The exams were fair but challenging. Overall, one of the best lectures of the core courses.
The projects in this class are interesting and useful. But the video lectures are really basic and boring. They are recorded by a prof that doesn’t work at Penn anymore. And honestly they are so mind-numbingly basic I would get angry watching them. There are no recitation lectures, so you have no opportunity to learn about the content from a different perspective other than reading the textbook. There are recitation activities, but these do not contribute towards your overall grade. Some students had issues with “hidden tests” in the autograder for each programming assignment, but I didn’t have a problem with this. My average on all the programming assignments was an A. I got an A- on the solo project. I got 60% on the final exam. There is no review recitation for the final exam. And other than one practice final, no other review resources. Professor Rubin essentially treats the final exam as a way to trick students. There are a number of questions that require knowledge from other arenas (like 592). The exam is open book, open note, and you can access the Java api. But during the exam I felt like I had an advantage for two reasons: 1) one of the questions was easily answered by students who’ve taken or are taking 592. The material in this question was not covered in this course. 2) another question I knew the answers to from previous programming experience. but trying to answer this question from java docs (the expected way you are considered to be able to answer the question) seemed impossible). Even having these advantages, I got a 60%. Essentially, the professors tests you on things he thinks are important in programming and skills advanced programmers should have. But there are little opportunities in the class to learn how to do these things and get meaningful feedback on them. I was not able to attend many of the unrecorded recitation activities due to my job. Also the Professor office hours and recitations were not helpful. I feel like prof Rubin is unwillingly to amend his teaching style to full time working professionals , which is who MCITO is partly made for. The Professor is unwilling to make material easy for students to understand and I feel like he’s one of those old school comp sci people who likes to gatekeep knowledge from newcomers by obscuring important ideas in overly complicated or out of reach topics. In his “review office hour” he seemed to gloat about how clever his exam questions were instead of just reviewing topics. Frankly I do not understand why the only way to get information out of this course is from a textbook or from old lecture videos from a professor who has left Penn. The way this course was taught inhibited my learning. I don’t care about my grade. It has no effect on my life or future. I care that I wasn’t given resources or support that I paid thousands of dollars for. Why aren’t there recitation lectures run by TAs?
This is by far the best class I have taken so far out of 591, 592, 593, 594, 596. I never even considered the field of embedded systems, but this class actually made me think about what a career in that field would be like. This class provides some fundamental knowledge that is critical to be truly called a computer scientist and not just a programmer. Let's start with the lectures. These are clearer and more engaging than classes that I had in person. Each lecture built upon the previous one and it all felt coherent an easy to follow. The structure of the class is amazing as you work your way up from the binary level to the CPU level then machine code to C. You learn an insane amount of information in an organized manner which really helps with retaining the information. Dr. Farmer is also a great lecturer and feel enthusiastic to be teaching this material. I did not find the need to use any outside materials other than documentation for C. Homework was time consuming but helped reinforce concepts as homework should. Make sure to format you circuit diagrams and timing diagrams properly, speaking from experience. Last two assignments are very time consuming, so get started on them early. I think the course is not too difficult until you get to C. As long as you follow each lecture and understand the concept you will be able to fully understand the CPU lecture easily. Assembly is tedious and prone to error but not difficult. Then you start C in which we covered the basics of the language quickly. What you need to focus on is pointers and the stack. Spend at least a week on these two concepts. If you understand pointers and how the stack is setup you will do well on the C portion of the class. Exams were very fair and reflected what we learned in class. Practice exams give a general overview for what will be on the test. You will find the same type of questions on the actual test as the practice test. Grading was also fair and straightforward. There is some extra credit on the exams some of which are easy and some that are more time consuming. The class is not curved. I would highly recommend doing as much extra credit on the early homework assignments since the homework assignments starting with assembly begin to get longer and more intensive. Class does not take too long early but begin to spend a couple days on the homework to get all edge tests and debugging when you start assembly/C.
The first half of the course covers a lot of material, as you go from building a simple circuit using transistors to a mini-computer that can perform basic operations and everything in-between. If you have prior experience with C/C++, the second part of the class is not as difficult but the last two assignments are quite lengthy.
This class is no joke. First half of the course, which focuses more on hardware, the material was more difficult for me to learn personally since it was all completely new and could feel like information overload. Most people believe that the second half of the course, which focuses on C, is more difficult. I think having a few years programming experience has helped me pick up C easier. However, the last few HW assignments are extremely time consuming. There is HW due every week, and some assignments can take 10+ hours to complete. If you work full-time, I would make this your only class or pair it with a course that has a much lighter workload like 594. The exams are also outrageously difficult, more difficult than the HW assignments and they are closed book. Average class grade on exams has been a C and there is no curve. That being said, you learn A LOT in this course (even if your exam grade does not reflect his), and the TAs, video lectures, and Dr. Farmer are all fantastic. High quality course. Many opportunities for extra credit and luckily your grade does not weigh the exams so heavily compared to HW.
This was a great course and Dr. Farmer is an amazing and very engaging professor. The course is exactly what I hoped all MCIT classes would be like. The lectures in Coursera are very well designed, and, combined with the required textbook, they provide you pretty much everything you need to succeed. If you take good notes and carefully follow the lectures, you'll do well. This class is hard (and often tedious) for most everyone, unless they already know assembly and C; I don't think it would be "easy" for anyone though (if it is easy for you, MCIT might not be the right program). If you put in the time, you should be able to get an A on most of the homework; getting an A on the exams will require a lot of studying and memorization though. Do not underestimate how difficult the final exam is...it will essentially cover everything since the beginning of the semester, and it will take nearly 4 hours. Constructive Criticism: The homework instruction documents were not very well formatted, making them hard to follow sometimes. The exams had to be done in a Microsoft Word document (saved and submitted as PDF), requiring embedding of photos from other tools as well as typing raw C and Assembly code in the document. This was very clunky and insanely frustrating, especially when dealing with Honorlock proctoring trouble. I would have preferred a thorough project over exams.
As mentioned in a lot of reviews, this class is way too easy as a data structure class. The course did cover all kinds of data structure but the contents and assignments were too easy. The simplest assignment probably took less than 30 mins, while the hardest one took around 4-6 hours. To be honest, I didn't learn much from those assignments, they were like LeetCode Easy questions phrased in a confusing way. Final project was probably the biggest letdown, for which we spent a long time polishing our functionality, and making sure the calculations were correct, but got many points deducted for some very simple design pitfalls that were never explicitly taught in the lecture. The final exam was probably the only part that had the right level of difficulty. However, I don't think the easy course prepared students well for the exam. And then there was a huge curve (~13%) on average applied for the exam (basically students with higher scores gets no / little bump, while students with lower scores gets a much bigger bump). Given the exam was curved so heavily, I don’t understand the point of making it challenging at the first place. The 5% extra-credit assignment was nice, which relieved a lot of pressures regarding the final grade and made 5940 one of the easiest classes to secure an A. I don’t feel that the efforts and time put into this class were well reflected in the grade.
The reason I put "Neutral" here is, I didn't like the content of this course (I found a lot of the content quite boring which put me to sleep) but I did like the professor and the way he taught the class. The professor and the slides made the boring content not that hard to comprehend and tolerant. The homework cost me so much time and I found most of them quite challenging. When I was going through the first half of the course, I thought, man this is a lot and this is hard. Later on in the second half, I realized how easy and light-loaded the first half was compared to the second half. When it came to assembly and C, both workload and difficulty went up high. I questioned myself so many times and found myself miserable and I was like "I never want to see C ever again in my life!" (yet the next semester I was in 595 oh god) The exams are very brain melting. The challenging part is that there is a lot of questions. If given enough time I think everyone can get good grade as long as you worked hard through out the semester. But to get everything correct within the time was a mental challenge. The professor Dr Farmer is hands down my favorite professor so far. He really knows how to TEACH. He explains things very clear, little by little, with the help of great powerpoint slides. It was very enjoyable watching the lecture videos. I think most people say this course is challenging because of the workload, not the overall difficulty, nor the difficulty of getting A. I think because the professor explains things very well and the materials are great, as long as you really put in your time and effort and do your homework and projects and reviews, you will get a good grade.
In terms of workload and difficulty, this wasn't bad at all until the last 3 weeks of the class, when the hours per week went from about 10 to 20+. I wish that the class would consolidate a few of the early weeks (on logic gates and such), and spread out the later, more important subjects. It also would have been helpful to have smaller, maybe optional assignments, again especially in the latter half of the course. As most of the other reviews have noted, the lecture videos, TA's, and Professor Farmer were all great.
This is a highly regarded course for a reason. The course is hard and has a lot of content – especially the exams – but it is extremely well taught and well thought out. Everything connects together piece by piece, and it's extremely satisfying to look back and see the full journey of this course. It's the course that has gotten me to a point where I feel I can truly say I understand how a computer works from the most basic level (bits and logic gates) to the code that we program every day, and it's this kind of knowledge that I feel differentiates a program like MCIT (and other people who have gone through CS program) with a coding bootcamp grad, for example.
The course materials, Dr. Farmer, and his team of TAs are just top notch. The content taught could be very dry, but Dr. Farmer's way of teaching has made very complex concepts much easier to grasp. My only complaint is the insane workload. Prior to the midterm I probably spent 15 hours a week on this class, and after the midterm about 25 hours a week. The easiest weekly assignment took me about 6 hours, and the hardest probably 25 hours (the last 2). This is in addition to time spend on learning the materials and recitations and office hours. Definitely start on assignments early to avoid stress, promptly seek for help on Piazza or during office hours, and make sure you know the content well before starting. The exams were possibly the most difficult I've taken in my life. I spent a lot of time studying and felt confident that I know the concepts well, only to be crushed to see how many problems I've had to guess. Average score was around low to mid 70s, and class is not curved, so make sure you do very well on assignments.
Very interesting class where we cover a ton of material. Not as hard as I thought it would be but is a very demanding class. The projects towards the end of the class get very tough. First few weeks are deceptively easy. The course is well structured and organized though. I used the textbook for the first 3-4 weeks and then basically stopped using it.
The class is structured very well but the amount of information you have to retain and apply into homework each week becomes overwhelming. Lecture videos in each module may not always cover everything you need to know to complete homework. You have to attend/search through recitations and the textbook. Homework explanations/solutions aren't always given (even before an exam) and grading is very unforgiving. Tip: get ahead on the material as much as possible as there are no breaks between homework, projects, and exams. So if you fall behind a little, it gets difficult to catch up.
This course is remarkably well organized and covers a huge spectrum of information. Dr. Farmer is a master - both of the material and in his ability to design clear, concise, lectures that make abstract concepts approachable. I loved the first half... but programming in C is tedious and I was pretty burnt out by the end. The content isn't overly difficult but the homework was very time consuming (at least for me)... start early and work a week ahead if you can. Make sure to take advantage of any extra credit opportunities, as the final is a beast! Although I sometimes struggled to be completely engaged in the content... I cannot say enough good things about Dr. Farmer and his enthusiastic TA/support staff. They made a course that might otherwise be a sufferfest totally manageable.
I circled back to this course after already having taken 591,592,594,596 and 521. I believe having been immersed in this program for a while and learning how to be successful in other courses made this feel much lighter by comparison. Spending time drilling into the early concepts with extra attention to detail will pay dividends throughout the course, as the layers of abstraction build. The course materials are well put together. As other have stated before me, Dr. Farmer has produced a set of high quality lectures and supplemental materials which require no outside resources to find high levels of success. The TA's are available and responsive. I can see how the end of the course may be very time consuming for someone coming in without any (or little) programming experience. For someone who is very comfortable slinging code, the last few weeks are only slightly more time consuming than the first 10 weeks of the course.
I really enjoyed the lectures and the content of this course. However, the new professor that has taken it over has begun the process of revamping the course to make it more difficult starting at the end of the course material and moving forward. When I took this course in Summer 2021, the assignments from the first 10 weeks or so usually averaged out to being difficult, but doable. However, the last assignment, the group project, and the final were much more difficult. Very, very difficult. I was lucky that I had kept up a decent grade over the first 2/3 of the course, but even with that cushion the last month of the course was so stressful. In the last assignment (which was like a 75% scaled down version of the Group project except that you have to do it all on your own) my code would not even compile. In the group project, my group project partner carried me across the finish line because I was so overwhelmed. After the course, I looked at how I did overall, and found that I would have passed the course without a great group project partner, but only just barely with a C-. I want to add a disclaimer to say that 594 was the 2nd class I took in MCIT and that I am one of the minority of students who came into the program with basically 0 programming experience. (I was out of what I knew into completely new material by the end of Week 2 in 591.) I took 594 2nd because I was told that it was an easy class, and although, objectively I think that is true, for someone who is extremely new to coding, it was not an easy class. If I could go back and redo it in hindsight, I might have considered pushing taking 594 back until I had a few other course under my belt. In summary: I really enjoyed the content of this class, but it was extremely difficult for someone who truly was new to programming.
I see quite a few complaints about this class, ranging from light programming assignments to not going in-depth enough to not being spoon-fed everything to the instructor. This seems to me to be slightly juvenile and undergraduate-minded. It is true that you can get by in the class without killing yourself with effort, but all of the material is there (especially and including the textbook) to get a really good and detailed understanding of the data structures you'll actually end up using in most contexts. Additionally, Rafi Rubin is both extremely available and extremely knowledgeable (I liked his slightly sly sense of humor, too). If you don't want to read the textbook and you don't want to ask questions of the instructor, well, neither of these things are mandatory to pass (you can do it just find with the lecture slides, javadocs, and reading old stack exchange forums, should you wish to do so). But that's not grounds for complaining about the class itself, which treats you as an adult. Contrast this with 593, which is essentially a brutal hazing ritual centered on the most boring material imaginable, with 4-hour long, heavily weighted exams based around internalizing dry content you'll probably never think about again unless you work in that specific field. 594 also gives you an intensive, hands-on project with very little hand-holding, which really solidifies the practical knowledge gained in the class. Again, you can make of this as little or as much as you want, and probably still pass - that's largely up to you. For me, it was an invaluable opportunity of the type which has been scarce in several of the other classes in the program.
If you are new to data structures and java programming this is a really great class to get your knowledge base up. The course has excellent concise lectures and does a great job of providing material to learn while keeping things manageable. There are also several practical projects that I believe will be useful on the job. There are also a lot of opportunities to delve deeper into a topic area of interest that are optional. This allows students the freedom to choose to gain deeper mastery or just leave it on the back burner and have the information handy if it is necessary. The course treats you like an adult and in my opinion is exemplary of the model other courses should follow.
I know the past review made it seem like this class is super easy, but it is far from it. As someone else stated from Summer 2023, this course is going through a revamp by Professor Zheng. The challenge with this is the lecture modules are from a previous professor and the HWs are insanely difficult to understand. The first assignment throw you in problems about LinkedList that you would see on Leetcode and it was extremely overwhelming at first. Many students dropped after the first two weeks because they weren't expecting anything like that. I felt as if many of the HWs were geared towards solving Leetcode like questions or were just BS busy work to touch a data structure from the outdated lectures. There were many HWs that were extremely disconnected from learning the fundamentals of data structure implementation or when I should use a particular data structure. Ed Discuss was a lifesaver as the TAs were very helpful to understand the HWs. Don't take this class thinking it will be an easy A. I worked every minute for it. I suggest you look into LeetCode problems as well. My biggest takeaway was I forsure became more proficient in OOP and Java, which I'm proud of.
While I learned a lot (mostly from Youtube videos and other websites on my own) and did well in the course grade-wise, I really did not like how this course was ran/structured thus rating it as strongly disliked. This class needs a serious revamp from an educational and pedagogy standpoint. Students can only submit HW once with no chance of getting points back due to the autograder and hidden tests. There was no meaningful feedback on my graded work besides two sentences on the large solo assignment (M11). The last couple weeks of the semester are super time sucking intensive because of a large partner project. Honestly spent over 30 hours per week on it on top of working fulltime the last two weeks plus however long my partner spent on it. I think they will try to give more time in the next iteration of the class. There were very few practice opportunities and a big disconnect between lectures (the previous professor's) and the HW. Many times there were sentences saying, "Ignore how the videos and textbook did this thing, it is wrong" with NO explanation of how to actually accomplish the task. I wish recitations were more useful and recorded; I wish there were more mid-level practice that would solidify my knowledge. Both times I went to live recitation, the TAs were lost. First time, the TA was doing the wrong week's problem and then struggled to know how to do the current week. The next time, the TA was 15 minutes LATE. I rescheduled meetings at work so I could attend live. I rated this hard because I had to spend so much time deciphering what the heck the homework is even asking then the last two homework assignments were very brutal on top of feeling very alone with little help available. The professor confuscated things on purpose which goes against industry standards of trying to be clear in documentation. In general the HW is written to be confusing on purpose and current professor is not great at breaking things down for beginners (OH is only for people who have deep content questions and want to go on tangents for an hour; don't even think of asking about a simple concept). I went to many different TA OH but most of them were a waste of time and two actually made me cry. One consistent trend between TA and Professor OH was they they made me feel dumb like I was asking basic questions that were beneath them so I stopped attending.
The required textbook I would say isn’t 100% necessary but it will reinforce the lecture materials; the PDF can be found online for free. The first 10 weeks were relatively light — some lecture videos and required/recommended readings, followed by an assignment that was moderately difficult. The workload then increases dramatically with the solo project, group project, and final all in the last month. This semester one portion of the group project was given early as an optional extra credit assignment to give us a chance to get a head start on the group project. If you don’t do it for extra credit you (or your partner) will eventually have to do it for the group project, so I would highly recommend doing it early because I considered it quite difficult and a lot of work. The professor was great, very active on Ed Discussion and was available to answer questions during office hours.
Even though the class is in a transitional stage, where it's is reworked and updated by a new professor, this class is still arguably the weakest core class in the program. In the first half of the course, the class barely touches the surface of data structures with very basic homework every two weeks. The last two projects (individual and group) are similar to each other, the latest just being an expended version of the previous one. After eight weeks we suddenly jump into software design patterns and finally introduces concurrency and multithreading with Java. All of the topics are half-baked and don't really teach you or expect you to work hard on those topics.
Course content gives practical skills to be a confident software developer. Homeworks are very easy and at times feels like just like fill in the blanks on the starter code, but course content is dense and there is a lot to learn from the optional readings which are really worth in my opinion, the book is amazing and has great programming examples with best practices, which can be a great way to prepare for 596. It's a shame the project was not open ended for students to decide and just another version of the last homework with harsher grading.
Was too easy for the first 10 weeks or so, and then got way more difficult and time-consuming for the last two projects, and the final exam was a super difficult multiple choice test that didn't really fit with the rest of the course. I didn't get the feeling that Prof. Rubin had a great understanding of what we were expected to know coming into this course, or what we were able to learn from the lectures and readings in the course itself. Professor was very active on Piazza which was nice and different from some of the other core courses.
Very straight-forward course. Doesn't take a lot of time to go through the material and the assignments are reasonable. You get only one chance to submit assignments, though, so you might want to be extra careful because you can lose points for small mistakes. The last two weeks are tough (the last homework and the final project). The project is collaborative and you'll have a couple of weeks to get ahead, but don't be overconfident and leave it to the very end. There was no midterm and the final was open book (yay!).
Workload was around 5-6 hours/week for most of the course including watching lecture videos and doing the assignments, but workload really ramps up in the end for the final individual assignment and group project. Lecture videos are fine but excessive and lots of repetitive material. Data structure assignments are too easy/take a handful of hours to complete, but the last assignments that Rubin MAKES UP as he goes take ~20+ hours each. Instructions are not clear. Random tidbits of necessary information are buried in Piazza posts. Requirements are in flux. Rubin rambles in his posts and does not answer questions / is not helpful. I understand this mimics "real life" and interactions developers may have with clients/stakeholders, but as a professional (as many others in the program are), I did not find this disorganization helpful to my learning. Grading / rubrics are also not super clear for the final project - and carefully review your partner's work! ( I did not and most of the points we lost was on their part ), and for most of the earlier assignments - BEWARE hidden test cases. I think it was good practice to have so many hidden test cases though, because it makes you think like a developer to methodically think of every possible edge case. Be prepared for this class to be more annoyance than it's worth and, frankly, not teach you much. This is the only class of MCIT core where I feel I could have learned more from a MOOC than an MCIT course (591 and its assignments were WAY better). Wish I'd actually learned/retained more by maybe reading the textbook but was concurrently taking 593 which took up the majority of my study time. Hope future students get to take this with another (a REAL) professor.
This is a very informative course with relevant content and assignments that tested your understanding of the material. I found the course materials easy to digest, but the assignments harder than expected (based upon previous semester's reviews!). I expect that the course and assignments are getting tweaked every semester to be more in line with the on campus version's difficulty. The hidden unit tests tripped me up at the beginning of the course, however toward the end you get into a groove/start writing more thoughtful unit tests. The last two assignments did ramp up in time needed to 15-20 hours a week, before then, the workload was very manageable.
Improved my confidence as a programmer. Despite the light workload, the concepts I learned in this course greatly improved my program design, organization, readability and efficiency. You can take this course with any other course even if you work full time because the assignments are so reasonable. Lectures are clear and concise; some material is review from other courses such as 592 (graph theory) and 593 (understanding register memory helps with understanding concurrency). Note that the projects at the end do take a little longer and could be closer to 15-20 hours/week.
I took this right after 591. I found the course to be challenging relative to 591 since there was MUCH less hand holding relative to TA availability and being able to have pre made test cases to test your code. You have to create your own tests and there is no auto grade to fix code to get perfect score. I would have liked videos to be updated and more recreations on material. Overall I found the class to be a step up from 591, and felt I learned a lot of new things. How it will help in my career I am not sure, but overall I came to MCIT to switch careers and I’m learning!
I did find this course super helpful in actually understanding data structures and what to use when. I can understand how those who are looking to pivot to a SWE role would be frustrated that it may lack some depth and isn't as challenging as other courses. I found I spent 5-10 hours a week on this - did not really need to attend office hours until the latter part of the course. Honestly, most of the time for the hw is spent on reading the instructions (which I think are more confusing than they should be). The homeworks are fairly easy, you become comfortable with unit testing, and the solo and group projects were great in further understanding data structures and OOP. Looking back at my time in MCIT, I wish I had taken 591 --> 594 --> 593 --> 595 --> 592 --> 596. Some may say that 592 would be helpful earlier, but I don't really think it's all that necessary. I just went the path of taking classes in order. They introduced an extra credit assignment this semester -- DO IT! It is the hardest part of the final project, and you can copy and paste all of the code. Saves a ton of time, and it has to be done regardless so you might as well just do it earlier and save yourself the aggravation!
This class taught by Professor Zheng was great. Her OH was filled with content outside of the course material, thus giving us opportunities to enrich our learning by expanding outside the 594 curriculum. The assignments in 594 are challenging, but fair because our semester had unlimited attempts for submission. Previous semesters were given only one attempt, which would often make submitting assignments very stressful. The multiple attempts allowed us to learn from our mistakes, and correct them accordingly. There were also extra credit opportunities as well, and they were beneficial for the overall grade bump. Overall, I enjoyed this class a lot and learned a lot about data structures in Java.
Do not skip the extra credit which is around week 7, it is the best way to secure your grade a bit if something goes wrong in the group project. This course is changing a lot since the Rafi took over from what I have heard. All assignments have many unit tests, make sure to check for nulls, etc. The content gets harder at the end as other have said here, which is why you cannot skimp on the extra credit chance. Even if it takes you awhile, do it, you can get an A. My largest critic is all homeworks are a single submit with very few relevant test cases. If your not passing the ones they show, you most likely did not make it this far in the program, they are trivial cases. All the real cases are hidden. While it is largely a null check, and check to make sure you followed the instructions to the letter, if you miss a single instruction it can cost you big in the later weeks. A small mistake on HW8 cost me 16%, while a bigger mistake on HW2 cost me only 3%. HW8 was my lowest homework to be fair here, but it shows that they expect no bugs, and in reality nothing is going to be bug free. I think they should model all homeworks off the extra credit where they give a limited number of test cases, and the number can vary per test. This allows them to make sure you are doing your best, but allows you a silly mistake here and there that you still have to fix without testing again.
This was a tough one. Initial workload is very light. There are only 6 real assignments. In the last 4 weeks the solo and group project will ramp the workload from 10 to 25h a week. The worst thing is that you are being graded on stuff you don’t really learn in this course, like parsing a csv. The final was very hard.
Great course. It allows you to get a better understanding of what type of data structures can be used for what kinds of problems. I really wished that the course was a bit more difficult, though, as it can add more, for instance, a) extra credit questions for each assignment, and b) more real-life application/data analysis using the tools we have learned. I feel like using .csv/.txt/.json files can be introduced a lot earlier (and not the final 2 assignments as we had), and we can have the course get progressively more sophisticated in introducing other data sources. Overall, a great course!
Overall a good course. The material is very useful, and pretty easy to grasp. The assignments are generally pretty easy, but they are autograded, and the autograder is very unforgiving (you could lose 20+ points if you don't test your code enough). I feel like the first 10 weeks were very light and easy, and then there are 2 projects towards the end where the class ramps up.
Great topic well taught by professor who created the course. I did not like the teaching method of the current instructor, which is essentially a figure-it-out-yourself style. IMO that's fine for a MOOC but not for course on which you spend a few thousand dollars tuition fee.
I liked the videos created by the previous professor Chris Murphy as they were clear, concise, and engaging. However I feel like the assignments and the group project represented many missed opportunities. Assignments should help us build on the knowledge learned from the recorded lectures and dig deeper into the topics. However, they were too light (not difficult and due every other week for the most part), and I didn't learn much from them. Do enough testing on your own and getting 100% on every assignment should not be a challenge. As for the rest of the course materials, I don't think many people attended the weekly recitations as it was just too stressful to be put into breakout rooms to solve problems on the spot with other students. Professor Rubin's office hours were not helpful either in learning more about the materials. I watched them simply to get more clarification on assignments. What I am most upset about was the final group project. Simple and easily spotted mistakes were present in the test files and instructions, and it took multiple tries for them to be fully corrected. The mistakes and corrections were not publicly announced so some students were still using incorrect test files and instructions even on the due date. What a big miss! Also, the instructor team just could not get on the same page as to what they wanted to see from students. There were an overwhelming number of Piazza posts asking for more clarification and conflicting answers were seen everywhere. In addition, I know people who would wait for 2-3 hours to get face time with a TA and fail to do so because the uptick in demand for OH was not anticipated (which it really should've been seen how much more time consuming the group project was compared to the rest of the assignments). I had never seen an instructor team being so poorly organized and dysfunctional, and there was no respect for students' time. The final exam was a decent experience though, being mostly multiple-choice done on Coursera and the difficulty level seemed just right. The only reason I am not rating this as "disliked" is because it was light so it paired well with 596. Now onto actually learning about data structure on my own!
I enjoyed learning the content itself. Data structures and algorithms are definitely a fundamental part of computer science. However, I had to leverage other public resources like youtube or tutorials to understand the material. The presentation of the course over Coursera could use a lot of improvement. It was weird that the professor teaching the course was not the same professor in the recorded videos. It made the lecture videos feel disjointed from the rest of the materials. Also, there were a few points in the homework where the professor / homework instructions would directly contradict something that was said in the recorded lecture videos. Literally, the homework instructions would say something like "I know the lecture videos say to do X, but definitely don't do that". I attended office hours earlier in the semester, but ended up not going towards the end because the office hours were not very helpful. When students asked basic questions related to the homework, the professor would give sarcastic replies, if he perceived the question to be too simple or obvious. A lot of the office hours end up being long winded discussions that were unrelated to the course material and a waste of time. The course has an intense ramp up at the last few weeks which was a little unexpected. There were also a lot of instances throughout the course where the professor seemed to make things more unnecessarily complicated for the sake of complexity. Homework instructions / starter code were also poorly maintained. For example, there was a provided unit test for the group project that had bugs in it, another student had to correct it and post it on Piazza. This seems like something the professor or the TAs should have been responsible for updating, prior to releasing the homework instructions. There were also other instances where the instructions or notes would have prior semesters or years listed on the document title, which indicates that the teaching staff didn't even bother to do the bare minimum of refreshing / maintaining the materials from semester to semester. Overall, it was a decent class. Just be prepared to learn the material through external resources.
I'll share additional context in case it's useful. I'm a turtle and before 594 I took 591 and 592. I received an A+ in 591, an A in 592, and an A- in 594. In 594, there are 4 major components to grading: quizzes (~15%), assignments (~45%), coding projects (25%), and the final exam (15%). There is also an extra credit assignment worth ~5% of your final grade. I believe an A is reasonably manageable to achieve in this class, but I'll outline why I received an A-, some learnings, and some comparisons to 591/592. Firstly, the quizzes are basically free points. The class is very generous in weighting them so heavily. The assignments are overall more difficult than 591. They are also entirely autograded. I encourage you to spend as much time thinking about edge cases and testing your program as you do actually writing your program. The workload for this class is otherwise deceptively small. If you're doing adequate testing then you'll spend a lot more time per week on the class. I averaged an A on the assignments, though there were a couple times I was lazy about testing, which I regret. On only one assignment (graphs) did I genuinely feel stumped and ended up submitting knowing that there were some edge cases it wouldn't pass. I however did better on this assignment than some easier assignments where I was lazy about testing. So test! There is a solo and a group project back to back. They are a significant amount of time. They are both autograded and manually graded. The manual grading is for the design of your program. I received a B on the solo project and an A on the group project. My solo project received 100% for functionality, but the grader disliked some of my design decisions. While I made some changes for the group project, ultimately I think there's a fair amount of luck involved in getting a kind grader. The final exam was, in my opinion, quite difficult. I scored the exact median grade. There was a small curve but not enough to really make much of a difference to my grade. I think the final is written to be needlessly tricky / confusing. My biggest regret, though, was skipping the extra credit assignment. It is not a small amount of work but it is useful for the group project. Had I not skipped it I would have gotten an A in the class. Compared to 592, I thought this class was both easier in terms of concepts and workload, but if you slack off it is easy for your grade to tank. I think this class has a reputation for being "easy" but I would take the class with the mindset that it is regular difficulty, just maybe easier compared to some other classes in the program.
Definitely more work than some of the older reviews alluded to - I think they have revamped some of the weeks in this course to increase the workload. Still nothing crazy, it's all definitely doable, but this class is often recommended as a good "partner class" to others because of the light workload and I would be careful with this advice now. Overall a great class that will leave you feeling more confident coding large projects.
When I took 594, it was taught by Prof. Rubin. The course is lightweight, except at the very end where it gets uncharacteristically time-consuming. The last two projects and the final exam were much more difficult than all prior assignments, so be prepared. Overall, I liked this class. It taught very important concepts and I enjoyed the coding assignments (much more so than theoretical HWs like in 592 and 596). I feel more comfortable coding now simply because I got so much practice in 594.
projects at the end is tough, it's important to find a compatible teammate.
I loved 594! The material is super interesting, and the quality of the lectures is high. The first 10 weeks of the course are lighter, but the last 5 are quite heavy. I am aware that some students complained that the class is too easy in the past, but Professor Rubin made some great adjustments to the assignments and workload, and it paid off. As a result, I understood Java and DS on a completely different, deeper level and got way more comfortable with Software Design. The two final projects are awesome! Yes, they are heavy, but you get a lot out of them. Piece of advice, make friends in the class and find yourself a good partner early on. Essentially, this class is all about proactively investing in your knowledge! If you do extra work on the assignments, do all the readings, come to OH to learn from Professor Rubin, split the work but still learn from your partner, you will get a lot out of it.
This course was much harder and more unpleasant than was necessary, at the expense of learning important material. The recitations were not recorded and at times I couldn't make it due to my job, which is unacceptable for an online program that caters to working professionals. The actual content provided outside of the textbook were videos and a few related pdfs, which were extremely sparse and nearly insufficient to learn the course content, which itself was not particularly difficult. Much of the learning material was pseudocode or trivial examples that were not rich enough. The homework assignments were often extremely confusing. It usually took more time to figure out what the professor was asking than to do the assignment itself. For the two final projects, which took up most of the time in this course, reading the encyclopedia-length instructions carefully was the second most important factor, only behind a high tolerance for tedium and frustration, as with everything in the course, it was much more nit-picky and confusing than necessary. The final exam was quite unpleasant, as questions were poorly constructed and many were at a different level of difficulty from the material or were not covered in the course at all. It is a shame that with all the confusion and frustration with how the course was delivered that learning important concepts like design patterns became an afterthought.
I wouldn't advise thinking this course is easy. It requires good understanding of how data structures work and contains essential assignments that are pretty common interview tasks. It will give you a basic understanding of data structures and how and why they can be used. I would review the course materials twice or thrice for online assessment and interview preparation.
The course had lots of potential and I thought fell short. Things really ramp up the last few weeks with a large solo project, group project, and exam back-to-back. The weekly assignments and quizzes are too easy to prepare you for some of the difficulties at the end, and the exam doesn't accurately reflect what was taught. Overall the weekly content of the course is easy - but too easy for what's expected of the evaluation at the end. I got a good grade in the class and I'm still not sure I fully understood all the material. Office hours and recitations were not helpful either.
Some of the homeworks are difficult and time consuming, but for the most part its a low work load class. The lectures are pretty good, but the recitation format leaves a lot to be desired. The final two projects are fun.
If you have programming experience, this class will likely be a lot of review. HW assignments are not every week and do not get very difficult. Overall a pretty easy, manageable course that covers relevant topics. You can succeed in the class without doing any reading, but then you will not have a very thorough understanding for what you'll need in technical interviews.
The other reviews are pretty accurate. It's easy but interesting: (1) The first 10 weeks are extremely easy. Everything included, I don't think I ever spent more than 4 hours on the course. The last 4 weeks are medium difficulty, due to the last homework, the group project, and the final exam. The material also becomes a little tougher (but not that tough). (2) I wish they would consolidate the first half of the course (on data structures) into, say, 2 fewer weeks, and then spend more time on software design patterns. The lectures only cover 5 patterns, and you only get to implement 3 of them in projects. It seems like an important topic that deserves more time than it got. I'm going to spend some time this summer going through them a little more.
This is no longer an "easy" class as several older cohorts and reviews claim. Coming into 594 right after 591, I was expecting a bit of continuity and becoming better at Java -- Java programming assignments, learning about data structures, and SDLC / programming best practices in a similar format. While my Java skills have certainly improved because of my own efforts, this class could have definitely be structured better and was not worth the money. For one, unlike in 591, the recorded lectures are from a previous professor, who left UPenn over 2 years ago. Early on in the class, there were confusing instructions in assignments that say to ignore what was taught in a lecture and do something else. Instead of teaching the wrong thing to students, why not just re-record the lectures with the right material to begin with? Second, the Professor's office hours are largely a waste of time compared to how Brandon runs his in 591. Similarly, TA recitations aren't as good as they can be structured (like in 591) and the coding exercises aren't recorded. You would think that an online course would make the most of the few instances of live meetings and make those available for those who cannot attend. Third, the assignments are decent to get your feet wet with data structures but some of them have 10s of pages of arbitrary requirements and all have a strict, 1 attempt submission policy. Expect to spend most of your time on homework making sure your code complies with their requirements instead of applying your learnings about the data structure, which is a huge miss. All homework but two have hidden tests in Codio. For the tests that are visible, they are the most basic, so you are on your own in trying to figure out what other cases will be covered. The solo project and group project will take a considerable amount of time towards the end of the semester. I enjoyed the solo project once I figured it out but again, be ready to address 20+ pages of detailed and confusing requirements / instructions. These are the only two assignments that have a human review / grade them so that may or may not help you. The final exam, while open note and open book, is unnecessarily tricky and doesn't tie in to lectures or even homework. Some questions expect you to have taken 592 to be able to solve them, which is unfair. While I'm glad there is only 1 exam in this class so the damage to your grade can be contained, it feels poorly designed to test what you have been learning on during the semester. Data structures are a broad topic as well as programming SDLC and best practices -- coming up with a 114 point final with 19 questions with varying point assignments doesn't do all of those topics justice.
I will start of by saying this course was very well managed by Prof. Zheng and the TA's were amazing and provided a huge value addition to the course. The course material itself is a little weak. This course felt too simplified. While we did learn of the data structures but the homework did not really help reinforce concept but just felt like busywork. It is very similar to 5910 homework in that you are given starter code and need to fill out the methods. The last two assignments, the solo project and group project, were much more on par with what I expected the course to be like and I actually hope that they transition homework to be like that, so there are fewer assignments but each assignment is more expansive. I learned more with those two assignments than any other thing I did in the class. Lectures walked through the data structures and were overall okay. There were some data structures that were just talked about but we never really saw there implementation or use in real world projects especially with more difficult data structures like red-black trees and AVL trees as an example. There were also some data structures that should be added but were not present. The course also covers another very important aspect of software development which is code cleanliness and design patterns. I was happy to see this covered and that it was used considerably in the last two assignments. I wish this was introduced earlier and that we could get more practice implementing these principles throughout the semester rather than at the end. The final exam came out of left field in difficulty compared to the rest of the course, so be prepared for that. It was heavily curved/they gave back points.
This is a good course that gave me the foundation in data structure and built up my confidence in Java. Chris Murphy's videos were clear and concise. But the course somehow had a reputation of being too easy, which I found not entirely justified. First of all, the last two assignments were actually very comprehensive and time-consuming. The topics it introduced were also quite adequate. And I kind of appreciated the relatively lower pressure of the earlier part of the course, which allowed me to apply the concepts I learned from this course and practice questions elsewhere online at my own pace.
This was the worst class I’ve had so far at MCIT (I’ve taken six). They’re still using lectures from Professor Chris Murphy, someone who left MCIT 2 years ago. It is totally inexcusable that Penn Engineering hasn’t rerecorded lectures. This class was way too easy. Homework (at the beginning), took very little time (maybe 1-2 hours). I zoomed through the lectures really fast. I found the assessments didn’t force us to learn the concepts very well. The final projects were boring (e.g. build a data pipeline that reads a CSV). I think we could have done something more fun/creative/inventive, not something I do for work every day. Recitations are not recorded (at least at the beginning). As a result, I could not attend a single one. This makes literally no sense for a program that has working professionals. The whole point of MCIT was that there are supposed to be very few live commitments. The class uses one-shot auto graders with very little feedback. Better hope you did it correctly + thought about the hidden tests. There were some peer reviews, but they weren’t very helpful or extensive. In short, when you take this class, the only thing that will be looking at your code is a machine. The assignments involved deciphering cryptic instructions in 10 to 20 page pdfs. Things would be buried deep in paragraphs. Additionally, the assignments often had conflicting information versus what was in the lecture material (see paragraph 1). This class is in Java. As a result, all the memory management stuff is abstracted away. This doesn’t make any sense. In order to understand how a data structure works, you have to understand how the compiler allocates memory to it. It would make way more sense to teach it in C or C++ (like the end of 593 where we had to build a linked list). In short, this was a waste of money. I would have been better suited to gaining all this knowledge from a free MOOC or a series of YouTube videos.
Based on past reviews, I can say that the 594 instruction team has been working hard in improving this class. FAQs were added to some assignment instructions that were questions/clarifications from previous semesters. I also saw new material coming from a course development assistant for 594. As a result, I heard there was less confusion with assignments and the projects this semester compared to previous ones. This is not to say that the course is not challenging. The last assignment and the group project definitely take up a lot of time. The fall semester worked out well for the last assignment as it falls during the Thanksgiving break, allowing me extra time to ask questions and perfect my program, which greatly helped me in tackling the group project as it is very similar in structure but more complex. My only regret is not taking advantage of recitations, which are additional programming challenges/quizzes that are included in each week's content. I feel I would have benefited from the extra practice and collaborating with peers. The last piece of advice is to take advantage of the instructor's office hours. Professor Rubin may not seem to be the most approachable professor, but he actually is quite helpful/has a sense of humor (whether you find it humorous or not) & an adorable cat that appears on Zoom sometimes!
This class is basically a GPA booster. A lot of the topics are a (more superficial) repeat of concepts taught in 595 and 596 so there are not that many new concepts to learn here. Data structures is a critical aspect of programming so I think having such a superficial class is doing a disservice to MCIT students.
Best class in the MCIT
A lot of the early assignments are pretty boiler plate. You get a stub and need to complete the method. If you have a good handle on the data structures presented in the lecture, these can be done in as little as an hour. I would typically spend more time trying to come up with a set of thorough tests than I would writing the methods being tested. A few of the later projects open up in scope. I thought they were enjoyable to work through.
I took this course concurrently with 596, and it was a breath of fresh air every week. Although some students really took issue with the hidden tests, I didn't think they were wildly unreasonable. I liked the straightforward lessons, the targeted homework, and the how coding focused the course was. The projects were fun, and the grading was totally objective (again, in contrast to 592/596). I wish this course had taken a slightly more granular look at data structures (and maybe looked outside of Java) but overall I really enjoyed it!
Hope this course will be updated to be more useful for future students. It is too easy with minimal homework and does not feel like a legit university level course.
Not a difficult course, but the material is very important for technical interviews (especially the first half of the course) so it's important to understand these concepts well. Most of the weight as far as grading is on the assignments, which are due every ~2 weeks that takes about 5-10 hours. The first several are mostly about creating a data structure (like a Linked List or Graph) from scratch although the last few are more applied, including the final group project. The assignments are autograded so if you follow everything in the instructions you should do well for each assignment - but pay special attention to edge cases (e.g. making sure to check explicitly for null values or values out of range, etc.)
If you're looking for a lighter workload for a semester for whatever reason, this is the class. Up until the last few weeks, the workload is minimal, from 2 to 4 hours a week max. The homework assignments make up the bulk of the grade and are relatively straightforward provided that you thoroughly test your code before submission to the auto-grader, so spend more time on the assignments and you won't have to worry about the final exam at all. The last assignment (11) and the group project will take substantially more time than prior assignments (10-15h?), so plan ahead for that. Extremely easy weekly quizzes are worth 14% of the final grade, more than the final exam. I thought parts of the final exam were much more difficult than the rest of the class, and 'open-book' doesn't help, but a curve was applied. From a content-perspective, I thought the class was somewhat interesting, but you can tell it's in a transition phase from one instructor to another. The last few weeks of content seem incongruent with the first 2/3. The introduction to threads in particular seemed extremely superficial.
The reviews saying this course is easy are outdated. Keep that in mind. It looks like the professors took feedback from 2021-2022 to heart and decided to give the sadists the pain they were looking for. I found this class unnecessarily difficult towards the last month. About 35-40% of your final grade is determined by one month of work (solo project, group project, final exam), each of which might take the individual anything from 20 - 30 hours to prepare for (exam) or execute (projects). It wouldn't be so bad if that was all you needed to focus on. But no, there are still weekly lectures and quizzes and recitations as normal, those taking about 6-10 weekly. When it comes to the subject matter, I appreciated the class. But in terms of busy work, I found it frustrating. The fact that extensions had to be provided to the entire class a few times is a sign that the workload was not seriously considered while the syllabus was being created.
Would have rated the class "Easy" instead of "Medium" but the last month of giant group project + final exam 1 week after is brutal. People who have taken 593 say this last month is even more brutal than the last month of 593. That being said, the class is relatively easy until that last month and it is quite useful for becoming a better software developer. I had about 1 year of self-training dev work (Udemy) before starting MCIT and 594 definitely improved me a ton, I'm not just coding along videos anymore, I get much more deeply what's going on in any given framework (e.g. .NET) or library (e.g. React). Highly recommend the course, just not the last month. The last month sucks.
The lecture videos are the most succinct and concise ones in any of the courses I’ve taken so far. The assignments are not difficult and everything taught in the lectures is sufficient to do well in the assignments and the project. Pay close attention to inputs as hidden tests will check those rigorously on the early assignments. The course picks up in terms of workload in the last one month with a solo project, group project and the final exam. We had an extra optional assignment (HW7), we got to reuse the code for the group project. It immensely helped to do this optional assignment. Start the solo project as soon as its available (took about 15hr including thorough testing) and the group project took 15hr as well. The projects are awesome for applying software design patterns and principles.
This class was excellent! It is the first class from the first 3 I can actually recollect what I learned and truly feels it achieves what it is intended to do. I genuinely know about data structures and basic software design. The required course work is light but don't be fooled, the best approach is to actually practice each week's content through leetcode exercises and learn some of the nuances of each data structure and design pattern as the book explains. This is the perfect environment and structure to do interview prep. obviously, if you have learned these data structures before you will be bored for most of the course but if you haven't, you are in for a treat. The last third of the course had great material, super interesting, but I hated the way the assignments were broken down. One individual and a similar group one. The individual one was really hard and harshly graded but was interesting. I wish we spend the rest of the course just refactoring that one. Whoever thought doing a group assignment in a program where students are barely taking one class with full lives including children, FT work, and sometimes other classes, really needs to reconsider. Expect to easily get a teammate who has never used version control in their lives and copying and pasting pieces of code hoping they work plus having very limited bandwidth. Yes, it was as awful as sounds. If you can, opt for this group project to be individual unless you already know of someone you want to work with. This project in addition is very poorly explained and there were new requirements for it daily in Piazza so it seemed like it was set for failure as you need to manage the poor communication from the instructors with communicating with your teammate. I learned so much from the first 2/3 that try not to focus on this last part but it was pretty bad although with great content. MCIT should consider switching the last third of 591 which throws random disconnected programming concepts with the first part of 594 so you can have an intro to programming and data structures class followed by a system design / object-oriented programming course where you are designing and refactoring your programs the entire team rather than only in the end. The last part of 591 was redundant with parts of 594 and some concepts were barely touched and needed more focus (e.g. testing).
I like to view this class as a continuation of 591 programming in java. There were weekly programming assignments that had descriptive specs to help walk you through your project. The assignments were project skeletons with comments letting you know where to code. The downside of this course is that you do not learn about Test Driven Development, as in how to do it well. There is mention of "heavily test your code to be sure you'll pass all tests", but for beginners that have never practiced TDD (outside of another very brief introduction to TDD in 591) it can be hard to know if you are correctly creating tests that are addressing ALL possible scenarios and cases to avoid bugs or mistakes in your code. You are only permitted to submit your code once to the auto-grader that has hidden tests and unfortunately if you made even the slightest mistake in your code it can be detrimental to your grade and even drop your score to a C or below. If you make mistakes they will be painful, but you definitely won't forget to check for that mistake as you progress as a programmer. I wish the course was set up to allow you to have at least one more submit, if not unlimited submits, to promote learning and figuring out where your code went wrong without penalizing students for minor fixable errors. Even though there were a lot of programming assignments I felt the difficulty and length of the assignments themselves were manageable on a weekly basis. There is a group project at the end of the semester where you will work with one other programmer. Finding a responsive and collaborative partner is key or all the work will fall onto you and it is a much larger project than the rest of the course.
The lecture itself is clear and self-content. However, I think the workload is not enough for truly grasping the concept. I personally choose to do leetcode along with the coursework in order to get myself familiar with the data structure introduced. And for students who cannot make it to attend live recitations, recordings are not helpful at all. I also gave up watching office hours quite early during the semester.
This course is run well, but requires some self motivation to fully get everything you can from it. While the readings are not required to get a good grade, and unit testing can be avoided while achieving high assignments scores, I suggest commiting to both. These activities, with an emphasis on thorough unit testing, will likely lead to similar or marginally improved grades but will push your understanding of the material deeper. One final piece of advice, start the group project, and final individual project early. These assignments are both very large time commitments that have no real comparison to earlier assignments from the perspective of time spent. On the group project I estimate that I put in about 25 hours total, and my partner likely put in the same. The individual project was 18 hours start to finish. For the sake of comparison, I put in on average 3-5 hours on each assignment prior.
A "choose your own adventure" course. You can get by with just a few hours of effort per week. If you want a more in-depth treatment of course concepts, the textbook and OH are available. As someone without a software background, I found the materials on architecture and design to be revelatory. I learned a lot.
The lectures were high quality and clear. The assignments were not too difficult until the two projects at the end of the course. The projects were five times as time-consuming as the other assignments and you were not well-prepared for them. Make sure that you test early and go to office hours because they are extremely confusing and meticulous. I felt that the group project was unfairly graded and heavily weighted on things that we did not even remotely cover in class. The final exam felt like mostly trick questions and I found it insulting. My grade was fine because I had high grades until the projects, but otherwise it would have been very stressful.
Important content. Light workload each week allows you to really get familiar with the concepts. Lecture videos explain the material in a digestible way.
I am rating the difficulty as Medium because the first 12 weeks of the course were considered easy, while the last few weeks were very difficult. In terms of the first 12 weeks, your projects are given starter code, so essentially you're just filling in the methods needed to run the program correctly given the data structures we learned for that respective week. However, the last few weeks were such a whiplash. All of a sudden, you're expected to code HW11 and the group project from scratch. What made these assignments more difficult was the fact that we never received any sort of practice on how to implement software designs and there were no recitations to help with how to approach them. I find it counter-intuitive that the professor would make the easier assignments have the most lectures and instructions on how to do them (the assignment instructions literally tell you what you need to do high-level wise), while the difficult assignments have sub-par lectures and ambiguous instructions (given no direction on how to approach the design). Although this does not pertain to me specifically, I have heard from other students and found it unfair how they would lose a lot of points on the first 12 week's assignments because of the hidden test cases that would not be explicitly stated in the assignment instructions. In terms of Office Hours, I found it to be useless because the Professor does not go over material pertaining to the course, but more so to the will of the students where they tend to just go off tangents. In addition, TA recitations are not recorded. I prefer if TA's follow the same model of recitations as 593 and 595; those were much more useful and helpful. I believe there may be some discrepancies between lectures and assignments because the current professor (Professor Rubin) is not the same professor in the lectures. Overall, I would say this class was interesting and certainly helped me learn data structures; however, based on how lectures were structured with the assignments, it has made me not enjoy the class as much as I would like. I would suggest not taking this class with this professor; however, it seems like every class is the same despite the professor, which is a shame compared to how undergraduate courses were structured.
In general, I enjoyed the material covered and felt it was delivered effectively. However, I felt that the work load was heavily loaded towards the end of the course.
Pretty good course. However, I think it just scratches the surface on data structures and I will need to do some self study before doing technical interviews. That being said, it is a great intro to data structures if you have never taken a course on them.
I took this concurrently with 596, and working on this class each week was a relief. I didn't find this class to be quite the cakewalk other reviews here imply. Assignments could be fairly time-consuming, and properly testing for edge cases requires a meticulous approach. I got a perfect score on the extra credit assignment, which turned out to be a big-time saver when it came to the group project at the end of the course. I didn't find the solo project or group project to be as rough as I read here. 20 hours for the solo project in total and maybe 30 for the group project, spread out over several weeks with no other assignments due. It was fun to build something somewhat complex from scratch. There are 8 HW assignments, and along with the 2 projects that's 10 graded assignments total, not including the final exam. Final exam was surprisingly difficult, don't skip studying. Open note isn't as helpful as you might think. I didn't attend any OH or recitations, so I can't comment on the quality of Prof Rubin or the TAs.
This class is confusing to review. A lot of the other reviews here mirrored my experience. You'll note that a lot of my favorite parts of this class were also negatives. Pros: - Professor Boon is wonderful. He's dynamic and interesting. He participates a ton on Piazza. - This class covers a ton. It's really an OS survey course where you dip your toes into a ton of different topics. - I thought the projects were interesting. I especially liked building a mini-multi-threaded web server. I thought it was a great introduction into multithreaded programming. I thought the event-driven asynchronous framework was a totally different way of programming for me. - The TA staff was wonderful. They were experts at pointing me in the right direction on homework without giving away the answer and depriving me of the learning. - Working in C - This class forced me to get better at memory management and Valgrind. I still never used GDB, although I guess I'll be forced to at some point. Cons: - I didn't like his prerecorded lectures that much. I thought sometimes they suffered from "Wall-Of-Text" syndrome. I thought the open-office hour recordings were more dynamic. I honestly think the course would have been better if they had just set up a camera in Boon's on-campus class. - Class touches too many disparate topics. I would have liked to have gone more into depth in a few specific areas as opposed to getting cursory knowledge about a bunch. - The homework often had little to do with the lectures. Additionally, much of the lecture content had no reinforcement via programming assignments.
This course covers 3 broad areas: 1) Process management - how does a computer run multiple programs at the same time? 2) Memory management - how does a computer run programs larger than its own memory? 3) I/O - how does a computer interact with outside inputs like mice or keyboards? Overview: Some weeks will be relatively heavy with work, but nothing like 593. In fact, the middle 3-4 weeks are really light. There are like 8 homeworks to complete over the course of the semester, but only around 3 take between 5-10 hours. The rest I was able to complete in just a couple of hours. Coursework is exclusively in C. Projects revolve around building a terminal that can accept Linux commands and creating a multi-threaded web server. Pretty cool! Suggestions: My biggest suggestion would be to skip the recorded lectures altogether and just watch the recorded office hours and lectures. They are not optional (unless marked). You will not pass the exams without them. In fact, many of the exam questions were pulled directly from this material. During this semester, exams were open book, but no longer open internet. Although that certainly helped, I recommend not trying to rely on searching for every question among the course material during the exam as you'll likely run out of time. My experience: This was not a course that I thought that I would enjoy. However, Professor Loo's passion is palpable and it's an entirely different vibe between the recorded videos and the live lectures. I waited until reviewing for the midterm to start watching the live lectures and I highly regretted it. The material is way more fun and understandable live. Professor Boon gives some excellent explanations and is great at answering questions. TAs for this course were awesome too. All in all, if you reflect on how all of the pieces from the semester fit together, you should have a strong foundation to understand what an OS is and how it works. I actually find myself programming differently because of the understanding of the underlying hardware gained in this course. There were a number of folks who found the homeworks pretty dry, but I thought most were a lot of fun and illuminating! All in all, you'll get out what you put in, but this course is foundational for programmers!
Prof Boon Thau Loo is great and genuinely cares about his students. Open book exams this semester which made exam period much less stressful. Assignments force you to learn the material. I found my approximate workload for assignments unpredictable, which made my weekends difficult to plan, but the course staff seems to be generous with granting extensions. Some assignments I only needed 2 hours, others 10 hours. Overall class grade is curved so pretty stress free overall.
I'll start off by saying that I didn't have any engineering background before starting MCIT. I found this class to be easy and very light in terms of the workload. Assignments were due every 2 weeks and it would usually take me on average 6-7 hours to complete each one. Starter code was given for almost every assignment and we didn't have to write a lot of code at all. My C knowledge has not improved from this class. Lecture slides were also not done well. They were too concise and skips a lot of explanation. I had to review them twice to feel comfortable for the exams. Professor Loo releases the office hours and recitations from past semesters which was helpful when I needed to front load the learning. They also started releasing recordings from his on-campus lectures a few weeks into the semester. The intent is for these additional videos to supplement our learning. However watching all of them each week would just take up way too much time and I disagreed with this approach since the actual lecturer content should cover the basics and students should not have to fish for important knowledge from 5+ hours of additional recordings each week. The 2 exams were non-cumulative, fair, and tested on our understanding of the various topics taught. Everyone felt like they had a lot more time than needed to complete the exams. While the average for the first exam was low, I believe a heavy curve was applied in the end as most people I know got an A. I do want to mention that the TA team was fantastic in helping us navigate through the sometimes very confusing assignment instructions. Overall I'm disappointed about how little I learned in 3 months and there is a lot of room for improvement.
It is a little difficult to review this course. The lectures cover a lot of content, in a way that is fairly abstract and doesn't go into many details on implementation. Furthermore, it is difficult to discern what information is "important" and what information is "extraneous" in the lectures. For me, when it came time to apply concepts for homework, I found it very confusing. Even though I could apply the concepts and get the code to work relatively easily and honestly with very little work, I would come out of it feeling like I didn't truly understand what was going on or why it was working. Although empirically speaking from the HW and exam results, I have learned the material for the course, I still feel lost. I feel like maybe doing some smaller exercises to practice using the system calls or something would be helpful. In general I just think that more could be done to reinforce the knowledge through practice and application, rather than simply dumping it all on us and moving on quickly. In the end though, despite how confused I often felt, I got a good grade in the course and did not spend all that much time on it. So take that as you will.
This class and 593 have been my favorite so far. (So maybe I'm just a computer systems nerd :D) I really liked the material and felt that the way it was taught was sufficient to succeed. Prof Boon Thau Loo is a great teacher and the TAs were very helpful. The programming assignments were challenging, but not overwhelming. They built on each other so that you were able to add onto concepts from the previous week to advance your understanding. If anything, I wish we would have gone deeper into the topics.
There are some great things about this course and some not-go-great things. GREAT: Prof. Loo is the most supportive and engaged of all the professors in the MCIT courses I've taken (all the core courses). There is a lot of TA support, and it's usually not hard to get help if you're stuck on a project, as long as you start early. Prof. Loo's explanations are very clear in office hours. Office hour recordings from prior terms are posted. Both recommended books were v. helpful. WHAT DIDN'T WORK FOR ME: The quality of the video lectures is poor. I didn't understand some of the content from the first part of the course and had to supplement extensively with outside resources (beyond the recommended books). To me, the videos lack context, and watching them is monotonous. I would imagine that Prof. Loo is an effective lecturer in person, and I wish they would post videos of him teaching on campus instead, as it would probably improve instructional quality and student interest in the content. (OOH recordings definitely help clarify things, and occasionally, he treats a topic from A-Z in OOH, but not always.) Although I learned from the projects, I wish they were more rigorous. Each project has one or two challenging components, but not much beyond that. My C programming skills didn't improve as much as I had hoped. Toward the end, I grew to appreciate some of the engineering that goes into memory management. But, I spent a lot of time throughout the semester feeling quite frustrated that I wasn't learning much. I'm glad other people feel differently.
I found this class pretty difficult. There is a lot of different material that can't be convered in complete detail so you have to memorize facts. I enjoyed the programming aspect more than the OS theory.
I got an A+ in this class, but I don't think I really learned anything. As others have said, the lectures are terrible, and the office hours are more worthwhile (though still not great). The homeworks did not reinforce the material for me. In most instances, you just keep trying something a little different until the program works, and then when it does, you don't really know why it worked. At other times, the program works on your personal computer, but the autograder docks you for something, so you have to guess what's going wrong. Sometimes this can take a long time, which was incredibly frustrating, and other times I got the answer almost right away, and only spent 30 minutes on the one homework. I think that if the course took more effort and/or was graded more harshly, people would be up in arms complaining. As it is, though, I think 2/3 or more of the class get an A or A+, which makes them gloss over the fact they didn't learn much.
Pretty light workload for most weeks. Some of the programming assignments are quite challenging, but there is a ton of help available through TA and professor office hours. Projects are autograded and you can submit as many times as you want. Professor is super engaged and always answers questions on Piazza and in office hours. The tests are hard and require a deep understanding of the material, which is hard to obtain from just watching lecture videos.
I was very bored for most of this class. The concepts are important to learn, but I felt that I spent a lot of time during the assignments working on annoyances, rather than focusing on the core concepts. For example, one of the assignments on establishing a 3-way handshake using TCP (an important concept in itself) required flushing stdout after every print statement, or the autograder test cases will fail. Programming challenges are a good way to learn, but these annoyances did not reinforced my understanding of the module's concepts. The other thing that irked me is that there were two versions of lectures for every module - a scripted version, and a recorded live lecture; the latter usually being better. Why wasn't this curated into one version? I hate to say it so bluntly, but I expected better quality of deliverables from an Ivy League.
The workload itself is light but the course is nonetheless very challenging at times. There are three main projects, each broken up into multiple parts with each part due roughly a week after the previous. I think there were also extensions given for nearly every project that were announced pretty last minute, so I'm not sure if you can count on it but it was very helpful for a few. They are also autograded and you can resubmit as many times as you want. The first two had starter code but even for the last one the solutions themselves weren't that long - I would guess 40-70 lines of code each. It's just that it takes some time to figure out which lines to put and where. If you haven't read Linux man pages before, expect to spend some time really getting to understand the nuances of system calls. The exams were definitely challenging and they required a more in-depth knowledge than what you can glean from the lecture videos, which were also pretty light, less than an hour for most weeks. Probably some of the hardest out of the core courses. The professor is super helpful though. He's very active on Piazza and his office hours complement the lecture material well. All in all, it's a good course, but it does sneak up on you because the workload seems light but the topics themselves prove to be quite challenging.
Really like the way Dr Boon teaches, he also gives "highlight video" records which are really helpful complement material the TA also helps a lot on the homework, recommand future students attend it before starting hw
Professor Boon is an amazing leader, always ensures his team gives a positive and engaged learning environment for students. Top of the line support and engagement. Course content is dense and conceptual, exams do require good comprehension of concepts and hard study, but are very fair in the sense that you know what to expect from them. OH are great and prof would explain anything at length. Doing 593 extra credit C assignments is an excellent way to prepare for the homeworks, as those requires confidence with C, not that is hard per se, but assignments require a deeper level of understaning of what is going on in the OS, having gaps in C would get in the way. Understanding system calls at depth in the textbook or man pages is a must.
This is one of the best organized core courses and the material builds very well off 593. It is well designed to encourage independence, including unlimited autograder submissions with some feedback, good TA walkthroughs/recitations of projects, and documents listing common project mistakes allow you to do your own debugging, which is empowering. The assignments are generally interesting and helped me to feel confident as a C programmer. In the middle, Project2 is extremely difficult and I wish I had asked for more help to work on it instead of feeling so frustrated; it is tricky and involves running multiple processes. However, Project3 involves building a server and is really cool to work on. There is not very much work and the lectures have excellent examples but the material is abstract and challenging so much of your time on this course will be spend studying and understanding the more complicate topics in memory, process management and concurrency. Prof Loo is supportive and consistently has a great TA team. The exams are tough but don't take as long as some others in the course and you are allowed a note sheet which helped my anxiety a lot and made me feel more prepared. I liked this course and felt I learned very practical things like working with Linux command line and C system calls.
This has been my favorite class so far. I've only taken 591, 592, and 593, but the TA support in this class and Professor Loo's enthusiasm about his subject really made this class awesome. I agree with the other commenters that the pre-recorded lectures are a bit dull at times. But just go to Professor Loo's office hours, watch his recorded OOH recordings (most exam questions come from these), read Andrew S. Tanenbaum - Modern Operating Systems, and you'll do great in this class. I appreciated Professor Loo creating an optimal, low-stress environment in his class. All the assignments have unlimited submissions, Professor Loo often extends deadlines, and all his exams are open-book/open-Canvas. I truly had a wonderful time in this class, and I am glad to have learned so much from Professor Loo.
I've taken 591-595 so far and I have to say I learned the least from this course. There are many small things wrong with the lectures and homework that overall make it very mediocre. Because you have unlimited submissions to the autograder, basically everyone has a 100% HW grade, meaning that grades are decided by the difficult open-note exams. There are also several issues with the autograder, meaning I spent about hours on end modifying code so it would pass the autograder even when it was working on my machine. I don't think I learned much from the homework, especially HW3 where you basically are just following a flowchart.
This course is very abstract . The lectures slides is short and simple but the exam will test you on concept that is not covered in the slides. Some of the materials are poorly explained that your only hope of understanding it fully is to rely on youtube or google. The professor is a nice person and are generally helpful in office hours. The use of programming language in C can be frustrating if you don't have a good foundation in it, but overall the programming project in this course is not hard.
Prof. Boon is the best! The content is medium difficulty but, as long as you do your best and attempt every assignment and exam, you are promised nothing less than a B. You'll learn to use GitHub if you've haven't before and learn about virtual machines and containerization. You get 3 attempts to do the weekly quizzes and there are weeks with no homework. You were allowed a sheet of paper with handwritten notes in both sides for the midterm and the final was open-book (and open-everything, even Google search). I just rated as Neutral because I'm not that fond of systems, but if you are, you will really enjoy this class.
The workload felt super light compared to some of the other core courses. I paired this with 596 and found it to be manageable. I enjoyed the content of this course a lot. I thought the topics were super interesting and the programming assignments were a ton of fun to work on. You'll also get a bit of exposure to git and programming in a Linux environment. I think the lecture videos need some work. Highly recommend watching the live lecture recordings in additional to the other module lectures. I took a lot of handwritten notes, which made watching the lecture content very time-consuming, but also came in handy during the exams, since the exams are open-note.
Taking 595 right after 593 worked out for me. The book (Modern OS) was a good complement.
My least favorite core course. Lectures could be improved if more graphics and illustrations are provided instead of just words.
There is this unpleasant duality between lecture videos and office hour recitations. Especially in the exams, it seems some questions are overfitting way too much on details (not the big picture) of the office hour highlights. Also, very harsh grading of the questions (they expect certain aspects but dont clearly ask for it). In the assignments, I didnt learn too much. It was rather pleasing the autograder until you have 100 percent. Not worth the money you need to spend on it.
I have just completed 5950 and can say that alongside 593 it's my favorite course so far. The amount of knowledge one can get here is 100% proportional to the willingness to study and the course treats you as an adult who knows what he/she wants here: good grade alone or accompanied by deep knowledge. The course has been designed also to have some fun and not be overwhelming with mandatory program. It gives you a head start into the systems and then you can really search for additional chapters, try it yourself and ask questions that might be even out of the scope for the course during Professor's office hours. Additional videos with previous semesters are essential to watch for thorough understanding of the material. Professor Loo explains everything in a clean manner and is very responsive. I wish it would be at least 2 semesters as there're a lot of topics to cover and to dig deeper into.
I really loved the content of the course on a whole. The course NEEDS more assignments though. The 3 major assignments you are given over the length of the course could probably be condensed into about 5 weeks or less. They are very short and all amount to maybe 100 lines of code each tops. The current assignments need to be fleshed out a bit further, and they need to at least 2x the number of them, and possibly add a larger capstone project too. You just don't really feel like you did anything but a couple small toys. Its stuff that if you were learning on your own, you would pump out in afternoon as a demo from a tutorial. The CIS versions of the course have you do a large project called PennOS and/or PennMMU. These seem cool and would really add weight to the course. It is incredibly disappointing that we seem to get a watered down version in MCIT. Why do they think we could not handle the more interesting and complex assignments? I sure could have. Thats what I thought I was paying for. Still, I enjoyed the content. I did a lot of extra reading and playing around with the various Linux APIs on my own time. It was useful contextualization and Boon is a great lecturer. I just wish I had more opportunities to dig in and get my hands dirty as part of the course. The exams were also very easy. I have less of a problem with that though :)
I don't find that I know much more about computer systems programming after taking this class. The lecture videos were not well put together, and I found a lot of it to be ambiguous. He used a lot of terminology that wasn't previously explicitly defined, which I found to be frustrating. Professor Boon's recordings of his open office hours from his on-campus class were the only things that make sense to me, which I feel like truly highlighted the stark differences between the quality of the on-campus classes and the online classes. It feels like there's so much more support and attention from the professor for the on-campus students, and online students get one hour a week. The homeworks are such a big jump from the lecture material. I spent hours and hours just trying to understand how the lecture material translated to what the assignment was asking. If there weren't unlimited submissions to the autograder, I would have failed every homework. Exams were less stressful because they were open book, but the level of detail required to get full points felt unfair when the lecture videos themselves were so highlevel. I did well in the course not because I understood the material or had a high mastery, but because the course is designed so that it's really hard to not do well as long as you put some level of effort it.
Pros: 1. The project is a great way to solidify knowledge in c and system programming. 2. Professor and the TA team are V. responsive. Cons: 1. Too many distractions and irrelevant content.
This class touches some super complex stuff going on in the computer. There were some weeks that things clicked right away and I forgot I was in this class, and some weeks that I needed to watch the lectures and office hour highlights 3 times. The assignments are in C and generally straight forward, but they were definitely challenging to get at first. Assignments are unlimited attempts which honestly all classes should be.
I was not very interested in the topic nor did I like programming in C. The professor, who happens to also be the Dean, is absolutely amazing. He is very approachable and loves working with his students. He set up his course for students to succeed by granting us unlimited assignment submissions and open note/book/internet exams. This greatly reduced student anxiety/stress and allowed for a better learning environment where students didn't have to be afraid to make mistakes. There were very few project assignments and most happened to be a continuation of a previous project.
Very interesting and useful class, you learn core Operating Systems, Networking, and general command line skills. Boon is a very engaged professor, very helpful in office hours. The workload isn't too heavy, but the lectures are dense and need to be watched a few times to fully understand, the homeworks are tricky, and the exams very detailed. This course has some of the lowest average exam scores (only 596 is lower for the core), but there is a bit of a curve at the end. The homeworks build on each other and have several parts, so sometimes part a is very tough to get running, then part b or c are pretty simple extensions of the previous homework.
HW assignments were not too long and not too much work but most needed some clarification to really understand. TA assignment recitations are worth attending as they fill in the gaps. Assignments are auto-graded with unlimited attempts so it is absolutely possible to get 100% on each one. In my semester every single assignment was extended past the original due date, not sure if this normal for other semesters. The TAs say you should learn GDB to debug the assignments and I agree -- some assignments were like a black box, and GDB would have been very helpful. However, I still never learned and was able to get by with print statements, so it is possible to avoid GDB but it will be more of a headache debugging. The HW assignments sometimes didn’t align exactly with the current week’s lecture material, so for some I’d suggest skipping ahead for a better understanding, and for others I’d suggest learning only what's necessary in the current week to complete the assignment, then finish the rest of the material after. Canvas quizzes every other week were easy, each with two attempts. The midterm and final exams were straightforward but relatively difficult. Both exams were open notes/open book, however they contained open-ended questions so you need to completely explain for full points. Watch the pre-recorded Live Lectures for a much better understanding of that week’s material. The textbook is not required, but there is a free online textbook -- OSTEP (Operating Systems Three Easy Pieces) -- that I used to reinforce learning for a few modules.
Among my most favorite courses taken so far. The workload is light and, if you work ahead, you get unlimited submissions to the autograder prior to the deadline. The autograder is responsive and provides enough information so that you can isolate issues with your code - course staff is also helpful when it comes to debugging. If you are comfortable with C, assignments can take a few hours. Its a low stress affair compared to other courses. The video lectures, while helpful, pale in comparison to Prof Loo's detailed and thorough explanations of the week's topic. To get the most out of the course, I would highly recommend attending office hours or watching office hours for each week. I would also purchase a copy of the suggested UNIX book - it does a great job of explaining each system call and greatly speeds up developing a solution for assignments. Exams were open everything, you could google for help if needed.
Lecture videos tend to be relatively brief and vague. It was the OH recordings that helped me greatly for truly grasping the concept introduced in the lectures. IMHO, they should be categorized as must-watch instead of optional.
This has been my least favorite of the core classes, not because of difficulty necessarily but because of subpar instruction on tough concepts and HWs that are tough to figure out. Pros: -interesting practical experience with topics like virtualization, Docker, GitHub, threads, processes -HWs aren't too bad once you realize what you need to do. 80% of the HW is figuring out what the instructions actually want to do, and then 20% is doing the coding -Professor is really good and active in OOH and in the EdStem forums to provide help -Open note exam Cons: -Lectures and slides don't convey information in an intuitive manner. Most of my learning was from office hours and recitations
As someone who works as a web developer and data scientist, I have to say that this course really strengthened my knowledge in both of my work areas. I started working in these fields without a technical degree and I would find that a lot of times I would get things to work, but did not really understand why it was working. This course had multiple Ooooooh moments where I finally properly understood something I was working on in my real life job. This course is easier than other courses, but it is a great survey course that introduces concepts like operating systems, networks, memory management and virtualization which can lead you to go more in depth into these topics. Boon is a great professor. He is super responsive "outside of class" and explains things very clearly in his office hours. I thought the projects were very interesting since they were directly related to projects I was developing in my job. TA's were great as well and the exams were fair. The only negative I would highlight is that the recorded lectures can be hard to understand. That being said, this semester, Boon released office hours highlights from his on-campus lectures which were EXTREMELY helpful. In fact, I would suggest everyone to watch the office hour highlights first as their main source of learning and then watch the prerecorded lectures second to reinforce everything. Great course with many direct applications to my everyday job. If you do not work in software development at the moment, I can see why this course might feel unsatisfactory. But take my word, if you have entered a development job without a technical degree, this course is invaluable.
The worst class I have ever taken in my life. Lecture materials are poorly done so the test questions are ridiculously random. I have to learn using the materials from 2 other colleges and Youtube. Might as well not have a professor for this course. Also, the professor won't release answers for exams do you don't even know what you did wrong.
This class by no means a sexy course (OS and C) but I love it! After feeling down with the previous 3 out of 4 courses of MCIT with ridiculous assignment grading and hidden test cases, I feel like this course rewards students who really want to get good grades instead of punishing with terrible grading points unnecessarily (Prof. Boon even mentioned this in his intro lectures). The multiple Gradescope submission attempts finally breathed new air to the old grading system where you just crossed your fingers things will go as planned as you upload your files, which most of the times won't. The class sets you up to be a memory leak conscious programmer and it is a great continuity from 593 if you actually enjoyed that class. I like Prof Boon as he brought back the motivation to strive again in MCIT after taking 2 semesters off due to the pandemic impact and the old system of assignment grading. The confidence you got especially after coding in C for this class somehow brings more confidence for you to code anything as you can spend more time thinking to solve the algorithm problems for future courses.
Very good course! provide very comprehensive introduction to computer operation systems. good continuation of mcit593. The content is not easy with a lot of things to memorize. However, a lot of support are provided for all the homework and exams. TAs are great and responsive. The workload is low compare to others even though the content are packed. Really enjoyed the course.
This is any easy course with a light load. The programming assignments are few and far in between. You get infinite submissions for the assignments and can use the output of the auto-grader to fine-tune your program until you get a 100 on every assignment. Similarly, with quizzes, you can use the explanations on the first attempt to score a 100 on the second attempt. This leaves only the open-book midterm and final to distinguish between the students. The exam questions largely come from Prof. Boon's pre-recorded Office Hour Highlights. Make sure you go through them minute by minute and take extensive notes. And now for the criticism: This is a terribly-designed course, by far the worst in the MCIT core curriculum. It borders on being a waste of time and money. I got an A+ without the help of the curve (raw score > 98) and yet would definitely fail a technical interview on systems. The high-level abstract concepts discussed in the lectures are not reinforced by the paltry programming assignments. The assignments often require just a few lines of code to modify the starter code or sample code. My cohort mocked the later assignments as "code-by-numbers" because you could mindlessly follow the provided flowcharts to get them done. The course title (Computer Systems Programming) is a misnomer. You don't even begin to scratch the surface of how to program an operating system. The lectures are mind-numbingly dry and represent a condensed digest/outline of the "optional" Tanenbaum textbook. In fact all the diagrams and pseudocode in the lecture slides come directly from the book to the point that you wonder if a copyright violation is being committed. If you learn by reading, definitely find and read the corresponding chapters in the book for each module. Otherwise, find online videos that better describe the subject. We joked that it's sad when lectures at University of Punjab are far more lucid and instructive than lectures at the University of Pennsylvania on the subject of signals and signal masks. The resources for the modules are scattered haphazardly. You might listen to a recorded office hour on a topic that does not come up until the next module or may never come up in this course. The first assignment is heavy on signals but there is no discussion of signals until a couple of modules later in the course. All of these problems boil down to one fact: the course was thrown together as an afterthought and borrows all its resources from CIS-548, which is apparently a more rigorous and better-designed course. Throughout the pre-recorded office hours, you hear references to CIS-548 and its more rigorous, interesting, and frequent programming assignments. This is demoralizing and offensive to MCITO students who are being treated as lesser. As other reviewers have said, you are awarded a good grade in this course so you don't complain about how bad it is.
The easiest class of the core, but maybe a bit too easy. This is the first class I've taken where I felt like I would have greatly benefitted from taking it in person rather than online. Pros: -Light workload -Great recorded office hours from both the professor and the TAs -Great TAs Cons: -Mind numbingly boring lecture videos that don't convey information well -Too simple of assignments -Doesn't dive deep enough to actually teach you anything I don't really feel like I improved as a programmer or computer scientist after taking this course. It doesn't dive deep enough and the assignments are very simple (and mostly already implemented). The exams are all open notes, internet, etc but still pretty hard if you dont have a full grasp of the information conveyed in the lectures (and the lectures are incredibly mind numbingly boring and hard to watch, so learning from them is quite difficult)
I learned a lot in this class, but I wish the workload had been more consistent. Prof Boon is a great teacher because he is very patient and helpful in office hours, which made this class so much better for me. I think the support network in this class is unparalleled in the overall program, because the TA team was also great and very accessible for questions. It's obvious that Boon is passionate about teaching and really cares about his students. Personally, I probably would have had a better experience if I started assignments earlier. As it was, I had no social life or free time the week of assignments/exams, but did the bare minimum the rest of the time.
Whatever you opinion on 593 was before you took this, will likely remain unchanged in 595. It is more programming based, but it is still in C, and its working with the OS a lot. Tests are brutally hard so you should make sure all your homeworks are 100%. The reason tests are hard is because the homework is only ever coding in C, the tests are all the conceptial items that were somewhere in the lecture, but you might not have got the chance to practice with in the homeworks. So test prep becomes preparing one giant study guide and rewatching all the lectures. If I could go back I would say take detailed notes on each lecture in a word doc and save yourself the headache. Tests are open resources, but they are made to be heavily time restricted if you think you can just use google, which is allowed in this course for tests.
This course was a huge drop in quality content following the heights of 593. There were so many interesting topics that were covered, but it felt like I wasn't learning a lot about them, or gaining a surface level understanding at best. The projects were far too easy compared with 593 and involved a lot of handholding. Some of the topics only had a theory overview, which for a CS course was a huge letdown. We did not get a chance to reinforce understanding of these conceptually challenging topics with any hands-on projects to go with them. All in all, this course for me felt like a $99 MOOC on Coursera than a $2500 course taught on campus.
This course is as hard as advertised. Even though I did well, it depleted me and caused me to take the summer off afterwards to recharge. If you work full time, take it by itself. The central issue is that the field of theoretical computing (the subject of 5960) is deep and wide. This course, by necessity, only scratches the surface of many important topics in this field. As a result, you never feel secure in your mastery of the subject matter. I imagine it would take a year or two of total immersion in the field (probably as a Ph.D. student) to gain real competence and confidence. The average on the exams and assignments is supposed to be in the 60’s, and the final grade is curved to a B average for the class. But if you happen to be taking the course with a bunch of brilliant people (as in Spring 2023, when the Final average was 80 and homework averages were routinely above 90), you have to work very very hard for that A. Conversely, it would be easy to do poorly if you slack off. One peculiar thing about this course was the lack of a sense of community. The Slack channel was eerily silent for days in row. The clustering into teams of three and the competition for the curve result is a Hunger Games vibe. On the plus side, the abundant communication with your team members more than fills this void. I cannot think of any suggestions to improve this course. The course is well-organized, the lectures are coherent and relevant to the assignments, grading is fair without much nitpicking, and the course has two good textbooks. So instead of criticizing the course, I have some suggestions for surviving it: 1. Work hard but reduce your expectations. The sooner you come to terms with feeling of flying by the seat of your pants, the happier you will be. 2. There are 2 non-cumulative midterms and a commutative final. It is not sufficient to understand the lectures and complete the assignments to do well on these exams. You must practice on as many problems as you can get your hands on until writing a particular type of algorithm becomes a matter of pattern recognition. You don’t have the luxury of spending 1-2 days on each problem as you would with a homework problem. Attempt all the recitation problems on your own, do extra problems found online from various universities, and review the answers to the quiz questions repeatedly until they become second-nature to you. 3. Assemble a team of 3 people as soon as possible, preferably before the semester starts, by reaching out to people you may have gotten to know in previous courses. Your team is what will sustain you through this course, so get to know them and communicate frequently on Slack. Have a weekly one-hour Zoom meeting to discuss the homework problems. Agree not to share your grades so as to maintain healthy and collaborative team dynamics. 4. Establish an asynchronous communication platform to share you thoughts with your team-mates. We used a shared Notion page, which worked beautifully. Each assignment had a separate Notion subpage, and for each question we had a toggle list under which each of us posted his solution. This way we could choose when to look at our teammates’ solutions by revealing the toggle. Notion also allows you to use LaTex to comment on each other’s solutions. We extensively discussed our solutions but, for the most part, submitted independently. 5. Abandon coding. Theoretical computing is to programming as theoretical physics is to applied physics. There is a tendency early on to code and test your algorithms, but this becomes quickly intractable, and no one is interested in your code. For instance, to write a dynamic programming algorithm, you are expected to provide a recurrence relation. Learn to dwell only in mathematics. Accordingly, this course will not make you a better Leet Coder. It would be nice to take some time after the course to code some of these algorithms and do some serious Leet Coding. 6. I liked the Roughgarden books, which are essentially transcripts of videos freely provided on YouTube. I highly recommend these videos. His eloquent matter-of-fact style helps strip the mystery off difficult concepts. Good luck. We all get through it.
This class in NP complete. The class itself can be solved in O(n) time, where n is the hours of lecture videos (frequently cracks the 2-hour mark), I need to spend 10 hours per hour of video lecture, so we have O(10n) = O(n). Thus the class is NP. Every other classes are subset of algorithms covered in this class. Wanna take database? Better get your CNF right. Wanna take networked system? Gotta know max-cut min-flow. Wanna have start a junior position as a SWE? Be good at sorting/DP/greedy algorithms. Wanna learn machine learning? Better know linear programming, better yet dynamic programming. Thus we prove there is a certificate and the class is NP-hard, therefore the class is NP complete. No matter what I say you gotta take this class as your core, so hopefully this answer can get your 30-point NP question on your final exam. To prove NP completeness, you need a certificate (an example you can solve the problem in polynomial time (that is, O(n^c) where c is a constant, in our example is O(n^1)). Then you need to do a "reduction", take existing NP question and show that said question is a subset of our problem (it's the hardest of 'em all). You can then conclude that the question is NP complete. Yes I got the question wrong on the finals. Yes the class is hard. Yes people get 100s on exams. Yes your finals will be at least 30/100. Yes you can correct me in future reviews. Yes it was torture. But if all reviewers can explain some algos in their reviews maybe we can save some souls and make the world a better place or something idk.
I took this class over the summer with Arvind and I'm happy that I did. Changing the grade weighting to favor HWs definitely helped lower the stress of the exams, but more importantly Arvind is an excellent teacher and he did a great job demystifying the difficult material in this course. If he ever decides to teach this class again, I highly recommend you take it with him. As for the course itself, the material is definitely both interesting and relevant, but having to come up with solutions under the pressure of a 3hr exam takes away a lot of the fun. I don't know if this would ever be possible, but IMO switching to take home exams would fix the problems with this class (apparently this was tried on campus but they had to stop due to cheating). Also, I wish there was a companion class that focused on the actual implementation of the algorithms taught in this course. I feel like that's what 594 is supposed to be, but it really misses the mark.
There is no getting around it, this course is hard. You will spend a lot of time on it. There will be times when you will hate it. But I would be disappointed if, when progressing through a grad program at UPenn, there weren't at least one or two courses like this. I know I am a better software engineer having taken the course. There are lots of things that could be done to improve the quality of the course, but I think the hardest thing for some people to get around is the grading scheme. Prof Kannan explains that a 60 on an exam is good, and he's not lying (our final had an average score much lower than that). Once you get used to that, I feel like it frees you up a bit. You know on a 5 question exam you can completely miss two questions and still get a good score. Even though it is expensive, I would buy both the required and recommended texts. They were immensely helpful. You are given the opportunity to work with a partner on the homework assignments. I chose to go it alone. Although my HW grades were average, I feel like being solely responsible for the HW helped with the exams, since all my exam scores were better than the class average. I am glad it's over, but I'm also happy with what I learned.
This class is such a missed opportunity. The subject matter is vital and probably fascinating to most students in the program, but many students seemed overwhelmed with stress and fear that they might fail the course because of one bad exam. 1. Made intentionally difficult and incredibly stressful. 2. Pre-recorded lectures are weak and completely insufficient for preparation for homework and exams. 3. There's very little actual teaching. 4. If any teaching actually happens, it will be from a TA, not from a Professor. 5. Everyone jokes that they're paying tuition to learn from YouTube. 6. Too much material packed into one course. 7. It only gets more challenging as the course proceeds (as do the exams). 8. Like 592, it's very difficult to know how good is good enough on an answer. 9. Everyone talks about how similar the course is to 592. I would say proofs are much more prominent in the first third of the course, and gradually diminish in the required rigor. The correctness of the algorithm is what matters the most. Advice: 1. Find two great partners for the homework and collaborate often. A solid team will help make sure you understand what you're doing, and make sure you get high marks on the homework. These will be your "study buddies": since you can collaborate on the homework, you can have real conversations about the concepts and how they apply to the problems. 2. In preparing for the exams, make sure you really understand the homework, recitation, and exam review solutions. Don't memorize the solutions, but understand the methodology. 3. While this class does not require writing code, I wish I had consistently done more LeetCode problems in each section (there will be some listed in the Module Key Takeaways). 4. For each concept (say Greedy Programming or Dynamic Programming), there's probably only 3-4 "archetype" problems that can be reformulated in different ways, just make sure you know them all. 5. Use Ed and Office Hours regularly and often. If a TA doesn't give you an answer that helps, try someone else. 6. For me (older student, a ton of programming experience), most of my time on homework and exams was spent on understanding the problem and how to map it to an algorithm that was correct and met the stated runtime. I think more LeetCode practice could have helped with that (even if it's just trying to answer the LeetCode questions with pseudocode). I'm glad I took this class, but even more happy that I finished it. It dominated my life for 14 weeks. If you're working full time or have other obligations, I highly recommend finding a semester to do this course when you can minimize those obligations.
This class was very conceptually challenging. The lectures were mostly high quality, but the homeworks were so hard I had to ask for help on most problems. There were 3 exams but no break in homework assignments, so you just have to somehow find an extra 15+ hours to study those weeks. I felt like the material just kept getting harder the entire semester. It seems like they are trying to adjust based on feedback though, so the grading was wayyy friendly than I expected. So don't worry, you can do it, but you might feel burnt out by the end of it. Also, I took 515 as well as 596 and I would highly recommend against skipping 596 and taking 515 if you have that opportunity like I did. I think 596 is crucial. Also, Lutz was extremely responsive on Ed Discussion which was so helpful.
I really liked this class. It has some serious flaws, for sure (the main one IMO being poor lecture video quality and the inordinate amount of time I spent looking for appropriate substitutes), but I really wish I hadn't had so much anxiety going into it, because it turned out not to be nearly as bad as I thought it would be, and because having that anxiety made the first part of the course more stressful than it needed to be. I put a ton of time into this class, and I was fortunate to find a HW partner who also put in a ton of time and who was a great source of moral support. I learned so much from doing the assignments and from preparing for the exams, perhaps more than I've learned in any other core course. I found it liberating not to sweat about my grade so much (I took the class for a letter grade). It was nice to be freed of the mentality that I needed to strive for perfection, a bad habit I've picked up from other classes (thank you, autograder:)). This freed up some brain space to concentrate on learning. Leetcoding is still harder than I'd like it to be, but I feel like I have a solid foundation for interview prep and starting a junior SWE position. I tried not to sweat the small (and not so small) stuff too much, and in the end, it worked out.
This course has a reputation for being one of the hardest core courses in the program, and that reputation is deserved. However, if you're taking MCIT, you will need a strong foundation in data structures and algorithms. This is the course to excel in if you're interested in a career as software engineer or any technical role where technical coding interviews are part of the process. Content is taught well and covers most major algorithmic paradigms. Think the only feedback on my part is that the deliverables are too theoretical (writing up algos in Latex only). This led to me to be able to think of algorithmic steps when presented a technical problem, but in terms of actually turning algos to code required more independent self-study on my part. If we could learn both the algorithm, write it up in Latex and do some LeetCode-style questions as part of the assessment it would have further enhanced our skills coming out of the program. Coming out of this, I liked the material for how important it is in this degree. But the way we were taught could have been improved by requiring answers in code too.
This was no doubt one of the hardest courses I have ever taken. We were able to work in groups of 3, which made the course much more manageable and made learning far better since we were able to discuss the homework and the subject matter with our peers. Dr. Khanna is a gem. His teaching style made understanding so many of the topics easier. I cannot recommend taking 596 with him highly enough. The homework assignments were challenging but fair. The exams, on the other hand were very difficult and the time to complete them wasn't fair. 2 hours (Midterm 1 and 2) just isn't enough to solve these problems.
This class may be considered 592 on steroids for some. I had expected 596 to be a continuation of 594 further exploring algorithmic design, but was caught off guard when it was cousin to 592. However, unlike 592 students were permitted to work on assignments in groups of 3 and were allowed a one page written (or 2 page pdf) cheat sheet for each exam. Working in groups made the class much more manageable and I was able to learn more by teaching group members concepts I felt strong in and learning other concepts from them. The assignments are a similar format to 592 using LaTex, but I found that the material was more understandable than in 592. I would still have to write extensive responses to each prompt to avoid missing any points from the rubric. Writing proofs for why an algorithm works came easier to me than writing mathematical proofs. You will not have to do any coding in this course, although you can code your algorithms for your own testing if you so wish. There are 3 exams for this course. The first and second midterm are 2 hours long and the final 3 hours. Unfortunately, the final exam for this course was cumulative and I felt very underprepared for it. In my case, the curve ended up being pretty similar to 592.
Summary: Very difficult yet fascinating class that receives way more negative press than it deserves. The pros: Professor Kannan is highly knowledgeable and does a great job explaining things in office hours and on Piazza. The TAs were very responsive on Piazza and were helpful to me when I used their office hours. The course content is interesting, and I especially liked the optional section on cryptography. The cons: The lecture videos were often simultaneously long and hard to understand. Many times when explaining a concept or proving a theorem, the professor (or TA) would skim over specific logical steps they thought to be trivial, but were not necessarily trivial to the student. Or sometimes the content on the slides was not well prepared (inconsistencies with what was shown vs. what was said, video abruptly getting cut off, etc.). Btw, I only ever felt like I needed supplemental support from Abdul Bari (MIT prof on YouTube) during modules 9-10 (Dynamic Programming). During lecture videos, I took handwritten notes and rewatched certain parts of the videos until I understood them. If you did well in 592 and stay on top of the material, you will be fine..
I really enjoyed the course since it is very intellectually challenging. Office hour held by the professor helped clear some confusion with the video lectures. Many complained about no coding assignments with this class. But I found it very rewarding to pair this class with Leetcoding on the side. So that I have both theoretical and coding experience of algorithms at the same time. Also during coding interviews, it is very important that you are able to communicate complicated solution processes with the interviewer, so the LaTex assignments really forced you to always come up with better explanations of your thoughts. The Fall 2020 semester has different exam format comparing to Summer 2020, for example the exam question would specify the expected time complexity instead of simply ask you to give answers with "the best time complexity". This little change really simplified the questions a lot since once you write down a solution with the target complexity, you don't need to carry the doubt that it may not be "the best". As a result, there are always students who get 100% in the exams and more students are in 80% or 90% range.
This was a very challenging but rewarding class. The lectures are pretty high quality and cover all of the material well. The material is complex so there were times where I had to rewatch the lectures a few times or get outside help, but overall I felt prepared for homework questions. Only issue is that sometimes on the HW/exams, there were questions that seem impossible to figure out, and then once you see the solution you think "how on earth am I supposed to know that?". It could be a case where you understand the specific algorithm really well, but the implementation of the algorithm really requires some out of the box thinking. And to be fair that is an important skill, but it can lead to you getting stuck on homework problems for much longer than they are designed to be.
This class was somehow even worse than 592, which was already pretty rough for me. 592 at least gets easier over the semester - this course just turns up the heat right until the final exam. This semester was taught in tandem by Anindya De and Sanjeev Khanna, but most of the lecture materials were still by Kannan, with a few videos by Lutz and De sprinkled in. Lectures minimally prepared me for the homework assignments, each of which took about 25 hours each week. Individual problems could require 5+ hours of frustration, including office hours, before I reached a solution that seemed right. Working with 2 partners was helpful, but in the end you have to know the material for the exams so it's best to attempt everything on your own as best you can before discussing as a group. Exams were terrible - I was rarely able to come up with a satisfactory answer in the tiny amount of time provided. Problems that would take me several hours on a homework assignment we were expected to solve in 20 minutes on an exam. Many people praise Khanna's office hours, and they definitely were helpful in clarifying the sometimes impenetrable lecture material, but I don't think his OH were a huge factor in the end. As one person this semester so aptly phrased it, "this class is such a beat-down". I studied 40 hours for a final exam where I was only able to answer one question fully - I feel like I might as well have not even bothered studying. Never before have I worked and studied so hard just to fail anyway in the end.
This course is one of my favorite core courses because I think the assignments and lectures are challenging enough to prepare me for a more advanced level of algorithms courses. Being able to discuss homework assignments with a partner help a lot in deepening the understanding. For easy reference here are the tips I posted in Slack: 1) Watch Abdul Youtube videos alongside the lectures but don't skip lectures. 2) Find a hw partner early on. Hw is better done with a partner. 3) Read and reread many times the recitation/hw solution + practice problem solutions before the exams to gain an intuition of repeating patterns of solutions. 4) No need to spend too much time in textbooks, instead of trying to spend too much time in understanding things, spend more time trying to solve problems, you can search for relevant problems online from other universities' algorithms course. Seeing more types of questions is more helpful than reviewing lecture content for the exam. 5) Even if you don’t know the answer, write your assumptions and best guess in the exam. 6) Memorize the solution steps and proof patterns so that you can follow the exact same structures in the grading rubric. This is especially important in questions like NP-Complete proof.
**Took during the Arvind Semester** I feel the need to point this out, as this is the only semester Arvind taught, and as of today is the only semester he intends on teaching. The HW assignments contribution to the course average was significantly raised, and the Exam weights significantly lowered. In my opinion, this made the HW assignments extremely important, as each individual HW assignment has a larger contribution towards your average than the first two midterms individually, and only slightly less than the final. I also believe this was a positive change, as struggling through the HW pouring sometimes upwards of 20 hours into 4 to 7 questions, was rewarded with boosting your overall average. It was also very clear that Arvind very much cared about the success of his students. I will also note that I enjoyed the legacy lecture materials from Professor Kannan. They are dense, but a careful reading of the weeks texts prior to watching will set you up nicely. The TA's were great, and I felt well supported. Overall, a very demanding and rigorous course, but a course well worth the effort that has meaningful learning outcomes.
I have very mixed feelings about this class. In general I think it gave a good understanding of important algorithms involving sorting, searching, graph search, MST, shortest path, flow, greedy, dynamic. This portion of this class involving sorting, searching, initial graph algorithms (DFS, BFS), and even greedy minus the proof patterns were well done. The lectures were coherent and I could follow lectures without blanking out. Then we started getting into dynamic programming and the lectures started become difficult to understand. Analysis was just slides of math rather than visual representations like they had done. There was an entire section on segmented regression and counting paths which felt impossible to follow and honestly I still don't really know what it is. These concepts are difficult and probably even harder to teach, but I feel at this point the course quality dipped a little. I needed to use significantly more outside resources (pdfs from stanford/UIUC/Princeton are life savers by the way). I think the lectures go back to decent quality at NP-completeness but the concepts are just difficult and still require significant outside resources to understand. Homework is as hard as 5920 if not harder. I completed all homework solo and it took me nearly 20 hours (4/5 questions) to complete each homework with resources. Exams are also much more difficult in that time is short and you are expected to think and give algorithms to 2-3 questions. It felt unnecessarily hard, but the course is curved so it is okay. Average on exams was ~75% for our cohort with the second exam being the lowest average. How to survive? Do all the practice problem you can. You need to be able to intuitively think of an algorithm pattern to use in a couple minutes after reading a problem statement. The only way to do this is to have seen most of the algorithm questions and find patterns in them. So my only tip is do a ton of practice problems and get used to identifying what algorithm to use in what case. Textbooks, especially Roughgarden, are actually very useful so I would recommend 'buying' them. Another thing that might be good to do is code the algorithms yourself. This class feels very disconnected from programming and in fact I think the course should be combined with data structures where algorithms are introduced and data structures that could be used in the algorithm are introduced together. This would provide a better class experience as well as provide more time to introduce each algorithm as well as prepare us for job interviews which require actually programming the solution rather than writing an English description. Lastly, this course is draining. I took this course with 5930 and 5940 and I was falling apart by the end just because of this course. I just wanted it to be over.
One of the best things I can say about 596 is that it is not immediately clear how much of the misery is inherent to the subject and how much is unique to this particular course. Let's begin with that first part. Algorithms are notoriously difficult at most universities, with success (or lack thereof) resting on three pillars: (1) excellent intuition for discrete math; (2) comfort with the associated notation and proof-writing; and (3) a solid grasp of data structures. The keywords here are intuition, comfort, and grasp: doing well in 592 and/or 594 is necessary but not sufficient, since those classes reward effort while 596 will require you to creatively apply their concepts under pressure to much more intricate problems. In addition to these conceptual challenges, algorithms seem to epitomize the tension between computer science as an academic discipline and a professional degree. Yes, they are essential to technical interviews and more prestigious roles in industry, but universities typically emphasize the more theoretical aspects of the subject, with 596 featuring plenty of advanced algorithms and exactly 0 lines of actual code. All of this contributes to a grueling workload. In the case of 596, the syllabus lists 3 (!) separate textbooks: one required, one necessary, and one optional. Where other courses in MCIT might have "heavy" weeks with 50-80 minutes of lecture videos, 596 regularly cracks the 100-minute mark in consecutive modules. All told, I spent considerably more time on 596 than 594 and 595 combined and could have probably spent nearly twice as much. 593 has a reputation as a demanding course, but 596 blows it out of the water. . . . Now for the bad news. The problems with 596 extend beyond what one might reasonably expect from an upper-level algorithms course. In my mind, they fall into two broad camps: (1) grading and culture; (2) the course materials. In terms of the former, I'll be the first to admit that students complaining about grades is cliche, but the approach in 596 is both draconian and directly tied to an antagonistic culture unique among the MCIT core. My favorite example is from the first exam, where I wrote a perfectly functional O(n^2) algorithm incorporating material from the lectures for a problem with an O(n^3) brute force solution. It turned out that this question, a LeetCode "medium" problem, had an O(n log n) solution, which essentially combined my answer with a more efficient search strategy. As a result, I got… 0 out of 20 points. Now, when you crunch the numbers, there's a pretty significant difference in efficiency between my answer and the optimal solution, but the rubric meant that I could have just as well left the page blank or doodled a unicorn and received the exact same score. Moreover, because exams count for 70% of the overall grade, that one "mistake" docked me 4% in the *entire course*. It's just one example, but it set the pattern for the rest of the class, with student averages on the different exams ranging from roughly 50% to 70% (on our second midterm, only one person got above 78%). Course staff justified this approach by vaguely referencing a curve, which did come out to a solid 10-15% in the end, but it meant that the bulk of us spent the entire semester trying to learn with massive uncertainty about our performance hanging over our heads. In the final tally, my raw grade in 596 came out to over 30% lower than my average in the other 5 core classes. Grades are ultimately just numbers and I'm happy to keep it as a battle scar from a legitimately rigorous computer science education, but I can't help but feel that I and other students would have learned the material better and taken far more away from the course under even a slightly more generous scheme. . . . As other reviewers have highlighted, this grading setup directly contributed to a borderline toxic atmosphere between students and course staff. At one point, apparently inundated with regrade requests, the head TA sent a class-wide notification claiming that they were already extremely lenient in their grading and admonishing us for writing answers that wouldn't pass muster in "even an introductory undergraduate class." With all due credit to the few unusually kind and helpful TAs, this sort of condescending and unprofessional attitude appeared often enough for me to suspect a systemic issue from the top down. One TA in particular would literally eat dinner during office hours, memorably munching on a burrito while I tried to discuss dynamic programming. In sharp contrast to the many other wonderful courses in MCIT, I got the distinct sense that the course staff spent more of their time and energy on keeping the students in check than on making the material more accessible, whether by expressly cracking down on perfectly-innocent Slack study groups and threatening to report them for academic misconduct or, more recently, choosing not to make previous semesters' open office hour recordings available to students taking the class under different Professors (standard practice in 595 and elsewhere). By the end of the semester, I and many others avoided asking questions on Piazza or scheduling private office hours—there was just no point. . . . Then there are the course materials. The lecture videos feature very few representative worked examples, choosing instead to string together multiple 20+ minute segments that cover every nook and cranny of proofs for canonical algorithms. As a result, there is a huge gap between the problems in lectures and exams, with the former appropriate to those embarking on graduate-level research and the latter, while still very difficult, often requiring just a few targeted sentences. Together with the grading philosophy, it really gave 596 the feel of a weeder course for students considering academia rather than a capstone course in a professional Master's degree. As a visual learner in particular, I found very little to latch onto underneath the notation, even putting aside the "half-baked" feel of much of what we were working with. Course slides would often contain errors or retain administrative comments on how they needed to be improved, key lecture segments would be inexplicably missing, and exam templates would contain superfluous problems that were confusingly left in and simply commented-out in LaTeX. In fact, students have literally taken the wrong midterm two semesters in a row now (it feels surreal to type that out, but what's even crazier is that it's true). Given these issues, many rely on outside materials—even though, unsurprisingly, the Professor technically forbids that as well—with Abdul Bari essentially co-teaching the course. Some courses in the MCIT core are models of computer science pedagogy, others do an admirable job of covering as much ground as possible in 14 weeks. 596 is the only one where I honestly believe I would've done better with simple self-study. . . . My advice to future 596 students would be to take it P/F if possible, otherwise take the Professor that semester into account, and avoid taking it over the summer or pairing it with other classes regardless. Beyond that, go into it with 594 under your belt and keep your expectations low—both for your grade and the course itself. If you are in the minority that comes in with a strong math background and found 592 easy, take comfort knowing that many of the issues with the course won't affect you nearly as much. If not, know that you should still be able to earn a half-decent grade after the curve given enough time and independent study, though it might require substantially more of both than what you've come to expect. It's not much of an endorsement, but I hope that others will have a better experience than I did and that 596 can one day soon meet the standards set by the rest of this otherwise terrific program.
1. Algorithm is hard. 2. Algorithms taught in this class are in line with what most universities taught. 3. However, 596 has very limited lecture content: usually less than 1 hour per module. This may be enough for courses with a lighter workload. This is definitely not enough for understanding algorithm+proof+runtime analysis. 4. Since lectures are short, you will struggle to understand concepts. TA availability and recitations become very important. If you cannot get enough help from Ed posts and recitations, you may have a very hard time doing homework -- even with partners. They might feel the same as you. 5. Even if you fully understand the lecture content, homework questions are still challenging. 6. Exams usually consist of some relatively easy short-answer questions and 3 algorithm questions. Time is very limited. If you were unfortunate enough and had 0 a-ha moments, you might get a score as low as 30. Each enlightenment during the exam might give you a 30-point boost since most algorithm problems are worth 20-30 points. 7. This is not the most time-consuming class but definitely a class that generates a lot of anxiety. There might be times when you stare at the monitor for 5 hours for some less than 100-word homework problem without bringing up any constructive ideas. Trust me, you are not alone. It will be all worth it when you finally come up with a valid solution.
Highly recommend taking this course with Prof. Sanjeev Khanna if you have the opportunity. I agree with the other reviews that the lecture videos and course content provided are sparse and haphazard in this class. The saving grace was Prof Khanna this fall. He painstakingly prepared two hours of open office hour lecture per week that were able to teach everything from the lecture videos... but much more clearly. Because of his open office hours, I feel confident in being able to reason out unfamiliar algorithms and has paid off in my ability to solve Leetcode problems for technical interviews as well. Prof Khanna and the TA team also responded quickly and kindly on Piazza this semester.
The course can be structured better. The difficulty of course content and exam problems are not on the same level. A lot of recourses outside the course are required. But Professor Lutz provides in-time responses to questions.
The course content is awesome. The proofs take some getting used to but after a few, you get the hang of it. Make sure to form a homework group with 1-2 other classmates and start early on the lectures so you can dive into the homework several days before it's due. One of the best classes I've taken through UPenn.
Topics are a great curation of algorithms and greatly enhances MCIT program. Gives a great perspective of why CS is a math discipline. Course was a self-fulfilling prophecy of declared to be hard and the instruction team actively working to make it hard. Lectures are unnecessary complex for topics that can be exposed much simpler. The TA staff was not respectful, giving harsh feedback and answers in Piazza (e.g. "unclear -10 points", "this is obviously incorrect", "students are not expected to ace the exam", "course is very lenient, if this were any on-campus class you would get worse grades"). The instruction team does not follow the same high standards asked from students, there are errors on every module lectures, carried over from several semesters, either not improved or with poor quality amends, exams had errors, showed commented out questions, latex that did not compile, posted incorrect exam in Coursera, and a log list of issues. Grading was unfair as exams philosophy is "run as far as you can on a constrained time" but there are unpredictable ProctorU and exam issues that consume time unevenly.
The good: The concepts covered in this course were extremely interesting to me and I found it fascinating to dig into the conceptual/theoretical side of algorithms. Homework grading wasn't too bad as long as you were able to articulate yourself clearly. The bad: I think there can be massive improvements to this course. I felt there was a significant jump from the lecture materials to the actual homework assignments. The homework assignments were challenging as I felt the lecture materials didn't adequately prepare you for them. I think many of the lecture videos can be revised; it's difficult to understand what the professor is intending to say when he is constantly correcting himself - just re-record and read off a script. The course management is the worst I ever experienced. TAs would CONSTANTLY cancel OHQ sessions or just not even show up without posting on Ed Discussion. Zero accountability. The lack of accessibility to the professor was also an issue for me throughout the semester. His open office hours were on Mondays 4PM and Thursdays 1PM which is difficult to attend if you work full-time as many part-time students do. He cancelled his Thursday sessions mid-way through the semester due to lack of attendance. It would have been great if he was available even at least once a week outside of business hours.
It's a hard course, no doubt. However, the hws and exams are manageable and overall it was way better than I expected. Class average in the last weeks was above 90%, so the redesign of the course helped. Also, Pr. Lutz is a great professor and I highly recommend taking this class with him.
I like the main concepts. They helped me to become a better programmer. Slides are not as rigorous as you would expect for such a course. Too many exams. Dont let student write exams, if homework are not even due or graded.
I took this class in the Fall of 2021 with Prof Kannan. I'll start off by saying that I think this course had a pretty bad wrap for awhile, but the MCIT staff, professor, and TA's seem to have done A LOT of work to improve the students experience for this class. I rarely had to use outside resources (which I think previous classes had to spend significant time using), and found the office hours with the professors and TA's to be enough clarification on questions/concepts to complete the homework assignments. I also really enjoyed that homework was only due every other week which gave you extra time to make sure you really understood all the material for that two week segment. The first half of the course I found relatively easy, but it definitely ramps up in difficulty about halfway through, and I wish there was a bit more time to spend on the concepts in the second half of the course. I felt like the content did a great job of teaching you how to think about programming "outside the box", and train your brain to think about how to solve a program or write a function in a new (and usually much more efficient) way. My main negatives for the course were that the tests were a really significant portion of your final grade and were very tough for the amount of time you had to think of solutions. Also, grading could be somewhat inconsistent since some of how you write-up your algorithms could be subjective (they want you to explain in English instead of pseudo-code which can sometimes lead to frustration/disagreements in the grading process). Most of the TA's I dealt with were always extremely nice and helpful though if I reached out to them.
I was in the lucky batch who took this notoriously difficult class with professor Arvind Bhusnurmath this summer. He changed the weighing of the class so that exams (2 MTs non-cumulative, 1 cumulative final) only accounted for 35% overall. The rest were made up of bi-weekly assignments and 2-attempt quizzes. This allowed me to not stress so much on exam scores but actually focus on learning and understanding the materials. As someone who never felt very comfortable with math and struggled through 592, I thought this was a very difficult class indeed and lived up to its reputation. In the beginning of the course, I had zero confidence in my ability to solve any of the questions on my own. They seemed to require my mind to bend in a certain way that was impossible. However throughout the semester, with the help of a knowledgeable and capable TA team, everything started to make sense. While still being very challenging, it stopped feeling impossible. My strategy was to watch all of the videos twice, make my own notes, watch related videos from Abdul Bari, and take advantage of the fact that we could discuss hw questions with our hw partner. While I had copies of the textbooks, I didn't read them and got by just fine. Exam averages were in the 60-70% range and the marking was very lenient on some questions and very harsh on others. It was easy to bomb an exam because there were only 5-6 questions and if you get a couple of the harshly marked questions wrong, you may quickly end up scoring below 50%. However again the lower weighing of exams softened the blow. Some things I didn't like were the lecture videos which were hard to understand as many details were missing so Bari came to the rescue, and also the last portion (3 weeks) of the class being on NP-Completeness just seemed unnecessarily long for an algorithms class. It's my understanding that most undergrad CS programs don't spend much time at all on this topic. I would've loved to go more in depth with the materials up to midterm 2. Overall, I learned a great deal from this class which has enabled me to feel a lot more comfortable with harder leetcode questions. Professor Arvind and his team of TAs were just amazing and I really wish he'd teach this class again for future cohorts.
It's tough to review this course. Algorithms is a hard subject no matter where you go. Overall I think the professors have done a decent job of trying to make this a good course. I do feel there are some changes they can make to improve it though: * The videos just aren't effective enough for some people. They were good about recommending textbook sections, but at times I felt like it was an afterthought as opposed to a deliberate dovetailing. Some students simply learn better from textbooks. * Additional videos/lectures should be recorded as supplemental. Perhaps choose a sample problem and work through it on the whiteboard. This would be far more effective than poorly done powerpoints. * The exam questions were fair, but the amount of time given to answer them was far too compressed. Professor: I really like Sampath Kannan as a lecturer; he is very articulate and good at explaining. That said, I do sometimes feel like he gets a bit bored. He also wasn't very active on EdD for a while. Tips for Success: * Find a good partner or two (you can work in groups of 3) and meet/communicate frequently. During our class, the 596 Slack channel was silent, as all work was done in small groups. If you don't find a good group, you will likely feel lost and isolated. The fact that we could work in groups made all the difference. * Watch the videos twice. They are dense and sometimes just not enough, but watching them a second time will help. In theory, they *should* contain everything you need to succeed; for most learners though, they are not enough. * Read the textbooks. Algorithms Illuminated (parts 1 - 4) are recommended throughout. They are relatively cheap, so buy them and read them. I personally did not like them all that much, but they were helpful, and I know a lot of other students liked them. "Introduction to Algorithms" (CLRS) is a great book that provides rigorous proofs and in-depth analysis of nearly everything; if you can spare the time, you will learn a lot by reading it. There is another book called "Algorithms" which is a Java-focused textbook which is not as difficult as CLRS, but it would only be useful if you want the added focus for Java (might be worthwhile for SWE's using or wanting to learn it). * You can possibly skip the recitations. Depending on the TA presenting, they could be helpful, or they could be a painful waste of time. * If you are strong in math and proofs you might be able to get by on only 15 hours per week. If you are weak in math and proofs, you might need as much as 25. Try to program in enough time to give yourself breathing room to enjoy the puzzles. Overall I liked this course, even though it was an absolute grind.
I really enjoy CIT 5960. I’m so lucky to take it with Prof. Sanjeev Khanna. He is definitely the best professor I’ve met in the MCIT program. His office hours are fantastic, which go through all the important concepts of the chapter and help students develop the intuition behind different kinds of algorithms. Thanks to Prof. Sanjeev Khanna, as someone who had no previous algorithm background, I was able to establish a holistic view of different algorithms through this class and do well in all the assignments and exams. I really hope that he could teach this course more often. It’s definitely one of the most memorable learning experiences in my life. In terms of TA support, I was very lucky that I met a couple of fantastic TAs in this class. They are patient, nice and knowledagble. It’s been such a pleasure working with them. When it comes to exams and assignments, they are extremely well designed and very fair. Questions are on the challenging side, but definitely solvable with solid understanding of the course materials and creative thoughts. In general, thumbs up to all the course staffs! Thank you for making CIT 5960 an extremely pleasant journey for us!
Without a doubt, for me, this has been the most difficult core course. The professor's office hours, reading the textbook and being proactive about getting help were essential to my learning. While I think it would have been helpful to my learning had I tried to actually code many of the algorithms we learned about, there just wasn't enough time with the pace of learning. Overall though I felt like the curriculum was jam packed with lots that I need to know going forward and I appreciated how it incorporated many of the concepts we were introduced to in previous core classes (especially 594 and 592). It is clear that the MCIT put a lot of effort into the development of the core classes and integrating the various essential topics to give us a strong computer science foundation.
I was somewhat terrified to take this course based on prior reviews. However, I actually wound up enjoying this course and thought the amount of work was manageable/fair. That isn't to say it is easy, because plenty of the subjects are quite challenging (looking at you NP...). Here are a few things that stood out to me: - The expectation on the math/proofs was significantly less rigorous than 592. This was a huge relief to me, as I struggled with that part of 592 - Finding a good group is a huge part of doing well in this course. The interactions with my group definitely led to improved understanding of the materials and better grades. - In terms of the grades, the scores on HW/Exams in Summer 2023 were quite high (I think most were in the 90s). We haven't gotten final exam scores or final grades yet, so TBD on what they do with a curve. - Having HW every 2 weeks felt manageable and honestly part of me thinks that it should have been every week given the institution we have chosen to 'attend' (I'm sure I'm in the minority on that though). - We had an amazing head TA, which definitely helped. I also thought Prof Lutz was responsive to questions from students, though it is still a little weird to me to have a Professor who isn't leading the lectures. - Like other reviewers, I relied heavily on YouTube videos. It probably does indicate an opportunity to improve the proper course materials, but this also isn't the only class that I've relied on self-study of non-course materials.
Algorithms is definitely a fundamental course for computer science, and it's worth taking the time to really understand and think through the material. I found the course load to be manageable; a combination of videos/readings/office hours/youtube allowed me to better comprehend the material. Having 2 weeks to work through the homework was also less stressful compared to 592.
I thought the material was very interesting and really stretches your brain. However, I don't think the teaching quality was all that great. The lecture videos took a really long time to explain concepts. I'm looking at some youtube videos and MIT's videos right now, and they're able to explain the same concepts succinctly and clearly. I really wish I had the time to use these external resources during the semester because my conclusion on the lecture videos are that they are a waste of time. I wish the teaching staff would just give an outline of what we needed to know and students could explore external materials, rather than sitting it out and watching confusing lecture videos. With this in mind, it's not a surprise that my opinion of the exams is that I felt extremely unprepared for them. The exception to the lackluster teaching quality is Khanna's OH. His explanations are amazing. My advice to future students is watch Khanna's OH (assuming the course is taught by Khanna), speed through lecture videos and find external resources to actually learn the material, go to TA private OH for HW help (they really do help walk you through the problems!), and don't fret about bombing on tests because there's usually a curve.
I entered the program with zero discrete math and proofs background and really struggled especially when it came to dynamic programming. But, Prof. Kannan (though he had some tough reviews in the past) was actually very supportive of us. I prefer those videos with him on the lightboard and OH than the normal course material lectures so make sure to check out the OH recordings. Prof. Kannan is also very open to students' concerns like when we had difficulties in ProctorU scheduling and also during the first few weeks of the course when there was not enough TAs (he held his own POH to fill in). The TAs are also very supportive and very considerate in grading. I also chose to write my answers in the way they prefer it (in words) than pseudocode (my comfort zone) so I could practice more on how they want it structured and in that way I could get more comfortable when the exams came. Algorithms is a tough course so be prepared for a heavy semester. In the second half of the course, I had a lot of personal and health issues so I was not able to supplement the course materials with reading CLRS and K&T (If you have the bandwidth, do read the books and you will do great in this course!). But, I just made sure to watch the TA sessions which helped me survive the course.
The content introduced in this class is super dense. Lecture videos tend to focus more on the proof of different algorithms, which makes it hard to understand what the algorithm is doing at the first place. I would recommend not to fully rely on the lecture material. In fact, some walk through examples on youtube had helped me a lot. Having said that, I believe that the lecture videos have already tried its best to convey the idea behind those algorithms. It is just impossible to explain everything in detail given the limited lecture hours for each week. The curve tends to be pretty generous for this course. So don't get demotivated even if you receive some bad grades in the exam. It was a struggle that we all went through. :)
Overall, this class was a good experience. Unfortunately due to my work schedule I was never able to attend Khanna's office hours in person, but I watched the recordings religiously and they were excellent. The course was difficult but manageable... being able to complete homework assignments in groups made it more engaging and less intimidating. I didn't find the material to be insurmountably hard, but it definitely relies heavily on concepts from 592 (and to some extent 594) - so make sure you feel comfortable with the topics from those courses before taking this one (particularly set notation and intro to graph theory). I attended several TA office hours, and the TA staff did a great job clarifying tough concepts. My only regret was not having (or setting aside) the time to complete more Leetcode (I was working and taking 594 this semester - so at some point I just ran out of time/bandwidth). I think completing more Leetcode problems would've enhanced my overall understanding and been a good use of time... and I wish I had taken this course with less on my plate. Overall though - it's a good class and a solid intro to algorithms!
This course feels like a colossal missed opportunity. By far one of the worst courses in the core. What's frustrating is that the material is explained so poorly several students have shared that its routine to finish watching 2-3 hours of lecture with no grasp of the concept material. The professor(s) suggest that you pause the lectures and repeat the concept over and over until you understand each slide completely/can derive it yourself. As a student, it honestly comes across as a lack of willingness to put in the effort to give a thorough explanation. There are YouTube videos that explain the concepts simply and clearly. Personally, it's those videos that have made me excited about the material and even gotten me to flirt with the idea of going down an academic path. And it depresses me to think that this excitement is an exception to my course experience - one that I'm experiencing when I am digging through free, widely available sources on the internet, rather than my paid-for, thousand-dollar class. Similar to what other reviews have expressed, the staff course, with some exceptions of course, have led to a brutally demotivating experience. Some examples are marking 'wrong, -20' on homework problems without any context or explanation, getting noticeably annoyed on Piazza when students asked for an extension, making unusable practice exams whose questions are unreasonably difficult and answer key frustratingly unclear, and providing very few worked examples whose logic can be applied to other problems. This course could improve with 1). more clear and concise lectures. I shouldn't need to watch all the lectures, recitations, and all professor office hours to understand a concept Abdul Bari can explain in 10 minutes. By the end of the semester, students start to question if watching the lectures are even worth it anymore, or if they should instead go immediately to outside resources. 2). More worked example whose logic can be applied to other problems. Most examples seem to be very specific. The one off the top of my head was the one about filling in a rectangle optimally. Cool brain teaser, but hard to apply outside of that use case. 3). Revamped tests. It's difficult to tell if the tests are truly difficult or if the students are just so ill-prepared to tackle these concepts on the tests. What's more, is that they are weighed so heavily students genuinely fear failing the course due to test performance despite a fairly decent homework average. Algorithms covers AWESOME material. Dynamic programming, sorting algorithms, compression, it's like your brain gets a little tickle every time you learn about the clever ways people have learned to optimize computation. Moreover, as someone who has always had a passion for math, seeing its application in computer science has been a thoroughly fulfilling experience. Finally, I don't think I have met a 596 student yet that hasn't expressed some degree of fascination in the concepts covered. These are the reasons algorithms is such an important opportunity for students to flesh out, explore, and fall in love with a less-well-known side of computer science; that is why I believe we should hold ourselves to a higher bar for this course.
I imagine that you've already heard that 596 is a difficult and challenging class, long before you set eyes on this review. That reputation is true and well-deserved. If possible, you should take 596 by itself because it is an immense amount of work. That said, I learned a lot and ultimately found the class to be a rewarding experience that improved my problem-solving skills. I learned a lot from Dr. Kannan and really didn't have an issue with his lectures. But obviously, not everyone will have the same reaction, and if that's the case, I would recommend Tim Roughgarden's Algorithms Illuminated videos (based on when he taught Stanford's equivalent of 596) or Abdul Bari's videos, both of which you can find on YouTube.
596 is a very challenging class for two reasons: (1) The content & concepts are simply difficult to digest and the homework assignments are tough. Be prepared to spend an ample amount of time working through the problem sets by yourself and your teammates. (2) The video lectures drop off in quality roughly halfway through the semester. Be prepared to supplement your learning using YouTube videos (Abdul Bari is great). In my opinion, the biggest predictor of success in the course is finding a good group that is collaborative and supportive. It's much better to find people who work well with others (and may not necessarily be the strongest in algorithms) than be in a group with toxic members. My group was fantastic and got me through this class. Looking back on this class, it was overall challenging but a huge accomplishment for finishing this course.
I thought this was a really good class if you had the proper expectations coming in. It follow the "Introduction to Statistical Learning" textbook, which as far as I can tell is recognized as a pretty legitimate textbook for machine learning, although "Elements of Statistical Learning" might be considered more rigorous. This class isn't about doing anything sophisticated or fancy deep learning material, its much more about learning machine learning methods that you would be able to apply in an academic or business setting. I thought it was good and I plan on taking what I learned from this class and applying it in my job.
I'm just happy I'm done with this course and our instructor was Arvind, the most considerate and thoughtful teacher you could ever ask for a course like 596. He taught us to not focus too much on the grades, and released our burden by reducing the weights of the exams. I couldn't appreciate enough how patient he was for sparing a total of 3 hours for open office hours every week to answer our questions. Going back to the course itself, it is a hard course and no one can deny it. My advice would be attempting the homework earlier than its due date, and really try to read the book as well as ask questions if there's any for the materials or homework questions. TA are big help for this course. They hold private office hours to answer questions. Also, your homework partner is another resource you could refer to when it comes to writing down the homeworks. Edge cases are important for the algorithms so you should always be thinking about that before submitting your work. Every week, I went through the course materials (readings and videos), re-watched office hours and recitations, then go to homework problems. I probably spent around 15-25 hours weekly, and I feel that's a fair amount spent. Now I feel more comfortable doing Leetcode problems and prepare for interviews.
If I finished this course and felt confident coding "medium" difficulty Leetcode problems, all my suffering would have been worth it; unfortunately, I have yet to feel that I can apply most of what I learned in a real-world scenario. The hostile learning environment in this course caused substantial harm to my mental health resulting in depressive episodes. Instructor posts and announcements on Piazza were condescending and emphasized punishment for mistakes: "we will grade your worst solution" discourages creativity, TA response to student question "obviously no" is mean, "the reality is that the grading in this class is already very lenient. In many instances where we give partial credit...you would receive an absolute 0 in any on campus algorithms course at PENN, even introduction undergrad...regrade request can result in further deduction". Mistakes/questions are part of learning and should be met with warmth and kindness. Worst Piazza response time + quality ever in this program; I am a TA, there is no excuse for the low-effort responses and sense of neglect on the question forum. Felt like questions were discouraged. This material is too difficult to have so many errors on slides; prof used examples from material not yet covered in the course to explain current material. No transparency on grading and it is unclear what is needed to pass the course. I had no idea whether I was meeting the learning objectives because the curve is so big and the grading so harsh. This creates massive performance anxiety for myself and many other students who want to do well. Transparency around grading for participation would help. So hard to stay motivated when you feel like everything you do in the course is a mistake and instruction team is clear that requesting feedback inconveniences them. I've heard students describe working on this course as "taking out the garbage" and that feels fair. Huge jumps from lecture material to assignments meant I had to supplement my own learning every week; that's not what I'm paying for. Some lectures were 20 or 30 minutes and could have been cut down to 10 or 15 and slides have tons of errors which added to the carnival of confusion. In researching the concepts to get through assignments I often stumbled on the answers unintentionally. Sometimes we only got the answer right because my partner had seen the problem before on Leetcode etc. Scientists spent years trying to come up with some of these clever algorithms and I am supposed to come up with them on my own for the assignments? That's like expecting mind-reading. Exams are pure luck on whether I memorized the solution to a problem; not even a formula sheet for the Master Theorem, really? I took the incorrect exam template because there were 2 uploaded to Coursera. Prof seldom related the content to real-world problems and programming, which failed to spark my interest in the material. I already struggle with imposter syndrome as a woman in tech and this course made me feel so stupid and destroyed my self-confidence. I hope by the time you read this they have improved this course; it is salvagable but it has a really long way to go to be on-par with courses like 593, 594 and 595. If the instructors were just kinder that would be a great start. Some good things I have to say: 1. collaboration always improves my learning experience and you get a partner for the homeworks; unfortunately they are worth less of your grade than exams despite the long hours you will pull trying to write them up in LaTeX perfectly so that you don't lose points for silly reasons and 2. I respect the Prof's knowledge; perhaps he's a great teacher for on-campus courses and online is just a poor fit.
Took with Prof Kannan. Conceptually very tough, solving the problems often requires some creativity. You learn a lot of useful algorithms that help in job interviews, a few job interview questions that I had were essentially identical to hw questions in 596. 3 exams - first one was pretty tough, second one easier (I liked Greedy Algorithms and Dynamic Programming), final was in between. 7 hw assignments, you have 2 weeks per assignment and get to work with a partner. Start early on these, you'll often be stuck for a few days on a problem or two. Lectures, Recitations, and Office Hours were all useful, attend or watch the recordings if you have the time.
I'm so grateful I took this when pass/fail was still an option. I'm sure this class will be useful for whiteboard interview questions but beside that I found it to be very convoluted and not a valuable use of my time.
There’s no way around the fact that the content itself is very challenging. The course redesign for Summer 2022 with Dr. Lutz, however, certainly made it feel like I’d avoided some of the horror stories from past semesters. The quizzes (10% of grade) were unlimited-attempt. The homeworks (40% of grade) were pretty tough and time consuming but graded very leniently — plus, you were allowed to work with a partner, which was a huge help. And the two midterms (15% each) and final (20%) were challenging but fair. The second midterm and final were curved upward generously. I did not find TA office hours particularly helpful, would definitely say extra work is only going to help on assignments and exams. Do the textbook readings — they’re SUPER helpful. I typically watched the lectures (which can be a little lengthy and dry), then did the readings, then watched the lectures again. There are a ton of online resources on YouTube that cover the same concepts and are worth watching. Optional weekly Leetcode problems put context around a lot of what you learn and make the concepts more fun / applicable. The weekly recitation questions are really helpful to prepare for the exam. It’s a beast of a class but in my opinion you'll get out the time and effort you put in.
I actually enjoyed this course although I can see where a lot of the other reviews are coming from. If it's your first time being exposed to algorithm design paradigms, the lecture videos tend to go everything at a really high level and maybe make things seem easier than they are. The professor definitely doesn't go into depth about the nuances of these algorithms but it's hard to in 1-2 hour videos every week. The course format is very similar to 592 - problem sets due every other week that are about 4-6 problems long and require writing out proofs in LaTeX, and 3 exams of similar length with questions that are about the same difficulty as the average homework problem. You can also work on the homework with a partner but I did not and maybe that helped me pick up the material better. Also, if you've done Leetcode before these questions tackle similar topics but at a more abstract high-level approach, where you describe the algorithms instead of writing code or even pseudocode. The class appears to be curved quite generously as the exam averages are quite low, but this seems like the math classes in my undergraduate.
I'll preface this review by noting I took this course with Neil Lutz as the instructor. As others have indicated, the reputation of the course is well deserved. It is conceptually difficult and will require a lot of effort and consistency on your part to absorb the material and prepare effectively for the exams. In retrospect, my feelings on the course are neutral. The material itself is interesting; you will learn and apply canonical algorithmic approaches to solve different types of practical problems. There is opportunity to practice on provided LeetCode problems (found in the 'key takeaways' document that accompany each module) and on recitation problems worked through in a TA-led session each week. In the semester I took the course, it seemed most students would have liked to complete the given LeetCode problems but were limited by the time required to complete the lectures, recitation, and homework. The presentation of the material leaves a lot to be desired. I understand the course was reworked at some point during 2021-2022 to provide a more solid foundation to students. You might find the lecture quality variable as a result; I found the lectures by Lutz and Khanna to be the most clear. There is a tendency otherwise to feature a significant amount of mathematical notation and gloss over details. As a result, I found there was a fair amount of outside materials needed to support understanding of the topics, particularly in the later weeks. The course pacing is manageable until week 7 or so, and then it becomes absurd. You'll pivot from graph theory to dynamic programming, the second midterm, and then NP-completeness and approximation algorithms at a speed that may leave you barely hanging on and doing your best to manage. It's not your fault if you find learning complex concepts under these conditions to be difficult. As students have noted, you'll be able to work with two classmates to complete the homework. Form your homework group as early as you can and build a rapport and a regular meeting schedule. This group will be the main contributor to your experience in this class; if you have a communicative and supportive group, you'll still feel the anxiety of 5960 but it will be much more manageable. Our group would attempt each problem on our own and then convene to discuss and clarify. I learned as much if not more from my group at times than from lecture and Ed Discussion. The required text is worth purchasing. Roughgarden helps to clarify some of the less-than-clear topics in lecture, though there are a few chapters that suffer from the same "wall of notation" issue as the lectures. There are accompanying Youtube videos on the book website that help overcome this issue. Professor Lutz and the TAs were stellar in the semester I took the course. I didn't attend Lutz' office hours very often but he is patient and helpful. The TAs generally provided a lot of helpful advice on Ed Discussion and in recitation. My one issue is at times in recitation the presiding TAs would speed through topics that I thought merited more attention, so you'll want to make sure you attend so you can ask follow-up questions. The exams are unpleasant. The two midterms (2 hr 15) were each focused on four weeks of the course and the final exam (3 hr 15) focused on the last five weeks of the course only (in previous semesters with other profs, it appears the final was cumulative). Each followed the format of the homework, with 4-5 questions to be completed during the exam timeframe. Of course, this is where students – myself included – become stressed, as the homework provides you two weeks to work through 5 questions while the exams certainly do not. I did not find the experience of writing exams became any easier as we moved through the semester, though certainly by the final, you'll generally know what to expect in terms of pace. Some practical advice for the exams, as others have spoken to their difficulty already. - Write a good cheat sheet such that in a pinch where you don't have a solution to a question, you can copy over some detail from your sheet to explain the general concept and gain partial credit. - Review the homework solutions and make sure you understand the general approach to solve the given problem (and then copy the approach to your cheat sheet as a reference). - Practice writing solutions for the recitation problems and, if you have time, the LeetCode problems. There is a tendency among students to spend a lot of time thinking about problem practice and seeking outside materials from other universities, and while that is laudable, it's not very practical for many students. There's enough work to do in the course without having to spend the additional time. I "over-practiced" problems in preparation for the second exam and went into the exam tired and burned-out (and it showed). - The practice exams are helpful but aren't always indicative of the format of the exam. I found it sufficient to attend the exam recitation and see the workflow to solve the problems rather than solving them myself. - Don't leave any question blank. Write down your intuition, a naive solution (and explain why it is naive), or copy your cheat sheet if you're absolutely stuck. Even if your proposed solution isn't perfect, write it down. This 'maximalist' approach to writing the exams will keep you afloat. Our cohort routinely scored in the 80s - 90s as an average on the exams, and 90s on the homework. While I can attest to our cohort being hard-working and smart, I think Lutz and the TAs took a reasonable approach to grading where not finding the ideal solution but showing your reasoning (and being in the same ballpark as the solution and the required time complexity) would receive partial credit. In sum, take the course with Lutz if you can, be collaborative with and supportive of your teammates, put aside any grade expectations you might have (you can still be positively surprised!), and do your best while understanding the material is hard. Equally as important, build some time into your schedule – whatever that looks like – to not work on the course and do something that helps keep you grounded. This becomes much harder towards the end of the course, however. It is a difficult course but know that you can get through it with hard work and cooperation with your colleagues.
The course was redesigned in Summer of 2022 to be significantly less punishing than previous incarnations, and while I never took those incarnations, I think it's clear that it's been a success. I did not find the course videos to be haphazard, and seldom if ever needed to refer to material beyond the course videos. Other students are correct that 100+ minute modules are commonplace, and you should expect to spend many, many hours on each of the seven assignments, as it's likely that your natural intuition will giftwrap you solutions to two or three of the problems on the assignment, and the remaining two or three will take you several hours to think through and write up. The exams in this redesign are difficult but fair - the first required no curve and had a high median, and the second was generously curved to produce a high median. Algorithms are a challenging topic. Unless you are much cleverer than I am, you will likely struggle, and have to work quite hard, but they are a critical part of understanding the field, and I think you will find this course very helpful for doing so. It's worth noting that you will not write a single line of code, but I gather this is entirely standard with such courses, both at Penn and elsewhere.
Pros: - The material is actually very interesting at its core, and if/when you finally understand the material there's a great "A HA" moment that you get after studying the lectures/content for so many hours. It's extremely satisfying after putting in so much time. Cons: - Lectures are extremely dense and poorly explained, such that most (if not all) of the students sought out external resources to actually explain the concepts to them. I really don't think that we can say these lectures are clear and robust if, for every assignment, most students were asking "does anyone have any other resources to understand X concept?" - The assignment problems have a distinctly large disconnect from the lecture content. I never really felt adequately prepared for the homework assignments or the exam problems based on the lectures and assigned readings alone. - There was a constant cancelation of TA office hours with little to no notice for the students. Of course the TAs have lives outside of work, and life gets in the way, but the frequency at which it happened made for a very poor experience in the class from the perspective of the student. - There was an insane delay with the releasing of grades, so much so that grades were often released after the next assignment or exam was due - this even got to the point where some students were asking for grades to be released to help them determine if they should withdraw from the class. Unfortunately the teaching staff was unable to accommodate the request, which for a class of this difficult of a caliber I felt was pretty wrong. Again, I understand that the TAs have lives outside of the course, but feel horrible for the students whose decisions may have been impacted by the untimely releasing of grades. And the fact that this was a constant issue throughout the semester - if this was a one off thing, it would be more of an unfortunate occurrence. - On the topic of releasing grades, I felt that I frequently received unhelpful feedback from the graded assignments - often times my answers were docked points without an explanation as to why my answer was wrong. This, combined with the untimely releasing of grades, made it nearly impossible to improve before the next assignment - which added to the overall frustration of my experience in this course. - This class would not be possible to take without grouped homework. Some student reviews discuss something to the effect of "you can stare at the screen for hours and make no progress on one problem" - this is 100% correct. I don't see how this class would be possible to do without having other people on the homework - which, to me, speaks to the incredibly high expectations of this class. Overall, the content of the class really is good and important - algorithms is such a crucial CS skill. However, I found the class to be very disorganized and unnecessarily time consuming as it relates to a requirement of searching for external resources, the huge disconnect between the lectures and the assignments, and the unresponsiveness of the teaching staff at times.
The only thing I did not enjoy about this course were the grades only being curved at the end of the semester, so it was "tough" to gauge what my letter grade was aiming towards during the course. Great TA staff was a big plus as well for this course. I also found the "every other week" HW load to be very enjoyable compared to other courses that require HW every week.
The course was interesting but very challenging. Lots of different and new topics that didn't always build on each other. Lots of extra resources needed to get a good grade. Like other math/theory classes, it always seemed like HW and Tests were a step or two beyond what was taught in Lectures and Recitations. Dr Khanna had awesome OOH though which were a big help, and we got to work in teams for our HW which was nice. Interesting subjects though, I think in hindsight I enjoyed the class. But it's a lot of work.
This course is as difficult as advertised. (Take it during a semester when your work, family, and other course commitments are comparatively light.) It's an appropriate level of difficulty, though --- MCIT is a CS masters program at a prestigious school. It would be concerning there were no courses that demanded high-level abstract reasoning skills. This is not a coding bootcamp! Homework assignments are challenging but rewarding. The exams are extremely hard, with raw grades averaging in the D or C range. You only get 2-3 hours to solve 5-7 problems, and the open-ended nature of the subject matter means that it's easy to get stuck. I personally learned a lot, especially in terms of the "language" of math. I now feel more confident communicating with my colleagues who have PhDs. At the bare minimum you will come away with sharper logical reasoning skills.
Very difficult course structure, limited interaction with staff. Did not feel set up for success for the HW/ exam
I took this class with Arvind, so exams were weighted at 35%, assignments at 55%, and quizzes at 10%. A lot of people seemed to like this, but I was indifferent. I work full-time, so there are invariably weeks that I fall behind and consequently my HW grade dips. But because of the high weighting, the effect on my overall grade is non-negligible. Conversely, I usually take a few days off prior to exams, so I fare better on them and might've been better off with a higher exam weighting. Regardless, this class is brutal so it's going to suck either way. The material is extremely dense and high-paced. Assignments are extremely difficult and take a really long time to unpack. Even then, the nature of algorithm design is such that you're never really sure if there are no holes in your logic. I'm fortunate that the TAs in my semester were very helpful and lenient in grading. But there's no getting around it - you'll have to suffer through this course as a rite of passage. But don't be disheartened. All of us who have come before you have gone through the same trials and come out battered but alive. Knowledge about algorithms is absolutely essential and I'm glad that I learned it.
Well-done lecture videos (except for maybe the last 2 weeks). Challenging homework problem sets that I really enjoyed which required some creativity. If you do all of the homework material on your own, get the correct solutions, and understand why your answers are correct, you will be in a good position to succeed on exams. As for the professor, Dr. Lutz was very responsive. I only went to a few of his office hours; he wasn't the most dynamic professor but was able to quickly answer my questions. I didn't attend too many of the recitations and mainly supplemented my learning with MIT OpenCourseware lecture videos on Youtube. Overall, I found the material to be interesting, the homeworks to be a lot of fun, and the course to be well-run.
I am a policy economist for work, so I came into the course with practical experience in applied econometrics. Nothing super fancy, no cutting-edge causal methods, but a good grasp on how to use linear regression. Conditional on my background, here are two observations. First, the course is very easy. I think anyone with a background in economics, statistics, or math will find the concepts pretty simple. The typical week was about an hour of lecture and 3-4 hours on the quizzes/assignments. Really nice summer course for that reason. Second, it is a genuinely helpful survey of ML topics. I'm now familiar with a bunch of ML conventions. Because econometrics/statistics and ML/data science evolved somewhat independently from one another, there's often a language gap -- and a latent animosity -- between disciplines. But this course was helpful in bridging that gap for me. Post-541, I'm not exactly ready to deploy these techniques in a professional setting, but now I know what the toolkit looks like, and can dive deeper if needed. My only real beef is that the Python assignments are too easy. I half-a**ed a lot of them and still got 100s. You can often mindlessly implement the models without understanding the substance of what you're doing. Yes, that's in part why the class was so easy. But if you genuinely want to learn a lot, and are not the type to self-motivate, this may be a consideration.
I do not agree with the previous reviews. Maybe they reformed the course. The lecture videos are definitely over the average of electives(lol, look at 515!). The programing assignments are very well-designed to get practical knowledge. The only thing I agree with negative reviews is that the lecture and the programing assignment have a low connection, which is totally fine since the programing projects are to gain practical knowledge, not to check on the contents in the lecture video.(It is kind of parallel) They do cover the contents from the lecture with one-attempt quizzes, which will take you quite of time to get a good grade.
I had pretty low expectations coming in, but in the end I actually loved this course! It was perfect for me as someone who had familiarity with basic stats and some experience with ML to get a deeper understanding of the mathematics behind the technologies I've worked with. The beginning of the course is a little intimidating if you don't have much of a math background (reviewing continuous probability distributions, which involves calc, and basic linear algebra topics), but I found the professor was really good at explaining the concepts in office hours, and after the first couple weeks things got chiller. In terms of structure, I thought the lectures were good and the assignments were reasonably interesting but not stressful or time-consuming. The one-attempt quizzes are definitely tricky and can be stressful, but they forced me to be sure I actually understand the material which I think was a good thing in the end. You can do well on them if you make sure to read (or at least skim) the textbook and look at the weekly practice problems beforehand. And the course is curved so you don't have to worry too much about missing points here and there. Exams are open book but still challenging. It was overall a nice mix of moderately challenging topics but a light workload overall. Some caveats: if you do have a strong math/stats background you might not get as much out of the course, and if you're interested in actually building ML applications, that's not what this course is focused on. But I found it enjoyable and useful as someone new to data science and ML for getting more theoretical understanding and some practical experience.
This was the worst course I took so far in MCIT and I recommend against taking it. The topics covered are important topics, but the lectures are much worse than other MCIT classes I've taken. The lectures teach basic data science topics, but with a focus on math notation rather than understanding of the actual concepts and practical application. The one good thing about this course is the homework assignments are more practical than the lectures.
This course was pretty tough for me having no linear algebra or statistics background, but was overall doable and valuable. The first week or two is a wake up call where you 'review' some statistical concepts with calculus overtones. If you can get through these two weeks, the course opens up and becomes a bit easier. You'll get a good conceptual foundation of machine learning algorithms. There are quizzes each week that are 1 attempt and worth a total of like 30% of your grade which was pretty stressful but there's a curve in the end. Exams are open note and often come right from these quiz concepts and the practice questions given in each week. There are coding assignments that allow you to put the concepts into practice but these kind of feel like a second thought in the course. A TA takes you over the python syntax for the coming assignment then you are off to figure it out on your own. Sometimes the TA lab notebook is basically a carbon copy of what you need, other times you'll be googling. Overall they end up being useful and helpful if you can figure them out, which you will be able to.
This class is absolutely fantastic and also kind of a let down at the same time. The course content and lectures are 100% theoretical and math focused. The statistics and concepts can get quite tricky, and the professor does a lot of writing on the slides in the videos (which of course makes downloading the slides pointless because you absolutely need the writing to understand what's going on). The quizzes also focus on the theory, and unlike most other courses, there is only one attempt on these quizzes. This unfortunately limits your ability to practice the theory, because you have no chance to retry a concept after receiving feedback. This is because the biweekly homework assignments are 100% coding in python. And yet these homework assignments are the saving grace of the course. Practical assignments with real world datasets using many of the most common and widely used statistical learning models available. Unfortunately you have to rely on the documentation of these libraries if you hope to complete the assignments because again, you have received 0 instruction on them. Recitations are available that focus on the assignments, but that's also less than ideal because there's no recitation for the actual lecture content. At the end of the course I'm glad I took it, but I just wish that the theory could be a bit more connected to the practice to make for a better learning experience.
As someone who had a decent amount of experience with data science/analyst work and statistical modelling prior to coming into this class, I thought this class was still very useful and interesting. The Python assignments will be a breeze if you have done python based data science work before or even taken CIS 545 (Big Data Analytics). The real value I see in this class though is understanding the mathematics/statistics behind common machine learning algorithms, that understanding quite useful for data science interviews and just getting a better handle on the limits of what these algorithms can do. I rated this class as easy, but I could see it being bumped up to a medium if you have zero experience with this type of material. A couple things to watch out for are the one-attempt quizzes (not overly difficult if you take your time and are careful) and the exams. The exams have a decent amount of questions to answer in a short amount of time and the final is a bit harder than the midterm, which can throw you off if you are used to other CIT-CIS classes that give you more than enough time to answer all the questions.
Just in terms of workload, this was by far the lightest of the courses I've taken. You only have homework assignments 2/3 of the weeks, and none of them took me more than a few hours. I actually wish these were more difficult - it would've been cool to program the algorithms yourself, rather than just using the sklearn packages. Others are right that the quizzes and exams are significantly more difficult than the homework, but even these I didn't think were unreasonable. Overall, the material is interesting, lectures are clear, and the course is one of the better ones.
The course was very challenging yet rewarding. The homework assignments are long, and there is a group project towards the end where you will need to pair up with a classmate to complete the assignment. I learned a lot from the course despite not getting a very good grade in it. The lecture videos are very well presented, and the instructor is very helpful in the weekly Professor Office Hours. I really enjoyed the course.
The TAs are extremely helpful in this course. For private TA OH, just know what direction you want to go/ask questions about beforehand as it helps. Pay attention to the Live Lectures, particularly right before the exams. The assignments (63% of grade) are unlimited Gradescope attempts with feedback, so you can submit as many times as you want until you get a satisfactory grade up until the deadline. The quizzes (7% of grade) are 2 attempts, but you can see what questions you got right/wrong and the majority of questions are True/False. The workload varies, as there is about a month period, with the 2 weeks before and after the midterm (in month 3 of 4) where the workload is a lot lighter, but it also depends on how well you take advantage of that time.
This class is a great introduction to data science and touches on practical applications in the business world. There was an assignment due about every week, with a group project due at the end of the course. The group project could follow one of three possible paths that were provided by the instruction team, and a 5-minute video presentation had to be provided by the group as part of the final submission. I had some experience with data science coming into this course, so I'd estimate 5-10 hours a week for someone without any experience. I'd recommend taking this course before 541 or 545.
I took this after 545, and in retrospect I wish I'd taken them in the reverse order, because I would have gotten much more out of 545 if I'd had the foundation from this course. Contrary to what other folks have said in some reviews, I think the lectures in this course are great, and approaching the quality of the content from a class like 593. Homeworks aren't too hard and I don't think any of them took me more than 5-6 hours, but the quizzes can be quite difficult. I tended to just "yolo" the quizzes after spending some time on them, just be aware there can be some "trick" questions on some of the quizzes. The TAs for this class were very helpful and I felt like I learned a lot about the theory behind ML approaches by the end of the course. There's a fair amount of math in this course, but after the first couple weeks it's substantially easier than most of what's presented in 592. My semester didn't have any curve above a B, so it can be tough to pull an A with the difficulty of the exams. Lower grades seem to be curved more based on past semesters.
As someone who works in the data science / data analytics space I thought this class was a very helpful survey of common machine learning methods. If you are interested in applying for data science jobs this class is also good interview prep. My experience was that some of the topics covered in this class were things brought up during interviews. I would also echo the notion that taking this before CIS 545 is a good idea. You will get a lot more out of CIS 545 having taken this first, even if you are familiar with statistical modeling / regression etc. Overall great class and very practical if you work in data science / data analytics. The quizzes can be a bit tricky / stressful, but if you take your time they aren't so bad. Also the tests for this class can be difficult as well, mostly due to not having enough time relative to other classes.
Imaging Informatics is a great course if you have an interest in learning about the Radiology and Enterprise Imaging workflow as well as touching a little bit of NLP use cases. You will learn A LOT of terminology, acronyms and other medical related lexicon. There is an assignment every week and a final. The assignments are relatively straightforward- some are written and others are code based (being able to read and transform data in specific formats for imaging metadata). The coding assignments use an autograder which you can submit as many times as you need to pass the tests. The end of the course has an assignment using some NLP libraries as well as Chat GPT showing some of the practical use cases for NLP in the medical workspace. The medical realm was very new for me and I very much enjoyed gaining exposure to a new field. Not sure if it's something I'll pursue but it was intriguing and a lighter workload. I think the course was well made and the professor explains concepts and challenges in an articulate way. Recommend :)
Quality of the recorded lectures and recitations is an absolute joke: the free version of this course and UMichigan's equivalent intro to object-oriented programming on Coursera are far more detailed and comprehensive. Homework is not that challenging but most assignments have secret requirements that aren't immediately apparent from the included instructions or the provided unit tests, and if you can't find a slot to talk to a TA good luck finding out what the requirements are. I would have also appreciated it if pair programming and Git were mandatory modules introduced earlier in the course as it's mandatory for the last assignment. TL;DR ignore the lectures, you'll need to see a TA every week to get the full assignment instructions, if you need additional help on the conceptual side of things look at Coursera
Good class! Thought the professor did a really good job explaining complex math topics. I found the first two weeks to be pretty rough. They dump you in to discrete probability (from 592) and continuous probability (something I’d never seen before). After those two weeks, the course gets much better! I found it to be on the light side. I enjoyed the homework. I thought they were well designed and taught me a lot about modern Python machine learning and stats frameworks. My favorite part of this course was its efficiency. I felt like there was no wasted time. The professor got to the point quickly with the lecture videos. There wasn’t much busy work, which was much appreciated. This is the perfect second course if you want to do a 2 course semester. Less work than 594 (for me!) Exams were reasonable, and not difficult if you could handle the practice exam. The only tricky part of this class were the quizzes, especially at the beginning. However, if you take your time, do the sample quizzes, and ask questions on Ed, you’ll be fine. There are enough points even if you bomb a quiz or two, that your quiz grade will be fine in the end.
Oh wow, where to start. Content is interesting. I learned a ton about enterprise data analytics and analyzing truly large datasets. This course works as a sample buffet to learn about a ton of data science aspects (ML, scraping, distributed computing, visualization). It’s a great way to get an intro to a very wide breadth of topics. Then, you can take other classes in MCIT depending on what you’re interested in. I would say that it’s not super rigorous (very little math). Also, if you don’t understand a topic, not a big deal, as you just move on very quickly to the next one. Course content was really long. It could be easily shrunk down to be way more concise. It didn’t really help or connect with the homework. I thought the graphing/data visualization part of the homework was not helpful. You had to implement really specific graphing requirements with Seaborn. Again, not useful for my day job. I enjoyed the earlier homework (Pandas and SQL). I thought the Spark homework was obnoxious, but probably useful and a good introduction to distributed data analysis. I thought the midterm was kind of dumb -> they asked for a lot of inane, random details from the lectures which I would never see myself needing to know ever again. Class average was fine (once they handed the grading mess, more on that below) Course itself was horribly disorganized (worst organized class I’ve ever taken). They misgraded the midterm (by around 25% or more) which was pretty shocking. This was after it took them two weeks to grade it. IDK how the grades got released without any sort of quality control or check. Pretty embarrassing for this to happen at Penn. Office hours were canceled repeatedly and regularly. They tried to fix this, but it was still highly problematic by the end of the semester. I averaged a 2-3 day waiting period for my questions to get answered on EdDiscussion.
The workload of 10 hrs/week equates to a C+/B- encompassing 100% on the quizzes and A's on all projects and an A on the midterm exam. Rating of neutral is purely due to lack of interest in low level details of cellular networks. Interesting topic but extreme amount of information. Very little programming with high focus on understanding how cellular networks work. Professor (as subject matter expert in the field) is very engaged with students and willing to help at any time.
Overall, a good introduction to Python and Java. Homework was helpful for understanding the programming concepts but the lecture videos and slides are somewhat light on content. Would have been helpful to pair the course with a meatier set of reading and background materials.
Class is taught great, felt like the lectures provided all the information needed in order to do well in the class and understand the concepts. If you have any programming background (understand if-else, while loops, for loops), this class is a breeze. The homework assignments are easy and don't require much time to finish, yet solidify your understanding of the concepts.
Lectures are very brief and do not cover what you will need to complete the homework assignments or the exams. You'll have to attend office hours or study outside materials in order to pass the class. The concepts themselves are interesting, just wish more effort and context was put into the lectures.
This course centers around 2 projects. Make sure you have a good group lined up made up of members that are all committed to taking the class. You don't want a group member dropping the course. I also advise trying to do the extra credit on both projects as it adds a considerable amount of cushion for the exams. The exams aren't too bad but are kinda an after thought after the projects. C++ wasn't too bad but took some getting used to.
The course builds the fundamental understanding to coding and while it is not easy by any means, you can achieve a good grade if you put in the work.
Of the 10 courses that I've now taken, this was probably my favorite. I found the material to be very interesting, and the projects were challenging enough to keep me engaged. This class really felt like an opportunity to solve fun puzzles. If the ideas of tinkering in backend logic, learning about how computers communicate across the internet, and interacting with distributed systems sound interesting to you, then you'll enjoy the course. Highly recommend for anyone interested in working as a software engineer. I didn't know C++ coming into the course, but I found that the process of reading the existing codebase really helped me to start feeling comfortable. My Google search is full of "How to ___ in C++" at this point, and honestly, it feels like I learned more that way than I ever would've by following a tutorial. The projects can seem daunting at first, but the best advice I can give is to just read the portion of the codebase you're working on until you understand exactly what's happening. Then, try to add to it. Also, having a decent team won't hurt. For what it's worth, our exams were open book/open note, all short answer questions, and generally pretty easy.
I'm glad I took this course, because now I know with 100% certainty that I'm not interested in working as a data analyst or data scientist. If that's what you're into, then maybe this will be a little less relevant to you, because I'm certainly biased. That said, the material is so hard to get through. It's not that it's particularly difficult, but I just found it to be so boring. And there's a LOT of material, which is all very dry. I don't think it's all bad, because you can learn some useful tools/frameworks. I learned Pandas and MatplotLib, which are both nice to be able to use when necessary. If there is anyone considering taking this course because they want to learn SQL, please take 5500 instead. That class does a great job of teaching SQL step-by-step. 5450 basically expects you to teach yourself SQL for one HW assignment. I felt fortunate that I already knew SQL from 5500, because there was basically zero SQL instruction in this course. I know that's not the main learning objective of the course, but I've heard students mention taking this class to pick up SQL, so I feel the warning is warranted. Otherwise, the course feels like a survey of data science tools and machine learning concepts. The one upside may be the group project, which is extremely open-ended. This really has the potential to be what you make it. These things considered, my rating would've been 'Disliked'. However, it just so happens that this course was also managed terribly. Like, laughably so. The grading for our first exam took several weeks to come out, and had somehow never had human eyes on the actual grades? The exam was terribly written, so a bunch of the questions were vague or had blatantly incorrect answers and had to be entirely regraded. TA's were constantly late to office hours, so students were always posting on Ed asking if office hours were happening. By far my least favorite course in the program.
I feel like this course has an undeserving number of negative reviews. I enjoyed this course a lot. The key, in my opinion, is coming in with your expectations set appropriately. If you know zero about databases or SQL, then you will 100% learn valuable skills in this course. Are the lectures dry or theoretical at times? Sure. But the information is actually useful, and I found that when working on the final project, a lot of the theoretical stuff actually came in handy as we designed our database schema and optimized our DB's performance. Can you learn SQL through a Udemy course or a MOOC? Sure. But I also think that understanding the theoretical underpinnings of relational databases is a crucial piece of the puzzle. The main thing is: Do not come into this course expecting to learn web development, JS, react, etc. You will be introduced to these, but at a very superficial level. They give you just enough so you can have a skeleton to build your final project on. If you come into the course primarily expecting to learn frontend web development, you'll be disappointed. There are better (and cheaper) resources for that elsewhere. However, if you come into the course because you want to learn about databases and have the opportunity to build an open-ended (perhaps resume-worthy) project, then you might actually enjoy yourself.
I generally enjoyed this course, and it does provide great insight into workings of a computer. Instructor Dr. Farmer is very charismatic and likeable instructor, and does a great job. However, the course materials, particularly homework assignments are excessively verbose and messy, contain errors etc. So, after reading the assignment (spread over dozens of pages), you may still be in two minds what is actually needed. I feel a 'checklist' would really help with a lot of assignments, as it's difficult to be confident whether you completed everything correctly. I really recommend putting effort in reading the textbook, and a lot of crucial detail only became clear to me through the textbook. Also, I recommend putting a lot of effort into the mid-term exam, as the second part of the course (C and memory operations) feels substantially more difficult than first, but both exams are equally weighted. Finally, for the C programming part it would help that you use CLion or any other actual IDE, as Codio is very basic. It will pay for itself quickly. CLion is quite easy to use if you used IntelliJ before, and will give you upper hand in last three-four assignments.
As my first foray into MCIT electives, the new iteration of 542 left me disappointed in the quality of the material, thoroughly discouraged, and dreading future electives. On paper, none of the material is overly difficult - a fairly standard statistics class with some ML tacked onto the end. However, the lectures remained highly theoretical throughout the course and offered almost no insight into how to carry out the exercises in the practical applications during HW. After floundering through homeworks, the grading offered little consolation - many questions were binary right/wrong with little partial credit given at all (even after ~10 hours of effort). This frustration culminated in the exams, which were each 2-3 multi-part questions. If you made a mistake at any part, no credit was given for carry forward errors. Worse still, each exam counted for 20% of your grade. In my mind, grades are meant to reflect the percentage of my understanding of the material. Does my inability to get one question right really reflect a 10% reduction in understanding?!?! (40% of final grade was exams; 2 exams each 20%, 2 questions each then 10% of final grade) I should caveat everything with the fact that I certainly fell on the lower end of the distribution of grades - but as a normally high achiever relative to the average in previous MCIT courses, you can understand my frustration. All in all, the grading, lecture-HW bridge, and compassion for part-time students all need a major revision in 542 in my opinion. The current course as structured is not worthwhile, and certainly not as easy as the previous reviews (from what is now 541) make it out to be.
This was a very hard class for me personally since I never took probability theory before (I took basic stats classes). Exams were very difficult and one step ahead of what we learned. I wish there was a better guide for exam prep and homework. It seemed like people found this course very easy or hard, and not much in the middle. Nonetheless, this class was a good class in my opinion. Professor was very helpful and I loved Ercag Pince's recitations (the best TA in the course IMO).
I liked this course due to the dedicated professors but I'm neutral since the HWs and exams were extremely hard and frustrating. I loved the project part the most because I got to connect and work with other classmates. I feel like TAs were very helpful for the most part.
I don't personally like systems content, but the Prof's sunny attitude made it better. Autograder for projects and open-note for exams made things less stressful. Concepts are hard, but grading is relatively easy.
This review differs slightly from what I interpreted the consensus to be - 594 was not quite as easy as was advertised. From what I've read, the revamped curriculum/assignments present more challenges than in the past. In terms of the assignments, you only have weekly HW for the first half of the course. Each one appropriately assessed your understanding of the material with 591-like coding problems. The unit testing component grading was not clear, but this is more of a TA communication fault than an inherent flaw of the course. Apart from one assignment, the class average in each was always an A. Then, in the second half of the course, the structure of weekly assignments completely dissolves. Instead, grades come from two projects (one individual and one group) and a final. The final definitely hurt my grade - and it is critical to make weekly progress on the projects to ensure you don't have too much work too late. The one benefit is that the group project built some off the individual project, reducing the amount of work needed. Otherwise, the course content itself and flow of modules made a lot of sense. All in all, this experience left me with a neutral opinion of 594 - it's definitely a non-trivial amount of work, but nothing insurmountable as long as you give it some dedicated time, effort, and thought.
595 - easy to do well in, challenging to truly understand. In terms of grading, the course primarily used 3 projects with multiple checkpoints along the way for each one. None of the projects proved particularly challenging, and some of the course modules themselves were literal walkthroughs of the intended behavior of the programs. Both exams were neutrally challenging and open note, with the one caveat that they tend to be more abstract (not binary right/wrong answers) than normal CS courses. Then, just to sweeten the deal, the course is heavily curved - advertised from the start in the syllabus. However, in terms of the course content itself, the modules are weak in terms of comprehensibility. Many of the modules had two types of lectures: highly abstract ones meant for CIT, and some recordings of lectures Boon gave during COVID. The COVID lectures proved far more helpful in providing details but were often extremely lengthy and rambling. It was difficult to glean the actual takeaways from all the other minutia. Thus, I have come to a mixed opinion on 595. For one, it's easy to do well in terms of grading, but how well do I feel I truly understand the material? I think that is yet to be seen...
This has been one of the worst courses I have taken. I would have dropped it if it were not mandatory. The professor is likely a great theoretician and among the best in his field (maths), but as for teaching - honestly, not Ivy-league worthy. The structure of the lectures are horrible, the technical execution is really bad. Mostly it is handwritten scribbles of mathematical formulas. And many of the printed formulas contain errors which are then being corrected in posts on EdDiscussion. This is even more irritating since this seems to be at least the third iteration of this course in its current form. If you are very good at math, then this course is probably going to be easy for you. But in that case you might wonder whether it is worth paying $3500 for a course when you could just spend a fraction of it on some books. If math is not your strong suit and you thing of taking this course because you would like to learn the math behind ML algorithms, but you would need somebody to explain it to you so you can understand - run! You will be frustrated and spend an enormous amount of your time watching youtube videos and reading articles trying to understand. Some weeks into the course, I stopped watching the lectures, but would just skim them to find out what the topic of the video was in order to be able to search 2-3 youtube videos which would explain the same thing. The homeworks are doable, but are often very disconnected from the lectures. Often you need to reverse-engineer the question in order to find out what is asked for you. Then you go on a quest in the recommended books or additional sources you found which explain the topic to slowly find out what you need to do in order to solve the hw. Exams are hit or miss - if you make a mistake early on in one of the questions, the whole question will be wrong subsequently. That would be 5% of your final grade down the drain. Would not recommend until the course is completely revised.
A relatively light intro into a lot of mathematic/logic concepts. It had been 15 years since my last math course, but this didn't really expect too much existing math background, but more logical thinking and clarity of writing. If you studied Philosophy or similar you will probably find this a walk in the park. The only thing I really had to remember from my long forgotten bag of math tricks was factoring polynomials. It would have been nice to tie more of the concepts directly into CS, like some of the recommended textbooks do. It is a shame that this course doesn't expect you to come in knowing anything about computers or programming languages, so it avoids that whole area. The professor is great, but the TAs make a lot of errors writing the HWs which waste your time if you try to get ahead. The exams get progressively easier -- the first was a brain teaser in places, and the last was possibly the easiest exam I've taken in higher education.
Had my reservations going into it, but it actually ended up being a really interesting course. If you do your research into how to answer the problems they give you (you must justify everything in your answers), then the grading will make sense and you'll know what the TAs expect. Exams were easier than expected, especially the last one, which apparently is a trend with this course over time.
The course material is interesting and so are the lectures, but I found the HQ instructions to be an absolute nightmare and could use a quality control update. The workload is nearly unsustainable to balance with a full-time jobs or other commitments. My family felt the the pain of this degree the most in this class to the point where I'm considering dropping out; although, I scraped by with a C+ If you have coded in C before or taken a electrical engineering class, a lot of this may be review and you will not struggle. I did not know about any of these concepts and it was too much for me to handle
It was my final course in the program and I regret taking it. The course itself contains a lot of very dry information and for me it was the only course in the program where I watched the lecture videos and got a feeling that I couldn't take anything out of them. It contains a lot of topics without getting into any details and lecture material does only a little help with homeworks. The homeworks were reasonable but again it helped a lot that I knew SQL (for the students without prior knowledge it could be much harder given little help available). The exams were the worst exams I have ever taken: they asked about some random facts from the lecture slides that either could be easily looked up if one faces the same problem in real life or literally don't make any practical sense. Also, the course was poorly managed: midterm exam was blatantly misgraded (and it took more than 2 weeks to release the grades) and nobody has checked it before releasing the grades, there were frequent no shows of the TAs for the scheduled office hours without any announcements. The only bright spot for me was professor's Office Hours where I could get some additional information and materials to go deeper into the topics of interest (but funny enough all of this was almost non-related to the course material itself). And this semester due to the limited offering (I had a choice for example only out of 4 courses) it was oversubscribed so it added to the management headaches. I got some starting points for my topics of interest but nothing more.
I absolutely loved this class. It’s a must-take class if you are even remotely interested in data science. Professor Ives has created a course that is not only one of the most practical in the program but also intellectually gratifying. The lectures thoughtfully integrate theory with practice. The coding assignments provide excellent hands-on experience with the numerous libraries and frameworks covered in the class. By the time you complete the final project, you feel well-prepared to tackle data analysis and machine learning tasks in the real world. Most importantly, by introducing a broad range of topics in data science, the course inspires you to further explore and extend your learning in various directions. I genuinely looked forward to Professor Ives’ stimulating office hours every week. Here are some tips for success. Brush up on Numpy and Pandas before the class. An excellent way to do this is by getting a head start on the recommended textbook, Python for Data Analysis, which is an easy and compact read. If you have absolutely no experience with Pandas, consider first taking the half-credit course, How to Use Data. The more you know, the more you get out of this course. If you have some understanding of SQL and/or machine learning, this course will allow you to take your understanding to the next level. Otherwise, it’s a good way to get your feet wet and pursue these topics further in other courses. Watch the lectures over and over again and take detailed notes. Every thing on the exams has been covered in the lectures.
I want to leave a recommendation: do attend the professor's office hours or watch the recordings at a timely manner. The instructor Nan would prepare much materials to present, which are valueable supplements to the lecture videos.
This was one of my favorite courses. Apart from learning a lot about low level security, cryptography (it really demystifies the subject!) and web security, it catalyzed self-learning/refreshing of the topics (assembly, js, etc) that I have forever delayed before. This course has the best lecture videos in the program, Professor Angel had great availability and always helped (despite some of the topics I asked about were a bit outside of the scope). Also in fall 2023 it had a really great TA team - available, responsive and knowledgeable. Enjoyed it a lot and took out a lot! And - when I solved the project problems (and, especially, some EC ones) - it felt so rewarding. This was emotional booster too! That said, I even enjoying the exams as they really require you to think, not only to memorize things. Definitely recommend!
Professor's videos were disorganized and the lecture slides frequently contained incorrect formulas, which are then "corrected" when a TA posts an announcement about it on Ed, but this is difficult to keep track of when trying to learn from the videos. Better to watch Youtube or Open Courseware videos if your goal is to actually learn something. TAs also nitpick on inconsequential things when grading (such as not showing every single step of basic algebra) and are inconsistent amongst themselves; I've recovered a total of 30 points (out of 160) alone, across the two exams alone -- which amounts to nearly an entire grade bump! The lectures often do not explain things well or correspond to the homeworks or tests. Horrible class, horrible professor, horrible graders. I bet a good portion of the class wishes we could get our tuition back.
A necessary first step into the program that for those with prior programming experience will feel very easy. However, the homeworks are not always trivial and do require some effort. Exams were much easier than many of the homeworks.
Front load of class is very high workload - after first exam, workload lessens and it is more manageable - expect to work a lot of hours to work on the homework but also learn a lot about AI algos + enhance your Python skills amount of topics is overwhelming - exams are based on textbook Some topic overlap with 5450 Big Data Class Choose Prof Chris if you can...
If you are planning to learn this class and call yourself a data scientist, turn away! This class is very badly structured and the professor nor TAs care if you learn or not. The Piazza post usually take a couple days to be responded. By then, you prob already know the answer or dont care anymore. In addition, the course is badly designed. The slides are full of math but the prof wont explain it. Try emailing Prof. Good luck. No reply. The entire course material could be found on Coursera taught by Andrew Ng. Much better! Exams are non-related to a lot of the materials learned. Before exam, they give you a practice exam to work on. First, they tell you this will be very similar to the actual exam. But then when we stuck on some integral question, they say this is not related. The exam will not have this question. They will not provide solution at all.
Overall, I enjoyed this class. I liked that we actually got to build programmes and you got to see it work before your very own eyes. Now, it is a challenging course for sure and depending on your prior exposure to programming, it will heavily influence how easy or hard the class is. The lectures are exactly what they are, they give you a view into what you can achieve with the particular language currently being taught and examples of how to apply the concepts for that particular week. Bear in mind that when working on the homework, it won’t be a 1-1 conversion. The homework is never just a variation of what you have learned in the lecture for that week. It is its own separate entity, meaning that the lecture videos will help but you would need to figure out some other aspects for yourself and that will take you time. But the TAs are just marvellous in their willingness to help and patience plus the grading rubric gives you room to get as many points as possible even if you don’t get the full points.
As the course name implies, this is an applied machine learning course and is a good start for individuals who are new to data science and statistical learning; basic theory, situations when certain methods/models are used and programming assignments and sample code on how you would implement these learning methods. If you are looking to learn how to use statistical learning in a relatively short amount of time, I think this course can help you; though that assumes you have the dataset ready for it which is likely an entirely different subject which I think the Big Data Analytics course will be covering. Tips: Don't take the quizzes lightly. The quizzes aren't too difficult and they provide practice problems to help prepare you for the quizzes before you take it, but because they can "seem" easy and simple it can really trip you if you get wrong a quiz with only one or two questions and then you either failed the quiz or get 50%. -Tip on quiz handling - do the quizzes last after you have watched the video lectures, read the book, attended/viewed the Professor Office Hours Programming assignments are straight forward and are more of a guided lab to give you a hands-on feel. The first week or two will be a hurdle if you are not familiar with probability theory, but my recommendation is go hard in to study probability theory in the first and even a week prior to the class. You need to understand the theory behind probability to understand the methods/models you'll learn. Once you get past that hurdle, the course isn't too bad. Don't let the open book exam fool you. It's either you know it or you don't cause exam times are shorter compared to other classes' exams.
This course has been a disappointment, falling below the standards expected in the MCIT program. The video lectures are lengthy and lack clarity, making it challenging to extract key information. Despite covering numerous topics, explanations are often insufficient, leaving students with a shallow understanding. While the professor is accessible, the focus of office hours on narrow queries fails to address broader conceptual gaps. Exam questions prioritize memorization over comprehension and are often vague, leading to widespread confusion among students. Moreover, grading errors on the first midterm, including the misuse of autograders, have resulted in significant class-wide dissatisfaction and lengthy regrading processes. The workload is burdensome, particularly with a demanding final project and limited study resources for the exam. Overall, the experience with this course significantly detracts from the MCIT program's value, highlighting the need for improvements in future iterations.
As someone with some minimal prior exposure to coding, this course was a nice introduction to python and java. The lectures were alright - though the bulk of the learning happens in the homework assignments. With the current grading structure, it's hard not to do well since so much is auto-graded up front; the only question being whether you want to put in the time to correct a failed test before you submit. By the time the proctored final comes around, most dedicated students will be able to skip it completely and comfortably keep an A.
Very practical class, but super dry. Lectures have a strong disconnect from the quizzes.
I am not good at math so this class was hard for me. I would say this class should be split into 2. The projects/hw are all code related, very doable and easy. The lectures, quizzes, and exams tho... are just math. 54 questions in 100 minutes. The hardest exam I have taken in MCIT because I do not test well and to do this many questions in a short amount of time was killer. I felt there was a really big disconnect between the exam questions and the projects. I nearly failed this class.
Pros: excellent video lectures, reasonable and clear expectations for HW, using Codio as the IDE for the entire course prevented confusion in the group project. Lectures are actually relevant to the homework (this seems rare in MCIT) so I had to break the habit of ignoring them. Neutral: TAs were for the most part fine, except for Antonio whose rudeness and constant presence on Ed Discussion made it borderline useless as a resource. Just go to office hours if you have a question. Cons: First half of course is irrelevant to real-world SWE work. And why on earth are we being tested on programming by writing in a WORD DOC? Might as well do the final with paper and pen and have us mail it to Philly at that point.
The course name sounds very interesting, but the quality of the course is extremly concerning and subpar. To start with, the instruction team doesn’t seem to devote enough efforts to the course. The professor didn’t show up for many office hours with no prior notice at all. I have never had similar experience in MCIT. This is extremely disappointing and frustrating given the course only offers 1 office hour per week. Moreover, the TA support also seems very inadequate for the class. Almost all assignments / exams are graded by autograde. And I don’t see TA’s value added in this course specifically, unlike other class where TAs could play a very important role. Also, the course contents are poorly designed. There is no background intro of how methodologies were used, but just pure concepts listed on the slides with no proof and limited examples. It feels like something I could easily self learn from the textbook or wikipedia. I couldn’t even think about any insights I get out of this class. Overall, despite the class is very chill and easy, I don’t think it meets the standard of a MCIT course in any way. I hope that future itrations could revamp the class.
- Homework assignments use Penn grader. You will find yourself actually spending more time trying to find the specific solution the grader wants than actually learning. - The lectures are fine -- the Professor does a good job of making the material feel interesting. However, little intuition is shared. - The exams were filled with multi-part questions where if you missed part A you will get parts B,C,D wrong. - The group project really is an afterthought of the class. Perhaps it depends on the group you get, but it doesn't feel like it adds anything to the course experience other than more stress. - Material is very surface level: for example, you spend one week on Neural Networks rather than learning more fundamental understandings. - Midterm practice tests sometimes just provided answers rather than explaining solutions. Overall I would not recommend this course. Nonetheless, it is required for MSE-DS.
- Course makes you write in Katex (on Gradescope) which is strange since most people use Latex in industry and you cannot use tools like Overleaf as a result. - Course lacked identify, flip-flopping between proof assignments and simple python assignments. Would have preferred more depth on the former. - Exams had 2 questions. If you missed one, you are bound for a low grade on the exam. - Important to review your exam grades since I found TAs tended to quickly and maybe miss partial credit. - Lectures were dense and lacked consistent pacing of difficulty and material. - Weekly assignments created unnecessary grind. As well as weekly quizzes. Overall I would not recommend this course, but it does a decent job at being an intro to "latex" if you haven't done that kind of stats/math before.
Class wasn't particularly difficult, however Exam 1 correct and wrong answers were fully made available immediately taking the exam leading to "higher" averages. Obviously can't say anything for certain but this impacted the curve and furthermore the curve (in my eyes) did not make any sense. 90.5% got boosted to an A, but 87.91% remained as a B+. When asked how this was determined, received a nothing-burger response from the TA and class discussion was closed so I was unable to respond.
I enjoyed the course a lot, but feel it can be managed better. The course has some very manageable progression of programming assignments, some are relatively easy while some are tricky to get right. The assignments are very interesting, as they are both relevant to the contents covered for the week and most have unlimited resubmission before the deadline (except the extra-credit ones). The extra-credit assignments are fairly difficult and demanding. The course instructor is very approachable, except sometimes she would go through some problems at a pace quicker than one would normally be able to understand. Also, she has been very receptive when it comes to student grievances, and is the only one so far I have seen who would interact with students on Ed Discussion. The final exam can be tricky to do well in. But this has been compensated by a very generous grading scheme, so if you do well in the assignments and solo and group project, it is not too difficult to get a decent grade. Overall I liked the course.
This course was incredibly engaging, covering a vast array of content from transistors to LC4, assembly, and C programming. It demands consistent attention to the material each week to avoid falling behind. Although there are opportunities for extra credit in many of the assignments, the time invested in solving them often matches that of completing the regular homework. Overall, I now possess a much clearer understanding of how code operates at its core, aiding me in visualizing how various components integrate. The video lectures were particularly effective; the professor adeptly simplifies complex concepts into easily digestible explanations, significantly enhancing my learning experience. In conclusion, I thoroughly enjoyed this course and feel enriched by the knowledge gained.
Pros: Easy course and enjoyable topics if your curious about CS. Projects are short and have unlimited submissions. Cons: Exams questions are circuitous and grading is harsh. Lectures need a refresh. Tips: Exams are open-note so questions tend to test deep understanding of the topics (as opposed to memorizing terminology).
I liked the content. End of semester was busy with final project + exam. I think many negative reviews are due to people being frustrated with grading or course management. I personally don't care that much about my grades (the difference between A, A-, or even B+ doesn't feel that significant to me; I'm in this program to learn and I don't think small differences in GPA matter at all for job hunting). I personally think course management had some gaps, but then again so have all MCIT classes I've taken, especially electives. With grading, there are a few times it was maybe a bit more strict than other classes, but I felt grading was still fair.
The video lectures are clear, concise, and highly informative, making them easy to understand. However, the assignments are disconnected from the content covered in the video lectures. As someone with limited coding experience, I found myself struggling with the homework assignments. Much of my time was spent deciphering the provided code and understanding the homework instructions, rather than applying the concepts learned during the lectures. I believe the homework fails to adequately address fundamental data structure concepts, resembling more of a LeetCode-style problem-solving approach. While learning LeetCode is valuable, it deviates from the course's intended focus. Furthermore, the final exam primarily tests knowledge from the video lectures, rendering the homework, even if completed with extra credit, less beneficial for exam preparation. Despite these challenges, I have undoubtedly gained new insights and knowledge, albeit with the realization that my understanding of data structures remains insufficient. While I earned an A in this course, I would rate the course itself no more than a C due to its shortcomings in aligning homework with lecture material and adequately covering essential concepts.
Horrible class and don't believe those comments saying that this is an easy course. Well, content wise it is easy, at least compared to other courses. However, the assignments, especially the solo project and group project, are overly complicated. Like one of the reviews mentioned, the professor intentionally gets simple things complicated and vague. While this is a data structure class, you actually spend a huge amount of time on dealing with regex, csv file processing standard, etc. Tons of requirements here and there in the project. You are basically sunk in details like truncating doubles to integers. I feel like this is just an advanced version of 591 and did not really learn essentials in data structure.
For someone with no coding skills, this class was both challenging yet accommodating. It is fast paced but Brandon is very patient, excellent at explaining concepts in multiple ways and provides plenty of practice assignments, code-a-longs and demos to make sure student's can fully grasp all the content of the course. Well structured and well taught!
Love this course! I agree with many of the reviews stating that your experience in this course will vary greatly based on your previous knowledge. This course requires or recommends CIT 5910, 5920, and 5960, as well as some knowledge of Javascript and Web Development (HTML, CSS). I took it after completing all three recommended pre/co-requisites as well as a basic project with Udemy to gain familiarity with JS, HTML, and CSS. I was fortunate to find a group of talented and dedicated peer students to work on our project throughout the semester. It was a fun semester for me. In contrast to some of the reviews, I personally found it beneficial to spend time learning about the abstract concepts of DBMS. While I can easily do more practice with SQL or NoSQL queries online, I don't envision myself delving into any of those abstract concepts on my own. For future students considering this course and aiming to have a positive experience like I did, my suggestion is to come prepared by learning some JS, HTML, CSS, and even React beforehand. Find reliable team members and read "Database Management Systems 3rd Edition" by Ramakrishnan, as I found the knowledge from this book helpful for two exams. Attend office hours with TAs and the Professor, since I gained a lot of valuable information from them during this semester.
593 left me with such mixed emotions - similar to what I've seen in many other reviews here. On one hand, the course flowed well for me - topics progressed logically through various layers of abstraction in the CPU. Each topic also tied into the broader industry well, validating why I was taking the course at all in the first place. Sitting in 595 now and my work, it is evident that 593 will undoubtedly help me even just in my baseline understanding of underlying computer systems. On the other hand, it did not feel that the course was set up well for working professionals. 593 was the only course I took this semester; and the weighting/challenge of the project and final exam amidst busy season at work definitely hurt my grade. Perhaps that's a planning issue on my part, but the emphasis on two items for the grade, the lack of curves anywhere, and the weekly assignments made it extremely difficult to catch up. More flexibility would be so very appreciated if this program is truly to allow for some self-pacing based on our other commitments in life.
This class is fantastic! Speaking from my own experience (I have taken over 25 graduate level classes at three different universities and have also taught at the undergraduate and graduate level) I can honestly say that CIT 593 with Dr. Farmer is one of the best courses I have ever experienced. The course takes the point of view that you know nothing about computers or computer science, and breaks the semester into two parts. The first part builds up your knowledge on binary representation, logic gates, and ultimately gets you to the CPU and assembly language. The second half of the course mainly covers the C programming language, and the materials and assignments help to reinforce key concepts of how the CPU and memory work together to execute programs. From my point of view, this is the keystone class upon which the MCIT program is based, and I am glad that the program director Dr. Farmer takes up the task of teaching it himself. In terms of materials, video production, pedagogy, assignments, and topics covered, it is very clear that this class is a labor of love for those involved. Office hours, recitations, TA hours, and discussion boards are all great. One of the best aspects of this course is that upon completing it, all sense of imposter syndrome melts away. I am in 594 and 595 right now, and while we are learning new concepts and material, the sense of ‘am I cut out for this?’ is completely gone. CIT 593 provides a bedrock foundation which makes technical computer science concepts much easier to learn and incorporate into your own understanding. To use an analogy, if we imagine computer science as a craft like carpentry, 591 introduced us to hammers and saws, 592 showed us how to calculate how much lumber and how many nails we need for a project, and 593 shows us how a house is actually built from the ground up. Once you understand how it all works, everything else seems like variations on some core themes. Overall, I highly recommend this course, especially with Dr. Farmer at the helm. My only cautions are that this can be a time intensive course especially on the later assignments, and the final exam is much more challenging than the midterm. But if you put in the time and really grapple with the material, this course will change you for the better. In fact, it will probably change the way you view the machine you’re using right now to read this review!
If first half was appropriately difficult, the second half is definitely not friendly for people who have NO programing background. The gap between what first half was about and how difficult second half of the course is is HUGE and it's missing some conceptual big-picture explanation especially when it comes to C language. I agree with another reviewer, the course should be split into two courses. Pros: - Some of the content were pretty interesting, including how computer actually works, and how machine language works with other higher level language Cons: - So much content jammed into one course, and the key concepts and main ideas are lost a lot of times in many many dense details and dense material. - C language was particularly a pain point, the course assumed everyone understands what's going on with the C language logic, how functions are written. No over arching high level conceptual explanations of rules/logics for C - Homework and course material are disconnected sometimes, require a lot of study on your own
This was a class that I absolutely despised while I was taking it. Now that it's over, I'm glad I learned the things I did. I took the class with Dr. Lutz, and he was very helpful and responsive to students in my experience. My main qualm is that a lot of the content is presented in the least accessible way possible for folks without more math-y/theoretical CS backgrounds. The lecture videos, especially later in the course, are often so hard to follow that I'd have to consume hours of additional content (shoutout to Abdul Bari) before I could even begin to understand what the professor was explaining. There's also a very noticeable decline in lecture quality as the semester progresses. All in all, this class is very hard. The work feels extremely rigorous, and some weeks it was a struggle to gather the motivation to do the homeworks, which are all Latex-formatted proof-heavy assignments. I did think some of the algorithmic problems were kind of fun to solve, but then I'd remember I have to type everything out in Latex and provide a proof of correctness and a runtime analysis. Having a good group to work on the assignments with can be a godsend. My advice would be to take this class alone or pair it with something lighter if you're not working full-time. I took this class alongside 595, which was a challenge at times, but totally manageable. Taking 596 will be challenging, and unless you're a masochist, the vast majority of the experience won't be fun or enjoyable. The concepts I've learned have helped me get better at solving leetcode problems, which is definitely a valuable skill if you're looking for SWE jobs. Overall, a good chunk of the material taught in this class is good to know, but learning it is awful.
If you had known the included topics prior to taking the course, you would do fine, and might even like it. I'd say it's a good "review" course to connect all the dots together, but definitely a terrible course to "learn" anything new. Personally, I came in with good knowledge about the material covered in the first half of the semester. For those modules, I benefited from the lectures in enhancing my existing knowledge. I'd say the first half is about what data analysts would do in their job. However, since I had no prior exposure to neural networks or modeling, the second half of the semester was, somehow, basically pointless to me. Each week, we only scratched the surface of the subject, and there was no guidance to build up the knowledge at all. Additionally, this is the only class that I ran into a bunch of TAs that neglect their duties. Many are simply uninterested. We had a huge problem with the midterm grading, and ended up getting class-wide regrades for a lot of questions. That being said, I think the professor is a wonderful person.
Not that difficult of a course, but extremely useful in practice. I use the Tableau, Jupyter Notebook, SQL skills I learned in this course pretty much every day as a product manager. At least for someone who works in product, this course probably has the highest bang for buck in terms of value-added skills to further one's career. I think if you're interested in a career in product or business analytics or data science, you really can't go wrong taking this course. Extremely well taught, extremely practical.
This was one of the most interesting courses in the program, but it will be very difficult for anyone that has a demanding full-time job and cannot spend 10-15+ hours a week doing readings while spending an additional 10-20 hours a week on homework (especially during the first half of the class). The exams were also challenging (low median score). I actually believe it was also one of the most well-taught courses in the program as CCB can actually teach, but the scope is just too broad if you have demanding real-life commitments. If you just want to get a good grade, you can manage that by doing excellently on the homeworks, using the TAs (excellent for this course), and finding time to study the readings so that you can get a B or higher on the finals, but if the concepts are new to you and you want to actually learn the material, you will have to spend a LOT of time on this course, and realistically you might have to settle for a lower grade than you're used to.
Overall, a mentally demanding course that if kept on top of time-wise and by practicing problems/finding additional resources to cement knowledge, can be conquered. Pros: +Ask the professor about *any* problem on the HWs or the Exams, and he will provide :) . +There is some form of curving at the end which helps a difficult class feel slightly less terrible (but it is unknown what the professor does, other than >50% raw grade in the course is passing and then he determines the letter grade groups from there) +If you like math problems, discrete math, probability, graphs, and generally writing/drawing things out like algebra, proofs, Venn diagrams, trees of probability, and graphs/trees, this is a rather mentally fun course. If not, re-file this in Cons. Cons: -Feedback on grades is 1+ week from submission, so by the time you need to submit your next homework, you have no idea if you did well on the one prior and to learn any lessons from it. -New topics start the week of the upcoming midterm on the previous topic, along with the new topic's homework being due, so those weeks are notoriously difficult to handle time-wise and raise the average workload from ~12hr for a module+hw to the 15hr I put down here. -TA support at best would be only slight guidance on problems (seemed all were afraid to give too much away, rightfully so in many cases) and at worst felt combatitive when a question asked on Ed would elicit a "you should know this" type of reply (but on topics of obvious difficulty for students). FYIs to future cohorts: Definitely go watch some discrete math videos on YouTube (e.g. TrevTutor) to give yourself a taste of what this is before you jump in and find out the content of this course is very deep without any warning. You will, however, survive without it, if you get yourself a marble notebook to scribble in, watch the lectures, attend recitations, ask questions at professor office hours, and do some internet searches on relevant topics to fill in gaps.
The content covered in this course was interesting, but taught in a way that was quite hard to grasp. The first 5 weeks on proofs/counting/terminology were particularly hard to follow, with each module seeming to contain a random collection of loosely related topics. The weekly assignments were usually much harder than the examples given in the lectures, and I quite often had to wait for the professor to give out hints in his office hours. The assignments also took a disproportionate amount of time to complete, considering they were each only worth around 1-2% of the final grade. The exams were slightly easier, but still required strong knowledge of all the main concepts from the lectures. The TAs were usually quite helpful, however I found the head TA to be quite condescending when replying to students on Ed Discussion. This made me feel uncomfortable asking questions on Ed, so I ended up just avoiding this resource. Overall, this course probably takes an extra ~5 hours per week compared to CIT5910
A really solid class, learned a ton. Content for me got really hard towards the last unit (graph theory was very new to me and I wish I had to more time to grasp the material) but the final was easy so it ended up ok. The lectures are very concise; that makes them easy to follow but I found I had to rewatch certain bits or go to the internet for extra explanations at times. The problem sets are fairly challenging, but honestly I kinda enjoyed them. They prepare us well for the exams.
This course is a huge letdown, especially considering how important the topic of data structures is. The lectures were made by a professor who no longer works at the university, and the topics covered in the lecture are very surface level and feel quite disconnected from the homework assignments. The homework assignments are also a huge mess. The instructions are unclear, leading to lots of confusion. The TA's will sometimes give conflicting answers as to what is expected on the homework assignments. They kind of just throw Java API documentation at you, and expect you to read and try to understand it. The first half of the semester is pretty slow, but the second half of the semester is brutal, with the solo project, group project, and final exam all back to back. The solo project and group project will take anywhere between 15-20 hours of work to complete, so make sure to pace yourself. The worst part about the class is the final exam. It is a brutal, long, conceptual open-note exam that is mostly multiple choice, testing knowledge primarily from video lectures. This means that most of the applied practice you got in the homework is not very useful. The average grade and median grades on the final exam during my semester were F's. The average was a 55%, and the median was a 59%. Not to mention, there was no curve for the final, so whatever score you got is pretty much set in stone. The fact that the final exam average can be an F, and there will be no curve, is absolutely absurd to me. I did slightly better than the median, and the final singlehandedly dropped my overall grade from a 99% (A+) to a 92%, causing me to end with an A- in the class. The only curve that you will get in this class are the extra credit opportunities that pop up in the first half of the course. You can get up to 5% extra credit in this class, so make sure to do them to maximize your chances of getting the highest grade possible.
This class tries to cover way too much material. The web app project could be in a separate class. Enjoyed the actual database design content. Both exams I took had some content not ever taught in class. That leads me to the fact that there isn't much teaching going on, rather lecturing. Youtube had to rescue me via professors that actually teach as opposed to lecture.
Very different from most MCIT courses I've taken in that it was very memorization-heavy with little to no implementation. For instance, HW 2 was legitimately 6 lines of the simplest Python script I've written ever - but the final exam tested our knowledge of industry acronyms. As a result, I enjoyed the change of pace, but also left slightly frustrated with the lack of technical practice. It is admittedly a difficult balance in a 7-week overview course. If you're looking for a new topic and something light, 585 is a great option - but if you're looking to maximize the limited courses you get at Penn, I might not recommend it.
Great instructor. Clear, concise, to the point, provides high value. One of the really best instructors in the course. Course is extremely well-structured and directly useful for work; indeed, *during* the course I was adapting techniques Professor Krakowsky taught to my current job. Wonderful course, wonderful professor. More courses in the degree program should be structured like this one.
This has been the most valuable class I've taken in the entire program as far as preparation for DS and MLE interviews. The course goes over at a high level all of the major algorithms that are likely to come up in an actual job interview - Linear/Logistic Regression, Decision Tree, Nearest Neighbors, PCA/PCR, SVM, etc. along with useful techniques like Cross Validation and Ensemble techniques (Gradient Boosting, Random Forest, etc.). Pretty much everything that might come up in a ML position except Neural Networks. The course itself often took a more mathematically rigorous approach and the material would not be easy to process without some background in Linear Algebra. That being said, the assignments were very straightforward and instructions were clear. Quizzes could only be taken one time but were otherwise not difficult.
[1] Very hands-on assignments, relatively easy [2] Tricky one-attempt quizzes, which weigh quite much towards the grading [3] Relatively difficult theory-heavy exams, very disconnected with the assignments
Trust the process in this course. It's going to take either previous knowledge of the subject or hours and hours of practice to get higher than a B, but this is FANTASTIC course for getting your brain oriented for MCIT! The professor is great and the TAs are there for you. The curve as of Fall 2025 has been very generous. The professor wants you to succeed.
This is one of the most highly rated courses at MCIT, and its reputation is well-deserved. The subject matter is fascinating. The programming assignments are rewarding and help reinforce the theory taught in the lectures. Most importantly, CCB is just delightful as a professor. His lectures really bring out the excitement and the magic that is hidden in the algorithms. If you thought artificial intelligence was just machine learning, think again. If you thought that search algorithms are just good for things like map search, prepare to have your mind blown. You will learn to cast problems that don’t look anything like search as search problems and write the code to solve them. The first half of the course should be called applied algorithms. If the core curriculum were to be expanded to 7 courses, this should be the seventh course. Below are some specifics that make this course great. Do not mistake great for easy. 1. CCB’s lectures and office hours. 2. Great assignments that will challenge you and make you a better programmer. You get unlimited submissions to the auto-grader. If you allocate enough time for each assignment (8 - 18 hours for me), you will experience the pleasure of turning the auto-grader all green. 3. Unlimited quiz submissions. 4. Two non-cumulative open note exams worth 15% each. Because nearly everyone gets a perfect or near-perfect score on 2 and 3, the exams are the only way for the professor to broaden the grade distribution. So the exams are hard and stressful, but CCB is very fair about adjusting the final grade. In our cohort the letter grade distribution was 25 A+, 74 A, 29 A-, 28 B+, 18 B, 6 B-, 3 C+, 1 C, 1 D, 1 I. 5. Extra credits that add 3 points to your final grade. The caveat about the open note exams is that the notes have to be taken in Colab, which may be great for many things but is by far the worst note-taking platform. The reason for this is that the Ph.D. students use your Colab notes as raw material for their language models research. The only other minor qualm is that the extra credits (except the ones awarded for attending guest lectures) are of little educational value and are basically free points. Aside from these minor issues, this is really a fantastic course. So don’t stress it out. Enjoy the ride but study hard. Here are some resources to help you succeed: 1. For the second half of the course, some students in our cohort created a question bank of over 100 exam-like questions and answers derived from the lectures and the required reading. It is available as a public Notion page at https://mcit.notion.site/CIS-5210-Question-Bank-cf290053147a4662834f4ca47ea654d3?pvs=4. Consider encouraging your cohort to do something similar for the first half. 2. The course is largely modeled after a course at UC Berkeley. You will find invaluable worksheets and solutions for many of the topics taught in 521 at https://inst.eecs.berkeley.edu/~cs188/fa23/ 3. If you want to get a head start on 521, visit its web site at https://artificial-intelligence-class.org, where you can find recorded lectures, assignments, and recitations.
Overall, this is a very well-structured course that gives students an understanding of the mathematical/statistical theory behind data science/machine learning, and also practice applying these concepts in programming assignments. The course begins with what's best described as a probability "bootcamp" - much of the topics covered are in 592, but there are some additional topics such as probability distributions (probability density function, cumulative distribution function, etc.) and continuous probability (CALCULUS!). This is a very challenging first week, but once you get past this it gets easier. Following the first week, the course follows a very manageable rhythm, with about 20-25 minutes of lecture slides, one-attempt quizzes (make sure to sufficiently study before submitting these as they can be tricky and are weighted highly), and a programming project in Python 3x per month. The professor is a maestro with explaining complex mathematical topics both in lecture and in office hours, and the TA "recitations" (pre-recorded Python labs) are extremely helpful in completing the programming assignments. You will walk away with this course with an intermediate level of Python scripting in Jupyter Notebooks, experience working with classic ML libraries such as Pandas and Scikitlearn, and a deep understanding of the statistical theory belying cutting-edge data science techniques. My only disappointment was that the professor did not dive into these topics deeper!
This course is ok. It's definitely on the lighter side. The first half of the course is great because even though the concepts are tough, the projects are fairly straightforward and can be solved using what has been taught. However, the second half of the course becomes frustrating as the homework becomes harder and harder to solve because the practice problems in the recitations do not cover what is needed for the assignments. Moreover, there are not enough examples in lectures and it gets very hard to understand the concepts. Lukcily the class is pretty easy, but I was disappointed by the quality of the teaching.
I think course will help you gain a good general understanding of the statistics behind data science. The course is well structured with a good mix of quiz and programming project. The professor is good at explaining math and turning complex formula into simple-to-understand examples. However, a few things i dislike is the easy weekly multiple-choice quiz, most of it you can score well if you make intelligent guesses. Programming project can be frustrating when the complexity increases especially towards the later part of the course. No proper introduction is given about Python, so make sure to know it beforehand to make your life easier. Also, review your probability and statistics before taking this course, it is every where ! Both mid-term and exam are open book and are relatively easy. Why I say it is easy ? For example, during exam there are programming question, and you are allowed to test your answer in Jupyter notebook before submitting.
While the slides and video lectures may be dry, the professor's office hours are very helpful. I especially like the part when the professor uses his ipad to draw charts/figures along with explanations of the abstract math concepts. Don't get intimidated by the first few weeks which are math heavy but then the following weeks will be much better. It is a good class for introduction to machine learning. The coding assignments are relatively easy since the TA coding sessions typically give away hints regarding the library and methods that you should use, and then the rest will just be reading documentations and calling libraries. However this could be a steep learning curve for students who never have exposure to Python before. So a better strategy to prepare for the class is to pick up/refresh you Python skills prior to the class.
How to Use Data is a straightforward course. Crash course on analytics. You will gain exposure in cleaning and transforming data in Python, necessary basic queries in SQL, implementing some ML models in Python, and data visualizations in Python and Tableau. Majority of the assignments are code based and relatively easy if you watched the videos, review them and/or use documentation if you need to remember syntax. There is a midterm and a final project (no final). Final project aims to sum up everything you learned throughout the course in a single scenario analytics problem. Highly recommend if you're looking for an easy course that will provide necessary skills in data analytics.
This is by far the easiest class I've ever taken in MCIT. It's very simple to get an A in this class - two projects are 70% of the grade, and you can basically follow along with Google Labs to do both, although the extra credit is much harder. Midterm was very fair. If I wasn't incredibly burnt out in my last semester, I would have been more concerned with how I didn't learn a lot in this class. Some of the lectures feel more like an advertisement for Google Cloud than an actual educational material. You could definitely learn a lot more by going beyond what the assignments ask of you, but if you just do the minimum to get a good grade you won't be forced to learn. If you want a low pressure class where your learning will be more self-driven than other electives, and you'll learn about Google Cloud (and cloud in general, to some degree), this class is for you.
Very good professor- very well-versed in radiology + medical. Professor is very helpful and open to feedback during office hours. Her TA team was amazing too and help debug coding assignments as needed. The course has coding and non-coding assignments - coding assignments and a paper which makes less overall coding time. coding assignments focus on h7 and dicom to pull data from medical docs. Would suggest this course if you are interested in overlaps of medicine, computer sci, and data sci. It is a good 7 week course -.5 credit that is good to take if you need a lighter sem w/ work or another course
This class basically felt like a scam/ plug for Google Cloud. It could be a survey class for a freshman CS student. It has no place in a Master's level course for anyone seeking serious study or value, and in my opinion simply degrades these programs. However, if you are just wanting to simply finish this program, it's definitely helpful for that purpose.
This was a terrible course. I have taken 10 classes in the MCIT program, and I have enjoyed all of them except this one. All assignments (the Labs and graded Projects) were Google Labs*, which are freely available on the internet. There were not any modification; the Projects were a copy+paste of a Google Lab. Weirdly (and this felt shady) the project directions did not outright say it was a copy + paste of an existing Google lab. But it was easy to find the corresponding Google lab, and to see that it was identical. The course lectures were also basically a direct copy + paste of the professor's book. Moreover, the lectures were extremely confusing. There were maybe ~100 or so new vocabulary terms thrown at us in this course, and almost all were explained in a way that was confusing. The explanations would sometimes be overly simple, for ex: "Containers as a Service is like renting a house" (such a statement is fine if you go on to explain how the analogy works, but the professor did not). Or, the explanations would be overly complex: "Layer 4 internal load balancing is for TCP UDP traffic behind RFC 1918 WIP where the client IP is preserved. You get automatic health checks, and there is no middle proxy". If you felt dizzy reading that, that's how most of the course felt. NONE of the words in this sentence were ever introduced, so it was just unintelligible. It felt like the prof was reading off the technical spec's the engineers wrote, without rewording it at all. Also, the lectures were very repetitive; it would constantly remind us that Google's services were secure and efficient, so the whole course felt like a Google ad. The small amount of learning I got in this class was on my own. When I encountered a new term, I used chatGPT to learn it myself. I hope Penn does a full re-do of this course. *Google Labs are here: https://www.cloudskillsboost.google/ . you can get student credit using your penn email, or you can do a free trial.
I only leave reviews for really bad courses but this one is one of them. My other review was for CIT592, but at least for that course, my complaint was about the professor and the materials. Now, without further ado: This class is a complete joke. It felt more like an advertisement for Google products than anything else. If you want a free grade, then yeah sure take it. If you want to learn, forget about it. The course is worse than a Udemy course. Notes: Content: Course materials are all about promoting Google products. No learning whatsoever and does not teach you why things are the way they are or when to use which technology stack Assignments: You are literally just following tutorials and submitting at the end. Literally copy and paste. ZERO learning involved Projects: Same as assignments except you need to record your copy and paste and explain why you did what lol Grading: Downwards curve. Students who got a 90+ did not receive an A because everyone else scored high with extra credit. That makes no sense. Why would you down-curve? TA Support: Non-existant. I didn't even realize we had some TAs since they took days to respond to any posts Overall: 0/10. DO NOT take this course UNLESS you don't care about throwing away money or you're about to graduate and you don't care about learning
I was part of the first cohort to take this course in Spring 2024. It was a pretty fun course; a mix of coding and theory. The staff was extremely supportive along with an active participation by the professor. I spent most of my time watching the course lectures as they are kind of long. I recommend this course !
Its a useful and interesting course that offers good continuation form 593. Autograder makes it relatively easy to grind down homework and get most points in this course. Exams are open-book and manageable if you take time to understand 'live lectures' content. I finished both exams early and had opportunity to review videos of live lectures to answer some of exam questions, so time is quite generous. The course could use a re-vamp more than other courses in MCIT as live lectures (recordings of 2021 zoom meetings) in my view fall short of what institution such as Penn should be offering to a large cohorts of paying MCIT students. I also thought that programming exercises were simpler than other MCIT modules or corresponding CIT programme. They cover only a fraction of content taught in this course, and feel deliberately made easier so MCIT population can cope with them. As a result this course is a sharp drop in workload from 593 which was a little too much but still manageable for me.
The course itself is taught well even though the material is not straightforward. The professor was engaging and the assignments seemed manageable and fair. However, beware of the downward curve applied in this class. A 93% score translates to a B, which in spite of the 0.5 credit can cause a significant GPA drop. There was no prior indicate of this and many students were caught unaware by the harsh grading. If letter grades are unimportant to you, this is probably a great and well-taught course to take. Personally, the grading on this course left me feeling like my hard work and effort was undervalued (for comparison, the other B was from a class where I genuinely struggled and scored about 85% and hence felt like a fair grade). In hindsight, I would have chosen a different class in spite of the great instructor and material since this was my last course and ended up pulling down my GPA in spite of the amount of time and work put in.
As an *almost* required course for MSE-DS, it delivered in my expectations. The course content's difficulty is similar to 592, with the lecture and homework style similar to that in 595. Whether because of that, or in spite of it, I feel as thought I actually got a lot out of the class. And -- as with 595 -- my advice is the same: read the textbook and find good Youtube materials to supplement. The heavy amount of time spent on the assignments meant I really understood the materials, which helped expand on the math abstractions in some of the programming heavy courses. The assignments themselves were graded somewhat harshly, but once I got the hang of the expectations for deliverables I avoided repeating the same mistakes moving forward. For the exams: One one hand, they were short and each question weighed heavily towards your final grade, but on the other hand, that means you have lots of time to complete a short test. I think that their difficulty is a bit overstated in some of the other reviews -- we were granted a double-sided cheat sheet with no restrictions on the information we could put on it. There were only so many concepts taught in the course, and you could reasonably put any equations or content necessary to do well on the exam on your sheet. The questions on the exams were similar to homework, practice problem, and practice exam questions. If you understand the concepts, formulas, and their applications in the questions on those resources, you can reasonably apply them to the exam problems. Overall, it was definitely a difficult and demanding course, and I think you can get out of it what you put into it. Be prepared to rewatch lecture videos multiple times and spend lots of time on the homework assignments. You will get out of this class what you put into it, and the material is useful for any further ML or DS coursework moving forward.
This course worked super well for me as an introduction to data analytics! Compared to other MCIT courses, it is easier to get an A if you put in the work, given that assignments (except the final project) and the midterm are more about knowledge and understanding than critical thinking. Another thing that makes it easier to score an A is the availability of an autograder for most tasks and that most assignments were as a group, so you also had the benefit of comparing answers with your partners before submitting (and you get to know other people in the program :)). The most valuable part of the course is the final project where you have to pull together all the elements you've been learning in the semester to produce a data analytics project. This does require you to think critically and creatively, is more open-ended (though still structured enough that it can be accomplished in the time we have) and was fun to work on with others. There was also a forum at the end that was great educationally, because you got to see how your classmates thought about the datasets and how their approaches may have been different from yours. The lecture material/ assignments equip you very well to tackle the project. Technically, from this course, I learnt the fundamentals of pandas, which enabled me to contribute significantly to another course's final project. (550 Databases requires students to perform data cleaning and preprocessing but does not really teach the skill explciitly, so having taken 574 concurrently in the first half allowed me to contribute in this stage of the project and boosted my learning experience in 550). I also used Jupyter notebook and, for the first time, Colab, and that was also a good takeaway from this course. All in all, the course achieved its purpose very well and I did come out of it with a good notion of the data analytics process.
Boring class IMO. Literally made me re-think my major. To me, the lectures were kind of a reading of PowerPoint slides full of confusing math. Except for the exams, ChatGPT helps/gets the grades of 99% of the students. AI is killing traditional education, and this class is a clear example of it...
A shallow introductory course to data structures. The lectures are slow and the course does not cover much material or the applications of data structures. The homework assignments are overly specific and take about as long to read the instructions as to actually code up, unlimited submissions guarantees 100%. The solo project on the other hand has only 1 shot at submitting and they left too many things unspecified. The group project is about 6 hours of work for an experienced programmer to solo. The exam on the other hand is basically a curve ball from the left field focusing on Leetcode usage of the data structures taught in the lectures. It is possible to get 100% if you are familiar with Leetcode, but is IMO unfair as it is very different from what is presented in class.
Super group-dependent course in that most of your grade revolves around two team projects. Was fortunate enough to have one rockstar developer on my team, that allowed us slower folks time to tinker away at smaller parts. However, by the end of project 2, I was able to make some of the most critical contributions to our final submission. Pretty sure there's not better evidence of a personal growth than that... that being said, I could totally see 553 resulting in a vastly different experience. A group member dropped the course halfway through, which affected our team ability - groups were switched around, deadlines were hard (unlike what I had come to expect from 595), and C++ was a totally new language for me at least. The other saving grace though is that the exams are open-note - with the right level of difficulty and grading fairness. In general, 553 proved to be my favorite MCIT course thus far, but with some major caveats.
Overall, a very interesting course in terms of taking the magic little machines we use every day and break down the hows and whys of the way it operates. Very useful for getting some experience with Docker, VSCode, gdb/debugging, and of course getting some more depth with C in particular with networks at the end of the course. The course flow is very uneven, with what feels like a blitz at the start for the first 6 or 7 weeks, a quiet period of a couple weeks before the midterm, and then it kicks back up until just before the final. Some modules are 4-5 hours of lecutres, with some barely an hour. Just be warned that each module is not created equal when planning our your week of study. The course content is nominally useful for the projects (homeworks), side research is a necessity. The TA provided flowcharts and resources are very useful. The professor's live lectures are very helpful generally to understanding the content, moreso in my opinion than the general lecture slides in Canvas. Overall, not a difficult course, nor one too demanding of time, and generally interesting especially for systems engineering. I liked it as this is all the stuff I love about computers, so my bias is generally to like this course, but others who are not the biggest fans of running stuff in C may feel different.
Good content, bad HW. I generally liked the content and feel like I have a much better understanding of modern NLP after taking the class. The HWs weren't particularly difficult conceptually, but they were really confusing - the descriptions of problems often had typos/grammatical errors (ironic for a class on NLP) and pretty much every HW had multiple roadblocks that required clarification on Ed. I also had 2 separate occasions where I couldn't pass an autograder and went to TA office hours, only for them to shrug and tell me that my code looked fine and they weren't sure what the issue was. I've taken 10 MCIT courses now and none of the others required so much time spent on logistics as opposed to actual learning. I will note that a number of students complained about this over the course of the semester, so I imagine it will get cleaned up going forward.
Everything about this class that I've read was true. The class has a high workload yet was extremely rewarding. Difficulty of this class I would say is between medium - medium/hard. You just have to keep up week to week and you should be fine. This class can be a challenge if you are working full-time though. The only thing that I hadn't expected or read about was the quality of the TAs. The support from the TAs were mediocre at best and hostile at worst. The TAs manning the ED discussion were either rude/unprofessional or just downright giving you mistaken information. I'd recommend not engaging in the ED discussion and hope someone else asks the same question you have. Recitations were meh. You should watch it but you can just read off the slides as well. By the way, Farmer isn't really involved in the day-to-day of this class outside the 1 hour a week he gives to his office hours. That's it. You are left interacting with the TAs which isn't ideal if you are expecting support. Thankfully, you can get through this class with minimal interaction with the staff since it's so well structured. It's a great class otherwise.
Unfortunately, a missed opportunity for such an important subject matter. Lectures were of insufficient quality, inconsistent, lacking content, and overall did not prepare at all for graded assignments or exams. Also, allowing group work is just cheap outsourcing of teaching work to students, which begs the question why we are paying tuition. Definitely not for receiving meaningful feedback on graded assignments in a timely manner (usual lag around six weeks - particularly problematic prior exams). This course would benefit tremendously from an overhaul by someone who cares about the subject, like 592 or 593. But for now, it’s just a disappointing mess.
I took this course when it first came out and loved it. The material was very interesting and well-presented. There was the right mix of theory and practice. The course nicely intertwined the basics of different medical imaging modalities with the task of automated/computational extraction of information from such images. On the medical imaging side, it covered X-ray, ultrasound, CT, MRI, PET, and SPECT. On the computational side, it covered images as tensors, image segmentation, convolution, Fourier Transforms, band pass filters, active contour analysis with calculus of variations, convolutional neural networks (implemented with TensorFlow), and image co-registration. As you might imagine, it is not possible to dig deeply into all of these topics in a 7-week course. But the course will stimulate the interested student to explore more in the fields of computer vision and/or medical imaging. This is an easy course if you came into it with at least one machine-learning course under you belt. Presently, CIS 5210 or ESE 5410 are listed as alternative pre-reqs, but I believe CIS 5450 is the best preparation for this course. It also helps to be at a stage in you academic journey where your mind doesn’t shut off when it sees a new algorithm in its mathematical form. You do not need any prior exposure to medical imaging. You should be very comfortable with Python and NumPy. You need to know a little about matrices and vectors but do not need the depth of linear algebra that is required for a computer vision course. There were weekly coding assignments (with unlimited submissions) that were relevant to the lectures, 3-trial quizzes, and an easy final exam that could be completed in half of the allocated 3 hours. There were generous opportunities for extra credits that can add up to 5 points to your final grade. I would not be surprised if the course is made more challenging in its future iterations, but it will remain a highly desirable elective.
I really enjoyed the professor's passion for teaching and the course's structure. I really thought it was a well put together course for students. I learned a lot by reading the required reading and the book from cover to cover. I think the exams and quizzes were challenging. I needed 1% more to get to the next grade but the grade didn't get curved. I wish there was a curve. Overall I think I could've put more efforts to makeup my grade. Grading was fair.
This course was well-structured, engaging, and fun. I'm a little sad it's over. The lecture recordings were high quality - informative with just enough hand-holding. Everything builds from week 1, so a solid understanding of previous material makes grasping new concepts much easier. The course material itself was cool. It felt like building a map with points of interest and goods traveling along routes to keep the computer happy. It was challenging though. Later assignments took me about 10 hours to complete. Overall, this has been my favorite class so far.
This course is full of interesting and timely content given the pervasiveness of large language models. I recommend! Highlights: - Great course structure for getting an A (10% multi-attempt quizzes, 75% mostly autograded HWs, 15% cumulative final exam, + ~3% extra credit for helping CCB with research) - Good for building python skills - Good exposure to machine learning, neural networks, and deep learning (you won't be an expert at the end, but you'll train RNNs on one homework for example) - Walks through historical approaches to NLP tasks up to current state of the art. Last few weeks are focused on common NLP applications (e.g. question and answer systems, information retrieval, parsing, etc) - Dense, but interesting textbook readings. Very academic if you're interested in conducting research or staying up to date in this rapidly changing fields. Last few modules have 2 chapters each which is difficult to get through - exam was hard but graded leniently (mean ~77%, median 79%) Lowlights: - This is my 9th course and second with CCB (already took 521), and it had some of the worst HWs in my MCIT experience. It was often unclear what you were being asked to do, and important implementation requirements were not specified. Autograders could be finicky - TA support was not great. TAs were not as helpful as other in courses and there were often long waits to get into office hours. I imagine this will continue to improve as it's a relatively new class - The course covers a ton of information. Because there's no midterm it's easy to forget the early modules and have an enormous amount to study at the end -- I definitely recommend starting that studying early! Other: - there are 9 HWs throughout the course. During a week with a HW I'd say hours range from 10-15 (maybe more if you get stuck). On a week without a HW it's probably closer to 5-10 hours - final grade distribution my semester: out of 129 students, 18 A+ 88 A 9 A- 3 B+ 7 B 2 B- 1 C+ 1 C-
While the material is interesting, the lectures are by far the worst I've come across in the MCIT program. Relatively simple concepts are made much more confusing by poorly made slides and bad explanations. The professor is very nice and knowledgable, so the quality of the content is very surprising. The homework assignments are related to the lecture material, but there is very little TA support to help you if you get stuck. Additionally, linear algebra is a must have beforehand, and that should be clearly stated in the syllabus. If you have a strong interest in computer vision this class has something to offer you, but I would recommend against it otherwise.
I very much enjoyed this course, as it combines two of my major interests, computer science, and linguistics. I also found it to be a natural continuation to the Artificial Intelligence class, continuing practically from where we left off in that class. CCB, teaches that and this one as well, and just as in AI, his lectures are very solid here too. This course surveys a variety of language models, starting with Naive Bayes models, moving to N-grams, Encoder-Decoders and more. We learned how to build these models using important libraries, as well as how to evaluate and compare these models. We took these models, and applied them in various NLP tasks, through our assignments, starting from basic word predictions to machine translation, and working with LLM's, in particular OpenAI. I would definitely recommend this class if you are interested in the AI field, and in particular language models. This course isn't so challenging, and part of this is because the HW's are the majority of the grade. As in AI, you have many attempts to submit the assignments, so this is extremely helpful when debugging. This class uses Python and Jupyter Notebooks for the HW. While I did find the HW good, I agree that some of the expectations on some of the assignments do need some improvement, but in general, the TA's were pretty helpful at least, when posting on the Ed Discussions. The test is a bit tricky as it is cumulative given that there's only one test. However, taking consistent notes, and just making sure to follow the readings and the lectures per week is enough, and should help you solidify you're understandings of the material.
The lectures are fun and very well put together. You will learn a lot of materials, but the lectures are easy to follow. As long as you put in consistent effort and start homework early about 2-3 days before it's due (unlike me), you will find the workload very manageable and the learning process very rewarding.
The materials covered are practical and interesting. However, there's not really a strong connection between the lectures and the homework/projects, as most of the stuff covered in the lecture videos don't make it to the homework, so you end up only applying a small portion of what you learned. In addition, the lecture slides are often crowded with text so you find yourself trying to understand what Prof. Loo are saying while constantly trying to match the text with the audio. Overall, I like the materials and it's a relatively easy class. You'll do well so long as you don't miss a homework since there's no late submission. I only wish more efforts had gone into creating the lecture videos.
I really like how this course builds from literally the movement of single electrons to how a computer works to how a programming language works. It's an incredibly fun transition from the start to the end, although I know some can find the volume of information being thrown at you exhausting. It is a fair amount of work - lots of lecture videos (although really good ones), and assignments every week. Dr. Farmer's enthusiasm is also fantastic and he presents material better than any other prof I've seen so far.
This is perhaps the lowest time commitment class I have taken so far in the MCIT program. For that alone, I would recommend taking it if you just want a course that's not too difficult to balance, or if you want to take one class over the summer. The class itself is just okay in my opinion. It's a pretty decent survey of different machine learning methods, but nothing super in-depth, which is understandable because this is an introductory machine learning course. One gripe I have with the class is that the lecture material does not align super well with the homework. The lecture material, quizzes, and exams are all theory-based, whereas the homeworks are applied Python exercises done in Jupyter notebooks. The lectures only cover theory, they never cover code examples, nor are there dedicated lectures from the Professor discussing code implementations. Instead, there are pre-recorded recitations that loosely go over Jupyter notebooks to showcase these implementations. Additionally, there are no recitations that go over the lecture content, there are only recitations covering the programming assignments, so the only feedback you get to reinforce theory from lectures is by taking quizzes. The quizzes can be tricky, and are one attempt, but if you take your time, thoroughly go through the answers, and do the weekly practice problems beforehand, you should be able to get a perfect score on every single one of them. Likewise, the exams are pretty easy. They are open note, and you can have everything from lecture slides, Jupyter notebooks, an IDE, etc. to use. So long as you study the questions from the practice quizzes and the weekly practice problems, you should be able to do very well on them. The first midterm was just a collection of quiz problems. The final was a bit trickier, but still quite doable. Just make sure to manage your time, as you only get 105-115 minutes which is very short compared to other classes. I personally thought the TAs didn't add much to the course. Every assignment is autograded (yes, even the exams), and only 2 TAs ever answered questions. Really mediocre class, but it's an easy A so make that what you will.
This has got to be the biggest joke of a class in this whole entire curriculum. The professor just reads STRAIGHT off the slides and doesn't even explain anything and the TA's do not even work together to get us the answers to our questions. The TA's all have different approaches to problems and constantly tell us completely different things. UPENN ivy league? This course ruined my experience and showed to me how big of a cash cow this program really is. This whole entire degree is no different from Coursera. Dont expect to do well in this class and dont expect any of your questions to be answered. Just be prepared to get mentally destroyed and exhausted all semester long.
This class is pretty much trial by fire in terms of programming. The course covers interesting material but you're on your own for the homework assignments. Definitely prepare your C programming skills before taking this class.
I think this course does a slightly better job at explaining data structures than some give it credit for - but yes, it's not structured in a way that you'll find immediately useful for Leetcode and interviews. The back-half of the course is also completely useless and does not teach the software design principles well at all. For workload, I actually found it to be pretty reasonable. The solo and group projects I felt had enough time dedicated to them. There was one difficult assignment, but for all of them you had unlimited attempts and some test case feedback. It also has a load of EC opportunities. Certainly could be made better, but it's not a bad intro to data structures.
I really enjoyed this course, and it takes you across the history of natual language processing. There is a decent amount of overlap with 521 (NGrams, logistic regression, some deep learning LM architecture). The homeworks are probably the best part given their depth and ability to explore ideas. The lectures are very well made and CCB covers a majority of the lecture content. Exams are fair, and you get some experience using modern NLP platforms like HuggingFace. Overall a great course!
This course is one of the main reasons I decided to join the MCIT program. I needed deeper database knowledge for my work. I was extremely disappointed. The course organization is horrible. The final project specification is split in 8 different documents, videos. The final project requires perfect UI, front, back, (node and react), setting up the database, perfect queries but we spent one week on node/react. I don't understand why doing a complete application if we are obsessively graded on the queries. I don't understand why a project like this and two exams. I would recommend making the course more organized, improving tutorials (helping students not getting charged over and over with AWS), having a final project that is not group work and that is focused exclusively on databases. Focusing on everything means teaching nothing at all. Also, most of the times the theory is disconnected from practice. Instead of long exercises to prove BCNF or to write the order of the locks, how about having practical exercises with that? Overall: Horrible organization, subpar assignments, a lot of work that doesn't help or connect to reality, workload with small returns in terms of learning, horrible final project that has many requirements and takes time away from what the focus of the course should be. There should be a separate course for web development instead of trying to cram it into the database course making it a bad database course and a bad web development course. That's the key problem here: The course tries to teach web, teach DBMS, teach academic theory and succeeds at nothing. The cherry on top is that there is a big chance you land with a bad group.
There's no sugar coating this class, it's a gauntlet of knowledge learning and subsequent application of it. What I liked: the concepts especially with graphs and solving things with graphs, is really cool and in almost all cases really clever, and I loved learning that. Dr. Khanna's live lectures were worth the price of admission. No comment on other OHs. I come from a physics background so this is all new to me (minus 592 content) and mentally interesting but my limited background in it means... (see: what I didn't like). What I didn't like: the sheer amount of work needed to complete assignments essentially required either: a) a team of 2-3 to work in parallel, hit OHs, and cross-check one another, or: b) having nothing else in your life to do aside from this class and perhaps eating and sleeping. I guess there is an option c) for the algorithm-designing sadist who happens to be taking this course and eats this content for breakfast, but if you're that, you're not looking at this review in preparation for this class. Runtime analysis: I put 20hrs/wk for myself, but I was on a truly incredible team of 3 where my teammates would often hit OHs to help us proceed in the HWs while I usually sat with problems on the side (bless them for working with me), then we all attacked the HW in a give or take 2/3rds divide-and-conquer method and 1/3 simultaneous/cross-checking problems method. So this time I gave for me includes things like our frequent Slack communications, Zoom meetings, etc., as well as the module contents and textbook readings, OH watching, and the actual doing of the assignments. If I wasn't on this (great) team, this class certainly cracks 25hr/wk and likely more approaches the 30+hr/wk mark. TL;DR: this class is interesting, but hard and *a lot* of work, and I think you're doing yourself a disservice to not take this with 2 good buddies in the program to survive it with minimal loss of sanity which will occur no matter when you take this beast.
It is a hard course with high workload, so clear your diary for this one! Unfortunately, I felt the lectures and teaching in general made reasonably simple and intuitive things seem complex, so a lot of extra work was needed to understand the material sufficiently to complete exams and homework. To add, the pace of course is high, so I felt on the back foot more or less all the time trying to catch up to understanding of the course material sufficient to do well on the exams and homework. Homework volume and complexity is high and is designed for 2-3 people taking each part. Even though I prefer working alone, after first two assignments I decided I needed a team to help me through the course, and that I can spend time on actual understanding rather than grinding the homework. Exams themselves focus on application of material to problem solving, so good embedding / mental representation of course material is needed to problem solving quickly under time pressure. I liked the textbook and YouTube videos. In fact I would recommend watch YouTube first before attempting lectures. The pace of course if uneven, and it could use a re-vamp. I felt Linear Programming was not really an organic part of the course and could be excluded to reduce workload and make the course pace a bit more even.
This class made me so mad I felt compelled to write a review. Yes, the assignments are easy and the workload is far less than the other core courses (is that a good thing?). But it is so poorly taught, and when you consider the instructor is the Dean of the program, it really just adds insult to injury. The slide lectures are poorly constructed and can be very hard to follow. Then you have the so-called "live lectures" from 2021 on a fuzzy webcam trying to follow the instructor as he scribbles on a sheet of paper with illegible handwriting. It is honestly shameful to make students pay ~$3500 for this course, with the price increasing every year, considering the outdated material. What's worse is that the topics are really interesting and important to learn about, but the way the material is presented is sloppy and lazy. Penn should be embarrassed by this offering.
This course is an excellent continuation for students who have recently completed 595, building on concepts in a logical and cohesive manner. Projects weigh the most in this class and is the driving force throughout the semester. Quizzes and 2 exams are the same format as 595 (open book, etc). The group project is particularly engaging and offers a significant payoff, providing a tangible outcome that can be added to your resume including some handy C++ experience you get out of it! However, success in the project depends heavily on having a communicative and diligent group. Pretty much the only deadlines to keep track of are the internal deadlines within your group to complete project milestones. Prepare to spend a lot of time in the beginning to understand project requirements and huge skeleton codebase! For project 1 milestone 1, that’s where majority of the time was spent. The class will really test your ability to work in a group and leverage best practices on Git. I personally think it’s great experience everyone in this program should aim to get before they graduate!
This course offers a unique and thorough mathematical foundation for deep learning, but I have mixed feelings about it. The course is notably rigorous, which makes the shortcomings in teaching support particularly problematic. The strengths lie in the educational materials - the lecture notes are well-written and accessible, and the professor explains concepts well in the videos. The course excels at demonstrating deep learning concepts from a mathematical perspective, with detailed proofs and theoretical foundations. However, there are serious issues with the teaching assistant support that go beyond mere organizational problems. The TAs appear to lack the necessary depth of understanding to handle this rigorous material effectively. When they did attend office hours, many struggled to answer questions or provide meaningful guidance, suggesting they haven't fully mastered the concepts themselves. Even more concerning is the lack of professional responsibility - I experienced multiple instances where TAs simply failed to show up for scheduled office hours (three times personally). The course title "Introduction to Deep Learning" is misleading imo - it should be renamed "Mathematical Foundations of Deep Learning" as it focuses heavily on theory rather than practical applications. Students get little exposure to hands-on training and real-world implementation of deep learning concepts. A lot of concepts that are explained with mathematical rigour are quite intutive and can be summarized. I did not quite get the necessasity of the mathematical proof and explanations. The autograder was buggy and difficult to work with, and homework assignments often contained contradictory instructions. A significant oversight occurred when Chapter 10 was completely omitted. The problem is this is the only course on DL, otherwise I am sure there are plenty of better courses for $3.5k+.
It's probably based on feedback from the former class CIT-5820: Blockchain & Cryptography that this class got to shine. The lectures are clear and engaging. There are 2 small assignments due every week. There is a "project" but it's not possible to cram it since a part of it is due as an additional homework on top of the 2 usual homeworks after the second week. The homework descriptions can be a little unclear with what they want you to do and the documentation can be a bit confusing. Solidity is kind of like Java but still has a learning curve. I found the TAs to be very helpful in this course for clarifying concepts and hints on the assignments. The exam is open note but does ask very specific questions so you still have to understand the material well. Overall a good course with interesting concepts.
This course falls significantly short of expectations for an Ivy League education, leaving online students frustrated and disrespected. The delivery is unprofessional, with lectures consisting of poorly organized recordings of live sessions, including inaudible exchanges with on-campus students, professor criticizing his peers, frequent interruptions, and disjointed handwritten notes due to cut and pasting videos mid lecture. The professor often appears disengaged in OH (even eating on camera, or claiming forgetting to join his OH) and failing to adapt content to an online format, never answering Ed questions—while assignments and handouts contain critical errors and conflicting notations. Prerequisites are misleading; success requires multivariate calculus and convex optimization. Students are left to navigate ambiguous requirements, inconsistent grading, and a malfunctioning autograder, often spending 4X time vs other classes on tasks that yield little meaningful learning. Teaching assistants are underprepared, unable to explain core concepts or solve problems they are tasked with teaching, even suggesting students “Google” answers to hw problems. Office hours start late, are sparse, or feature TAs who don’t show up, while the online Ed forum is plagued with long delays, unanswered questions, and contradictory responses. Professor even discourages the use of Ed (?!) Overall, the professor’s dismissive comments (I keep forgetting you are beyond undergrad, on campus student have a project, you have it easy) and lack of support highlight a disregard for online learners, making this course a wasted opportunity.
As with many of the reviews for 596, it is definitely a difficult course because of the concepts themselves and how quickly the course moves on to other tangentially related topics. However, unlike 592, it was abundantly evident how important these concepts were in software development, and how one could use them to make informed design decisions while coding. To that end, I found the laborious process of learning such concepts actually enjoyable. There were only 7 HWs, a manageable workload; plus given the reputation the course has built up over the years, the TAs and professor were extremely helpful and the grading was far more fair/less fickle than 592. Maybe I overestimated the course from prior reviews, but I left 596 with far more tools in my software engineering belt - in my mind, that is a worthwhile course!
For a disclaimer, this review comes from someone who took ESE 542 (Statistics for Data Science) in Summer 2024 and is a Software Engineer already. ESE 5460 consists of four homework assignments spaced out by every ~2-3 weeks and 2 exams (midterm and final). The lectures are recorded live lectures of the professor's on-campus version and supplement the lecture notes he wrote to accompany the course. The homework assignments range from 4-6 questions of mixed difficulty and topics from 2-3 modules which consist of written proofs or reasoning and a coding portion which is autograded. That being said the autograder is EXTREMELY picky. If you do not follow the formulas for some of the loss functions in this course and try to derive them a different way, it will error out. On EdStem, many students also felt like this was a problem, citing that the loss curves they got were either very similar and still erroring out or very different but they could not determine the error from the autograder message alone. In order for ESE 5460 to be a great elective with support, TAs need to be able to explain the content during Office Hours and recitation more clearly and do code walkthroughs similar to CIS 5210 where they give a hint for the algorithms you are expected to learn. The class support from OH and EdStem was abysmal. Some TA's would schedule very late hours and not hold them at all, especially during the few days before the assignment would be due, which are peak hours for students trying to squeeze their last autograder points in. This is unacceptable. I can understand that this is a new course but there needs to be more TAs that learned from the on-campus version to help supplement the online version. Grading on HW assignments seems to be okay as there are more potential points given out than the max credit you can get. Assignments should be broken into weekly assignments and lectures broken into smaller videos. Exams were fair but written and scanned (time consuming)
First and foremost: There should be a review of how the Head TA communicated with students throughout the course. The tone and language used on Ed Discussion were often curt and dismissive, sometimes crossing into rudeness. This behavior discouraged students from asking questions and made some feel unintelligent for seeking clarification on course material. As a result, the course failed to foster a supportive and safe environment for learning and collaboration. It’s crucial to address this issue to ensure that future students feel comfortable engaging and asking questions without fear of judgment or condescension. This course requires significant improvement in aligning the lectures with the assignments. At the start of the course, we were assured that the lectures and recitations would provide everything we needed to succeed, without requiring additional resources. Unfortunately, I found myself relying heavily on outside materials because the assignments often had little to no connection with the lecture content. While the lectures themselves were well-structured and explained concepts clearly, the confidence I gained from them quickly faded when I encountered the assignments. The assignments frequently involved advanced topics and complex proofs that were not adequately covered in the lectures, which focused more on basic concepts. To bridge this gap, I recommend incorporating more problems in the lectures that directly relate to the assignments. This would not only reinforce the material but also better prepare students for the level of difficulty they will face in the coursework.
I'm a big fan of this class, largely thanks to Dr. Farmer. He is such a fantastic instructor, and I really appreciate the way he explains concepts in the videos. His office hours became my favorite weekend activity throughout the semester. When I started the class, I thought I wouldn’t enjoy it because I didn’t have any relevant background. However, it turned out to be one of my favorite classes so far! Thumbs up to Dr. Farmer and the fantastic videos. If I had to nitpick, I would say the grading of the midterm and final exams could be more accurate. There were several instances where I had the correct answers, but points were deducted without any explanation. After requesting reviews, I usually got those points back, which suggests some graders might not have fully understood the material they were assessing. While this was a bit disappointing, the regrade process resolved the issues, so it didn’t ruin my overall experience. All in all, this is a great class! It’s also not too difficult to secure a good grade if you complete the extra credit and perform reasonably well on the midterm and final exams.
It was interesting to learn about a technology that intersects with finance, human behavior and politics. I appreciated getting an academic point of view on the topic, since there is so much hype around it on social media. You get a peek into some of the hype as the professor also included some blockchain stories, which puts the technology in the context of its users. The course is technical though. Personally, it opened my mind on the uses of technology and deepened my understanding of how technologies work in distributed settings. The weekly assignments were not difficult in the way other full-credit courses' assignments can be, because they were short (requiring few lines of code), had an autograder and were focused on having you learn the basics of interacting with a test blockchain. The course offered us the coins/tokens needed for the assignments, so I did not experience the issue mentioned by students who took the full-credit older course. The breakdown of the project into weekly submissions was a good support for me to make sure I distributed the workload throughout the term. I think the project was a valuable learning experience and an appropriate difficulty for a survey course. There are some cross-links with the course Computer and Network Security (cryptographic hashes, keys); it was nice to see the related or same knowledge in different contexts. As to the cons, I think there was an occasional lack of clarity in the instructions or specifications in the assignments, but the head TA in particular was really good about clarifying promptly. The lectures were not so didactic at times. I used ChatGpt to give me big picture ideas if I missed them on the video. Overall, I would take this course again! I enjoyed it and it was pretty unique in having us interact with a system that has its own "life" beyond the course. p.s. I also took EAS 574: How to Use Data. They are similar in difficulty, but I think this one was somewhat more difficult.
I really liked this course! The projects were fun and very satisfying to complete and great to understand key concepts in depth. The lectures are engaging and Professor Angel does a good job of making complex stuff easier to understand. Some interesting papers shared too! I enjoyed reviewing 593 stack knowledge through studying buffer overflow attacks in the first part of the course. Course content is tough. One thing that makes this course manageable is that assignments are spaced out: 3 homework assignments (little coding, more theory) and 3 projects, giving you the chance to start early. Definitely start early with the projects, because they are the kind where you may need some time to get inspired on a solution. Having experience with web development (i.e. JavaScript, HTML, manipulating the DOM, browser requests) is very useful for the third part of the course on web attacks. Try to secure your project and homework points, because the exams are difficult. One con of the course might be the exam questions. I studied a lot in one and less in the other, but had a similar average performance in both. In my experience, these exams were not as hard as 596 Algorithms, though! This was, overall, a great course that I am happy to have taken. I ended up feeling proud of the code I had written for Project 3.
Great professor and a lot of interesting topics. However, too many different types of topics were crammed into a single semester, and the assignments required more time to complete than most working professionals can reasonably muster. It covered everything from web development to relational algebra which, while interesting, were equally weighted in terms of effort and grades, even though the core focus of the course was supposed to be on databases. The scope of the course is too ambitious for a single semester; it would be more appropriate for a fulltime student, not so much for working professionals with demanding fulltime jobs. The assignments and exams were very tedious and lengthy and penalized for fine details; they were not a fair assessment of what was learned in my opinion. Also, a lot of the content leaned more towards the theoretical side and, while interesting, would not be as relevant for most real-life jobs in the field today. Some of the course content needs to be updated to reflect the kinds of use cases that data professionals are actually working on in the field.
This is a very well-organized and well-taught course. It is also a very light theoretical course with probably half as much work as its practical counterpart, CIS-5450. Whether it is an easy course depends on your familiarity with probability theory and machine learning. The course would be better called Statistical Learning — the name of the excellent textbook that it closely follows. Statistical learning is a branch of statistics that predates machine learning by a century, dating back to the advent of linear regression in the 19th century, long before there were any machines that could learn. As such, it relies heavily on probability theory. The first week of the course is the most rigorous part of the course and is essentially a bootcamp in probability. The best way to prepare for the course is to review your probability notes from 592 about random variables, expectation, and variance. Here is the official resource on probability theory that the course wants you to have learned by the end of the first week: https://cs229.stanford.edu/section/cs229-prob.pdf. I have culled the formulas that you need to be able to work with in this PDF document: https://github.com/pakzaban/ESE5410/blob/main/Formulas.pdf. The lectures are brief and well-presented. The textbook material is very accessible and serves to crystalize your understanding of the lectures. A defining feature of the course is its one-attempt quizzes that account for 30% of the final grade and give you a good idea of what type of questions to expect on the exams. You should have no problem doing very well on the quizzes if you follow the lectures closely. There are two very reasonable non-cumulative open book auto-graded exams and fairly easy (sometimes trivial) programming assignments. This excellent course is a must-take for anyone who is seriously interested in data science. Its gentle pace and limited scope allow you to reflect and develop a deep understanding of machine learning algorithms.
Coming off 593, this class was definitely a downgrade. 593 was so well taught and I felt like I learned a lot there. In 595, the lectures were scattered and hard to connect from week to week. The homeworks were kind of interesting, but again didn't connect super well to the lecture material. I wish they would downgrade this class to an elective. It is an easy class however, I got an A and only pushed myself a few times this semester.
Dr. Farmer is the best professor I've had in this program. His ability to present complex information in such a digestible way is impressive. I wasn't super excited to learn about hardware going in but felt like my time was well spent in this class.
The homework assignments were very time consuming and difficult
Not near as bad as the hype. I feared this course due to not really being math focused and never doing leetcode type problems. It ended up being a pretty formulaic course as the exam questions were small variations on the HW problems, which themselves relied on classic methods straight from the textbooks. Since you only have assignments every other week, and can break up the work with a team, I would basically average doing just 1 to 2 problems a week in the course for HW. Then I'd study the answer keys for the HWs and practice exams, and apply the same concepts in the exams. It ended up being much less work than 592 and I got an A+ with the proper strategy and a good team. The grading was also very fair and less pedantic than 592 or 593.
I earned a A+ in the course, and I’m no genius so you can too. This course is split into 3 sections, with an exam testing each: 1. Counting, 2. Probability, and 3. Graph Theory. While the exams aren’t cumulative, the topics are not disjoint: probability definitely builds off of counting and counting also comes in handy for graph theory. So plan to spend a lot of time getting familiar with different types of counting problems. If you do enough problems, the solutions start to become intuitive. Leading up to the exams, large problem sets with solutions are released that help with this. I encourage you to make time for them. Go to professor office hours and ask questions. Professor Tannen is very helpful and clearly wants to hear from the students. It’s those who ask questions during these office hours who most greatly contributed to the success of everyone in the course. Prof Tannen will provide sometimes detailed hints to point you in the right direction for HW problems. Also attend his exam review sessions. He is usually willing to provide useful hints for what to expect on exams as well as point out the most critical HW and problem set questions to review leading up to the exam. I can’t stress enough how useful his OH are for your success. HWs are tough and take a lot of time. All are just 5 problems, but are almost all rigorous proofs. Quite a few of my HWs ended up >10 pages in total, with some excruciatingly tedious solutions. Don’t neglect to review your grades upon receipt. There were at least 3 occasions where I submitted regrades (and received credit) because my answer, while correct, didn’t necessarily fit the expected solution. Proofs are hard/time consuming to grade, and there are hundreds of papers to get through, so we shouldn’t expect perfection from the graders. You should, however, get the points you deserve, so don’t be shy and request a regrade where it makes sense. Overall, you’ll learn a ton if you stay consistent. Good luck!!
This class was a nightmare for me. When I enrolled, I was misled by its high ratings and low difficulty score here. However, these ratings are outdated and do not reflect the current state of the course. Previously, exams accounted for only 20% of the grade, were easier, open-book, and lasted 3 to 3.5 hours. Now, exams are 30% of the grade, significantly more difficult, and you’re allowed only two pages of notes with a minimum font size of 10. The ratings issue is further compounded by the migration from MCITCentral to MYMCIT. During this transition, the owners of the site conveniently “forgot” to migrate negative reviews, artificially inflating the course’s overall rating and failing to reflect the current reality. In terms of content, the course itself is not poorly designed. The topics covered are relevant, and most homework assignments are manageable. However, two of the early assignments are time-consuming and vague in their instructions. One positive aspect is that homework assignments from HW1 to HW9 are auto-graded. When I signed up for the course, I expected to learn how to use libraries like PyTorch and build my own neural networks—previous semesters featured such assignments in HW10. Unfortunately, this semester’s HW10 was different. Instead of auto-graded programming assignments, we had a non-auto-graded task involving OpenAI fine-tuning, which cost $10 to complete. The grading criteria were unclear, and the assignment format (done in a Colab notebook) was inconsistent with prior object-oriented programming assignments. The course relies heavily on mandatory readings. A TA mentioned that “the class is a complement to the readings,” but it should be the other way around. Exams are disproportionately dependent on these readings, has very specific questions or presenting numeric exercises with little to no similar examples in the course material. This disconnect is evident in the results: the median for the first exam was 50%, and was below average.
I am an MSE-DS student - took this in my first semester along with ESE541, while working full time. The course was interesting - you touch on a lot of topics over the course but rarely delve into any at a deeper level. It converges somewhat with 541 so it was a good course pairing. The quizzes were 3 attempts and the homework was autograded - some of the homework questions were frustrating but TA's help. The project was the best part for me as I got to do an end to end ML pipeline with teammates. The exams were easy and straightforward for the most part.
The course was quite easy for anyone with some probability background. Lectures are light and easy to follow, however some students have said that they are too math heavy but personally I felt the professor did a good job to explain. The one attempt quizzes each week will make or break your grade as the coding assignments are too easy and the exam is not really hard either.
Easily the best course in MCIT. Like other reviews say, the course takes about twice as much effort as other courses. The lectures are some of the best available for explaining the concepts. Labs are kind of tedious at times and the design is a bit spaghetti, but usually straightforward with detailed instructions.
Above average workload, lectures do a poor job of explaining the concepts. Labs are long, tedious, and confusing. Sometimes the instructions and autograder literally expect opposite things. Exams are like 521 exams, completely random. Questions are also poorly/vaguely worded. First half of the course is on using Pandas and other technologies in Google Colab. Second half is on neural networks and other ML techniques. The second half is quite poorly explained and I retained very little of it.
This was the most poorly run course I've ever encountered. The material is difficult in nature, but the way the course is structured makes everything 3x harder than it needs to be. Lecture videos do not prepare you for the homeworks. The homeworks are messy and will have contradicting instructions between the writeup and starter code. The lecture videos are taken from pre-recorded sessions of in-person lectures so there is a lot of wasted time where he converses with students that you cannot see or hear. Do not expect any semblance of help or attention from TAs. Questions on Ed will go unanswered for days (or in my case, an entire month). TAs will contradict each other and the homework writeup or provide incredibly vague answers that require multiple follow-ups. During in-person sessions (like office hours or practice exam reviews), it is abundantly clear they are not familiar with the material at all. It is my understanding that there have been multiple iterations of the course. It is clear there has been no attempt to improve it in the past, so it is unlikely improvements will be made going forward. My recommendation is to avoid taking this course by all means necessary.
Take my review with a grain of salt because I work in crypto, and so I didn't have to deal with what is likely a very steep, very difficult learning curve for a student who has no background in crypto when taking the course. I think for someone who has no background, the course is likely Medium/Hard difficulty and the hours requirement is probably more 10-15 hours per week. 1-2 of the homework assignments can be challenging, say the Merkle Tree one and one involving block verification. The final exam is also quite challenging, and is 20% of your final grade. Professor Falk definitely knows crypto, and I found his deep dives valuable even though I came into the class already having significant industry experience. You will definitely have a leg up even on many web3 devs on his deep dives into the EVM and Bitcoin. I hope he offers an Advanced Blockchains course -- it would be welcome and I'd definitely take it.
I thought I came to this class with a certain level of confidence after doing well in 592, but that was not the case. 1) This class heavily focused on the graph theory part of 592. If it's been a while since you took 592, you can always get some readings via 596's textbooks. It shouldn't be much to review. 2) The proof in 596 is very hand-wavy and less rigorous than that in 592. However, it's still recommended that students have a solid understanding of different proof methods and frameworks. 3) Many folks have already mentioned that finding a good team is a key to success. I got a really good team and couldn't nail an A. I think part of it was because I didn't get to practice a lot before the exams. Reading HW solutions, working out practice problems, and reviewing recitation problems did not seem to help. I think what helped me the most was to take things slowly and try my best to do all HW/recitation problems by myself, then review the answer keys. The provided solutions are not always the best. They are either oversimplified or very pedantic. You don't want to suddenly review the solutions just a day before the exams because it will take some time to comprehend the solutions if you get it wrong to begin with and to review with TAs. 4) Know your TAs. There is a lot of TA support in this class, but 50% of the time, I didn't find TA open office super helpful. It was either technology limitation (not being able to draw out examples via whiteboard online) or just purely explanation skill limitation. I didn't expect much anyway, but I persisted in trying different TAs or reframing my questions, which turned out to be a better strategy. 5) Textbooks should be your BFF and YouTube videos are your friends in this course. I like the textbook a lot because it's more cohesive and comprehensive. Some short YouTube videos are good for getting the visual in your mind, but they won't help you deepen your understanding.
Big workload but covers a lot of ground. Be prepared to start assignments early especially those in Spark and AWS. Exams and quizzes are not easy, quizzes are limited attempt. I liked learning about CNN and I think everything was pretty much surface level but covered a lot of ground especially after MT 1. I suggest you take if you want to get started in data science.
Very well designed course with scaffolding that made learning fun. No outside resources needed. For our semester we didn't have a new group assigned for each assignment. I really enjoyed hearing about the business perspective on Big Data and code.
Course is curved heavily. Professor just wants you to get involved and make sincere attempts at learning this cornerstone concepts in this ever changing field. TA support is inconsistent but quality when there. lenient grading on tests and math proofs (25%). 4 homework assignments with plenty of opportunity to earn max points for each. Take this course if you want a survey on this field with a few (can argue slightly arbitrary picks but I would say they are mostly foundational) topics covered in depth with some proof-like analysis. This overview of the landscape and hands on assignments aren't yet the mostly polished in terms of grading (code skeletons sometimes need clarification), but I think with the daunting level of material potentially there, you are getting an overall didactically sound framework for this topic. Worth taking and feel prepared for more technical readings and technical interviews including: batch normalization, dropout, learning rate protocols, nesterov's momentum, variational autoencoders, transformers, CNNs, LSTMs (transformer description here and NLP both synergistic). Need some linear algebra understanding particularly eigenvectors, positive semidefinite matrices. Some basics on optimizations introduced in the optional homework 0 and math materials suggested for semester provided by prof on Ed.
6 HWs and one quiz constituted the grade of 5160, a true overview math course. As a result, the workload was on the lighter side, but appropriate for a 0.5 credit course. Generally, the material combined early portions of 5920 (combinatorics) with 5420 (basic stats). The professor communicated that material well, clearly exuding a passion for math and his students. My only two issues with the course are that 1) it could be redundant if you have taken other math courses in the program 2) the TAs provided no solutions making studying/regrades harder. The latter complaint may have been more of an issue given it was the course's first iteration. If you want to brush up on your math with a lower stress course, 5160 is perfect for you!
The course was not challenging. But it covered many necessary components of object-oriented programming and it did so through a series of fun games. I definitely enjoyed that class.
Please ignore my workload which is somewhat higher - I am a person who will put on all of my efforts on every course I attend. In general, this is a good introduction to almost all of the concepts in Data Science I think, because each module will give you completely different study topics, and they are too wide-spread. The homeworks are long, and especially HW3 or something I don't rememeber near the midterm will cost you long time sitting there without leaving your computer, because if you have a break, the Colab will likely stop the session, and you need to spend another 40 min to run to where you are working. This is SQL-heavy. Prepare to write lots of SQL codes, including dealing with dates, and 3-layers nested queries. But Dr. Nan Zheng is very responsible. She answers to each question and she has a wish to explain everything clearly. Many of students failed to answer all of the questions for Midterm 1, because the time is limited. But Midterm 2 is very easy. Do listen to the TA's advice to put the specific parts on your cheatsheet for your final exam.
I have taken 541 and 545 before, so for me, this is a very easy course. It is very light-weight. For the final project, do give enough time for writing the report and making the video presentation! If you like, you may even do all of the HWs on your own. Overall, this course will give you an overview of how to do a DS project.
Excellent course that makes you feel grounded in NLP domain. I took this course when LLM is being hyped and was trying to understand the buzz. The lecture video contents are very valuable. The textbook is free and very well written. I don't have ML or much Data Science background and came to this course with only 6 completed MCIT core classes, a love of language and some curiosity about NLP. I ended up enjoying this course a lot more toward the end because I overcame certain challenges at the beginning due to lack of knowledge in ML in general. You don't need much ML to succeed in this course tbh. I like how HW assignments were designed as well. It spoon fed you but guided you to learn stuffs as well. This course is open in a sense that you can challenge yourself with leader board ranking or just trying to keep up with the pace like myself. I could squeeze in a vacation while taking this course and still have been able to explain in theory how chat GPT works to my mom. Maybe it's a success there?
This was a very enjoyable course covering many of the important data structures used in software development. It is taught all in Java and is a direct continuation of CIT5910. The assignments were fun to complete, and most allowed for unlimited submissions on gradescope. There were also a few extra credit opportunities covering some more advanced topics. Unfortunately, I found the final exam to be quite poorly written, which made it hard to know what knowledge was being assessed in many of the questions. The quality of the TAs was also quite variable. Overall, the course has a similar time-commitment to CIT5910 (plus an extra 5-10 hours for each of the 3 extra credit assignments).
Honestly, this course is EXTREMELY niche and focuses on more low-level concepts that typical SWEs would never really even think about. This course is really only relevant for people who enjoy compilers, and low-level analysis tools and related stuff. You learn about how the software itself is analyzed (using concepts from statistics/graph theory). The homework assignments (called labs in this class) walk you through the basic ideas of the software analysis tools that are introduced in the lectures. The first half was doable and intuitive but gets particularly complex for the last 3-4 labs. THE GOOD NEWS IS: You don't implement anything from scratch. These labs feel like a "code-along" where you only implement a few functions within the broader lab framework. It's actually really nice because writing anything of these labs from scratch would be frankly way too much for a student to handle. Still, the material is advanced and incredibly niche so you have to know what you are getting into. The workload is honestly not terrible but to keep motivated you have to have an interest in these topics already. Be aware of that before you take this class. This class is low key kind of a pre-req for the new 569 GPU computing course since you code in C/C++ and Python and deal with LLVM (used in the GPU compute stack). If you are interested in GPU computing, this class is definitely highly recommended. For everyone else, you can skip this class.
Nice introduction to Python and Java, covering many important concepts in object oriented programming. Quite an easy course if you have taken any programming classes before.
I absolutely loved the content this course provided. It’s a very applicable course, and the material I learned aligned well with some of the day to day work as a SWE. However, I do have concerns about the grading system. If you are striving for an A, it’s quite difficult. Having midterms account for 50% of the overall grade is understandable, but the level of difficulty is a major issue. Missing just one question can drop you down to a C+, which feels overly harsh. Additionally, the exams tend to test very specific knowledge rather than taking the more holistic approach that the professor suggests. Another point of concern is the workload. For a 1-credit course, there was simply too much going on. In the final few weeks alone, we had a homework, report, a final project, a demo, a final exam, and a live demo. My suggestion would be to tweak the syllabus, either reduce the workload or be a bit more generous with the grading scale. For context: this was the only class I took this semester, and I still did not earn an A. Thankfully, I had a good group; otherwise, my final grade would have been even lower.
This course is a missed opportunity to introduce classical and modern data systems. It feels fragmented and goes into depths in some niches while ignoring or just briefly mentioning multiple other aspects of modern systems. Some course material is quite dated and contains mistakes that you find about at homework grading. Grading is robotic, arbitrary and downright erroneous, so prepare being annoyed about it and write regrading requests. The course overweights on exams that test minute understanding of the said niche topics. Project was fun, but it depends on the quality of the group you're in. If the team does not have prior experience it will be stressful.
This class is solid. As someone who was kind of familiar with data processing and linear/logistic regression, this class tied the "data pipeline" all together for me. This class definitely has its shortcomings: sometimes, especially when you're not familiar with the material, this class can be a mile wide and an inch deep. The exams are weird - only like 15 multiple choice and a few short answer, it puts a lot of pressure on sometimes random details. The autograder on homeworks can be finicky but if you're willing to go to TA office hours they were always super helpful to me. Nonetheless, if you put time into this class I have a hard time seeing how you could do much worse than a B. If you're interested in a whole picture of data analytics / data science, take this class.
I would rank this course as one of the most essential for anyone in our program: the potential ethical and legal questions that can come up in regards to software development, use, and QA are mind boggling, and this course will at a minimum put some questions into the back of your head to think about with software while in the field. I found the content and presentation of it to be very engaging, very applicable to the field, and very enjoyable overall while also being very educational. Overall, not a difficult class as long as you are engaged with the content as designed; be sure to chat with the professor on topics: his thought processes and insights are very valuable generally but also as examples for good, logical ways for how to think about answering a topic/prompt when working on an assignment.
Perhaps it was due to it being the pilot semester, but this was the first course I have ever been curved down on - an 96.5% final grade was an A-?!? Regardless of that minor frustration, the readings were fascinating and kept the class engaged through the forced, albeit insightful, discussion. It also allowed you to engage more/less as your schedule allowed. Then the unit assignments offered ample opportunity to tie the threads together across topics. One gripe there - when they say that the max video submission is 10 minutes, they mean the expected video submission is 10 minutes. Then the final was another similar opportunity to round out the course with some comprehensive current day topics! Last note, unrelated to the course itself, but everyone loved to talk AI and it got a little redundant at times. See how many possible topics you can connect to in the discussions! It's a unique course in the level of reading involved and the material covered, so I definitely recommend taking it and making the most of the opportunity to delve deeply into more philosophical discussion on our work as engineers!
The course is relatively well-managed. The TAs are very responsive and friendly, always ready to help if you get stuck on homework questions. The course content covers a wide range of topics, but it doesn't go in-depth into any specific area. For modules 10 to 13, I feel a bit lost regarding their relevance to the overall course. The midterm and final exams are of medium difficulty, but the actual exams are definitely harder than the practice exams. Overall, it's an acceptable class, but I notice that most students achieve an A- or above quite easily.
Echo other sentiments that this class is very practical and well-taught. My only complaint is that you are forced to form groups asap and it is not necessary since the HW assignments are pretty simple—actually caused more stress than anything else. Also, I currently work full time (which is the clientele this program seems to be targeting) so I didn’t really need the “real-world simulation” :P but I get it. My advice would be to take the couple of weeks you have at the beginning of the course to talk to people and get a good group together.
This is an informative, well-designed and enjoyable course. CCB has proven once again that he is a gifted teacher who can bring out the excitement and wonder in any subject that he teaches. The challenge of teaching a course on a rapidly evolving subject notwithstanding, the course provides a coherent overview of how progress in computational linguistics brought forth the modern era of natural language processing. The highlight of the course was the instructor office hours with CCB and Kuzman Ganchev, where we dug deep into the course material, explored how it fits in the big picture of NLP research, and discussed lectures and papers from outside the course. The course picks up where CIS 5210 left off. Even though it’s easier than 5210, I highly recommend taking it after 5210 and at least one machine learning course (like CIS 5450) to get the most out of it. The accompanying textbook by Jurafsky and Martin is excellent and corresponds closely to the lecture material. Definitely read it. I have created a Notion page with solutions to some end-of-chapter exercises here: https://mcit.notion.site/Jurafsky-and-Martin-Exercise-Solutions-16aebeee139980f58006cdf9852048c3
This course is part overview of the Medical Analyst field of HL7 and FHIR and part basic image analysis and manipulation in Python with PyDicom and Orthanc (standards in the DICOM-based medical imaging field). If you are looking to go into an Analyst role or Informatics with healthcare or curious about what those is, this is a great course to take and anyone with some interest in medical applications of their MCIT degree should take this. I work in an adjacent field so this was generally easy for me, but the HWs are well laid out and with side googling not too difficult to get working.
The class structure is very disorganized which is clear from day 1 when the lecture videos are from a professor no longer at Penn. Data Structures is a very interesting topic but this class does it's best to make you feel completely lost by consistently giving HWs that have nothing to do with the lecture content. In addition many of the data structure implementations get a cursory overview and never get brought up again until the very "gotcha" final exam which leaves you wondering what the point of the course was... Tips: Do each HW early as some take much longer than others, but most are only a few hours of work. Projects grade for maximum OOP-ness so don't try a functional approach!
This is not a difficult course suitable for both beginners and people familiar with statistical learning / ml. The course does a good job building ground-up understanding of the classical machine learning techniques for regression, classification and clustering. I separately appreciated that it was quite light on linear algebra and workings of algorithms themselves, keeping to the overall idea and statistical intuition. Professor does a good job explaining core material in a concise economical manner, and textbook is very good too. There's enough depth for anyone to go into detail if they want to using the textbook, but this is not truly required to have an A in this course. Homework is quite easy and uses autograder with almost unlimited attempts.
This is a nice pairing with 5850 for easy, but also very relevant to the medical field, half-credit courses. They do not build on each other outside perhaps the understanding of what medical images are and what flavors they come in. In terms of content, this course covers very applicable applications of convolutions, CNNs, and UNet to the medical field; I can confirm that U-Net is used extensively in the radiation oncology field for image segmentation, so this is immediately applicable to current practice. Personally, I loved this course, but I also work in radiation oncology, so your miles may vary. But if you like or want to learn more Python, NumPy, SimpleITK, Keras, and the like, and/or want to work in the medical space especially with ML/AI, this is a great class.
Course Content: All proofs and explanations on how you arrived to the answer and less about the numbers or math you might be used to. You don’t need to know coding for this course so was a good foundation in enhancing your thought process. The grading was terribly harsh, even with the option to earn back points (rare). Exams were most difficult with only a few questions and sometimes multiple parts being worth so much, while also being both timed and proctored. The weekly assignments were the most time-consuming and not weighted heavily on your grades as exams, but you’re spending basically all of your time on those assignments using LaTeX btw. Prepare to spend so much time on homework over everything. Class structure: The syllabus clearly outlines the due dates and expectations with typical self-learning on Canvas with videos/slides posted and completing the assignment due next week. Prepare to also complete the lectures/modules and a weekly assignment/homework due right after you take exams. Other/related info: The head TA definitely knows the material but didn’t really do a great job helping you think through the process or provide sufficient explanations to help you understand, rather would just direct you to where you can find the info and think it yourself. I don't think they meant to be rude but just more matter-of-fact, so the tone may be off. Prepare your questions to be more specific and read other existing EdD. threads as someone may have already asked what you wanted to know. Don’t take anything personal because the goal is get this course over with already. Appreciated the availability of many review sessions with TAs or coaches for weekly material or even prep for the exams. Join the one with the Instructor as he will outline what to expect for the upcoming exam within reason. Overall, no need to know coding, difficult material, and huge time commitment. I wish I had taken this course by itself/only this course for that semester.
Good foundations in starting to learn to code. As someone with no coding background, I had to spend more time in learning and writing probably compared to others in the same course. It was hard with the self-learning as the lectures were mostly just definitions and basics, but the code-along demonstrations by the Instructor helped with practice. The graded material was difficult as already after the first week, your first assignment was to jump right in and submit something right away? Huge learning curve for someone with no coding or CS background. Class schedule, structure, and expectations were clear and outlined by the syllabus. Really appreciate the availability of the TAs for help on EdDiscussion and the extra resources they provide to help you understand the modules/material. Exams were fair and you are given plenty of time to complete over multiple days. Overall, difficulty and time commitment depends on what experience and skills you already have, and grading was fair. I do think I could have learned this material myself on Coursera or other outside resources though but this was good for foundations in Python and Java.
This is a light and enjoyable course. The course content is fascinating, and the professor is phenomenal. I thoroughly enjoyed his lectures and office hours and learned a great deal. I would have never taken this course, were it not a requirement for the AI degree. By the end, I was convinced that it should be a requirement not just for the AI degree but for any student of technology. The only drawback of the course is the completely arbitrary and subjective grading of the 3 unit assignments by the TAs. Even when a thorough and thoughtful assignment has been submitted that meets all of the requirements, the TAs invariably came up with some excuse (e.g., more examples, more inter-connections) to deduct points. What's worse is that they obviously used an LLM to justify the grade that they had pulled out of a hat. The regrade request process was useless. The TAs simply used the LLM again to come up with excuses to reject the regrade appeal. In spite of these difficulties, I managed to get a 97.6%, which would have been awarded an A+ in any other course, but I ended up with an A as may final grade. I don't know if there is down-curving of the final grade (as suggested by another post) or an impossibly high threshold for A+.
The first 4-5 weeks of the course covered the stack in C along with its vulnerabilities, exploits, and attacks. If you took 5930 then this part of the course essentially picks up where 5930 ends. You’ll learn a lot more about the stack and the project for this section required developing attacks using the C language. The next 8-9 weeks of the course is more theoretical and covered cryptography, cryptanalysis, hashing, and encryption. This included a lot of math theory and math concepts of cryptography. The last 1-2 weeks covered web security such as web browser attacks and SQL injection. I enjoyed the first portion of the class because it was more applied than theoretical and I liked 5930. The remainder of the class I did not enjoy at all, it was not my cup of tea. If you’re considering taking this course I would recommend to look at the syllabus, review the content that’s covered, then do a little research into these topics to get a better idea. I did not do that because the class seemed interesting and got good reviews; I realize now I don’t find cryptography interesting at all. The class is graded based on assignments, projects, and exams. The assignments were straightforward - assigned reading and answering questions. The projects were incredibly difficult because there was a large gap between what was taught in lecture and what was asked in the projects. It was the same material but much more complex. Most of my time in the class was spent working on the projects, which in addition to being difficult were also lengthy and took a while to complete. The exams were also difficult for me because the cryptography portion of this class was so tedious and uninteresting it was hard to study for them.
I really disliked this course. The pre-recorded lecture content consisted mostly of math theory with no connection offered to practical programming concepts. The pre-recorded TA recitations walked through an example programming project, but with no actual teaching. Sure, the homework assignments were not too challenging...but there was no relationship between the entirely-programming-based assignments and the lecture content. Then, the exams were entirely math that went above and beyond the lecture material (particularly on the final exam) on topics we never had any support in practicing. It also feels like no one involved cares about this course at all - the professor regularly missed his own office hours, the TAs didn't have any answers about why that might be, everything is pre-recorded and autograded....what exactly am I paying for here? Would not recommend this course at all. I didn't feel like I came out of it having learned very much that I could practically use (I guess it might be more useful if you already know all the programming concepts and just want to learn the math behind them?), and I definitely don't feel like I got a good value for the tuition cost.
I spent about 30-40 hours per week during 555. The lectures were on the longer side and they generally give an overview of the topics covered for the weekly HW assignments. I don’t think there was required reading, so it was the HW assignments which took so much time to complete. The assignments are due weekly for the first 9 or 10 weeks, the remaining few weeks are used to work on the group project. The midterm was squeezed in between assignments without a break so that was extra work. I took the course during the Fall semester (I think it’s only offered in the Fall) and the final was scheduled the week before Thanksgiving break, so after the break the last week of the semester was used to finish the group project. The assignments are in Java and were very vague and very long. For me a lot of time and effort was spent simply trying to figure out many Java-specific things for the HW assignments because each week’s lecture doesn’t cover the specific Java-thing with enough detail. And the assignments needed much clarification, they lacked details and it was difficult to interpret what was being asked -- I think the professor designed the course to be that way. He’s very active on ED answering the million questions students had. I’ve taken nine courses and this was the only one where I needed to go to TA office hours to figure out how to complete some part of an assignment. For the assignments there are unlimited submissions. I think about 70% of the test cases are public and 30% are hidden, so you never will know if you got everything correct before submitting. The group project was even more work than the weekly assignments, but working with classmates made it less of a pain and more enjoyable. I thought the exams were very hard; I don’t remember if they were tricky or not, but I think there was just so much information covered and the weekly workload was so high that it was hard to efficiently study for the tests. I think if you want to know more about distributed systems or if you're trying to get a job developing software this is a good class to take, but it's very demanding and an insane amount of work.
Not too much HW, but the videos are long, about 20 videos each week, later can be less. Be prepared to learn tons of new terms in the first 3 weeks, and search online frequently for new concepts. I've spent >13 hrs each week since I'm a foreigner, and I need extra time translating materials and to interpret. HW1 has been updated - it is a practice about connecting to DICOM using a certain library, which needs specific searching for some keyword, and do the connection as early as possible. Later HWs can be essays, coding, reflections. One HW is about NLP, which is fun! Exam is closed-book, so memorizing the whole big picture for each module can prepare you for writing more bulletpoints in the exam - I've spent 10 days memorizing all things, and I've got A+. It's not hard, but you just need to learn many new concepts, which are the basics for medicine and radiology field.
It has the most lightweighted courseload in all the courses. Most people say that you only need 2~4 hours each week, but if you don't spend 5~7 hours on this course, you probably will not get an A, since the lettergrade has a bell curve, and the professor is strict on this. About 94+ can get an A (not sure). (Well, I'm a foreigner so probably I spend more time.) Each week you only need to do the quiz, and give 3 comments on the readings (3~4 hrs). However, summarize and connect your newly learned concepts very often on new cases, and write the summarizations for the exam, or you can practice on writing some blogs about laws - that will prepare you for the 3 Unit Assignments. That's what I did. For the Unit 2 video assignment, my advice: write all the related concepts on your ppt slides before the limited 3 days, and in that 3 days you can just link the case to the course concepts with less time. The exam requires strong ability of writing - you need to write about 2000~2500 words in 135 min. I didn't do well in the exam, because the feedback says I need more new cases which are thought by myself and related to my argument instead of using cases in the course materials. You will learn many useful key concepts in the law field, and you will understand the ethical tradeoffs and thoughts behind laws. I love this course. Key: summarize & practice writing essays which bring concepts to a new case.
I signed up for this class as an easy summer class / as a "palate cleanser" between hard courses and it very much lived up to that. I got an A in the course and averaged around 6 hours a week. That being said, the quality of the course is very good. Ex: I now know the difference between copyright, trademark and patent. The professor clearly put time into designing the course in an interesting and meaningful order (which sometimes electives can lack). The downside of this course is you're passing up on learning hard tech skills but if you don't mind that and you need something fresh to get you to the end of the program this is a great option. It's hard to say if I'll really use this material in my career but I imagine if I start to take a management route it'll be useful.
I took this class right after finishing 591 (which I did really good in) and during this course I went on vacation with my family for a week and moved across the country and started a new job. Overall, this course is doable, even with all those life events, if you plan accordingly and keep up with the assignments. The first two months are relatively easy paced (This is when I moved and went on vacation). One assignment per week roughly and they aren't all that difficult per se, but the java learning curve is kind of steep if the only java you've done is from 591. The time commitment during the first two months ranges anywhere from 10 hours up to around 20. This is driven mostly by the assignments and extra-credit (which I highly recommend you at least attempt). If you just do the minimum to keep up with the course (i.e. reading, lectures, quiz, and assignment), it is around 10 hours/week. But if you attend/watch all the recitations and Professor office hours and do the extra credit, it can easily bump up to 20 hours/week, especially on the later programming assignments. During the last month, you have two projects which take significantly more time than the assignments in the first two months and a final exam (which was a bit challenging). Expect in the last month to spend closer to 20 hours per week. The projects, while not technically very difficult, are rather large. Combined with the lectures, recitations, studying/review for the final, etc. this month of the course is kind of rough. I thought this course was a bit more difficult than 591 (between easy & medium difficulty). I would not trust difficulty ratings more than a few semesters old because the class is in the process of being revamped and it seems to have gotten more difficult than it used to be. That said, getting a good grade in this class is still pretty achievable so long as you keep up with the assignments.
Hardest class in the program. Most work in the program. Also the best class in the program, probably by a significant margin. I work at a tech company whose apps are used by 30+ million monthly active users. Some of key issues the most senior engineers are working on *right now* at this company deal with concepts learned in this course, including but not limited to: - Partitioning writes to reduce incidents of disk faults and reduce state size - Streaming smaller chunks instead of giant objects to increase throughput and also prevent faults - Crawling web pages - Indexing said web pages in an inverted index to handle search terms mapped to URLs - Ranking said URLs to prioritize URLs that match well with the inputted search terms - Operating AWS at massive scale and dealing with issues with both horizontal and vertical scaling It's an incredible course. It's not for everyone, the amount of work is insane, no matter how smart you are. But you'll very likely come out of it feeling like you leveled up multiple times and yes, know that the skills learned in this class are absolutely applicable to companies that have apps used by millions and millions of people daily.
I honestly came into this class without big expectations, but I ended up learning a ton. I didn’t have much of a background in blockchains or web3 before, but this course gave me the foundation I needed. To the point where I now actually feel confident enough to apply to web3-related jobs. The assignments definitely had ambiguous instructions, and you’ll spend some time just decoding what’s being asked. But once you get past that, the implementation isn’t nearly as intimidating as I thought web3/blockchains would be. It’s challenging, but not unreasonable. The professor is super passionate and enthusiastic about the topic, and that made the course way more engaging. His office hours were great. He has a weekly one dedicated just to discussing current events in blockchain. He gave me out a few project ideas to to dive deeper into blockchains and the EVM, which I personally appreciated a lot. The exam was tough, but in a fair way. It goes deep into the course content, and since it’s open-book, I think that difficulty makes sense. In terms of workload, you’ll have about two weekly assignments, but really it really feels more like one long assignment split up. In addition to the two weekly assignments, the final project has weekly components that will be due. So really it's three assignment submissions from week two and onwards. Again, after decoding the instructions, the work itself isn't complex. If you want to just get through with a decent grade, you can probably put in ~10 hours/week. But if you’re curious and want to really digest the material (like I did), you’ll end up spending more time reading, looking stuff up, and really understanding contract implementations, which honestly makes the course rewarding. I’d recommend this course to anyone remotely interested in blockchains. At the end of the day, a blockchain is another type of distributed database/network, so if you’re into distributed systems, you’ll probably find this class fun too!
Good course but did find it strange that lectures are done by a Professor not currently at UPenn anymore. Further the preparation for the final exam provided by the course resources, the Professor, and TAs was very lacking and it blew the class out of the water with its difficulty. Next, the final project needed to be clarified for so many details and it was very apparent how old that assignment is, also there are just gotchas instead of actual important topics to learn as part of that project and was not impressed by it at all. Finally, all assignments should be Maven projects as well besides the first one or two, the projects not being Maven really is weird since those require the most complexity that Maven can simplify
This class makes the material and the homework assignments way more difficult and convoluted than the topics that are actually being taught. Discrete Mathematics is pretty commonly taught but is done in a way that few would grasp with the explanations provided. The Professor is way too abstract and high in the clouds and frankly didn't show any proof in a lecture video up to the standards of the proofs required in the homeworks, so a complete lack of examples. Further, Combinatorics I don't believe needs to be taught with so much difficulty, you identify the formula to use and use it then look for tricks to solve certain problems easier. Probability was ok but again there's a lack of sufficient examples in the lectures, I'd rather see Probability questions answered in the manner that is expected. The class is better once Graph Theory enters the picture while being easier so I'm not exactly sure why the difficulty had to be ramped up to 100 for the prior topics. Further with 596, a class that deals with more complex algorithms, the proofs are actually shown and stepped through, completely outclassing 592's abstract approach. So prepare to slog through lengthy homeworks every week without a break at all for exams.
The class is easy for someone who already has experience programming in a different language. I'm a full-stack developer working at VC-backed startups but in JS/TS, so the actual content of this course was just an intro to Java and Python. However, the homework and lectures definitely take more than 10-15 hours a week. I would budget at least 20 to 25 hours a week, especially if you are not familiar with the material. I definitely wouldn't take more than one class with a full-time job unless you are okay with getting C's or less. I suspect people who take multiple classes with "full-time" jobs either have a different definition of "full-time" than me (45-55hrs/wk of engaged work & meetings) or are ok with not getting As (I got an A)
The course was not easy, and suffice it to say that if you are not in a good group with great teammates you can rely on for the two group projects it may be hard to get a good grade. Also, there are two exams in the course, which are not easy even though the format is open-book.
Overall good course but tries to cover too many topics. Should focus more on truly Big Data rather than just all data analytics. Should have spent more time on pytorch and Spark, and less on pandas.
Great introductory course and valuable teaching of Java.
Hard course, but taught some good concepts and also LaTeX.
Fantastic course that teaches many foundational CS concepts. Enjoyed learning Assembly, C, and about circuits.
Provided lots of great real-world knowledge and skills in cloud computing.
Good foundational course if you have never used pandas, SQL, and scikit-learn otherwise mostly a review and practice.
Good humanities class to balance out all the coding/math. Have to watch all lecture materials in detail to do well.
Key material such as foundational data structures are taught but the assignments are not practical or useful.
Well-taught and interesting course. Lecture videos are a must-watch.
Grades: First TA grading: 68/70. The other two TAs I got full credit. Lost a total of 15 points across 13 homework assignments. Final grade isn’t out yet, but before the curve it’s 98.76%. My major before is architecture. I haven’t studied math for more than 5 years. How I studied: 1. Watched the lecture videos + read lecture notes 2. Reviewed example problems in the Solved Problems 3. Wrote homework by following similar logic as the examples 4. Went to Val’s Open Office Hours whenever I had questions Aside from initially looking up stars and bars videos online. I didn’t use any external materials. Most homework could be completed by following the examples. The course material feels really comprehensive to me. Experience: Compared to previous reviews, I didn’t feel the TAs were especially strict this semester. Before exams, I checked the rubrics posted on Gradescope and the grading seemed reasonable. Val also intentionally lowered exam difficulty each time. I never encountered situations where points were taken off over tiny details. However, there were cases where I used a different method from the official solution, and even though my answer was correct, I still lost a lot of points. But after submitting a regrade request, all the points were returned. As long as you’re mentally prepared for this, it won’t affect your mood. Val’s office hours are extremely helpful — if you ask him, he’ll explain most of the key ideas. He usually points out the major grading criteria as well, which helps avoid missing steps on homework. I genuinely enjoy discussing problems with the professor.
If you have programming experience this class is a free A. I work in Python mostly (in a non-SE role) so the first half of the course was <3 hours a week of work. The Java half was more in the 5-10 hour range (I had almost no prior Java experience), only the last 2 HW take more than 10 hours (longest was 15 hr) and you get 2 weeks to do those. If you don't have programming experience I think this class would be pretty brutal due to the lack of depth in lectures, I'd probably watch the Harvard CS50 lectures on Youtube before starting. Would expect for those without programming experience to spend closer to 25-30h a week on this.
This was a very solid intro to databases. This was my last elective and it's my second favorite elective, behind 545. The professor removed one week of the criticized "theorical" material and moved the final up a week so that you could just focus on the final project in the last week. It was a little hectic but with Thanksgiving break in there too it worked out pretty good. I had a really good group so that was definitely a factor in me liking the class. The content was, for the most part, practical and interesting. I agree with some critiques that with the final and midterm making up 50% of the grade you have to do pretty well on them to score well. I did ok on the midterm and final and basically aced the project and homeworks so ended up with an A-. If you're interested in databases I recommend this class - find a good group for the project!
Not sure how I feel about this course. The content was interesting, but unfortunately a lot of the modules weren't taught particularly well. There was also a significant lack of worked examples given in the lectures and recitations, and almost no practice problems. This meant many students felt underprepared going into each exam. They instead direct you to find your own practice problems from the textbooks, most of which are not relevant or do not have provided solutions, so you can't even check your understanding anyway. Here is how I got an A grade: before starting each module, watch the Abdul Bari YouTube videos on the topics for that module so that you know the basics of how the algorithms work before watching the lectures. For exam preparation, review the module quizzes and do the exercises in the Dasgupta textbook (I didn't find the exercises in the Roughgarden textbook to be very useful). The LeetCode problems in the weekly summaries are also ok, but you should focus on designing the algorithms rather than passing all of the test cases. The head TA is also very good, so posting on Ed discussion can help a lot too. Finally, if you work full time, I don't recommend doing the homework by yourself, since they are very time-consuming to complete. Instead, solve each question by yourself (i.e. figure out the correct approach by yourself), but then split the write up with your partners.
The course workload itself was manageable, but the grading structure is very rigid, especially when it comes to final letter grades. Exams and quizzes are strictly right or wrong with no partial credit, and there is no curve or rounding at the end of the course. Because of this, very small differences in quiz or exam scores can determine an entire letter grade. While this may work for some students, it can feel unforgiving given how close many scores are to cutoff thresholds. Students should be aware that grading flexibility is NOT part of this course.
Overall, this is a solid course. I definitely learned some interesting material, although I think there was potential to cover a bit more. The homework assignments are not very long, but they are more challenging than the lecture content and must be written in LaTeX, which makes them fairly time-consuming. I also wish there had been a few more lecture videos with additional worked examples. The grading is fair, and the class performed really well on the exams. It seemed most students got an A. I was worried about downward curve, but I am not sure if there was any.
Course gives a good foundation for both Python and Java. Great TA support with supplemental recitations, office hours, and instructor office hours / review sessions. Most of the time spent is on assignments which are more time consuming than they are challenging. The assignments are good reviews of the content, but sometimes needlessly time consuming in a way that the additional time spent did not add more learning value, but rather just rewriting repetitive portions of code i.e. the assignments could have been half as long and I would have learned just as much.
I took this course after NLP and still feel it was a great decision. The course is well-organized with good recorded lectures, relevant textbook readings, and well-designed homework. That said, I sometimes struggled to juggle the lectures, weekly homework, readings, and exam prep alongside my other life commitments. The first half of the course was a bit rough, as the homework assignments were very time-consuming. The second half was lighter on homework, but the concepts and readings were much denser. TA support was outstanding. Despite my busy schedule, I was able to meet with TAs almost every time I needed help. CCB is a great professor who hosts engaging weekly office hours. The midterm and final exams are very difficult, but you will do well if you learn the material thoroughly. Also, make sure to take advantage of the extra credit opportunities!
I have coded in Python before so the first half of the class was understandably breezy for me. However I really appreciated all the extra practice offered, and once we got into Java I still felt like it wasn't too hard to keep on top of things. Overall a solid class
This is a great introduction to programming. The HW assignments and optional projects are really helpful in getting used to the concepts in a fun way. As the course progresses, the assignments take longer and longer but there is a well-paced / gradual increase in difficulty that feels natural.
Expect having a large workload, needing some experience in mathematical proofs, and being time-crunched on the proctored exams. But the content is well worth it, and it is possible to get an A through enough work. HOW TO LEARN IN THIS COURSE: Work the homework problems. *on your own*. I agree with the reviewer from 12/2025 who stated that there aren't many example problems given in the lectures. One of the complaints I had during the course is that I do not think that the lectures really teach you how to create algorithms from scratch, which is what much of the homework and exams are about. You have to kind of back into the figuring out how to create the algorithms on your own. Which brings me back to my point: work the homework *on your own*. Struggling with the homework problems are really what teach you the best in the class, but it's going to take a lot of time if you're new to the material (like me!) or to mathematical proofs. MAJOR COMPLAINTS: The timed exams are waaaaaaayyyy inequitable. They give you 2-3 hours to complete basically the equivalent if 3/4 of a homework problem set, which probably took you 15-20 hours to complete on your own. I've never had to request an academic accomodation for my ADHD before, but I did for this course because the exams would have been unfinishable for me otherwise. I really hope the course staff rethink the need to have such a short time limit on the exams. MINOR COMPLAINTS: For homeworks, it's not exactly clear how detailed your proofs needs to be. I found that a lot of time for the homeworks was spent actually typing up my proofs, and I would occassionally get chided by a TA/grader for writing too much. Looking at the answer keys after they're released, the answers are really brief, and I'm not sure that I would have felt comfortable ever submitting such short answers. COURSE STAFF: Lecture videos were well done. Head TA is great. Other TA's are a mixed bag.
If you know basic sql, python, and data analysis, the first half of the class is a breeze. Then the second half (after the first midterm) all of the sudden begins to be a ton of work and more difficult. I have a bone to pick with someone about the midterms... so unnecessarily difficult and not a good reflection of what you actually learn in the class. But even if you struggle with the exams, you will still do well because the homework and project are set up for you to succeed. I wish we dug more into the second half of the class, the pytorch and pyspark machine learning bit, rather than the data clean up stuff. Overall, I really liked the professors lectures and doing the homeworks! (even tho the autograder drove me crazy sometimes...). Makes sense as to why this class is required for DS. Its not a hard class, just takes a good amount of time and effort to get stuff done.
The professor in this class put a lot of effort to make this class good. I genuinely learned so much listening and taking notes during the lecture videos. The projects were a bit hard for me to do because I had no prior knowledge of C or a C adjacent programing language. But with the right amount of effort, you get the hang of it. I would definitely brush up on your C or at least try to learn the basics before this class if you are coming in as a MSE-DS. Everyone else will have the basics learned from their prior classes in MCIT Grading is super generous and you can get 100 on the projects because of the auto graders. Exams are hard but the projects make up for them, so it is super easy to do well. Just need to put in the work! Overall, I loved this class!
I'm writing this review as of Spring 2026 and it's clear that the course is undergoing a change to a more LLM focused class. It hasn't completed the evolution yet but it is getting there. You first start out learning the history of AI (called NLP in the old days), and it builds on each week until you get to the Transformer and Prompt Engineering. The last 2-3 weeks were back to traditional NLP which feels awkward and likely will get pruned in future iterations. I got exactly what I wanted out of the class, which is to learn the specifics of the Transformer architecture. This has already helped me digest advanced modern AI papers very well. I have to say, most people have rated this class as easy/medium and I would agree but I just want to point out that the Homework assignments feel more like a code-along lab than an actual homework. Theywere well designed with care and rigour which helped me understand what was going on, but it seems that if you aren't using AI to do the homeworks, you would need advanced knowledge of data analysis, and ML engineering. But thankfully, the syllabus says you can use AI so don't sweat it but always put disclosures at the begging of the jupyter notebooks. The lectures are overall kinda meh outside of the Transformer and LLM ones and he gets slightly political in some videos which I think is a bit unprofessional but overall I liked the course and well worth it if you want to learn modern AI.
This class has a massive downward curve, reducing scores by up to 10–15%. The approximate grade distribution seems to be: 98-100% → A, 96–98% → A-, 95–96% → B+ or B, 93–95% → B, 91–93% → B- and I am guessing C for below 90%. Grade boundaries are never published, class averages are not shared, and there is no transparency how the grading works until after the course is finished. Beware that future grading might be even tighter if nothing is changed. Grading/Curving: This course does not use an absolute grading scale. Letter grades will be median-adjusted with the class median at the B+ / A- boundary. Grades distribute on either side of the median, very roughly one standard deviation per letter grade group. The specific grade cutoffs and any adjustments are determined by faculty at the end of the semester. Which corresponds to B− or lower: 2.3% B: 13.6% B+: 34.1% A−: 34.1% A: 13.6% A+: 2.3%
This is one of those rare classes where it's easy AND you learn interesting things. I feel like I have gained a better understanding of the legal and business side of technology and it really is a must-take for every student.
The first third of the class is quite intensive with a ton of material fire-hosed all at once, then the last two sections are much less time investment. The hardest parts are: 1) The fact that for the first two sections, the previous section tests and next module HWs are due the same week (although for my semester this was mitigated by spring break giving a week buffer on the 2nd test) 2) The typical math class stuff where lectures gloss over the material a bit and HW problems differ quite a bit from what you see in lecture. I do think for my semester they made the problems a bit easier and also added recorded solved problems to help out and I think that probably has made the class easier than it was in the past, but it's still quite the gap. But the tests seem to be easier than the HWs so as long as you understand the HWs you'll be fine on the tests. Finally, my main advice for this class is to use ChatGPT liberally for helping explain lecture materials and solved problems to you and make sure you understand all the lecture contents in and out. As long as you do this you'll be fine. Overall, I don't think the class is as bad as its reputation (although again I think my semester might have been a bit easier as they slightly revamped the course) and I think some of the issues people have can be easily solved by just taking advantage of LLMs to tutor you in the materials, without breaking course policy of course :)
This was a very well taught class. As previous reviews have noted, there is a huge amount of content to learn, but I didn't find any of it particularly difficult to grasp. Similarly, the weekly homework can be quite time consuming (and sometimes tedious), but again, none of it was particularly challenging. The exams were also fine, and were quite similar to the practice exams they gave us. There is no curve, but there are extra credit problems almost every week.
I came at this with the perspective of I just needed to pass this class. I'm 3 years into a career that won't ever rely much on algorithms. I was nervous but I had a good group member from a previous class and we decided to take this class together. A good group makes a huge difference. Both for understanding and for grades. 10% of the grade is quizzes you can retake, 40% are homeworks. If you do well on the quizzes and homeworks, like >90%, you really don't have to do that well on exams to pass this class. I thought 592 solo was harder than this class. Although, if you are trying to get an A I can imagine that would be very difficult in this class. The material was pretty interesting. Definitely got my minding spinning many times. Overall, a little less intimating than people make it out to be thanks to a good group. One side note: I took this with Kannan. I went to 592 office hours at least once a week which were super valuable because it was about the weeks material. Kannan in 596 seemed more interested in extending the material in office hours than trying to understand what was taught. This was too much for me and I stopped going after 2 or 3 weeks. If I was really trying to do well in this class I've read better reviews about other professors and probably would've preferred them.
This course was reasonable and gave me a very strong foundation in data structures as someone who came into this program with no previous computer science knowledge. The assignments are reasonable though some of them can be time consuming towards the end of the course. The extra credits are also time consuming but they are worth doing as they really help to bump up your grade.
The course content is high-quality and logically structured. I found the 'bottom-up' approach incredibly rewarding, as it clarified many fundamental concepts I had previously wondered about. The core materials and supplemental readings were comprehensive, and the homework provided excellent hands-on practice. Dr. Farmers is exceptionally kind and supportive, always providing useful resources and answering questions with great patience. I end up getting 104.3% out of 100% and it's definitely rewarding
This is a fun course. Professor Farmer is great and really helpful. The TA support is pretty good as well. The content overall is really well put together, but there is A LOT of it. From a difficulty stand point, while I got an A in the class, I felt like I really had to work for it and take advantage of the extra credit because the exams were a challenge. While I rated the workload as 15 hours, you can expect to spend more time (closer to 20-25 hours) around the mid-term and especially at the end with the final project and final exam.
Disclosure: Finished the class with an A+. I took this course as my last class in the program and thoroughly enjoyed it. I have no prior experience or educational background in electrical or computer engineering so some of the topics on signals and digital signal processing were difficult to grasp, and truth be told, many things only began to click when I started studying for the final exam. The class assumes you are already familiar with C/Cpp, but the projects aren't too demanding until later on in the semester. There are 5 projects (some minimal coding and some a bit more involved) which all require some level of analysis. The midterm is a research paper on a topic of your choosing. And there is a final exam. The greatest takeaway from the class that will be useful for all students, regardless of end goal, is a thorough understanding of the TCP protocol. Another great takeaway, although less applicable to the majority of folks, is a thorough understanding of how the phones in our pockets actually make calls and connect to the internet. This is perhaps my favorite course of the program.
You're telling me you need to get a 100% in the class to get an A in this class? or at least a 96% to get an A-? Wait no, you're not telling me actually.... because I only figured that out on my own when I saw it on my transcript after the semester ended and I came here to read the two reviews below me. There are literally only 7 problem sets and ONE final, and the final consists of 5 MULTIPLE CHOICE questions. You would literally have to get 100 on every single problem set (super long and some were pretty complicated problem sets) and answer every single multiple choice right to get an A in the class. That is why I say this would be a Very Hard class. What ever happened to grades reflecting on how much a person has LEARNED from the class? like wow, I'm honestly just super disappointed this was never communicated before the class started. and that our semester had to be the guinea pigs that have to warn everyone else. we worked really hard on all those problem sets, learned a bunch, studied hard for the midterm... on paper I have an A in the class, it just seems harsh to round me down 2 letter grades. What is the reasoning? and why did no one communicate to us before or after? Sucks because the class itself was very well thought out and the lectures were put together well. If the course manager is reading this, you need to at least communicate with everyone BEFORE the semester begins that that is the grading scale. And it would've been nice if you could've let my semester know too after the fact. TLDR: This class is required for the Data Science degree. If I would've known the grading scale for this course, I probably would've opted to take the one credit class (Fundamentals of Linear Algebra & Optimization) instead.
The course material was overall useful so I am glad I took this class. I didn't put a ton of effort into this class material as I wasn't trying for an A+ but I still got a great grade. However, I did see a lot of problems: There were repetitive lectures that were not well edited. The weekly topics also jumped back and forth between probability based models and theoretical linguistics. The HW sometimes forces you to code in a WORSE way. For some functions you are forced to not write DRY code. The autograder was finicky and I got stuck a lot. Unfortunately there were 3 days straight every week with no TA office hours. Most importantly, much of the lecture material was not covered in the HW. One of the HW directions said the OpenAI API was free but it was not. It stinks that this program couldn't bother to fund like $5 worth of API tokens for students or figure out some sort of free alternative API. Speaking of LLMs, the LLM models used in the HWs/lectures such gpt-3.5-turbo-instruct were super outdated, but I still learned the foundations so it was fine. The main professor, while highly regarded by the university community, is a bit disappointing. Like another review mentions he is so eager to bring American politics into random lectures that do not need it. He admitted in another lecture that he was shocked that bias such as misogyny or racism existed in AI or ML models until a popular paper came out in 2016 because he said at the time he thought, "it's an algorithm. It's unbiased. It's following a formula". I'm no expert, but I'm pretty certain people were aware of general bias in data long before 2016. I know things were different in the US culturally, but the idea that an expert was ignorant to this was discouraging to me. The professor suggested spending $5-10 on API tokens for homework, but I needed way less than $5 ($5 is the minimum amount you can put). In isolation these issues are forgivable, but overall these things ate away at his credibility.
This class gives foundational information for ML. You will learn a lot of math, but in order to get a good grade you have to get full points on the homework. There is an unforgiving curve at the end which is unfortunate because it is only a 0.5 course units.
I liked the course overall. Professor CCB is an excellent instructor who explains concepts very clearly. In general, I appreciated the course content and how it was structured. The other instructor, Kuzman, comes from a professional background rather than academia, and those portions of the lectures were sometimes harder to follow and more confusing. The assignments focus heavily on coding, which feels somewhat disconnected from the lectures and can take additional time to figure out. The TA support in this class is significantly weaker compared to other courses. Some TAs have not worked through the assignments themselves and are therefore unable to answer specific questions. Grading can also be somewhat subjective at times, which creates ambiguity regarding fairness. The exams are generally fair, but they include material beyond the lectures and require careful reading of the textbook. The extra credit opportunities and grading scheme make it relatively easy to achieve an A. Overall, this is a good course, and I learned a lot throughout the semester.
It's not the professor or the content. I think the class is structured well. The problem is the content is sort of boring unless systems programming/ memory management peak your interest. I gained nothing from this class but only because I have zero interest in this niche topic. This course should be replaced as a core course and turned into an elective. The professor is fantastic and the course is organized very well I would say. The projects are great as well. Exams are fair. BUT THE SUBJECT MATTER OF THE COURSE is just plain BORING unless you specifically are into it for your career path.
The content of this class was interesting and enjoyable to learn, and the weekly homework was very fun to complete. The professor and TAs were also very enthusiastic and knowledgeable about the subject matter. However, a big criticism is that the lectures themselves hardly contain any content, and commonly only cover the very basics of each topic. You are instead directed to teach yourself the bulk of the material by reading the textbook, and this weekly reading then forms the basis of the exams. The exams are also now worth 40% of the total grade (up from 30% last year, and 20% prior to that), so the reading has become absolutely essential. So despite being a fun class, for $4000 there is probably not much value for money.
I believe the revamped the course before my semester, with new lectures and new tests, etc. The lectures are really excellent but a lot of the assignment material and especially tests are awful and kind of ruin the class. On the assignment side this course really suffers from a lack of focus, the requirement documents are unnecessarily long while also being very ambiguous and the 'optional' leet code questions are overloaded (sometimes 8+ given with several hards, basically a week of work on its own per module so you can't really go in the detail required), and of course these 'optionals' are only kind of optional because the tests ask leet code like questions. Speaking of the tests, they're a disaster and now worth 40% of our grades - tons pedantic and dumb trivia /gotcha questions (~40) in a short time period (~3h), many ambiguously phrased or having multiple technically correct answers, and others being extremely tedious given the short time allowance (ie: execute some algorithm or review data structure correctness in your head, but they make the graph or inputs to review 10-20+ items so it takes forever for what's supposed to be a quick question), leaving you with very little time to work on the actual leet code questions at the end that actually test course content knowledge. Overall this course could really benefit from some major editing down (ie: give us only leet code questions relevant to the class, clean up assignment requirements, fix the test questions and trim them down).
This is an interesting course of moderate conceptual difficulty and workload. The professor, who is delightful, has gone to great lengths over the years to create lectures that build intuition about various computer vision concepts and algorithms. If you are already familiar with the concepts, the lectures are eye-opening. If you are not, they can be confusing. If you encounter this, just feed the lecture transcript to ChatGPT and have it break it down for you. The coding assignments are very interesting and relevant to the lectures. They vary in difficulty but they are all do-able without attending the recitations. A good grasp of NumPy and a basic understanding of linear algebra (vectors, matrix multiplication and inversion) are required. The projects offer an excellent opportunity to practice writing efficient vectorized code (without loops) with NumPy. For the final project, you have the option of doing a group coding project or a solo education project in which you develop a lesson plan on a CV topic of your choice. Most people find this to be the highlight of the course. This course should be viewed as an introductory course which deals mainly with classical techniques in CV and image processing. It ends with a description of CNNs without a CNN coding project. It would be great if it could be followed by an advanced course which would delve into vision transformers, diffusion models, and other modern topics in computer vision.
Did the TA's know they were supposed to TA this summer? If I am paying 4000 dollars for this class the LEAST they can do is update the assignments. It bothers me a lot when there are references to outdated platforms (Codio instead of Jupyter, Turnitin instead of Gradescope, Piazza instead of EdDiscussion) in the wording of all the homeworks, assignments, instructions etc. Like I would expect Penn to at least review this stuff. It just makes me feel like the online version of this degree is an after thought, and that we are getting outdated material. This class was so frustrating that I made a list of things that bothered me as they happened: - Quiz has wrong questions & answers that don’t align with the project because the project changed (Project 5) Took staff days to fix, only to fix a few days before it was due. - Wrong references to outdated platforms - Tons of last minute cancelled, rescheduled, and no show Office Hours from both TA and prof - Slow response from TA’s on EdDiscussion (one of my posts literally got a response 7 weeks later...) - No response to emails sent to course Manager - Wrong due dates on grade scope for multiple projects, not fixed until last minute - Outdated codes in the project for set up bc they correspond to Codie and not Jupyter (project 7) causing autograder to fail - File names are not correct for projects 8 and 9 - Project 9 had two different places you could download the needed photos. One spot had the correct number of photos and one did not. Spent hours trying to figure out autograder but I had downloaded the wrong set. A STUDENT posted on gradescope letting us know, not a TA - Autograder uses outdated versions of scikit-learn which causes fail unless they updated the autograder line of code for Project 9 I get having one or two issues throughout the semesters but this was just plain unacceptable. I learned a lot from the class no thanks to anyone but the pre - recorded lectures, youtube, and myself.
This is a good course with the same level of conceptual difficulty and slightly more workload than ESE-5410. Just like that other course, it has a steep ramp up during the first week. It's important to review your probability theory before you take the course and know everything in here: https://cs229.stanford.edu/section/cs229-prob.pdf. The first half of the course is statistics and the second half, which greatly overlaps with 5410, is statistical learning. It would have been better to leave statistical learning to 5410 and go more deeply into statistics in the second half, learning more about various statistical tests, ANOVA, etc.
This class is too surface level for a core course in a master's program. The recorded lectures in this course try to cover too much ground and has too much overlap with other Penn Eng Online data science classes. I wish it had focused more on the big data part because the basics of machine learning techniques and Pandas are taught in other classes. Thus, I don't feel like I got enough opportunities to practice true big data work. I think I would have struggled a lot in this class had I not taken ESE 541 before this. This class should have ESE 541 as a pre-requisite: then we could have focused more on the critical big data pieces such as PySpark. Also, the last 3 weeks of material was not covered in any homework, so I don't feel like I learned that material well at all. Finally, the shared PDF slides for this class are an absolute mess. Overall, I did learn a good amount of things but I have my gripes about this class.
Looking at other reviews made me feel like the course has undergone some very recent re-design. What's similar: front loaded workload, interesting lecture and content, hard and stressful exams, easier homework What's different: exams are not 30% of the final grade, and therefore them being really challenging can be kind of a problem, the first class that ever made me worry about my grade. A lot of the difficulty is a little unnecessary which I dislike, for example no partial credit for multiple choice questions, questions regarding homework content, questions regarding required reading that went beyond the scope of the lecture, and in general very concept and definition heavy. Note that quiz and practice exams can sometime contain content that is beyond the scope of this class which made me think the scope has changed recently.
This course stands out for its effective approach in connecting traditional algorithmic thinking to modern AI concepts, particularly during the first half of the course. The course successfully builds upon foundational knowledge from CIT 5960, helping students understand how conventional algorithms translate into AI applications. The early assignments, especially the first three to four, provided meaningful hands-on experience that reinforced learning modules. However, the course's quality showed some inconsistency as it progressed. While the inclusion of extra research seminars offered valuable exposure to current AI trends and developments, the later assignments became less focused and seemed disconnected from the course material. This was particularly evident in the final homework assignment on OpenAI's LLM API, which, despite covering an important topic, felt misaligned with the concurrent NLP module. One notable area for improvement is the course's theoretical depth, which could be enhanced to provide students with a more rigorous understanding of AI principles. Despite this limitation, the course's strength lies in its ability to bridge practical applications with foundational concepts, especially in the earlier modules. The addition of research seminars helped compensate for some of these gaps by exposing students to cutting-edge developments in AI research and industry applications. Overall, while the course successfully introduces students to AI concepts and their practical applications, it would benefit from maintaining consistent assignment quality throughout the semester and incorporating more theoretical rigor across all modules.
This is an excellent course that fits well in the AI program. As a non-gamer, I really appreciated how Dr. Swanson used game design to explore many subjects in artificial intelligence. I learned more about retrieval augmented generation (actually coding a RAG pipeline), diffusion models, and agentic AI than I did in my NLP, computer vision, and AI courses. Ben Swanson's thoughtful discussion of the role of artificial intelligence in the creative process was nicely woven into all of the modules and was quite enlightening. There is an easy midterm with the same difficulty level as the quizzes that counts for only 5% of the grade. Almost all of the grade comes from the homework assignments, which are done in Python. The coding is not complicated and mainly calls the various APIs, including OpenAI's. During the first week, the setup of the game engine (Unreal Engine), the virtual environment, Docker containers, Chroma database, Gradio, Meshy, and GitHub is time-consuming but instructive. Many people drop out in this process. The ideal computer for Unreal Engine is a gaming PC. It is a monster application with a huge footprint. It kept crashing on my brand new MacBook Pro M5. The course may steer a few students to explore careers in game design, but for most of us it is a fun stress-free way to learn more about AI.