Ahoy nakama! I'm Greg, Software Engineer and Computer Science graduate student. Mmm, I like the sound of those titles. I haven't always been A MAN OF SCIENCE. In fact, if we had met last year I would have introduced myself as "Greg, Case Manager for homeless individuals. Math? Technology? No ma'am/sir, 'fraid I ain't done none o' that since oh, high school over a decade ago." I suppose one can make a lot happen in 365 days, or in my case... 456. What can I say, I'm a slow learner. :(
On Sunday, May 29th, 2016 at the ripe old age of 28, I began learning Computer Science (aka programming, aka coding, aka modern wizardry). Since that time I've posted 13 blogs to document my plans to begin the challenge and my subsequent milestones along the wa-- huh, what's that? TOO MUCH READING?! Wow, you're almost as lazy as I am. You're the perfect candidate to change your life as well! Fine, I'll give you the cliff-notes version (believe it or not, the actual posts are longer) and you can thank me when you're stinkin' rich... with knowledge! :D But also money. Just promise to click through if you see something you like.
tl;dr
A note before going forward: I'm not saying that those in the mental health field should consider a career change, or that becoming a professional computer scientist will be the solution for everyone. BUT. In an era where technology is perpetually changing the game, be prepared to learn new things lest you watch your position or even your industry become obsolete. Do you need to be a genius to take control during this change and grow to proficiency in a new domain such as tech? BWAHAHAHAHAHA, no. Don't believe any computer scientist who puffs out their chest and tells you that you can't do what they do. It's just another human profession that we malleable humans can be trained for. Build up that confidence and...
Step 1: Declare the Dream!
I had reached a level of frustration with my life trajectory that necessitated questioning not whether I could or couldn't make it work, but "will I be able to live life WITH my family [JASMIN] to the fullest? And is it possible to support my family [JASMIN] while I'm on this difficult path before I even reach financial stability?" In that moment, I turned to an existing interest in technology that I could fuel with excitement for the challenge and develop into an impassioned skill, one that would increase my marketability now and open up business opportunities for the future. And thus, my Dream was born! It wasn't sufficient to just commit internally (though it was necessary) - I declared the Dream to the universe so people around me would hold me accountable. For good measure I blogged, tweeted, and insta'd, all of which were redirected to my fb feed. That's not to say I felt obligated to justify myself to everyone; proving through action is infinitely more rewarding than wasting time winning an argument (unless of course your Dream is to become a world-class argument winner). Once your brain fully embraces your Dream as an eventual reality, you must...
Step 2: Illustrate the Dream!
The hard part was complete. With the world as my witness, I had committed to my decision. But what the hell does "learning Computer Science" mean anyway? Where was the starting line, and how could I expect to run towards the finish line if I didn't even know where it was? I set my Dream Birthline and gave myself two weeks to research a clear, measurable plan - the What, When, Where, Who, and How to supplement the Why. Let us review my n00b situation:
- I have no professional background in tech (education or employment) and I currently work in the mental health field.
- I work full-time (70 hours every 2 weeks, with every other Friday off) and intend to continue moonlighting while getting my degree.
- I will hopefully get assistance paying for school to avoid racking up student loans, be that through scholarships, financial aid, tuition reimbursement, or family lending.
After long discussions with family and friends who were deep in the tech trenches and had accomplished similar Dreams, I started from premise #1 - "Most well-prepared and well-paid computer scientists have a related degree." I already had a Bachelor's (of the Arts variety in Philosophy and Psychology), so I didn't want another undergraduate degree, perhaps for reasons not entirely void of ambition. Therefore I came up with Goal 1: I will prepare for a Master's program in Computer Science. Note that the goal wasn't to "be accepted into" because that, my friends, is a passive action upon me rather than an activity that is within my control. To catch up with prospective applicants who already have experience and education, I needed to build up a technical background from scratch ASAP. Enter premise #2 - "Entry-level jobs are going to be quicker and much, much easier to obtain through IT than through coding, especially with just certifications." I found that CompTIA was the place to start with certs to get your foot in the door with IT, and that graduate programs emphasized fulfilling pre-requisites that earned credits rather than passing proficiency exams (more on these later). Fantastic, so the sub-goals had pretty much written themselves - Sub-Goal 1: I will work in IT (experience); Sub-Goal 2: I will prepare for applying to graduate school I will take pre-requisite courses while learning programming on the side (education).
They said my ideas were crazy. They said I'd never pull it off. It didn't bother me; I'd learn so much more from experimenting, failing, and proving through action than by getting worked up over hypotheticals. I leveraged what I already knew about myself and getting things done with time management techniques to outline exactly when, where, and with what advantageous identity I would be sitting down to make progress on my sub-goals. I created an Unschedule to consolidate my free time into 20 hours of Timeboxing the project each week, and came up with a Goal Calendar to work backwards and calculate monthly, weekly, daily, and RIGHT NOW aims to stay on track. Don't forget to reward yourself along the way to reinforce these productive habits. No matter the outcome, I always had a backup plan - if I didn't like IT or coding, I could continue my mental health job; if I didn't pass my certs, I could have delayed my coding classes and continued studying; if I didn't pass my coding classes or gotten into grad school, I could have expanded on my certs and switched to cyber security. But for the odds to be ever in my favor, right from the outset I wouldadopt the eye of the Tiger identify as a gifted programmer and behave as if I were already enjoying the thrill of success. Essentially, I became a new person: Tech Greg. 8-)
The last piece of the puzzle was breaking down HOW I would learn Computer Science material. Sure, I've tackled Japanese, health, and Psychology in the past, but learning a "hard" scientific discipline must be different. Or must it? I analyzed past techniques in deliberate practice, fun, an SRS, mnemonics, learning-based note-taking, the 80-20 rule, and the Feynman method, and combined them into three basic steps (see post for more): Step 1: Understand (simplify), Step 2: Apply (projects), Step 3: Memorize (SRS/Anki). The point wasn't to follow the method to a T, but to go into the arena with a strategy in writing so I could test it and move on if it didn't work. SCIENCE, BITCH! Some individuals attribute a failed attempt to their character and not being "cut out for it," but in reality - your method just sucks, bro.
They said my ideas were crazy. They said I'd never pull it off. It didn't bother me; I'd learn so much more from experimenting, failing, and proving through action than by getting worked up over hypotheticals. I leveraged what I already knew about myself and getting things done with time management techniques to outline exactly when, where, and with what advantageous identity I would be sitting down to make progress on my sub-goals. I created an Unschedule to consolidate my free time into 20 hours of Timeboxing the project each week, and came up with a Goal Calendar to work backwards and calculate monthly, weekly, daily, and RIGHT NOW aims to stay on track. Don't forget to reward yourself along the way to reinforce these productive habits. No matter the outcome, I always had a backup plan - if I didn't like IT or coding, I could continue my mental health job; if I didn't pass my certs, I could have delayed my coding classes and continued studying; if I didn't pass my coding classes or gotten into grad school, I could have expanded on my certs and switched to cyber security. But for the odds to be ever in my favor, right from the outset I would
The last piece of the puzzle was breaking down HOW I would learn Computer Science material. Sure, I've tackled Japanese, health, and Psychology in the past, but learning a "hard" scientific discipline must be different. Or must it? I analyzed past techniques in deliberate practice, fun, an SRS, mnemonics, learning-based note-taking, the 80-20 rule, and the Feynman method, and combined them into three basic steps (see post for more): Step 1: Understand (simplify), Step 2: Apply (projects), Step 3: Memorize (SRS/Anki). The point wasn't to follow the method to a T, but to go into the arena with a strategy in writing so I could test it and move on if it didn't work. SCIENCE, BITCH! Some individuals attribute a failed attempt to their character and not being "cut out for it," but in reality - your method just sucks, bro.
Using the plans above, I came up with an initial schedule:
- Earn IT certifications.
- CompTIA A+ Training Birthline: Sunday, May 29, 2016
- CompTIA A+ Training Deadline: Monday, July 4, 2016
- CompTIA A+ 220-901 Certification Exam: Saturday, July 9, 2016
- CompTIA A+ 220-902 Certification Exam: Saturday, July 16, 2016
- CompTIA Security+ Training Birthline: Sunday, July 17, 2016
- CompTIA Security+ Training Deadline: Monday, August 15, 2016
- CompTIA Security+ SYO-401 Certification Exam: Saturday, August 20, 2016
- Find an entry-level IT job (ideally with exposure to programming).
- Job Search Birthline: Sunday, August 21, 2016
- Job Search Deadline: Monday, September 19, 2016
Study programming while working and preparing for grad school.Take pre-requisite courses online or at a community college while learning programming on the side.- Pre-req Birthline: Fall 2016???
- Pre-req Deadline: Summer 2017???
- Shift to a programming job.
- TBD
- Apply to grad school.
- Fall 2017???
- By graduation, I'll have both education and experience.
- Spring 2019???
- Bam.
- 2020???
And here is the current schedule:
Earn IT certifications.CompTIA A+ Training Birthline: Sunday, May 29, 2016CompTIA A+ Training Deadline: Thursday, July 21, 2016CompTIA A+ 220-901 Certification Exam: Friday, July 22, 2016CompTIA A+ 220-902 Certification Exam: Friday, July 22, 2016CompTIA Security+ Training Birthline: Monday, July 25, 2016CompTIA Security+ Training Deadline: Sunday, August 14, 2016CompTIA Security+ SYO-401 Certification Exam: Monday, August 15, 2016Find an entry-level IT job (ideally with exposure to programming).Job Search Birthline: Monday, August 22, 2016Job Search Deadline: Monday, January 09, 2017Take pre-requisite courses online while learning programming on the side.Pre-req Birthline: Monday, August 22, 2016Pre-req Deadline: Sunday, May 07, 2017Apply to grad school.Application Birthline: Sunday, February 12, 2017Application Deadline: Sunday, March 12, 2017Increase professional programming experience.Job Search Birthline: Tuesday, July 11, 2017Job Search Deadline: Monday, August 28, 2017- Get Master's degree.
Program Birthline: Monday, August 21, 2017- Program Deadline: Spring 2020
- Profit.
- 2020
Step 3: Experience Tech! ("Sub-Goal 1: I will work in IT")
It's ass kicking time. Even if your eventual goal is coding (as mine was), can you think of a quicker way than IT to get out of a low-paying growth-deprived job and into the tech world to network with like-minded nerds? With a few minutes of Googling, CompTIA distinguishes itself with globally recognized and accredited IT certifications for entry-level job seekers: CompTIA A+, CompTIA Network+, and CompTIA Security+. Though A+ is the premier starting cert, I decided to set myself apart from the competition by obtaining a second, and Security+ not only fit neatly into my cyber security backup plan, it was frequently posted alongside A+ in local job listings. How do you obtain these certs? THAT'S THE SPIRIT! As of 2016, A+ required passing two exams: 220-901 and 220-902 ($199.00 each - $39.80 coupon code = $358.20), and Security+ required one: SYO-401 ($311.00 - $31.10 coupon code = $279.90). I scheduled my exams on their parent site Person VUE (typically Mon.-Fri. at local community colleges, etc.), and stuck with the deadlines. To prepare, I took the recommendation of a friend and used TestOut, which offers training (A+, Security+) at a $79/month subscription that includes videos, practice questions, and interactive labs all from your web browser. By tracking with 30 min. Timeboxing sessions, I completed the training in 124.75 hours and 954 SRS flashcards over a 2 and a half month period, which was enough to earn me passing scores on all three exams on the first try. CompTIA recognizes my A+ and Security+ certs as equivalent to two years of hands-on experience and effectively qualified me for entry-level IT positions. I've since added an additional cert to my belt for a triple-threat: ITIL.
Though building up competency was 2 and a half months on its own, it took me an additional 4 and a half months to land that entry-level IT position. For some inane reason, I had convinced myself that while working full-time, schooling full-time, fulfilling obligations as a husband, and being an adult, I'd also find the time to look for a new job... and study a little coding on the side, of course! As it turns out, getting a job is about WHAT you know, but people only care depending on WHO you know. On Monday, January 9th, 2017 I was hired as a Help Desk Support Services Specialist by a family friend, which places me in a government datacenter keeping an eye on servers and responding to client incidents. After taking much longer than expected, I had traded $875.10 in certification fees for a 50% increase in salary, that I'm proud to say could be covered entirely in a single month based on the salary increase alone. If you find yourself in a similar situation looking for work, here's a run-down of what I learned (see post for more): Step 1: Knowing your shit, Step 2: Getting your ducks in a row, Step 3: Making connections (MOST IMPORTANT), Step 4: Sending out applications, Step 5: Contacting companies, Step 6: Getting the interview, Step 7: Following-up.
Step 4: Learn Programming! ("Sub-Goal 2: I will take pre-requisite courses while learning programming on the side")
At last, I'm a tech professional getting into the CS field, rather than a complete n00b without work experience in computers to show off on my resume. Given that I wanted to apply for a Master of Computer Science (MCS) program, I researched 6 schools in my area or online that provided the strongest MCS or related programs and asked questions focused on preparation (see post). I put together a useful spreadsheet to get a clearer look at the pre-requisite courses, comparing MCS requirements on the left to equivalent courses at local colleges on the right. This data was enough to conclude that I would have the best shot at targeting 3 MCS programs by taking 8 undergraduate courses at the online University of Maryland University College (UMUC) over the Fall 2016 and Spring 2017 semesters. I was confident that I could get graduate programs to mitomeru my skills!
I enrolled in UMUC and took their accelerated 8-week semesters according to the following schedule, so as to nail down that scientific and mathematical mindset and to learn core concepts that underpin Computer Science as a discipline:
2016 Fall Online Session 1 (8/22-10/16)
- MATH 140: Calculus I (4 credits)
- Pre-reqs: MATH 108 or MATH 115
- aka Pre Calc (passed AP exam in high school)
- CMIS 310: Computer Systems and Architecture (3)
- Pre-req
s:CMIS 115, CMIS 125, orCMIS 141 - aka Java proficiency
2016 Fall Online Session 4 (10/24-12/18)
- MATH 240: Introduction to Linear Algebra (4)
- Pre-req: MATH 140
- CMSC 150: Introduction to Discrete Structures (3)
- Pre-req: MATH 140
2017 Spring Online Session 1 (01/09-03/05)
- MATH 141: Calculus II (4)
- Pre-req: MATH 140
- CMSC 350: Data Structures and Analysis (3)
- Pre-reqs: CMSC 150 and CMIS 242
- aka Java proficiency
2017 Spring Online Session 4 (03/13-05/07)
- CMSC 330: Advanced Programming Languages (3)
- Pre-req: CMSC 230 or CMSC 350
- CMSC 451: Design and Analysis of Computer Algorithms (3)
- Pre-reqs: CMSC 150 and CMSC 350 (or 230)
After 8 courses over 32 weeks, my overall impression of these undergrad pre-requisites could be summed up as, "online courses for the motivated self-learner, but lacking quality control in teaching and student interaction." The turn-key structure was such that all sections of a given course, regardless of semester or instructor, were prepared with the exact same syllabus. This would be fine, except that it felt like you had a substitute professor for the entire semester who was either hands-on and extremely helpful to students, or hands-off and raised more questions on the material than they answered. My regrets were two-fold: 1. Keep schedule expectations low. 2. Properly prepare for courses. For the latter, I'm honestly not sure I could have fit more time into my schedule (see the former), so if anything I should have started even earlier and either just taken those two Java courses or read Head First Java (it's gud). I guess I can't stress too much. In the end, I did Ace all 8 courses and got into graduate school.
Step 5: Pull the Trigger! ("Goal 1: I will prepare for a Master's program in Computer Science")
Just 287 days following the start of my experiment, on Sunday, March 12th, 2017 I applied to MCS programs at Towson University, Johns Hopkins University (JHU), and Georgia Institute of Technology (GT). At last, the first major goal for the Dream I had declared and fought for had come to pass, a goal that intended to even the playing field between myself and other prospective applications who already had experience and education in Computer Science! In the post above, I laid it all on the line by sharing the exact statement of purpose that I wrote for GT.
Somehow this entire crazy plan actually worked: I was accepted into all three programs. They really loved me! :D I found myself in a position inconceivable one year ago of having to choose which school to accept. As Towson was more of a safety school, the choice was down to JHU with their highly-recognized (and highly-priced) institution that offers a large variety of in-person and online courses, and GT with their unbeatable tuition cost of ~$7,000 total and the latest in online course technology. This was not an easy decision, but in the end I chose to attend Georgia Tech's Online Master of Science in Computer Science (OMSCS) program for their affordable price tag and #9 ranking in the U.S.
Step 6: To Exponential Growth and Beyond!
Since my last post, I not only began my first OMSCS course (Software Development Process, #amazeballs) but I started working as a Software Engineer with a buddy of mine (as promised, 456 days after I set forth on my journey). It's just part-time for now on top of my full-time IT job, and has already started paying dividends by offering the opportunity to learn a second programming language, Python. I may be bringing in twice as much income for my family [JASMIN] now than before I started my IT job earlier this year, but the important point is I'm having fun learning an infinite collection of new things. Oh, and between you and me, they're also reimbursing my affordable tuition. ;)
And that's all there is to it! Easy, right? Honestly it hasn't always been, but it's the plan that fit me and my circumstances best at the time. Some friends have been very successful with bootcamps or the traditional B.S. (Bachelor of Science, what did you think I meant?!). Even though I'm nowhere near the level of High Wizard yet (more Goals to come soon!), I've seen enough to know that if you're considering setting forth on a new Dream you should be ready to carve your own path. As Bruce Lee once said, "Adapt what is useful, reject what is useless, and add what is specifically your own."
No comments:
Post a Comment