GATech OMSCS
Courses Taken
- Introduction to Information Security Review
- Graduate Introduction to Operating Systems Review
- Introduction to High Performance Computing Review
- Software Development Process Review
- Advanced Operating Systems Review
- Introduction to Analytic Modeling Review
- Graduate Algorithms Review
- Network Science Review
- Deep Learning Review
- Natural Language Processing Review
Reviews
Introduction to Information Security (Spring 2020)
Introduction to Information Security (IIS) was a pretty good class with which to start the program. It is not especially difficult and security seems like a good general purpose topic for understanding today.
IIS is run by the OMSCS program, but it is a core requirement for the cybersecurity master's students. While I'm sure many of them are highly technical, there is a policy track and therefore some students get some of their first programming experience in this class. Writing C code to exploit buffer overflows is overwhelming for some people.
Nevertheless, the best part of the class were the projects:
- buffer overflow attack
- malware analysis
- machine learning-based malware analysis
- breaking weak RSA encryption and implementing a broadcast RSA attack
- web app injection attacks
The machine learning project was an optional extra credit project when I took it. I would say that I mostly just tuned parameters until I got the answer I needed, so this left me wondering if perhaps that is all that machine learning engineers actually do. ;-)
The lectures were kind of dry, and the textbook was very dry. There were open book quizes which were trivial. Exams were harder than quizes because they were not open book. I have heard that IIS moved to not having any exams, which sounds like a nice move.
Sometime after taking this class I decided to try some web injection attacks against an open source project that I had an interest in. I was able to find a vulnerability and help to get it patched. That felt really cool!
Graduate Introduction to Operating Systems (Fall 2020)
Graduate Introduction to Operating Systems (GIOS) was a good class. The lectures follow topics from classic papers on operating systems. Sometimes the topics were boring. The projects were challenging and rewarding. With some boilerplate code, we implemented simple versions of these:
- single-threaded web server
- multi-threaded web server
- proxy server
- cache server
- distributed file system
These projects provided practical examples of sockets, interprocess communication, shared memory, locks, etc. In addition to low level sockets and shared memory, we also used gRPC.
I had joined a Slack channel for IIS, and I did the same for GIOS. One of the GIOS TAs encourages alumni to stick around the workspace. This became a relational connection point for the rest of the program and provided a place network and form study groups for other classes. This has been a great blessing.
Introduction to High Performance Computing (Spring 2021)
I learned that HPCA approaches high performance computing from the hardware side, whereas Introduction to High Performance Computing from the algorithms or software side. Though I don't expect to work with very high performance computers much, I knew that algorithms should be helpful for many situations. Graduate Algorithms is difficult to enroll in early in the program, so I decided to go ahead and pursue this.
IHPC has a reputation for being difficult. It is well-deserved. The ideas were sometimes hard to follow. The projects required dozens of hours. The exams were the most difficult I have ever had.
On the positive side, Dr. Vuduc is a gem. He and his colleagues went above and beyond to make the lectures entertaining, despite the topic's potential for being dry. Also, the topic is kind of cool. This is supercomputing. We used libraries for graphics processors, multi-processor computers, and computer clusters.
The projects we had involved:
- matrix multiplication
- list ranking (a variety of approaches)
- Terasort
- Implementing our own MPI Collectives
The projects typically had performance targets and aside from the introductory matrix multiplication, I probably spend 20-50 hours on the projects.
The exams, as noted, were incredibly difficult. They share the past exams and past exam solutions. It was often difficult for me to identify what was being asked. That is humbling to acknolwedge, but it is true. I just missed the cutoff to get an A in this class.
Software Development Process (Summer 2021)
Software Development Process well-run class and not very difficult class. It could be a good choice for some people. Particularly people who have very limited development experience or who have never worked on a project as a team. The projects included learning to use Git, building a very simple Android application, using a test plan generator and writing tests, and then developing another simple Android application with a team, dividing the workload of creating the user interface, backend code, testing, documentation, etc.
The approach for unit testing is not of a common variety. Essentially we used a tool to generate all the different possible combinations of input to a given function (essentially, grep
). Then we were to use this as a guide to write unit tests and help identify possible flaws in a blackbox design. This somewhat exhaustive approach would be impractical in most real world development but in small systems with high reliablity requirements, this approach could be helpful.
Overall this was an easy class and I needed an easy class after taking IHPC.
Advanced Operating Systems (Fall 2021)
Advanced Operating Systems was a challenging and rewarding course. Dr. Kishore Ramachandran created and teaches the class, and he was one of the founders of OMSCS. He was very eager to engage with students during office hours, which I'm sure factored into the requirement to attend office hours. He seemed to have had faulty home office setup for his office hours, which led to him repeatedly having long interruptions to the office hours. It was frustrating for him, I'm sure but almost became a point of comic relief for the class.
Dr. Kishore somewhat famously modified his exam policy after the onset of Covid-19, releasing the exam questions to students and allowing students to completely collaborate on exam preparation. I will say that I did learn during this exam preparation process, and I would have performed much more poorly of course without that opportunity for collaboration. I'm sure that this tips the assessment from comprehension to favor memorization to a degree, which may not be great. I was grateful for the collaboration.
The class also famously assigns a very large number of papers (40+) for reading. You are expected to write summaries for two of them. I did not come close to reading all of these papers, and I don't think you are necessarily expected to.
The projects were fun and challenging. Here are the four projects I worked on:
- CPU Scheduler and Memory Coordinator for virtual machines using LibVirt
- OpenMP and MPI spin barrier implementation
- Using gRPC so implement large portions of a distributed service (like an online store)
- Simplified version of MapReduce
These projects probably took 15-40 hours each. For some projects we were allowed to work with a partner. I had an excellent partner and this no doubt cut time and stress from the project. It was very cool to build a working (albeit simplified) implementation of MapReduce, the system that famously was the backbone for Google's search engine.
This class allows you to work on projects which utilize the resources of a computer or a cluster of computers in a way that many simple programs do not.
Introduction to Analytics Modeling (Spring 2022)
Introduction to Analytics Modeling is a class more OMSCS students should take. It is not a requirement for any specialiation, and it is actually part of the core requirements of GATech's online master's in Analytics.
I see the class as a survey that introduces a lot of concepts from Machine Learning, without the level of difficulty often described by students who take OMSCS's Machine Learning course. I suspect this could be a helpful precursor to that class or simply replace it for students like me who want to use an elective or two to be introduced to the subject matter.
Here are the topics, from the course website:
- Classification
- Clustering
- Change detection
- Data smoothing
- Validation
- Prediction
- Optimization
- Experimentation
- Decision making
Instead of large projects, the class had a smaller (5-10) hour homework assignemnt nearly each week. The class uses peer grading, so you have to complete 3 peer grades to even receive a grade for your assignment. I think this may have lead to some grade inflation but it mostly seemed to work. The bulk of the grades still came from the exams. Though the assignments were not large it did become wearing to have something due each week and then grading for three peers.
The exams were not easy, and I actually ended up landing just below the cutoff for an A in this class. Despite my comments about this being easier than ML, it is still the case that they did teach the underlying ideas and tested us over them in detail.
My biggest complaint about the class would be that almost all of the assignments were in the programming language R. I was not familiar with this and I found the documentation to be very lacking. The simulation and linear programming assignemnts were in Python, which was refreshing. If the documentation had been good and there were lots of resources for learning, perhaps this would not have been so painful. As it is, I wish the assignments had been in Python.
The instructor taught clearly and added in real world case studies from his consulting work, which was interesting.
Introduction to Graduate Algorithms (Fall 2022)
This class covers the following topics:
- Dynamic Programming
- Divide and Conquer
- Modular Arithmetic and RSA
- Graphs
- Network Flows
- Linear Programming
- NP-Completeness Reductions
GA has a reputation of being difficult. There is some truth to that but it is also more intimidating because it is hard to get into and most people must pass it with a B to finish their degrees.
The class is well-organized and the graders work quickly to turn around large volumes of manually grades assignments.
There are some trivial coding projects (1-5 hours) worth very little credit. Homework assignments are worth more and give a sense of what exams will be like.
The exams themselves do not seem to be designed to be especially difficult. In some respect they are usually very similar to the problems on the homework assignments. The real challenge is that it is difficult to not make some mistakes in answering the problems. These mistakes are costly. Following the pattern the TAs lay out for how to answer the questions will help, but it is hard to get out of an exam without being docked for what sometimes seem like minor mistakes.
Overall I believe the bark is worse than the bite.
Having a good study group helped reinforce good study habits which helped me to be more successful in the class than if I had gone it alone.
Network Science (Spring 2023)
This class focuses on the study of graphs, but not regular or random graphs, but graphs that can be found in nature or society - in neurons, or social graphs, or the spread of disease through a society. Practically, the class focuses on analyzing the properties of graphs, and a variety of ways to generate networks with similar properties. The NetworkX library is used heavily. The projects often call for generating charts using Matplotlib to show properties of the graphs. Sometimes we wrote our own implementations of algorithms described in the lectures, while other times we just used the NetworkX library to collect data.
I'm not sure when, if ever, I will need to do this kind of graph analysis, but it still had interesting moments. I am glad that I was able to develop some familiarity with Matplotlib through the class. By the end I had my fill of considering the properties of graphs and the distribution of nodes.
The course was different than any other I have taken in OMSCS, in that there was only about 1 hour of recorded lectures for the whole class, usually just 3-5 minutes per module. Most of the content seems to be summaries of portions of the textbooks. The grades consisted of 5 projects (65% of total grade) and 14 open book quizzes (35%). Ultimately the projects are not very difficult. For the most part they are reasonably clear in their requirements. If someone is already very familiar with Matplotlib, the projects could be very easy. I would guess that most took 4-8 hours. The quizzes, while open book, and multiple choice or true/false were fairly challenging, and I did poorly on them. I even missed one entirely due to forgetfulness/distraction. The more heavily weighted, easier projects counterbalanced the quizzes to make it fairly easy to earn an > 85%, the cutoff for an A.
I had no bad experience with a TA, but I did feel like they put an inordinate emphasis on running lots of office hours. (Aside: they also rescheduled these many, many times throughout the semester, and each time they did it triggered emails from Canvas. I never figured out a way to not get these notifications but to get notifications if something else was added to the calendar, so I just came to accept it. There were about 50 emails for deleting office hours, which doesn't include the corresponding emails to create the appointments after they changed them.)
Though some might find the numerous office hours a gift, I would have preferred they had put more energy in the asynchronous Ed discussion or Slack. It seems like they had one TA take responsibility or each portion of any project (which is sensible) but it seems like that mostly meant that other TAs did not respond to questions. It seemed that repeatedly it could take 4-6 days to get answers to project questions. I feel like if they had used their office hour time to answer questions, even if they were not the grader, it would have been a win. Nevertheless, the class seemed to generally be well-run and well-organized. It was a nice lighter class coming out of GA.
Deep Learning (Summer 2023)
I registered for this class with a measure of reluctance because I did not really meet the requirements. In OMSCS, as I understand, there are no true hard requirements, although I believe that Dr. Kishore to scare away anyone from his Cloud Computing class if they did not complete Advanced Operating Systems with an A.
I did take Introduction to Analytic Modeling, which I see as ML-Lite. I also to study for this class ahead of time.
This course covered neural networks, the ground up, including linear classifiers, recurrent neural networks (RNNs), convolutional neural networks (CNNs), Long Short-Term Memory networks (LSTMS), transformers, language models. Assignments included implementing a simple linear classifier using numpy
. Later, we were tasked with implementing our own versions of RNNs, CNNs, and LSTMs using PyTorch. Thus, we were implementing classic/famous models that PyTorch already has implemented. This was fun and challenging.
I found it really difficult to implement some of the models using just the lectures. Near the end of the class I noticed that some of our guidance on citing sources indicated that we could cite public/open source software, which kind of surprised me. I had been trying to avoid even using tutorials that show PyTorch code in an effort to not breach our academic intregrity policies. I did have an interaction with the instructional staff and it seems like I could have made use of more resources to help me understand better and get to the finish line in the projects. I failed to finish multiple projects, which was frustrating. I also had some personal issues in my life, like unexpectedly needing to move my family during the semester which had an impact on my ability to engage with the class.
I had one small hiccup in the first project that left me frustrated but informed how I approached later projects. In addition to a PDF describing the project, the instructional staff also provides a Powerpoint template for the project report. I saw that this had been described as optional, and I quickly decided that I didn't really care to make a report in the form of slides. So I didn't use the template. What I did not realize is that the template was not just stylistic, but it also provided specific questions to answer in the report, and requirements for what kind of tests to run. A number of these were not present in the main requirements document, which hurt my score. I did not repeat this mistake in future projects.
There were some lectures and office hours provided by Meta Researchers. I viewed the lectures but did not attend most of the Meta office hours. I felt like there was some redundancy at times as they brought in different lectures to cover topics instead of having a unified outline. I know some students complain about these lectures but it was interesting to hear from more voices working in the field.
There was a group project at the end. I had three good partners and we build and compared several different models for classifying news stories as real or fake news. It was nice to apply the concepts we learned in the class and I was proud of the report we created at the end. I suspect that very little time is spent grading these projects, but we did invest a lot of time preparing them. We received full credit for the project.
With my rocky semester, I worried that I might fail the class, even though I only needed a C for this class is it fills an elective spot for me. Ultimately I fell one percentage point short of a B for the class. I'm not proud of that but I'm near the end and ready to be finished.
I'm glad I took the class and received an introduction to these concepts that are receiving a lot of attention in the world. I thought the class was well-organized and the lectures were well-done. I recommend the class.
If you can come into the course with a decent background in gradient calculation, linear algebra, any any experience working with numpy
and/or pytorch
, it will serve you well.
Natural Language Processing (Fall 2023)
My tenth class was NLP. I had been hoping for the last year or two that this class would be offered and I was happy that it was. It offers a mix of traditional NLP foundations with coverage of modern neural network approaches.
I enjoyed the class and felt like it was great to finish my degree with Deep Learning and Natural Language Processing, especially as the Large Language Model craze hit during my time in the program.
The bulk of the coursework was built around six assignments, with the first being a neural network warmup and the last one being slightly larger in scope than the previous ones. I estimate that most of them could be completed in 5-10 hours. They covered topics such as text classification, word embeddings, distributional semantics, language models, and question-answering systems. The neural network design was pretty limited and fairly easy coming out of Deep Learning perhaps it was especially easy. Largely the projects were straightforward implementations that the documentation guided us through. There were also detailed and helpful office hours.
I enjoyed the lectures and appreciated that Dr. Riedl just recently made the lectures and they do cover recent advances such as transformers. The latter half included lectures from Meta researchers, but I preferred Dr. Riedl’s explanations generally. The projects seemed easy to get high scores in. Lectures included 10+ quizzes which almost all allowed you two submissions and feedback on the results. So these were ultimately easy points, though they had a very small weight.
The two exams were worth 20% total of the final score, and these were the most challenging portion of the course. I scored poorly on the midterm exam and felt like the grading was a bit strict. It was somewhat open-ended and without detailed feedback, I don’t know that I could do much better if I took it again. I found the final a bit easier than the midterm.
I think that DL helped me but I think that most people could succeed without prior graduate coursework. Knowing a little bit of PyTorch would be beneficial.
This was one of the lightest courses I took in the program, but as I finish out my fourth year in this program (!) I was happy with the light load. I enjoyed the class and recommend it.