Preparation & Prereqs
My Previous OMSCS Courses
N/A (GIOS was my first in OMSCS)
My Background as of Course Start
As of the start of GIOS (Fall 2021), I was coming up on one year at my first/junior dev position (full-stack web apps via React & Node/Express). My undergrad and previous grad work were both in Engineering (non-EE/non-CE). I was about 10 years out of undergrad by that point (Fall 2021), with around 7 years of previous work experience unrelated to software/dev and not otherwise directly pertinent to OMSCS or to GIOS. Prior to starting OMSCS, I completed a web development boot camp (2020) to make the transition into dev work.
I also took community college CS coursework (2019) in preparation for eventual start of OMSCS (Fall 2021), comprised of the following 5 courses:
- three-course intro CS sequence through data structures & algorithms using C++
- intro to computer architecture & organization, which included some basic MIPS assembly and basic Java
- discrete mathematics
My Preparation for the Course
Ahead of Fall 2021 GIOS (i.e., over Spring & Summer 2020), I worked through C & C++ prep/review material (I had previous exposure to C++ in the aforementioned community college courses, but it had been over a year since I had taken them by that point) to prepare both (specifically) for GIOS and (more generally) for the eventual Computing Systems courses I planned to take after GIOS, since I was going into OMSCS with this specific intention already; in fact, I even declared my Computing Systems specialization already along with my registration/enrollment for GIOS as my OMSCS course #1 of 10.
If you want to scope out the projects setup a bit, they are publicly available in the GitHub Enterprise repos (must have student status/credentials to access). As a representative example, Fall 2021 version is here for reference (and similar naming convention for previous semesters; not much variation in the setup semester-over-semester). I went with the Docker + VS Code setup and enjoyed it very much, this is a great time to be a CS student, as the toolchain has vastly improved for this type of project work, compared to even as recently as 5-10 years ago or so. (Note: the projects themselves are private repos, they will not be accessible until you join the course, and are released throughout the semester individually rather than all at the beginning.)
CAUTION: Course Prereqs
Take these seriously. It is possible to do this course without any C/C++ exposure, but that does not mean it is advisable. For reference, based on the historic data in LITE (more on this later), around 35-40% of the class drops by the W (withdrawal) deadline---the odds that you will be joining this cohort are substantially higher if you are the type who did not appropriately heed the warning of being adequately prepared coming into GIOS. Also, being able to use things like git
, basic Linux/bash
shell commands, and gdb
(or equivalent GUI-based debugger, e.g., VS Code debugger) effectively can be a make-or-break factor for handling the complexity of the projects in a timely manner.
Course Deliverables and Materials
Workload
Tough to guesstimate this accurately for me on a per-week basis, but I think a more concrete assessment in hindsight is on a per-deliverable basis as follows (which I amortized/averaged out for sake of the review to around 25 hrs/week in my own personal case, conservatively estimating off of the higher ends of the indicated ranges):
- 16 lectures (excluding the brief course intro lecture), taking a total of 5-10 hrs apiece to complete, including (ungraded) in-lecture quizzes and taking notes
- 3 projects, taking a total of 50-60 hrs apiece to complete over a roughly 4 week span apiece
- 2 closed-book/closed-notes exams (non-cumulative), taking a total of around 2 hrs apiece to complete and around 25-30 hrs of preparatory review apiece (depending how comprehensive vs. lackluster the previous lecture review content, notes, etc. were at the point of exam prep)
The "weekly cadence" for these deliverables is largely self-directed, but there are five hard deadlines as follows (in order of occurrence, with week numbers based on non-Summer, 16-week schedule):
- Project 1 due end of week 5
- Midterm Exam due early week 8
- Project 3 due end of week 11
- Project 4 due end of week 15
- Final Exam due early week 17
Each exam is worth 25% towards the total/cumulative grade in the course, and each project is worth 15%. An additional 5% is given based on class participation.
Papers and Other Reference Materials
Regarding the papers, I read the ones pertaining to the midterm, but did not find the time spent on them was beneficial for the exam itself. In my view, the lectures did an adequate job of highlighting the salient features of the relevant papers as pertaining to the exams. Also, I did find watching the lectures first helped me to understand the papers better in general, rather than the other way around (i.e., reading the paper ahead of the relevant lecture). Others have different opinions on the papers (i.e., relevance to exams, and whether or not it is "useful" to read them), so I will just leave it at that and simply advise you to exercise your own discretion based on interest in the particular subject matter of the paper(s), time constraints, etc.
Similarly, I did not find reading the textbook beneficial (I started off with the dinosaur book, but quit by week 2-3 or so), as the lectures were largely self-contained/standalone and covered relevant topics very comprehensively. Also, similarly to the papers, I think going back to the textbook now (having taken the course and watched the lectures), I can probably get more out of it (and may do so in the future, at least for specific topics of interest). The dinosaur book in particular went into a lot of detail and seemed to jump right into topics assuming some background familiarity, and so I found myself lost often while reading it, hence why I abandoned ship on that effort relatively early on, as I was not getting much out of the time spent doing the readings. OSTEP is reportedly more approachable, but by that point I was not inclined to pursue textbooks further beyond the lecture content, so I personally cannot comment on OSTEP specifically either way.
I did also find The Linux Programming Interface (TLPI) and the manpages (via appropriate Google search of the functions in question) useful as general references, particularly for Project 1 (getting acquainted with C system calls) and Project 3 (POSIX API for IPC), along with Beej's Guide to Networking (specifically, Section 6, which gives the blueprint for building an echo client & server). Project 4 is mainly based on the C++ gRPC and protocol buffers documentation from Google, along with any C++ language reference materials as necessary (e.g., cppreference.com).
Course Logistics and My Personal Experience
Not going to get too in the weeds here on specifics (e.g., per-project and per-exam analysis) other than to say that the previous reviews on this site and on the r/OMSCS subreddit were largely accurate/representative of my own anecdotal experience with the course, and adequately calibrated my expectations going in vs. what I actually experienced in the course.
This is very much so a course where "you get what you put in." In a way, it does feel like the lecture material/exams and projects are two distinct "entities" within the one larger overall course, but they do complement each other well in the grand scheme, and both will leave you much more competent in the subject matter on the way out of the course than on the way in, provided you give each the appropriate necessary attention/focus and effort that they demand.
I agree with previous reviews that the projects are more application-focused rather than OS-focused, but personally I did not find this to be a negative; on the contrary, I thought the projects' code bases were very thoughtfully developed (after the high hurdle it took to figure them out), and were quite exemplary in terms of software engineering practices as far as academic projects go (I've seen much worse!). These were the most complex C/C++ code bases I had encountered to date as of taking the course, and they improved my C/C++ programming abilities considerably as a result.
The closed-book, closed-notes format of the exams was somewhat off-putting to me, since rote memorization is not my forte, and I am of the general persuasion that in practice if I don't know something, then I "just Google it." But in general the exams did not drill down to minutiae and were mostly "fair" and representative of the "big picture" course content (i.e., do be sure to review the provided sample questions and in-lecture quizzes), so I cannot necessarily in good faith over-criticize this particular aspect of the course, either.
The three projects (Projects 1, 3, 4) are all variations on the same theme: building a client-server application to do file transfer operations in two parts, first as single-threaded applications (i.e., one server process and one client process) and then next as multi-threaded applications (i.e., many server threads and many client threads). This was done from multiple perspectives across the three projects: "plain old C with Pthreads" (Project 1), "C using inter-process communication (IPC) mechanisms" (Project 3), and "C++ using gRPC + protocol buffers" (Project 4). Coming to this course from a web development background, these were very insightful projects as a vehicle by which to dive deeper into this subject matter, since in my day-to-day work (REST-based client/server CRUD apps), most of this is abstracted by libraries which I can largely take for granted to "just work" as intended.
Personal Aside
In my own personal case, mid-semester I was pretty burned out after my full-time work picked up as the second project (Project 3) wrapped up. Going into that last stretch of the course (Project 4 and the final exam), it was getting tougher by the week to stick with the course 100% for me. The final project (Project 4) ended up taking me much longer to figure out than the previous ones (Projects 1 & 3), going into Thanksgiving weekend no less. When I figured out where I stood in the class at that particular point in time and realized that I would have to either fight really hard to get up to a borderline A, or otherwise could take it easier and get out with a solid B, I went with the latter approach to avoid any additional undesired stress by that point. I ended up completing only the first part of Project 4 and took the L on that project, and just focused the rest of the remaining time in the semester on the final exam. That strategy was indeed vindicated, as I got out with my "gentleman's B" as anticipated (i.e., the "Bs get degrees" approach). But, to get to that juncture, I did put in solid work for the first half or so of the course, in particular getting 100% on Project 3 (and previously around the averages on both the midterm and Project 1), which gave me the necessary "cushion" to make that decision regarding Project 4 in the first place.
Grading and Class Statistics
The class performance for Fall 2021 is summarized as follows:
| Deliverable | Mean | Median |
| Project 1 | ~78/100 | 94/100 |
| Project 3 | ~85/100 | ~97/100 |
| Project 4 | ~84/100 | 97/100 |
| Midterm Exam | ~80/100 | 82/100 |
| Final Exam | ~72/100 | (unreported as of this review) |
How I stacked up vs. the class:
- slightly below the mean on both Project 1 and the Midterm Exam
- 100/100 on Project 3
- bombed Project 4 (did not complete Part 2 at all) and only got 39/100
- slightly above the mean on the Final Exam
My achieved grade: B (overall weighted ~75%).
For reference, per the aforementioned data in LITE, the historic grade distribution for this class in the preceding five semesters is as follows:
| Semester | A | B | C | W |
| 2021 Summer | 33.1% | 15.9% | 2.2% | 45.5% |
| 2021 Spring | 43.0% | 18.9% | 2.7% | 33.3% |
| 2020 Fall | 43.1% | 21.0% | 2.4% | 31.7% |
| 2020 Summer | 37.6% | 20.3% | 2.0% | 38.4% |
| 2020 Spring | 30.8% | 16.4% | 1.3% | 49.9% |
From that data, the distribution of letter grades (as % of class total) in aggregate via the preceding 5 semesters is as follows:
| Letter Grade | Mean | SD |
| A | 37.5% | ±5.6% |
| B | 18.5% | ±2.3% |
| C | 2.2% | ±0.5% |
| W | 39.8% | ±7.8% |
As this data suggests, there is a pretty high drop rate (i.e., W
s), ranging from mid 30s% to mid 40s%. However, if you "make the cut" and stick it out until the end (i.e., past the W/drop deadline, around the end of Project 3), of the remaining 55-65% students in the class, these percentages suggest a fairly generous curve:
(per-semester)
| Semester | A | B | C |
| 2021 Summer | 60.7% | 29.2% | 4.0% |
| 2021 Spring | 64.5% | 28.3% | 4.0% |
| 2020 Fall | 63.1% | 30.7% | 3.5% |
| 2020 Summer | 61.0% | 33.0% | 3.2% |
| 2020 Spring | 61.5% | 32.7% | 2.6% |
(aggregate)
| Letter Grade | Mean | SD |
| A | 62.2% | ±1.6% |
| B | 30.8% | ±2.1% |
| C | 3.5% | ±0.6% |
So, if you stick it out and stay in the top 90-95% of the latter 55-65% "survivors" cohort, you will leave with a B or better. In terms of "cutoffs" (i.e., A vs. B vs. C), it varies semester-to-semester depending on the class performance, so cannot really say a priori (e.g., 90% for an A, 80% for a B, etc.) since the curve is applied at the staff's discretion; therefore, the historic grade distribution is a better general guideline. But, essentially, you can do well on one of projects or exams to get a B in the class, but will likely have to do well (enough) on both to get an A, the cutoff for which is going to hover somewhere in the low-to-mid 80s% or so.
As a final point on grading, the (dis)proportional distribution among the deliverables is a controversial topic (i.e., 50% for 2 exams vs. 45% for 3 projects), given the time-intensive nature of the projects. I can see the validity of the argument for increasing the weighting of the projects relative to the exams for this reason; however, all I can say personally is that I got a lot of depth out of the projects, and I got a lot of breadth/exposure from the lectures. To get the most out of the course, give them both their due attention, and the rest should work itself out grade-wise. If learning is not the desired outcome, then why bother with OMSCS in general (and GIOS in particular) in the first place?
Closing Thoughts
Overall, I'm torn between a "Strongly Liked" and "Liked" for GIOS, but reported the latter since I'm leaning more towards that one. The main thing that steers me away from a definitive "Strongly Liked" is just some of the general vagueness in the projects (i.e., descriptions/readmes and starter code), which made for quite a "time sink" to decipher/comprehend properly in order to get started with the actual coding part. While I agree 100% that there is some necessary "struggle" involved in the learning process to build your chops as a developer, I also do not necessarily agree "wasting time" just for its own sake due to vagueness is the right way to go about the learning process, either. To this end, be sure to stay engaged in Slack early and often, as that is the key to success on the projects. I made some solid friends on there in the process, and they also helped me in my times of need on the projects. In my case (Fall 2021), there were a few "superstars" who cranked through the projects within the first couple weeks of their releases, and then those folks were also kind enough to stick around the projects Slack channels to help others out along the way. Cheers to all fellow Fall 2021ers for making it such a collaborative experience---you're all the real MVPs!
To wrap up, similarly to the sentiment echoed here and elsewhere (e.g., Reddit), GIOS is a great course overall. It gave me a solid knowledge base in things I was lacking prior to GIOS (including in my current full-time dev work) from not having been exposed to this material previously, coming from a non-CS background. In particular, I'm now much more conversant in topics like concurrency, threads & multi-threading, data races, multi-processing, virtual memory, etc. which were largely foreign concepts to me prior to taking the course (previously, I would generally skip the "concurrency stuff" in videos, books, etc. pertaining to programming, thinking it was just some esoteric topic, but now I can go into that subject matter much more competently thanks to GIOS).
This is very much so one of those "canonical CS" topics that you will benefit from gaining exposure to via OMSCS, even if you are not particularly interested in the Computing Systems specialization---the underlying principles transcend the various sub-disciplines in CS, and touch pretty much all things conceptually adjacent to programming in general and to applications programming/development in particular (including in the data science/engineering domains---basically, anything involving an application running on a computer). Therefore, in my opinion, it is still a useful expenditure of a "free elective" slot even in a non-Computing Systems specialization, provided you do the necessary prep work to succeed if you are otherwise lacking in the aforementioned C/C++ core competencies prior to enrolling in the course.