Tuesday, August 25, 2020

Reflections on a Master's in Computer Science - pt. 1/2

Hello friends! It's been a while. Three years, in fact, since I became a recluse to focus on graduate school studies, part of my four year journey into learning Computer Science. Well I'm still alive, and after 1879 additional flashcards (for a total of 4010 CS, IT, and math cards), roughly 2332 hours of studying, and $7,929.00 in tuition costs ($4,625 of which was covered by tuition reimbursement through employment), mostly while moonlighting with full-time employment in IT and programming, you can finally call me a Master of Computer Science!
  1. Earn IT certifications.
    1. CompTIA A+ Training Birthline: Sunday, May 29, 2016
    2. CompTIA A+ Training Deadline: Thursday, July 21, 2016
    3. CompTIA A+ 220-901 Certification Exam: Friday, July 22, 2016
    4. CompTIA A+ 220-902 Certification Exam: Friday, July 22, 2016
    5. CompTIA Security+ Training Birthline: Monday, July 25, 2016
    6. CompTIA Security+ Training Deadline: Sunday, August 14, 2016
    7. CompTIA Security+ SYO-401 Certification Exam: Monday, August 15, 2016
  2. Find an entry-level IT job (ideally with exposure to programming).
    1. Job Search Birthline: Monday, August 22, 2016
    2. Job Search Deadline: Monday, January 09, 2017
  3. Take pre-requisite courses online while learning programming on the side.
    1. Pre-req Birthline: Monday, August 22, 2016
    2. Pre-req Deadline: Sunday, May 07, 2017
  4. Apply to grad school.
    1. Application Birthline: Sunday, February 12, 2017
    2. Application Deadline: Sunday, March 12, 2017
  5. Increase professional programming experience.
    1. Job Search Birthline: Tuesday, July 11, 2017
    2. Job Search Deadline: Monday, August 28, 2017
  6. Get Master's degree.
    1. Program Birthline: Monday, August 21, 2017
    2. Program Deadline: Saturday, August 1, 2020
  7. Profit.
    1. 2020

How I Chose My Master's Program

The dream to earn my Master's goes back to May 21st, 2016 (before I had started learning my first line of code) when I defined my premise as "Most well-prepared and well-paid computer scientists have a related degree." To that end, my goal became "I will prepare for a Master's program in Computer Science" and after fulfilling the pre-requisite courses... yada yada yada I was accepted into all three schools that I applied to. As I outlined in this post, I ultimately chose to go with Georgia Tech's Online MS CS program (hereafter OMSCS) for the following reasons, which are (mostly) still relevant today:
  • The program is among the top-10 16 in the nation (#9 #8 U.S. News & World-Report#5 #16 THE World University Rankings)
  • The university is reputable and well-recognized in the engineering field, providing valuable degrees
  • The OMSCS program is accredited and utilizes cutting-edge tech, in order to maintain GT's strong reputation
  • The estimated $6,600 $7,000 tuition (higher if taking one class at a time) is not "too good to be true;" it's kept low to attract a wider applicant pool and to drive revenue indirectly, and the program can scale easier than traditional programs by using automation
  • The online courses are of higher quality and more challenging than traditional online colleges, inspired by the MOOC platform to successfully merge theory with hands-on experience, providing plenty of feedback and support to students along the way
  • OMSCS has a global presence and alumni community with supportive and enthusiastic students, rather than being centered in just one location
  • From GT's website: "The College of Computing's goal is to have the OMS CS program reflect the on campus MS CS program. Thus, the OMS CS degree is designed to be on par with degrees received in traditional on-campus settings. The curriculum in the OMS CS program represents a subset of the on-campus curriculum, allowing for a full MS in computer science but with only some of the specializations available in the on-campus program. The OMS CS curriculum will expand as more courses come online."

Overall Thoughts on OMSCS

I came to this online grad program at Georgia Tech with some prior experience taking online undergrad courses at UMGC (formerly UMUC) to complete a minor equivalent in CS. My overall impression of those UMGC courses was that they were "online courses for the motivated self-learner, but lacking quality control in teaching and student interaction." I aced all 8 classes and got into grad school, but it wasn't without a couple of regrets: 1. I should have kept schedule expectations low outside of school and work, and 2. I should have properly prepared for some of the courses. Taking what I had learned from UMGC and based on my own research of OMSCS, I was optimistic that I would be able to succeed at Georgia Tech.

I'm happy to report that I did achieve some measure of success (with a 3.70 GPA) and that OMSCS obliterates other online programs in quality - in addition to some offline courses from my undergrad days. For a $7,000 graduate program you would expect them to cut some corners, and from my perspective those corners include 1. individualized instructor involvement, 2. in-person networking opportunities, and 3. course numbers rivaling on-campus programs. These are, naturally, complaints you could raise about nearly any online program that simultaneously teaches nearly 500 students per class per semester. But on the whole, offering structured yet flexible distance learning for the average working professional is a benefit for the educational process of OMSCS rather than a detriment.

It's difficult to define a "basic structure" for OMSCS courses, because to its credit each course is formatted based on that professor's teaching strategy rather than adhering to some cookie-cutter template. For instance, some courses assign textbooks to supplement the lecture videos, and others rely entirely on lecture videos to convey learning materials. Some courses have individual assignments due every other week, and others have one large group project that spans the entire semester. Some courses autograde coding assignments upon submission, and others hand-grade written assignments. This variety is usually a good thing, but it means the vices of the professor's teaching will shine through as well and could lead to issues like inconsistent pacing or an overwhelming workload. However, if I were to lay out a basic structure, it would be this: watch lecture videos, read deeper material, participate in the student forums, complete smaller coding assignments or papers, work on larger individual or group projects, and take exams.

The lecture videos have ultimately moved away from Udacity to an internal platform, but you can still watch existing videos for free. They're usually interesting (if the professor isn't monotone) and are split into easily-consumable five minute or less videos, taking advantage of pre-recorded scripts and visual cues that nail the core concepts. The reading material comes in the form of textbooks, articles, and/or academic publications. This is usually... not as interesting as the videos. Some of the material is dated (think pre-2000s) with the justification of "getting the basics" - you'll get those basic concepts, but the examples may not be as relatable. The student forums (Piazza) are actually decently good at encouraging student interaction without forcing it. That is to say, courses hardly every mandate a "participation grade," and when they do it's not to require students to arbitrarily post x number of times per week (which I hated about UMGC). I would skim threads to see if there was anything interesting, post if I felt comfortable answering a question for a fellow student, and then actively search for answers to areas I was struggling with. Student responses often uncover answers much quicker and sometimes to much greater depth than instructor responses. As a way of networking, however, this system still leaves a lot to be desired. The exams come in a variety of formats, from multiple choice to puzzles and brain teasers loosely based on concepts from the material. Some are open note that must be returned by a deadline, and others are closed note that are proctored by webcam over a two hour period. Exam taking is a skill in itself, and even though I usually do fine I kinda wished for other evaluation methods.

The assignments and projects are where OMSCS really shines. This was easily the area that I was challenged, consequently learned, and ultimately enjoyed the most in each of the courses, and I list all of their descriptions proudly on my LinkedIn profile. I only had one course (Human-Computer Interaction) where all the projects were written, while the rest required a degree of coding in some or all assignments. The projects range from demanding to incredible frustrating, often contributing to countless hours spent in the middle of the night leaving me teetering on the edge of sanity. But I reluctantly admit that they are all doable, and once you figure them out you are on the top of the world. I had three group projects, two of which represented a significant portion of the course. Despite the potential disastrous downsides, my groups were without exception fantastic. My teammates were all motivated to put in the effort, and the work was more or less split evenly according to people's preferences and abilities. Obviously this will not be everyone's experience and I consider myself lucky, though I think it shows that the program attracts a significant number of driven individuals.

The professors have a commanding grasp of the material and their passion frequently shines through in their lectures and teaching strategies. It has none of that BS "substitute professor" phenomenon of UMGC (even despite a couple courses being taught while the professor was on sabbatical). That being said, some professors are more active in their online courses than others. Some offer weekly office hours where they answer student questions in video format, others are active on the Piazza forums or in the dedicated Slack channel, and still others you may only see in their pre-recorded lecture videos which is... unfortunate. But in my experience, none display individualized attention when a student is struggling or particularly interested in a certain area. Instructor work is supplemented by TAs (teaching assistants) who are much more active in answering forum and chat questions. Their primary role is often to grade assignments and provide feedback, but this can be frustratingly slow at times especially for students considering dropping a course by the deadline. Some TAs act as mentors in certain courses to oversee your individual or group work on a project, and I hear this can ruin the course for some students but my experiences here have also been mostly positive. The negatives for me largely arose from the occasional TA being flippant and unhelpful on the forums.

At the end of the day, you're entering OMSCS to learn some new CS skills and get a fancy piece of paper. The program delivers on both of those, and though I'm still awaiting the latter in the mail I truly believe that my knowledge on software and design cycles, databases, networks, security principles, and more have provided a theoretical and often practical underpinning in each of my professional roles that cannot be overstated. My education on data science disciplines such as AI and ML prepare me for future roles and transitions in the industry. Even after taking an entire graduate course on a subject, there are times when you'll want to go deeper on certain areas but the schedule moves on. However, as any language learner will tell you, school shouldn't be responsible for teaching you everything - once you're armed with the basics, you'll be in a better position to learn the details much more effectively on your own or on the job.

Read on to part 2, where I describe the courses I took, conditions on recommending the program, and pro tips!

No comments:

Post a Comment