Tuesday, September 1, 2020

How to Vote

The November 3rd 2020 U.S. election is fast approaching! If the voting process has become moderately confusing and inconvenient for those of us who are familiar with voting due to additional voter suppression, it will be damn near impossible for many new and returning voters. Voting is a right, and as such it should be made as easy and straightforward as possible for everyone. If that's not part of your political "goals" then you need to reconsider those goals and change them. What follows is intended to bring resources together into a quick guide to voting from any state or territory. I'll use Maryland (MD) as an example because that's where I'm from.

Step 0: Get ID


Does your state require an ID? Check the ID laws for each state. The federal Help America Vote Act (HAVA) places additional ID requirements on first-time voters who registered by mail. MD requires proof of residency when registering or voting for the first time, but afterwards doesn't require any documentation to vote in-person or by absentee/mail-in (for example, you can request the latter with the last 4 digits of your SSN).

If your state does require one and you need one, you can use VoteRiders or follow this guide on how to get an ID from your local DMV.

STEP 1: Register to Vote


Need to register, or verify whether you already have? Check here.

Then mark your calendar with your state's registration deadline. MD's deadline is 10/13.

As a last case scenario, some states (like MD) let you same-day register at the polls.

STEP 2: Make a Voting Plan


Option 1Vote absentee/mail-in
Take the postal service risk, and request an absentee/mail-in ballot (the MD request deadline is 10/20, and all registered voters will receive request forms in the mail - though if you have a license or MVA ID it's faster to use the online system). The deadlines are just a guide though, you should submit your request ASAP in case the elections office is overwhelmed and can't process your request in time.
  • What is absentee/mail-in voting?
  • Does your state require excuses to vote absentee/mail-in? MD does not.
  • How will your identity be verified when processing ballots? This could include ID copies, signature comparisons, and/or witness/notary signatures. MD requires a signed oath (which must match the signature on file) on a sealed envelope.
  • When will your vote be processed and counted? Actually, many states have enacted temporary policies on processing and counting for the 2020 election. MD begins processing and counting on 11/4 at 8am 10/1 when ballots are received.
  • How will you get your ballot? See the above links, but states may offer different formats including ballots being mailed to you (MD sends out three weeks "about 30-45 days" prior to the election), faxed to you, and emailed to you as a downloadable link.
  • Is there any risk with the downloadable version? Apparently these can't be scanned and could slow down vote counting. According to the MD election website, "This process slows down the vote counting after the election and puts election workers at risk during the pandemic, so we ask that you not use internet delivery unless it is necessary."
  • How can I return my ballot? NOTE: PLEASE READ ALL INSTRUCTIONS CAREFULLY AND DOUBLE-CHECK THAT YOU HAVE COMPLETED ALL REQUIREMENTS BEFORE RETURNING YOUR BALLOT!! DON'T LEAVE ANY REASON FOR YOUR BALLOT TO BE THROWN OUT!!
    • Return Method A: Hand delivering by 11/3 at polling centers, likely in your county or major city (early or day-of locations in MD on a map, see the full list of MD locations here)
    • Return Method B: Hand delivering by 11/3 at ballot drop boxes, likely in your county or major city (see locations in MD on a map here or see the full list here due by 8pm on 11/3, expected to number 270 across the state)
    • Return Method C: Mailing back by postmarking (I repeat, postmarking as in received and processed by the postal service, NOT simply "placing your ballot into a mailbox") on time (MD = 11/3) and arriving to the local board of elections on time (MD = 11/13 at 10am), though USPS recommends mailing your ballot "at least 7 days before Election Day"
    • Return Method D: Change your mind and vote in-person instead, though you'll likely complete a provisional ballot
      • NOTE: Provisional ballots are expectedly treated differently by state, and will not be counted under certain circumstances (besides obvious cases where multiple votes have been cast by a single voter or the voter hasn't met ID requirements as described above)

Option 2Vote in-person early

Take the COVID-19 risk, and vote early to avoid the rush. This is what some political experts recommend. See your state's election website for more information on locations.

Option 3Vote in-person on Tuesday, Nov. 3rd

Take the COVID-19 risk, and stand in line if all else fails. Unfortunately, many states are reducing the number of polling stations by around 80%. See your state's election website for more information on locations. Then make a plan to vote before, after, or during work, or take off if you are able.

NOTE: FiveThirtyEight has an excellent guide on how to vote as well.

Step 3: Educate Yourself


This is a very polarizing election so you many already know who you plan to vote for, but it doesn't hurt to cut through the (social) media bias and rampant misinformation in order to get to the heart of where candidates stand on the issues.

Learn how your stance on national issues matches political parties and candidates by taking the political quiz on ISideWith.

Learn about your local ballot candidates and issues on Vote411. This will probably take the majority of your time when completing your ballot, and may require around 30 minutes of research if you want to be thorough.

And while we're on the topic of educating ourselves and preparing against an onslaught of misinformation in the next couple months, here are a few respectable news sources that will provide evidence-based accounts with the goal of being more moderate (links go to Facebook pages that you can Like to help balance the inevitable bias we all see in our social media feeds):

Actually, following Twitter's example, Facebook has begun instituting fact-checking with the help of the following agencies (which presumably can also be trusted to provide evidence-based accounts):

If you've already explored the education resources above and are feeling masochistic, check out the debates and watch the candidates act like immature children to talk over each other (all are from 9pm-10:30pm EST):
  1. First presidential debate on 9/29 (moderated by Chris Wallace, anchor of “Fox News Sunday”): YouTube full, YouTube recap
  2. Vice presidential debate on 10/7 (moderated by Susan Page, USA Today’s Washington bureau chief): YouTube full, YouTube recap
  3. Second presidential debate on 10/15 (moderated by Steve Scully, political editor at C-SPAN, in a town-hall-style event with undecided voters in Florida) The debate was canceled, now we have two separate town halls with undecided voters on 10/15: Biden on ABC moderated by George Stephanopoulos in PA from 8-9:30pm EST (YouTube full, ABC recap of both), Trump on NBC moderated by Savannah Guthrie in FL from 8-9pm EST (YouTube full, NBC recap of both)
  4. Third presidential debate on 10/22 (moderated by Kristen Welker, NBC News White House correspondent and co-anchor of “Weekend Today”): YouTube full, YouTube recap
*If you can only tune into one fact-checking account while watching the debates, the folks at USA TODAY are fantastic.

Step 4: VOTE!!!


Add your plan to your calendar, and LET YOUR VOICE BE HEARD!

Step 5: Spread the Word


Fact check me, and then tell everyone you know to go through these steps. If there's anything else that you're curious about, or think might be useful to know when voting from anywhere in the nation, let me know.

Wednesday, August 26, 2020

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

This post is the second in a two part series, read the first part about how I chose my Master's program and my overall thoughts here!

Ten Courses to Graduate

Making it out of OMSCS alive requires completing 10 of their current courses with a grade of C or better. Of the 10, 5-6 courses must be within a certain specialization, and be completed with a grade of B or better. Lastly, your overall GPA must be 3.0 or higher to graduate. There are some finer technicalities, but those are the basics. There is no capstone project that you're working up to.

Courses are offered during three semesters over the course of the year - Fall and Spring (each 16 weeks) and Summer (an accelerated 12 weeks) - with a couple weeks break between semesters. If you are working full-time and taking one course at a time (usually recommended), that's three years and one semester. I doubled up with less-demanding courses this past Spring, so I did it in three years even. The current cost of one semester with one course is 540.00 tuition + 194.00 special institutional fee + 107.00 technology fee = $841.00.

There is no recommended order of courses that you're required to take. This might seem odd for prospective students expecting to continue through the program with one cohort of fellow students, and instead find your first course filled with students in their final course and vice versa. I actually find this to be a positive because you can define your own order based on your expertise, interest level, and goals. You will need to choose your first two courses from courses labeled "foundational," but afterwards all 31 computer science courses are open to you (a fraction of on-campus courses). Unfortunately, very few if any courses were added during my three years in the program, though a few courses from other disciplines are available (I wasn't interested and didn't explore this avenue).

So how do you choose? Well, you make a spreadsheet of course! Essentially I listed out all of the available courses along with my general interest levels (/5), and then used the student reviews on OMSCentral to pick out the community ratings (/5), workloads (in hours), and difficulties (/5). This is a very active site and I submitted my own reviews for the courses I took; I think the rating averages are more or less accurate, but the reported workloads are unfortunately on the lower side if you're newer to programming like myself (they may also be biased because workload is generally lower towards the end of the semester). I used my interest level averages to determine the optimal specialization for myself (Interactive Intelligence, as it turned out), and then noted which courses would fulfill which parts of the specialization requirements. Lastly, I included course-by-course pre-requisites or prior baseline knowledge, which I found on course pages and elsewhere. However, I found that success in a course was usually a factor of how deeply you absorb the learning material rather than how much supplemental learning material you seek out beforehand (with the possible exception of AI and ML).

Without further ado, here are the courses I took:
  1. CS 6300: Software Development Process (Fall 2017)
  2. CS 6400: Database Systems Concepts and Design (Spring 2018)
  3. CS 6035: Introduction to Information Security (Summer 2018)
  4. CS 6601: Artificial Intelligence (Fall 2018)
  5. CS 6440: Introduction to Health Informatics (Spring 2019)
  6. CS 6460: Educational Technology (Summer 2019)
  7. CS 7641: Machine Learning (Fall 2019)
  8. CS 6250: Computer Networks (Spring 2020)
  9. CS 7646: Machine Learning for Trading (Spring 2020)
  10. CS 6750: Human-Computer Interaction (Summer 2020)
*Bold courses are part of the Interactive Intelligence specialization

My top three favorite courses were Software Development Process, Human-Computer Interaction, and the concepts and group project in Introduction to Health Informatics. I think this had a lot to do with the professors, who were both organized in their schedules and clear in how the assignments would meet learning objectives. Plus the material was just downright cool.

My top three most challenging courses that helped me grow were Artificial Intelligence, Machine Learning, and Educational Technology. The effort frequently exceeded 30 hours in any given week (AI was above 60 at times), and required me to push myself further to find answers than I knew I had the ability to.

Would I Recommend?

I would recommend prospective students consider applying for OMSCS under these conditions:
  1. You can see a direct benefit of getting a master's degree in your career, without which you could not accomplish your goals; OR you enjoy scholastic challenges and the prospect of studying new things in school is exciting for you (no judgement)
  2. You can afford the cost of $841 (or more with additional classes) per semester, through financial aid, tuition reimbursement, family lending, or out of pocket
  3. You can afford the time, and can dedicate roughly 20 hours per week for three years (to earn a 3.0 GPA or better)
    1. Let me emphasize, this will include making sacrifices in terms of spending time with loved ones and doing activities you enjoy (reading books, playing video games, watching movies, etc.)

Not gonna lie, those were a looong three years at times. I did my best to stay positive, enjoy the learning process, and remind myself of why I got into this mess. I don't know if I would have seen it through to the end if it weren't for the support from my wife, the rest of my family, and my friends. My standard supply stash for going out during OMSCS semesters would always include my tablet and a pair of headphones, and perhaps even my laptop if I had a coding assignment to work on. At work, during lunch breaks I would set a 30 minute timebox and complete as much work as possible. Then I would come home from work, and instead of relaxing I'd gear up to spend the night studying. At parties and gatherings, I would lock myself away in another room, coming out for 10 minutes every half an hour and endure everyone's eye rolls when my timer went off. If I was lucky then all I needed to do was to review flashcards on my phone, which I would do while sitting in front of the TV, during conversation breaks at dinners, or in my free hand as I used the bathroom. Staying up late completing assignments would sometimes get so lonely that I'd play a movie on another screen just to feel like someone else was there with me.

No, the above is not a joke (I've forgotten what jokes and fun are 😅). And yes, it was depressing at times. You couldn't really escape the anxiety that work was hanging over your head, and forget about taking a day off - what a nightmare getting caught up! Maybe one of the worst parts was that I rarely got a true vacation from it all. During those couple weeks breaks between semesters I'd usually be focused on catching up on the honeydo list and house chores that I'd put off during the semester. Come to think of it, part of me feels like I had prepared for the first two years and against all odds pushed for that final year. Knowing what I know now, would I still have chosen to do the program? Absolutely, preferably heeding the pro tips below. But would I do something like this again? Hell no, been there done that.

Completing this OMSCS program requires some next-level dedication. I think it goes without saying that not everyone studies the same way that I do, and many people will pick things up quicker and enjoy the studious process at a deeper level. I also came to this program in a unique situation as you can see from my blog, learning CS for the first time and looking to develop a core educational competency, so I knew that I would need to work harder than most students to make up the difference in skillsets. But if you can say yes to my three conditions above and the reality check of my own experiences doesn't scare you off, I can promise you this: you will reap what you sow. All of that hard work, all of those sacrifices, and all of those combined learning moments will build you that competency diving board to spring from in your professional career. Could I have achieved the same learning result as quickly from self-study? Maybe, and that could have led to better preparation in certain areas. But I certainly would not have been exposed to as many areas outside my comfort zone with cleverly designed projects, providing a much more effective starting point for self-study.

Pro Tips

If you're going to be starting OMSCS soon, or if you are already a student, here are a few tips that I've picked up along the way that may be useful.
  1. Get started on assignments early. This is a cliche so let's get it out of the way. Even if the course learning materials will explain what you need to know in order to complete the assignments, before you start the learning materials go ahead and read through the assignment description. Get an idea of what you'll be working on so you know what part of the learning materials to prioritize your focus, then maybe create an outline of the requirements, and better yet get your coding classes and repos ready to begin work. Starting there will help you to allocate your time.
  2. Watch videos quickly. Always watch video lectures at 2x speed, whenever possible. You could work up to this by starting at 1.5x speed, but eventually anything less than 2x speed will seem agonizingly slooowww.
  3. Skim readings. The material can be dense and dry at times, but the good news is that you're hardly ever graded on the finer details and when you are it will be for open-book exams. For the most part you can skim the readings for the general idea, though I will admit this is an acquired skill. Read the abstract, the introduction, the conclusion, and then go back and skim relevant/interesting sections in the middle.
  4. Register for courses immediately. It can sometimes be a challenge to compete against the nearly 10,000 enrolled students to register for the courses you want (especially in your first couple semesters). Put your course registration times in your calendar and prepare to register within 3 seconds of that time slot. You can do this by looking up the CRN numbers for the courses you're interested in ahead of time, and then choose Add to Worksheet in Buzzport to paste them in at the allotted time. Have a backup course in case you get waitlisted, but it's still very possible it will open up by the first week.
  5. Make a checklist. One of the smartest things I did at the very beginning of each semester was to dissect the syllabus for all of the scheduled assignments and grade breakdowns. I would put the results into an ordered checklist spreadsheet (like this one for ML), so all I would need to do would be to complete one item at a time all the way down the list, and ipso facto the course work would be done!
  6. Create flashcards. This may seem excessive, but it's the absolute best way to study for exams and to remember what you want to from your courses. I've discussed SRS systems and learning methods at length in this blog already, so I'll leave the justifications there. I'm still reviewing cards today, and consider these one of the most important takeaways from my three years of learning in addition to the degree itself.
  7. Timebox. I've also written about timeboxing on this blog, but I'll mention that being able to work in my flow state for short periods of time, followed by recharging breaks, may be a "hidden" hack that kept me sane during these years. The pattern that ended up working best for me was 30 min. on / 10 min. off, and for difficult semesters I gave myself goal numbers of timebox sessions to hit for each day according to my unschedule in order to reach 20 hours each week.
  8. Schedule relax time. As absurd as it sounds, scheduling 15-20 minutes each night to unwind before bed could compliment your timeboxing to keep you sane. I didn't always keep this goal like I should have, but when possible I would do something like read or play video games that made multitasking impossible.
  9. Study ahead. Depending on the course, some portion of the material will be available from day one, so it may be beneficial to work ahead. If you really anticipate a time crunch during a given semester, you can attempt to watch all the videos on Udacity before the semester begins (and hope they haven't been updated anew).
  10. Always watch office hours. You never know what sort of details and hints they will drop about the assignments.
  11. Read instructions before reading the forum. A lot of people posting questions on the forum haven't read the instructions carefully enough, so give it a shot on your own first before you run into an actual problem.
  12. Choose project teammates early. If you are given the chance to create your own team for your project, post ASAP so you can form a team with other people who are on top of their game.
  13. Keep schedule expectations low. If my own life description were any indication, you'll want to clear your schedule to make as much time as possible. However, I will say this: don't neglect your own health or the people who support you.
Now go out there and meet your own dreams!

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!