- Home
- Search
- Paul R Eggert
- All Reviews
Paul Eggert
AD
Based on 350 Users
This is definitely a much better version of 35L, you have to do a lot of work, however, the work is super rewarding and you learn a ton. Lectures are super useful comparing with 35L, overall, I think this is a super useful and practical class.
With all due respect, the TAs carry this class. Everything from assignments to assignment hints to the project to exam grading to piazza posts are handled by the TAs. Daniel Meirovitch is the GOAT TA.
Professor only shows up in lectures and during his office hours. Even though he is very knowledgeable about most of the topics, his lectures are disorganized and there is no flow of topics. He jumps from Lisp to HTML to C/gdb abruptly. The lectures provide little to no preparation for the assignments and the project, all the help came from discussion and Daniel's tips videos. And not to mention the fact that all lectures are typed out on Emacs which gets super boring and unintuitive. He isn't on Piazza to answer any student doubts, which is highly irresponsible in my opinion, and takes days to reply to emails.
The midterm and final don't really test you on your understanding of the material but how many (sometimes vague) questions you can write an answer to in the allotted time. It's sad to see that a subject as important as software construction is neglected as badly as this by Eggert.
PROS:
- Project-based class, so you walk out of this class with a unique project that you can put on your resume. This is a group project though, so experiences will vary.
- The discussions are super helpful for assignments. We also use Piazza.
CONS:
- Too much content: This class has so many topics crammed into it, yet it constantly feels like we are behind in lectures. In terms of languages, you have to learn Emacs/LISP, Python, JS, and C for the assignments. Depending on your role in the group project, you'll have to learn other technologies as well.
- A lot of work. The first few weeks are pretty manageable, where you get roughly a week to do each assignment. Assignments 1 (Emacs), 2 (Scripting), and 4 (Intro to Git) were pretty manageable since most of the assignment consisted of lab components that the TAs go over in discussion. Assignment 3 (React) was also relatively easy as well. Assignments 5 (C programming) and 6 (Git internals) were super time consuming and required a lot of things to learn by yourself. You also have the project to work on during this time. At least Eggert has a pretty generous late policy.
- Self-learning: Eggert has a "learn by doing" philosophy, so he has no problems assigning homework and teach the concepts behind them after they are due. Thankfully the TAs are pretty helpful when it comes to this. For the project, you were supposed to build a web app using React and Node.js. They were barely taught in class (1 lecture) and you only had 1 assignment that needed to use React. For the project, you said to learn Node.js and database things like SQL by yourself.
- Exams: They are typical Eggert exams. No real way to prepare for them since the questions are always pretty specific. Taking the exams open-computer was super helpful, but I think the students taking it in-person would have a much worse experience.
Highly reccomend the class, but its really tough. Grading is also really weird. There are 4 labs that make up over %30 of our grade, but only lab 0 and lab 1 were graded in time to talk to TAs about grading. The rest were not graded until 2 hours before the grade deadline, and any 0s were left that way even if unfair. The only enjoyable part of this class was lecture, and maybe labs if the grading wasn't so bad. Eggert is a really ood lecturer, and can stay engaging for 2 hours, unless the material is really boring which does happen. The labs are actually pretty fun to do, but hard to test, so a working program might still get a 70-80 because of special case test cases. Exams were very hard, ~%50 averages on both. As a really bad test taker i still did around average on the midterm and below on the final and passed.
I would argue that this is one of the most important classes for being able to understand software development practically. You learn a good deal of skills that are useful in the software development industry - Git, Linux/CLI, web development, etc. That being said, the class is intense in terms of workload. There are six "lab" assignments going over a variety of topics (Linux/Emacs, Python, Javascript React, Git, C, lower-level Git) that are very loosely related to what is covered during lecture (sometimes the lecture reaches the topic AFTER the assignment is already due), so there is a lot of learning on your own time. You also have a group project involving a full-stack web application, typically using Javascript and React, which is another time sink.
The exams are by far the hardest part of the class though, since Eggert makes his exams with the intention of a 50% average, despite being open-note. A lot of people say there is no way to study for them, but I'd recommend paying attention to the topics and overarching ideas during lecture as he tends to base exam questions on these ideas, though the questions themselves often require you to think beyond those ideas. You can think of his exams as testing your intuition behind certain computer science topics rather than specific, concrete concepts.
Advice:
- Plan out what you're going to create for the group project accordingly and try to learn what you need to on your own time. At the bare minimum, you'll probably need to know Javascript and React. For your backend, if you plan to use a dedicated backend framework it would probably be best to learn ExpressJS and a database (usually MongoDB or mySQL). It would probably be easier to use a backend-as-a-service platform such as Firebase or AWS.
- Find reliable people to group with - groups are usually of five.
- Assignment Difficulty (Easiest to Hardest): Two (Python) < Three (Javascript/React) < Four (Git Basics) < One (Linux) < Five (C) <<< Six (Git Internals)
This is my fourth time taking this class. Yep, you read that correctly: 4 times. To be sure, however, I wouldn't exactly say I really took this class until this past quarter. That is because all previous times, I would get psyched out upon looking at the first assignment, procrastinate, think 'oh this prof has a nice late policy' (2^n points off for n days late), and then boom, the late policy would creep up on me, and I would never get the assignment done.
Which brings me to advice on how I got an A in this class, after 2 withdrawals and an F: Treat this class as your absolute number 1 priority.
This class is extremely tough. With the addition of the project (in which you design a web application), this class is essentially a 'lower-division capstone'. You should not expect Eggert to cover what is needed for each assignment and you especially should not expect him to really cover anything needed for your project. For example, we didn't even really cover Git (which is absolutely essential for the group project) until around week 7 I think. And if you waited until week 7 to start your project, well that just isn't a good idea.
You should start all of the assignments as soon as they're released. Do not wait for Eggert to go over everything needed for it, because he won't. The lectures serve as high-level explanations of software construction, and while he uses the assignment topics as kind of guidelines for him to go over various topics of software construction (i.e. Git for version control), he won't go into specifics. It is up to you (and hopefully the TAs' hints video if they keep doing them) to figure out what the hell to do, probably with a couple of visits to office hours. Eggert is very strong on learn-by-doing.
Another thing to be prepared for are Eggert's exams. They are absolutely terrifying. It is quite possible that you will not really know how to do any of it. That being said, you need to realize that everyone is probably on the same level as you, and so everyone will get around 50% most likely (as that is the score that Eggert aims for, because he 'likes a nice bell curve'). In other words, don't freak out too hard on the exam. Just get as much down as you possibly can.
And finally on the final project: Your group will pretty much be on your own. Finding a group that is around the same skill level as you is most definitely the way to go also, as going with the CS gods who have been coding since the womb will probably just give you some intense imposter syndrome, and you really won't learn anything. Nobody on my team had ever even used any of the languages/technologies we used on our project prior to this course, and we still got a 100 on it. Again, online resources/tutorials are godsend.
Anyways, hope this review helps you all not to make the same mistakes I did 3 times in a row.
(P.S. Emacs > vim)
35L was definitely one of the most unique classes I've taken. Since this class is taught by TAs, everyone's experience seems to be different. Having a good TA is critical to understanding everything in this class, however without any ratings on TAs, it is kind of a wildcard when signing up for the class. Thankfully my TA (Shivam Dalmia) was phenomenal and explained everything thoroughly while also being very helpful with projects. The projects in this class are all over the place with new topics coming up every week. Some projects were extremely tedious like learning Eggert's beloved Emacs in Project 1 and literally logging every single key you press in a text file. Projects varied in difficulty and usefulness overall with most projects just being Eggert flexing some patch he made to Coreutils or another GNU project. Project 9 was new this quarter and took a lot of people by surprise. Overall it wasn't too difficult if you gave it some time, but it seemed kind of pointless dedicating a whole project to digging around the git internals.
The final in this class was interesting to say the least. Eggert (who does not show up until the final) strolled in with a stack of exams that were ridiculously thick (at least twice as long as the practice final that was given out). He prefaced the final by saying that he didn't have time to edit the final which was why it was "a little bit longer than he wanted". This was an understatement. I don't think a single person finished the final and the point distributions of questions were completely off. For example, answering in a few words what a git branch is was equivalent in points to writing an entire Makefile for a C program that you also had to write by hand. If you take this class, be sure to do the easy questions first on the final to maximize your points.
Overall this class was a wild ride, but the material you learn is undoubtedly extremely useful. After 35L, it's amazing how much faster and competently I can work on linux servers and use all of the tools that are provided.
Ok so this is probably an unpopular opinion but I didn't find 131 to be as tough as people make it out to be. Yes it's still hard. Yes I still struggled. And I'm surprised I got an A (was honestly expecting a B+) so hear me out:
I took CS33 with him and that was an absolute madhouse so I was prepared for 131 to be so much worse but was surprised when it wasn't. I actually understood what he was talking about for like 70% of lectures and the stuff that I didn't get I would go online and read articles, watch YouTube, and go through the textbook to make sense of it. If you go into the class with the mindset of being ready to work hard, you will learn a lot in this class. The textbook was really helpful to read (it doesn't cover everything though) but it's a good way to gain a simple understanding of material if you have no idea what's happening.
The TAs are all super good and super active on piazza and also had hint code on github for us to refer to (tbh it wasn't that helpful after the first homework). Homeworks 2 and 5 (Scheme) were the hardest imo. It's difficult conceptually to wrap your head around let alone code yourself so be prepared to be super frustrated with these. Homeworks 3 and 6 were the easiest and took like 2 and 4 hours respectively. It's really important that you put in effort for the project report and HW6 because these are more conceptual and high level and are more than likely to be tested.
Also, I took 111 with Harry Xu before 131 and I think that helped me out a little bit because I had the analytical skills of weighing pros/cons that you do a lot in 111.
Tests are open notes like usual and our midterm average was like 70% which is ridiculously high for an Eggert test and most people thought that this midterm was easy. It definitely felt more straightforward and the questions weren't as convoluted as usual. The final was online because of the whole COVID-19 situation and the average was bout 65% which is again, super high but we had open internet access and 24 hours to do the test.
Unclarity. Unclear lectures explaining anything vaguely. Unclear assignment specs that makes you wanna smash the computer. Absolutely ridiculous project that the professor teaches you nothing about, and you have to learn every single bit from online resources.
My advice for getting a good grade in this class:
Tests: To make the tests Eggert will watch recordings of his lectures and randomly pull topics for his tests, on my midterm he put a question on how make files, a topic he had spent all of 5 seconds on in class. This is why this class is almost impossible to study for, the best you can do is look over high level concepts (he really likes to ask what if questions) and if you have the time, rewatch the lectures. While taking the test you might feel discouraged because you don't know the answers, this is because you aren't expected to get many right. Eggert shoots for a 50% average on his tests, which is why I recommend just word vomiting on anything you don't know to try to get partial credit.
Hw: the hws are worth 1-1.5% of your grade each and there are 6 of them, considering how little they're worth you'd think they'd be easy, but they can legit take over 10 hours each. The reason people do them is he likes to put questions from the hw on the test and if you have your hw solution with you its really easy to copy bits and pieces from it to the test and they also teach you the content. However if you something else more pressing, for example the project, its fine to turn them in really late or not at all (I personally didn't do assignment 6 for that reason) as the late policy is really generous and they aren't worth much.
Project: All I can say is try to take this class with people you know, if you get a bad group you're just screwed. Most people spend week 10 grinding nothing but this project, break the cycle, start early.
Final grades: Its a little odd that I have to say this but your raw score isn't very correlated with your final grade if that makes sense? He doesn't have a curve, or even a set amount of A's he wants to give out. To determine your final grade he goes over your work and determines what grade you deserve. Eggert is not afraid to fail an entire class if they don't live up to his expectations. But that won't happen to you ... hopefully.
This is definitely a much better version of 35L, you have to do a lot of work, however, the work is super rewarding and you learn a ton. Lectures are super useful comparing with 35L, overall, I think this is a super useful and practical class.
With all due respect, the TAs carry this class. Everything from assignments to assignment hints to the project to exam grading to piazza posts are handled by the TAs. Daniel Meirovitch is the GOAT TA.
Professor only shows up in lectures and during his office hours. Even though he is very knowledgeable about most of the topics, his lectures are disorganized and there is no flow of topics. He jumps from Lisp to HTML to C/gdb abruptly. The lectures provide little to no preparation for the assignments and the project, all the help came from discussion and Daniel's tips videos. And not to mention the fact that all lectures are typed out on Emacs which gets super boring and unintuitive. He isn't on Piazza to answer any student doubts, which is highly irresponsible in my opinion, and takes days to reply to emails.
The midterm and final don't really test you on your understanding of the material but how many (sometimes vague) questions you can write an answer to in the allotted time. It's sad to see that a subject as important as software construction is neglected as badly as this by Eggert.
PROS:
- Project-based class, so you walk out of this class with a unique project that you can put on your resume. This is a group project though, so experiences will vary.
- The discussions are super helpful for assignments. We also use Piazza.
CONS:
- Too much content: This class has so many topics crammed into it, yet it constantly feels like we are behind in lectures. In terms of languages, you have to learn Emacs/LISP, Python, JS, and C for the assignments. Depending on your role in the group project, you'll have to learn other technologies as well.
- A lot of work. The first few weeks are pretty manageable, where you get roughly a week to do each assignment. Assignments 1 (Emacs), 2 (Scripting), and 4 (Intro to Git) were pretty manageable since most of the assignment consisted of lab components that the TAs go over in discussion. Assignment 3 (React) was also relatively easy as well. Assignments 5 (C programming) and 6 (Git internals) were super time consuming and required a lot of things to learn by yourself. You also have the project to work on during this time. At least Eggert has a pretty generous late policy.
- Self-learning: Eggert has a "learn by doing" philosophy, so he has no problems assigning homework and teach the concepts behind them after they are due. Thankfully the TAs are pretty helpful when it comes to this. For the project, you were supposed to build a web app using React and Node.js. They were barely taught in class (1 lecture) and you only had 1 assignment that needed to use React. For the project, you said to learn Node.js and database things like SQL by yourself.
- Exams: They are typical Eggert exams. No real way to prepare for them since the questions are always pretty specific. Taking the exams open-computer was super helpful, but I think the students taking it in-person would have a much worse experience.
Highly reccomend the class, but its really tough. Grading is also really weird. There are 4 labs that make up over %30 of our grade, but only lab 0 and lab 1 were graded in time to talk to TAs about grading. The rest were not graded until 2 hours before the grade deadline, and any 0s were left that way even if unfair. The only enjoyable part of this class was lecture, and maybe labs if the grading wasn't so bad. Eggert is a really ood lecturer, and can stay engaging for 2 hours, unless the material is really boring which does happen. The labs are actually pretty fun to do, but hard to test, so a working program might still get a 70-80 because of special case test cases. Exams were very hard, ~%50 averages on both. As a really bad test taker i still did around average on the midterm and below on the final and passed.
I would argue that this is one of the most important classes for being able to understand software development practically. You learn a good deal of skills that are useful in the software development industry - Git, Linux/CLI, web development, etc. That being said, the class is intense in terms of workload. There are six "lab" assignments going over a variety of topics (Linux/Emacs, Python, Javascript React, Git, C, lower-level Git) that are very loosely related to what is covered during lecture (sometimes the lecture reaches the topic AFTER the assignment is already due), so there is a lot of learning on your own time. You also have a group project involving a full-stack web application, typically using Javascript and React, which is another time sink.
The exams are by far the hardest part of the class though, since Eggert makes his exams with the intention of a 50% average, despite being open-note. A lot of people say there is no way to study for them, but I'd recommend paying attention to the topics and overarching ideas during lecture as he tends to base exam questions on these ideas, though the questions themselves often require you to think beyond those ideas. You can think of his exams as testing your intuition behind certain computer science topics rather than specific, concrete concepts.
Advice:
- Plan out what you're going to create for the group project accordingly and try to learn what you need to on your own time. At the bare minimum, you'll probably need to know Javascript and React. For your backend, if you plan to use a dedicated backend framework it would probably be best to learn ExpressJS and a database (usually MongoDB or mySQL). It would probably be easier to use a backend-as-a-service platform such as Firebase or AWS.
- Find reliable people to group with - groups are usually of five.
- Assignment Difficulty (Easiest to Hardest): Two (Python) < Three (Javascript/React) < Four (Git Basics) < One (Linux) < Five (C) <<< Six (Git Internals)
This is my fourth time taking this class. Yep, you read that correctly: 4 times. To be sure, however, I wouldn't exactly say I really took this class until this past quarter. That is because all previous times, I would get psyched out upon looking at the first assignment, procrastinate, think 'oh this prof has a nice late policy' (2^n points off for n days late), and then boom, the late policy would creep up on me, and I would never get the assignment done.
Which brings me to advice on how I got an A in this class, after 2 withdrawals and an F: Treat this class as your absolute number 1 priority.
This class is extremely tough. With the addition of the project (in which you design a web application), this class is essentially a 'lower-division capstone'. You should not expect Eggert to cover what is needed for each assignment and you especially should not expect him to really cover anything needed for your project. For example, we didn't even really cover Git (which is absolutely essential for the group project) until around week 7 I think. And if you waited until week 7 to start your project, well that just isn't a good idea.
You should start all of the assignments as soon as they're released. Do not wait for Eggert to go over everything needed for it, because he won't. The lectures serve as high-level explanations of software construction, and while he uses the assignment topics as kind of guidelines for him to go over various topics of software construction (i.e. Git for version control), he won't go into specifics. It is up to you (and hopefully the TAs' hints video if they keep doing them) to figure out what the hell to do, probably with a couple of visits to office hours. Eggert is very strong on learn-by-doing.
Another thing to be prepared for are Eggert's exams. They are absolutely terrifying. It is quite possible that you will not really know how to do any of it. That being said, you need to realize that everyone is probably on the same level as you, and so everyone will get around 50% most likely (as that is the score that Eggert aims for, because he 'likes a nice bell curve'). In other words, don't freak out too hard on the exam. Just get as much down as you possibly can.
And finally on the final project: Your group will pretty much be on your own. Finding a group that is around the same skill level as you is most definitely the way to go also, as going with the CS gods who have been coding since the womb will probably just give you some intense imposter syndrome, and you really won't learn anything. Nobody on my team had ever even used any of the languages/technologies we used on our project prior to this course, and we still got a 100 on it. Again, online resources/tutorials are godsend.
Anyways, hope this review helps you all not to make the same mistakes I did 3 times in a row.
(P.S. Emacs > vim)
35L was definitely one of the most unique classes I've taken. Since this class is taught by TAs, everyone's experience seems to be different. Having a good TA is critical to understanding everything in this class, however without any ratings on TAs, it is kind of a wildcard when signing up for the class. Thankfully my TA (Shivam Dalmia) was phenomenal and explained everything thoroughly while also being very helpful with projects. The projects in this class are all over the place with new topics coming up every week. Some projects were extremely tedious like learning Eggert's beloved Emacs in Project 1 and literally logging every single key you press in a text file. Projects varied in difficulty and usefulness overall with most projects just being Eggert flexing some patch he made to Coreutils or another GNU project. Project 9 was new this quarter and took a lot of people by surprise. Overall it wasn't too difficult if you gave it some time, but it seemed kind of pointless dedicating a whole project to digging around the git internals.
The final in this class was interesting to say the least. Eggert (who does not show up until the final) strolled in with a stack of exams that were ridiculously thick (at least twice as long as the practice final that was given out). He prefaced the final by saying that he didn't have time to edit the final which was why it was "a little bit longer than he wanted". This was an understatement. I don't think a single person finished the final and the point distributions of questions were completely off. For example, answering in a few words what a git branch is was equivalent in points to writing an entire Makefile for a C program that you also had to write by hand. If you take this class, be sure to do the easy questions first on the final to maximize your points.
Overall this class was a wild ride, but the material you learn is undoubtedly extremely useful. After 35L, it's amazing how much faster and competently I can work on linux servers and use all of the tools that are provided.
Ok so this is probably an unpopular opinion but I didn't find 131 to be as tough as people make it out to be. Yes it's still hard. Yes I still struggled. And I'm surprised I got an A (was honestly expecting a B+) so hear me out:
I took CS33 with him and that was an absolute madhouse so I was prepared for 131 to be so much worse but was surprised when it wasn't. I actually understood what he was talking about for like 70% of lectures and the stuff that I didn't get I would go online and read articles, watch YouTube, and go through the textbook to make sense of it. If you go into the class with the mindset of being ready to work hard, you will learn a lot in this class. The textbook was really helpful to read (it doesn't cover everything though) but it's a good way to gain a simple understanding of material if you have no idea what's happening.
The TAs are all super good and super active on piazza and also had hint code on github for us to refer to (tbh it wasn't that helpful after the first homework). Homeworks 2 and 5 (Scheme) were the hardest imo. It's difficult conceptually to wrap your head around let alone code yourself so be prepared to be super frustrated with these. Homeworks 3 and 6 were the easiest and took like 2 and 4 hours respectively. It's really important that you put in effort for the project report and HW6 because these are more conceptual and high level and are more than likely to be tested.
Also, I took 111 with Harry Xu before 131 and I think that helped me out a little bit because I had the analytical skills of weighing pros/cons that you do a lot in 111.
Tests are open notes like usual and our midterm average was like 70% which is ridiculously high for an Eggert test and most people thought that this midterm was easy. It definitely felt more straightforward and the questions weren't as convoluted as usual. The final was online because of the whole COVID-19 situation and the average was bout 65% which is again, super high but we had open internet access and 24 hours to do the test.
Unclarity. Unclear lectures explaining anything vaguely. Unclear assignment specs that makes you wanna smash the computer. Absolutely ridiculous project that the professor teaches you nothing about, and you have to learn every single bit from online resources.
My advice for getting a good grade in this class:
Tests: To make the tests Eggert will watch recordings of his lectures and randomly pull topics for his tests, on my midterm he put a question on how make files, a topic he had spent all of 5 seconds on in class. This is why this class is almost impossible to study for, the best you can do is look over high level concepts (he really likes to ask what if questions) and if you have the time, rewatch the lectures. While taking the test you might feel discouraged because you don't know the answers, this is because you aren't expected to get many right. Eggert shoots for a 50% average on his tests, which is why I recommend just word vomiting on anything you don't know to try to get partial credit.
Hw: the hws are worth 1-1.5% of your grade each and there are 6 of them, considering how little they're worth you'd think they'd be easy, but they can legit take over 10 hours each. The reason people do them is he likes to put questions from the hw on the test and if you have your hw solution with you its really easy to copy bits and pieces from it to the test and they also teach you the content. However if you something else more pressing, for example the project, its fine to turn them in really late or not at all (I personally didn't do assignment 6 for that reason) as the late policy is really generous and they aren't worth much.
Project: All I can say is try to take this class with people you know, if you get a bad group you're just screwed. Most people spend week 10 grinding nothing but this project, break the cycle, start early.
Final grades: Its a little odd that I have to say this but your raw score isn't very correlated with your final grade if that makes sense? He doesn't have a curve, or even a set amount of A's he wants to give out. To determine your final grade he goes over your work and determines what grade you deserve. Eggert is not afraid to fail an entire class if they don't live up to his expectations. But that won't happen to you ... hopefully.