December 21, 2024

Georgia Tech OMSCS Final Take

Yesterday I took the final in what I think (hope!) is my last class in Georgia Tech’s Computer Science online masters program known as OMCSC. In general it’s a good program and an excellent value – I put roughly $8000 into it. Not bad for a masters degree from a top-10 school. GATech came in at #8 this year.

Favorite Course

I’m going to go into more detail on the courses I took later on, but as a teaser I’ll say that my favorite course was Introduction to Operating Systems. It wasn’t the most smoothly-run course, but it was the most fun from a technical perspective. There’s nothing better than multi-threaded C programming and memory management to lose sleep over!

Program Value

Would I do it again? From a learning perspective, probably. I learned a lot, there’s no doubt about that. My hesitation is that it wasn’t always about subjects I am interested in. This is, sadly, the way of things in academia.

From a life-sacrifice perspective, was it worth it? We’ll see. That largely depends on whether I’m able to leverage the credential in the future in order to ease into retirement as an itinerant lecturer on the subject.

Workload

It was a lot of work, a lot more than I first imagined. As I told my boss earlier when he expressed interest in the program, “First, set aside 2000 hours of your life that you were wondering what you were going to do with…”

The program is manageable while working a full-time+ position, but not without giving up nights, weekends, television, books, and the other things that make life worth living, for 3+ years.

To para-quote Dr. Charles Isbell, newly-appointed dean of the C.S. school, “There will be tears, but when you’re done, they will be tears of joy.”

Very true. Along the way, there will be frustration, anger, fatigue, and general suffering. That’s is the fertilizer that grows the feeling of accomplishment that completion brings.

Course Rundown

Herein I’ll summarize my direct experiences with the courses I completed below. Some of this is memorialized on OMSCentral.com, but this will be a current take on things, now that it’s over.

CS6440 – Introduction to Health Informatics

This was my first course, which I took because of a genuine interest in health information systems. That interest turned to horror, however, as the class explored the topic. Summary: It’s a miracle the medical field is functional at all, from an IT perspective.

As for the class, I took it in Spring 2015, so it has been a while… At the time, the class was not particularly well-organized. All of the lectures and quizzes were properly in place, subject to the scattershot locations that many courses fall victim to in Tech’s non-integrated EdTech systems, so the bones were in place. But…

The centerpiece of the course was a team project for which the requirements and grading were rather nebulous. Team projects can be terrible experiences, but my 6460 team was pretty solid. I recall it being a 5-man team, which seems odd now, but there were 2 other guys who were good developers and we made a project out of the FHIR API and Groovy/Grails, which I really liked as a web dev tool. We each narrated an approximately 4-minute PowerPoint at stages of the project in lieu of making a public presentation. This was OK and avoided some of the stress of speaking in front of a group and is more like workplace reality in which we often present over WebEx.

I had literally no idea what my grade would be in the course until it showed up in BuzzPort, Tech’s creeky old Banner student system.

Rating: 6/10

CS6250 – Computer Networks

The course I really wanted to take was Computer Journalism and it has been “on the list” of courses for OMSCS as long as I’ve been involved with the program but hasn’t yet come into existence.

So I took Computer Networks instead, since it seemed like an easier course to take in the summer and because I’m not so strong in this area, which does come up during the day job, from time to time.

Again, this was 2015 and the course was in transition because Nick Feamster, the original course designer, had moved on to a new position and Tech was scrambling to keep the course going. This showed in a bit of a sloppy syllabus and homework assignments and submission processes that were not fully baked.

Again I learned a lot from this course about how the Internet really works, some gory implementation details about TCP/IP, EtherNet internals, etc. Never heard of a Border Gateway Protocol? This is the class for you!

We used Linux VMs for our course work, which was a challenge for a Windows guy to deal with because the machines never came properly configured.

This was perhaps the biggest disappointment of mine with the program: The environment setup costs were pretty high in some classes and this was, at the time, one of them.

“But you’re a computer science major. You should know how to do X!”

That may or may not be true; however, there is no way to deny the fact that time spent fooling around with the class VM getting it set up to run Python with MiniNet takes away from learning the course goals.

Another interesting aspect of this course were the exams, which were done in a modern-appropriate way: Open Internet, open everything, with a long time window to complete the work. This did have the tendency to reduce the exam process to an Internet scavenger hunt, as the instructor put it, but it reflects the way of the world as it is now, not as it was in the 1990s, the last true era of academics without the Internet.

In this class you have a pretty good idea where you stand at all times and what you need to do to make the grade, which is both appropriate and nice to have.

Rating: 7/10

NOTE: I would like this course higher because of the interesting content, but the disorganization and scavenger-hunt exam structure don’t support it.

CS6460 – Educational Technology

I enjoyed this class a lot because it was effectively a “free play” course in which I was able to propose a project and work on it independently. There were the usual video lectures, but they did not take up too much time.
Like all of the courses created/administered by David Joyner, this class ran like a Swiss watch.

As I recall, there were multiple checkpoints on the project where I had to submit progress reports and get feedback from the TAs. This feedback was normally positive-minimalist but not particularly valuable.

I ended up spending a lot of time on the project, more than was strictly required, and was pretty proud of the ASP.NET MVC application I built. The app allowed the creation of online curriculum for elementary math teachers as well as the consumption of the material by students, including automatic grading and rollup to the semester/class level. A fun aside was that I implemented OAuth authentication and used RavenDB, a Windows/.NET document database, as the back-end.

As an aside, I liked Raven a lot from the insert/read perspective, but I would not recommend Raven for a system like this: The inevitable updates kill you in terms of object linkage.

I do recommend this class if you have an interest in creating tools for the education space, have a project in mind that you can dedicate 200 hours to, and you are self-motivated enough to work alone for long stretches. If that’s the case, this is the class for you.

Rating: 8/10

Brief Aside

At this point, my original goals for OMSCS were met: 9 hours of technology-related courses to add to my resume, the objective being to start teaching programming classes at the junior college level again. I never intended to go all the way to the degree.

As it turned out, while these colleges were begging me to teach when I lived in Houston, grad students are a dime a dozen in College Station and I never even got a call from Blinn College, the local school.

Not being one to give up, after taking a semester off to evaluate, I decided to double down and go to the next gate: 18 hours of masters-level computer science courses. This made a bit of sense as my previous 9 hours were from a business/IT program.

CS6200 – Introduction to Operating Systems

This course was one with a severe split personality. The lectures were interesting and well organized, but their correlation with the class projects was partial, shall we say? I’m being kind, basking now in the afterglow of completing the program requirements.

Those projects were my first real introduction to programming for Unix, so there were quite a few bumps and bruises along the way. At one time I was an expert-level C programmer for MS-DOS, so most of these were overcome-able with the application of elbow grease; i.e., extra time at the keyboard.

Writing multi-threaded programs in bare-metal C is not for the faint of heart, as anyone who has done it can attest. Memory management is a skill modern programmers do not have to know, which is a good thing, because it is brutally painful, particularly with long-running, multi-threaded applications. The highest degree of satisfaction I received from OMSCS came in this class when my MT app finally ran to perfection after the Tony the TA, who was amazing, fixed a bug in the class software I pointed out to him. I literally threw an air punch and whooped at this while Monica and I were at the Scattergood’s place in OK on vacation!

The exams in this class were quite stressful. Distilling the subtleties of OS internals and programming to a small number of multiple choice questions is a difficult business and one that’s not necessarily able to divine what the student has learned. They are also proctored via webcam, which was another pain-point for me, as invasive as it was.

Except for the exams, which terrorized me, this was probably my favorite class in the program and one I’d recommend to any serious programmer.

One small downside was the section of the course and final project, which covered RCP. Back in the day this was an interesting topic. Now it’s a subject that seems obsolete in the era of microservices.

Rating: 8/10

CS7637 – Knowledge-based Artificial Intelligence

I took KBAI after another semester break. Again, Blinn did not call. At any rate, KBAI was my introduction to artificial intelligence programming, which was definitely a mixed bag. Taught by Ashok Goel, whose lectures were pretty good and held my interest, the course was structured by Dr. Joyner, which meant the expectations and schedule were clear from day 1, which I appreciated.

This class was a lot of programming work – Java, this time – and a lot of analysis write-ups. That ratio was probably 3-to-1, so the writing did not take up a disproportionate amount of time in reality. It certainly seemed like it did, though, coming at the end of intense efforts to program the AI agents.

Many late nights and weekends were burned on this course, so a student should we warned about that in advance.

Happily, the work is all independent, project-based assignments: no team projects and no high-stakes exams.

My agents were moderately successful at learning the image recognition tasks, etc., they were put to, but not overly so. My main take-away from this course is that AI has a long, long way to go before it is a real thing.

In fact, I’d go so far as to say that I lost interest in AI after this course. Not because of the class itself, which was manageable and interesting, but because the concept itself is decades away from being realized. The so-called singularity will almost certainly not come in my lifetime and I have strong doubts about it ever happening, as much fun as sci-fi writers have had with it. This is confirmed daily by Alexa, that dolt of a personal assistant.

Rating: 7/10

CS6035 – Introduction to Information Security

By this time, things were getting crazy at the day job, what with the implementation of a cloud HR/payroll application blowing up all of the application my team is responsible for. Knowing I could not take a class in the fall of 2017, I looked for the easiest possible class to take in the summer and found Info Sec.

This turned out to be a pretty interesting class that was relevant to my work life. PII is a daily part of my work life and this class put some context around the importance of and means to govern and protect that data.

It also put an interesting spotlight on malware internals with lectures and a long project on the exploitation of buffer overruns that was quite an eye-opener for me. It is disturbingly easy to exploit these bugs and “run arbitrary code”, as they say in the biz.

One flaw in the implementation of this class is that while some of the projects could easily have been auto-graded, this was not done. That should, I believe, be a required element of online courses, to give immediate feedback when possible.

Some of the content of this course dovetailed well with Computer Networks, which made me feel like I was getting a bigger picture from the program.

Info Sec is on the lower side of things in terms of demand. I probably put in about 150 hours on this one, which is a reasonable amount. Some midnight oil was definitely burned causing stack overflows and buffer exploits, etc. Pulling an A on that particular assignment requires some real effort.

Rating: 7/10

Another Aside

At this point I’d accomplished my secondary goal: 18 hours of computer science classes at the masters level. I now met, by any interpretation of Texas’ rules, the standard for teaching at the undergrad level.

Still no call from Blinn College, though. C.S. adjuncts are definitely a commodity in this town.

But a hallway conversation with David G., a work colleague, went something like, “You’re 60% of the way to a degree. You may as well finish it up.”

True but bitter advice. I decided he was right. After surviving the HCM project implementation at the end of 2017, I re-upped in OMSCS with the intention of finishing in 4 straight semesters. No more breaks.

My meandering approach to the program thus far now came back to bite me: I’d used up most of my “fun electives” and now had to take the required courses. Blech.

CS6300 – Software Development Process

To begin, let me say that this is not a bad class for an engineering student to take. Managing requirements, users, testing, and delivery of software are skills that these people need to learn and are not taught at the undergrad level. So I support the requirement that C.S. students take it.

However, as a 30-year veteran of the field, I am above the level of this course. Ideally there would have been a way to demonstrate proficiency and get credit for this course. No such luck.

Admittedly I could have taken Graduate Algorithms instead of Software Dev. Process. A real student of computer science would have. But I wimped out for two reasons: Things were still crazy at work in the aftermath of go-live and GA has a terrible reputation of being a brutal cluster-f**k of a class. So I did what I had to do: I gritted my teeth and ground it out.

The projects for the course were good ones. They were well thought out and documented. All of the expectation were clear and reasonable. And the required project documentation was not overly pedantic. I have no issues with the individual assignments.

The team project, again the centerpiece of this particular class, was another matter. Compared to Health Informatics, the project was very well documented, as mentioned.

My team, however, was not a good one. Shout out here to Ryan, who I’m sure would corroborate that, if he were to see this: You rocked it, my friend, and I couldn’t have done it without you.

Who could, after all, do the work of 4 people alone? But Ryan and I pulled it off as a two-man team carrying a pair of deadbeats all the way to a pretty damn good implementation of Wheel of Fortune, in Java, for Android.

I knew going in that I would make an A in this class and I did. But not without significantly more pain than I would have expected.

In short: My least favorite class of the program. I wish now that I’d had the guts to take Algorithms, even though I know I would have bombed it.

Rating: 5/10

CS6750 – Human-Computer Interaction

Another David Joyner joint, so to speak. Although, I believe this is all his course from start to finish. This class is administered to perfection and should be the standard for all OMSCS courses to match.

The content, alas, does not match the structure. There is a sub-theme at Tech to try to teach masters students how to become researchers. This is not an inherently bad thing: We do need PhD students, after all, and they do need to know how to conduct research. It’s just that I will never be one of them and have no interest in putting effort in that direction.

I mention that here because HCI dedicates more energy toward this unspoken goal than other courses. It could easily be raised to a learning outcome on the syllabus, it’s so pervasive.

Contrary to my expectation, this course did not spend as much time on the design of HCI elements as I expected. It is much more about the theory and administration of HCI projects than it is about the practical.

While the workload for the course is average for the program, it is mostly of a rather dry type, with no programming to speak of, and a LOT of essay writing and conformance to research standards.

As I am a relatively good writer, I had no difficulty with this and my final project was well-received by the peer reviewers, so I did well in the class overall. But it was a slog and not the fun, relevant elective I thought I was getting.

The exams in this class are the preferred model: Open notes. Not open Internet, though, so it’s a happy middle-ground. They are long, grueling affairs conducted over ProctorTrack and, despite being multiple-choice format, are subtly nuanced and strenuous to do well on. Be prepared to use the entire 2 hours for each of them.

I had a scare in this class in which ProctorTrack disconnected multiple times during the midterm exam, causing an anxious half-hour during the test as I frantically messaged PT support. It all worked out, but I vowed to only take exams from work henceforth, where the bandwidth is high and latency low.

Rating: 6/10

CS6263 – Introduction to Cyber-Physical Security Systems

This was my last changed to take the elusive Computational Journalism, which failed to materialize. I chose Phys Sec over the database class based on recommendations at OMS Central, because the latter is apparently still a C.F., despite being something that would be incredibly easy to define and teach.

The work load in this class is demanding during the first half of the semester as there is a lot of dry reading to do. Stock up on Red Bull if you’re going to take this class.

Also know that there is a 90% dedication to electrical grid systems in this course, which took me by surprise. This was not the cyber-physical course I thought I was getting.

Now, this is an interesting topic on its merits, so it did pique my interest, at times anyway. The most interesting part of the course had to do with the ancient ModBus and related protocols that are in use in many physical systems. Adapted for TCP, these protocols are basically plain-text serial-bus messages and are easily hacked by anyone with some know-how and access to the network. This is the take-away from the course: Cyber security alone is impossible; we must secure the physical assets as well.

The exams in this course are similar to those in Intro to OS: short and not-so-sweet and subject to all of the limitations of the multiple-choice format in regard to nuance when a test is simply thrown together from a bank of stock questions. Our friend ProctorTrack shows up again here, but by this point in the program I had accepted it as a necessary evil.

The workload for this course is almost non-existent during the last month, about which I am not about to complain.

I’ll also add that, from a learning experience, the most interesting part of the course, and the only one that is unique in OMSCS, is the ladder-logic project. The ModBus exploit project is also interesting, and you get to play with MiniNet again. There is a buffer overflow exploit project as well, but it’s an easier rehash of 6250.

To be clear, students who take Computer Networks and Info Security won’t learn much here except for ladder logic.

Rating: 6/10

CS7641 – Machine Learning

As some of you know, I was not a computer science, math, or engineering major in my undergrad days. I went the IT route in the business school in part because the math was too much in C.S.

Ergo, I chose to avoid the heavy math classes in the OMSCS program whenever possible. Fear of failure was one factor, the necessary time commitment was another. But in the end, Tech’s degree plan required either Machine Learning or Artificial Intelligence. After waffling on this a bit, I chose Machine Learning based on the OMS Central reviews saying ML was more on the evaluation/critique side and AI was more on the math/coding side.

In retrospect, that may have been a poor choice, given my background in coding. If you can convey the concept, I can code it. But as I said earlier, I’ve lost faith in AI as a viable technology. So ML, here we come.

After knocking out a 45% on the midterm exam and feeling lucky to get that, I belatedly got the memo that I needed a B in the class to meet the core requirement for graduation. This increased my stress level from 20 on a 10-scale to approximately 1000 but was probably just as well: If I’d known this going in, I might not have taken the class this semester (Spring 2019) at all.

It turned out that my soul-crushing experience on the midterm was actually slightly above the class average, which restored some hope. Soon after the first project grades came back and again I was slightly on the good side of the mean. It was doable, after all, if I could maintain the 20-hr/week pace I was on.

That, needless to say, is not easy when working 45+ hours/week on one’s real job. This is my only major knock on the program: The time commitment varies a lot between courses and some of them are over the top. There is a simple solution, of course, and that is administrative oversight of course design to level the time/credit hour relationship. Despite the naysayers, this can be done!

The lectures by Dr. Isbell and Michael Littman are interesting and filled with numerous, even constant quips and puns, to keep things lively. Thank goodness, because there are a lot of long lessons, some with moderately intricate algorithms and equations to untangle. Of the courses I took, the ML lectures are by far the best, with KBAI in second.

The supervised learning project is quite demanding as it is a survey over multiple SL algorithms. Take Isbell’s advice and steal the code from the ‘net. I wasted considerable time on vanity by attempting to write my own grid search. Not a good idea.

Of course, using someone else’s framework has its own problems, as any coder knows. But it is the shorter path, in the end, toward writing the paper that is the real job of the student.

More than one programmer-type like myself had to battle through the fact that one’s skill with that aspect of C.S. meant very little in the class. Happily, writing is another relative strength of mine, so I may have fared better than I might have otherwise.

The 7641 Slack channel helped a lot with this class as some alumni were present there, as well as a good group of current students. Tips and tricks were shared that helped a lot, as virtually everyone used the “Jontay” or “Chad” code as the basis for their project.

I needed this help, believe me. At the same time, I know that I didn’t learn as much as I could have if writing the code from the ground up was doable. Unfortunately, there is too much material in too little time to allow for this approach.

I am left wondering if lopping off the reinforcement learning element of the class and spreading the rest of the material out would not be more beneficial to the student? After all, there is a whole class on RL. But this would work against using ML as a core component of the program…

At any rate, I put in tons of time on the randomized optimization assignment and beat the mean by a few points again and did the same thing on the clustering project. I actually got a very good score on the latter, which took some of the pressure off for the Markov decision process project and the final.

As of now, grades are still pending on those, so my status as a graduate is in limbo for the next few days.

My final thoughts on ML are that it is a good course on an interesting subject. Perhaps it is one that doesn’t jive with my personal interests, but it’s well-run and the workload is survivable if your expectations and time management are realistic.

During the first month, I told Monica that she should expect to become a “machine learning widow” for the duration of the class. Then, we decided to buy a house and move during the class. Stress level 10,000!!

I ended up having to burn some vacation hours to get the work completed. So be it. It is done.

Rating: 8/10

Wrapping It up

In summary, for me the Georgia Tech OMSCS program presented a significant intellectual challenge. It was more time consuming than I expected, while providing about the amount and complexity of material I anticipated.

The cost was as-promised: a masters degree in a challenging discipline from a name-brand school for < $9,000.

Could one get a better education elsewhere? Yes, I believe so, based solely on my belief about what is possible, technologically and administratively.

However, I don’t believe it could be done much more economically while still retaining the degree of rigor present in OMSCS.

Ultimately, there is no better education than what can be obtained 1-on-1 in a master-pupil relationship. The scale descends from there and the primary variable is, how much is the student willing to invest in a course of study. This is more important than the particulars of any program.

Leave a Reply