Introduction
Background
As of course start, I had around 2.5 years of experience working as a professional software engineer, specifically doing web applications (full-stack .NET + JavaScript). My previous degree was in Engineering (non-CE/non-EE) from early 2010s.
This was my third course in OMSCS, within the computing systems specialization. I previously completed GIOS (CS 6200, Fall 2021) and IIS (CS 6035, Fall 2022), and also attempted HPCA (CS 6290, Spring 2023) in the semester immediately preceding taking this course (CN), but had to drop HPCA due to an unexpected/abrupt layoff and consequent get-a-new-job-ASAP scramble (which fortunately I did manage to do, around 2 months prior to starting CN).
Caveats
For full transparency's sake, a couple of caveats/disclosures:
- I begrudgingly took this course over the summer to make up for dropping HPCA (CS 6290) in preceding Spring (2023), and do not plan to do any more summer semesters during my remaining residence in OMSCS after this one; despite the course being on the lighter side, it reinforced my disdain for summer school nevertheless
- I prefer having a longer break in between Spring and Fall to recoup and recharge, rather than just being "free" for only 3-4 weeks at a time, and this was especially true here with summer-semester CN coinciding with starting a new job that required a lot of ramp-up due to the job being in a new industry from previously, which also compounded my stress/aggravation from the course, as well as derailing other previously anticipated summer plans prior to the layoff and at that point anticipating a "fully clear" summer.
- I did not have much formal networking experience going into the course
- Conversely, among those who did, they seemed to demonstrate more overall engagement with the material, as evidenced by their Ed posts/comments, prompt/in-one-sitting completion of projects, etc.
As a big pet peeve (for me personally, but presumably others as well), in the summer semester, three of the four projects were due over U.S. holiday weekends (Memorial Day, Juneteenth, and July 4th, with the projects themselves all due on the respective US-based time zones Monday mornings of these holiday weekends), which was an additionally contributing factor to my aforementioned disdain for the course (and summer school more generally). While not strictly the course's fault per se (i.e., based on how a compressed summer schedule aligned with these holidays), it was nevertheless still very much so "not a plus," to put it mildly (i.e., all three of those projects/deadlines ended up being rather stressful in terms of managing against other family obligations, etc.).
With those caveats out of the way, I attempted to stay reasonably objective with this review (and correspondingly attempting to stick more to "facts" than "opinions"), but it still seemed appropriate to disclose being somewhat "negatively biased" going into the course/review nevertheless, in order for readers (i.e., future CN prospects) to exercise appropriate discretion/discernment while reading this review.
High-Level Review
Overall, I did not find this course to be that remarkable, and probably the relatively worst one I have taken to date (certainly within the scope of the aforementioned fully- and partially-completed-to-date OMSCS coursework). The lecture content feels mostly like a patchwork of Wikipedia articles on scatterbrained topics, with only a few emergent high-level themes/takeaways at best (and otherwise forgettable post-review/post-cram). Content-wise/topics-wise, I do think the course would have been much better-served by simply following along more directly with Kurose & Ross or an equivalent textbook on networking, in order to facilitate a more coherent topical structure/organization.
Course Logistics and Time Expenditures
The course is not curved, and follows a strict 10-point scale (i.e., 90.000-100.000% overall for an A, 80-89.999% overall for a B, etc.). The relative weighting of the deliverables is as follows:
- 60% projects (10% + 15% + 15% + 20% across the 4 projects, further discussed below in the next section)
- 15% midterm exam
- 15% final exam (non-cumulative, covering only post-midterm lessons)
- 10% open-notes/open-resources lesson quizzes (12 total)
- (optional) 3% extra credit project
N.B. In the summer, one of the projects is dropped due to time constraints (BGP Hijacking), so I cannot comment authoritatively on it in this review. Furthermore, there is an optional (ungraded) introduction/orientation to mininet
(Simulating Networks), as well as an optional extra credit project (Internet-Wide Events) worth up to an additional 3% overall (which is relatively generous, enough to cover a borderline grade on a partially flubbed project or exam, or otherwise equivalent to roughly 2.5 lesson quizzes).
- I did not attempt the extra credit project, as I was sitting pretty solidly at an A (~95% overall) in the course going into the final exam (by that point, I had achieved 100% on all projects, mid 80s% on the midterm, and around 90% overall on quizzes going into the final exam), and basically it was "my A to lose" (my critical score to keep an A overall in the course [i.e., >= 90.000%] was around low 50s% on the final exam, which I subsequently exceeded with low 80% upon completing the final exam, thereby securing the A in the course).
I did not keep strict tabs on time expenditures across deliverables, but my best in-hindsight back-estimates are as follows:
- 1.5 hours per lesson (reading the text followed by completing the 30-min-limit quiz) * 12 lessons total = 18 hours
- 18 hours per project (mid-range average across the four projects) * 4 projects = 72 hours
- 15 hours of prep per exam (lessons review and study guides completion) * 2 exams = 30 hours
Given an 11-week summer semester, this averages out to 10.9 hours/week [= (18 + 72 + 30) / 11]. The cadence was typically 1-2 lessons/quizzes per week, aside from the midterm & final exam weeks (during which neither lessons/quizzes nor projects were assigned/due).
- The busiest points in the course were around the projects' due dates, along with the exam weeks (i.e., cramming a ton of very oddly-specific information from the preceding 5-6 weeks' worth of lessons).
- Otherwise, the "in-between" weeks (i.e., during which only a lesson quiz was due, and a released project was in-progress but not-yet-due) by comparison were not as intense, possibly with little-to-no required time allocation for that particular week (i.e., if completed project and quiz ahead of schedule by that point).
Course Deliverables
Quizzes
In general, quizzes were released weekly, so it was not possible to work ahead on those (i.e., as one quiz was due, the next week's lesson quiz would be released and was subsequently due by the following week deadline, etc.), though the all of the lessons' text/content themselves were generally open for all lessons as soon as the syllabus quiz was completed at the start of the course and henceforth from that point.
There are 12 total text-based lessons (with corresponding videos for some of the slides/pages, with the videos mostly just rehashing the text information, and consequently I largely ignored the videos in favor of simply reading the text), with each lesson having a corresponding open-notes quiz in Canvas. The quizzes can mostly be completed by referencing the lessons' text, though sometimes the quizzes questions' wording was a bit ambiguous/tricky. The quizzes are also time-limited to 30 minutes.
Projects
Similarly to the quizzes, the projects were not released in advance, but rather on a fixed-interval basis (i.e., as on project was due/submitted, the next project was then released).
Regarding the projects work, while this course is generally regarded as being on the "easier" side (which, compared to the likes of GIOS and HPCA, I did personally find this to be true, too), an advanced-beginner/early-intermediate level of proficiency in Python will be useful (if not outright necessary) to get through the projects, which difficulty-wise are on par with LeetCode harder-easy to easier-medium tier. The "happy path" is generally straightforward, but there are edge cases which require more refined techniques (e.g., using the debugger and/or print statements) to pin down and solve.
I did not keep tabs on total time expenditures on a per-project basis, but across the board, I can back-estimate an average of around 15-20 hours per project spread over the correspondingly allotted 2-3 week completion periods, which typically translated to a few evening sessions (including the occasional weekend in the mix, as necessary), working through a given project part/task at a time (i.e., per attempted-project-work session).
The four projects in the summer were as follows (in order of appearance):
- Spanning Tree Protocol
- Distance Vector Routing
- SDN Firewall
- BGP Measurements
A VM was provided for the course, though only strictly required for SDN Firewall. Otherwise, the first two projects could be done on your local machine (the staff provided a conda
environment to configure the Python version, but otherwise used standard library features exclusively), and the fourth (in principle) could also be done locally, but that required unsupported setup of third-party dependencies to do this (I did not bother with this, and in all cases where VM was required, I simply set that up and ssh
d into it from my host machine and used remoted-in VS Code on the host to do the projects work).
The projects were mostly a slog/uninspiring overall (i.e., if stripping away the ostensibly relevant "networking" subject matter, it was otherwise effectively just implementing algorithms in Python), but generally "doable" once you figured out the intended instructions (the first two projects included video tutorials which were helpful for determining the general "gist" of the respective projects and how to formulate the "happy-path" solutions), at which point it was just a matter of covering edge cases beyond that.
I thought the SDN Firewall project in particular was incredibly tedious (no offense intended here towards the head TA for that project), as the project description had a lot of extra/superfluous information that felt like a distraction overall, making it feel like more of an exercise in interpretation of instructions rather than actually getting the project work itself done.
- The Wireshark content seemed like it was shoehorned into the project for its own sake, but in reality, I think a lot of that could have been leaned out by simply doubling-down on the more recent test-harness-based setup at this point, in my opinion. If they want to keep the Wireshark exposure in the course for "general relevance" to networking, I think they should just move it into (yet another) appendix for the project, or just move it over to the Simulating Networks intro/tutorial (optional) project altogether instead.
All projects generally provided local testing suites, which were particularly useful for SDN Firewall, since that one was not graded via Gradescope, but rather only submitted as a .zip
directly to Canvas for subsequent manual grading. Otherwise, for the remaining projects (for which Gradescope was available), Gradescope submissions were generally unlimited up to the deadline (i.e., generally, WYSIWYG with respect to the resulting graded project score in Canvas post-final-GS submission).
Course Exams
The most challenging part of the course is the exams, mostly by virtue of having to rely on rote memorization and "luck of the draw" (i.e., not blanking on the particular question(s) that appear). The exams are essentially a longer quiz (2 hours total test window), but without open notes/resources available. The exams also required browser-based proctoring via Honorlock to enforce during the test-taking session.
The staff provided study guide questions for the exams, and I strongly encourage going through those in tandem with exam prep (along with reviewing the lessons quizzes); that was the key to doing reasonably well on the exams for me personally (particularly with myself not being a "good memorizer," by any stretch of the imagination). The exams made me feel somewhat like I was back in biology courses from undergrad all over again (i.e., cramming slides and hoping for the best).
With all that said, from a points-maximization standpoint in the course overall, it is definitely advisable to max out points as much as possible on all of the other deliverables outside of the exams (i.e., lesson quizzes and projects), in order to cover potential shortfalls on the exams. I scored around the median on both exams, well enough to secure the A overall in the course, by virtue of getting 100/100 on all projects and near 90% across the lesson quizzes.
Closing Thoughts
CN is probably not the worst course you could take in OMS, but it is still otherwise unremarkable on the whole (for me, it fell flat / missed the mark overall). In fairness, I cannot say in good faith that I gained nothing useful out of the course, and it did help with elucidating high-level themes around the OSI model and a few specific protocols therein. But given that I took this course specifically in order to better-inform my day job (software engineering involving REST APIs & web apps), it was still pretty disappointing to come out of the course with not-an-appreciably-better understanding of the subject matter relative to going into the course. I probably would have been better off self-studying Kurose & Ross or equivalent (and/or going through equivalent CCNA certification prep materials), and consequently I will still have to do something along those lines in the near future in order to gain a better understanding of the underlying computer networking concepts.
Overall difficulty-wise, I would put CN at easy-leaning-medium. I decided to go with "easy" over "medium" in the difficulty rating for this review (relative to GIOS being an unambiguously "hard" but not "very hard" for me), with the caveat that CN does require some reasonable proficiency in Python, and that the cramming for the exams is pretty tedious and time-consuming (at least if you're looking to do reasonably well, i.e., near or above class median, or roughly low-to-mid 80%).
If you are diligent, CN should be reasonably amenable to pairing with another easy-to-medium difficulty course (provided you have the necessary Python skills for the CN projects), though that will probably make for a fairly busy semester, particularly around exams and projects deadlines (and also depending on how these deliverables' deadlines align with the other course's deliverables' deadlines). On a relative-to-other-courses basis (per my own personal/subjective experience with them), I would assess CN's pairability as:
- "pairable" similarly to IIS
- i.e., relatively similar difficulty and time-intensity, perhaps with a slightly larger overall time commitment in CN due to quizzes and exams in addition to projects
- "not pairable" dissimilarly from GIOS
- i.e., if you feel you could not pair GIOS with something else due to GIOS's high difficulty & time-intensity, CN is still otherwise comparably less difficult and less time-consuming than GIOS, and thus possibly pairable with another lighter-than-GIOS course