proI Wanted To Learn Computer Science so I Created My Own Degree — Here’s My Curriculum

Written by spencercornelia | Published 2017/02/13
Tech Story Tags: programming | computer-science | software-development | learning | learning-to-code

TLDRvia the TL;DR App

Add me on LinkedIn

In April 2015, I began the Web Development Immersive Program at General Assembly and entered into the world of computer programming.

My analytical and skill acquisition infused brain was addicted to the idea of becoming a good software developer. I loved every minute of learning how to program computers while immersed in the program.

I received my degree from Georgia Southern University in Sport Management (minor in Business) in 2012, and I had zero interest and practical knowledge of computer science before joining General Assembly’s program.

I definitely struggled. Computer programming is very difficult, especially when you don’t have any previous knowledge of computer science or how the internet actually works and you’re given 12 weeks to build out full stack web development projects.

I was able to land a job as a Software QA Analyst in Las Vegas, NV after graduating and have been gradually learning about the software development process throughout my (now) 18 months of employment. And I love it.

Now that I realize the next best step in my career growth is gaining a better understanding of computer science fundamentals, practical experience building out applications, and taking a deeper dive into new programming languages, what better way than to begin the next phase of software development than going back to school!?!?!?!?

Wait…..I don’t want to go back to college.

College

Wait…maybe I do want to go back to school…

Thanks to David Venturi for his idea of creating his own Data Science Master’s degree program, I decided to create my own Computer Science Degree.

In order to create my own, I used resources from popular MOOC’s like Stanford, Cal Berkeley, MIT, and Princeton, along with Udacity’s great resources, Udemy’s very affordable classes, and even a coworker who graduated from MIT with a degree in Computer Science provided his input.

I also came across a developer who has a Github post with a great template for a Computer Science Degree from open source material. Lastly, Google’s Guide to Technical Development provided a helpful template to follow as well.

My goal was to create a degree aimed at helping me. (And if it benefits anyone else, all the better).

I decided that the degree will have four main areas in which I will draw classes from: Computer Science Foundations, Practical Application, Math, and Electives.

My goal is not spending the next 4 years sitting at my computer neglecting other areas of my life so the structure is slightly different than others may recommend. This program will assist me as I continue into my career in Software Development.

My main interest was improving my practical skills and knowledge today and slowly incorporating the foundational courses as I go along throughout the program.

Now, if you’d please begin referring to me as President and Chancellor. Here is the curriculum…

Term 1

Comptia a+

“CompTIA A+ 220–901 covers PC hardware and peripherals, mobile device hardware, computer memory, networking and troubleshooting hardware and network connectivity issues.”

“CompTIA A+ 220–902 covers installing and configuring operating systems including Windows, iOS, Android, Apple OS X and Linux. It also addresses security, the fundamentals of cloud computing and operational procedures.”

Reasoning: I had a late start learning to speak computer and this course helps build a background in computing and fill in the gaps of everything I don’t know, but should know, about computers.

Comptia Network+

“CompTIA Network+ is a vendor neutral networking certification that is trusted around the world. It validates the essential knowledge and skills needed to confidently design, configure, manage and troubleshoot any wired and wireless networks.”

Reasoning: Similar to the a+ course, I needed to fill in the educational gaps with learning how the internet and our computer systems work on a networking level. This course aids with working in a software development environment as I need to know more than just how to program.

Head First HTML5 Programming: Building Web Apps With JavaScript

“Head First HTML5 Programming is your ultimate tour guide to creating web applications with HTML5 and JavaScript, and we give you everything you need to know to build them, including: how to add interactivity to your pages, how to communicate with the world of Web services, and how to use the great new APIs being developed for HTML5.

Here are just some of the things you’ll learn in Head First HTML5 Programing:

  • Learn how to make your pages truly interactive by using the power of the DOM.
  • Learn how JavaScript APIs fit into the HTML5 ecosystem, and how to use any API in your web pages.
  • Use the Geolocation API to know where your users are.
  • Bring out your inner artist with Canvas, HTML5’s new 2D drawing surface.
  • Go beyond just plugging a video into your pages, and create custom video experiences.
  • Learn the secret to grabbing five megabytes of storage in every user’s browser.
  • Improve your page’s responsiveness and performance with Web workers.”

Reasoning: The Head First series is the most helpful programming resource I’ve ever come across. It holds your hand and walks you step-by-step in creating software applications really helping you learn along the way. This type of “class” helps with learning practical skills today.

Term 1

Term 2

Computation Structures (MIT)

“6.004 offers an introduction to the engineering of digital systems. Starting with MOS transistors, the course develops a series of building blocks — logic gates, combinational and sequential circuits, finite-state machines, computers and finally complete systems. Both hardware and software mechanisms are explored through a series of design examples.”

Reasoning: My coworker mentioned how Computation Structures will assist me with understanding computing on a very low level. He recommended I take this course after the Comptia a+ and Network+.

Head First Ajax (book)

“this book offers a big picture overview to introduce Ajax, and then explores the use of individual Ajax components — including the JavaScript event model, DOM, XML, JSON, and more — as it progresses. You’ll find plenty of sample applications that illustrate the concepts, along with exercises, quizzes, and other interactive features to help you retain what you’ve learned.

Head First Ajax covers:

  • The JavaScript event model
  • Making Ajax requests with XMLHTTPREQUEST objects
  • The asynchronous application model
  • The Document Object Model (DOM)
  • Manipulating the DOM in JavaScript
  • Controlling the browser with the Browser Object Model
  • XHTML Forms
  • POST Requests
  • XML Syntax and the XML DOM tree
  • XML Requests & Responses
  • JSON — an alternative to XML
  • Ajax architecture & patterns
  • The Prototype Library

The book also discusses the server-side implications of building Ajax applications, and uses a “black box” approach to server-side components.”

Reasoning: Practical application of a vital Front-End oriented technology.

Stanford Computer Science 106a (Java)

“This course focuses on the introduction to the engineering of computer applications emphasizing modern software engineering principles: object-oriented design, decomposition, encapsulation, abstraction, and testing. Programming Methodology teaches the widely-used Java programming language along with good software engineering principles. Emphasis is on good programming style and the built-in facilities of the Java language. The course is explicitly designed to appeal to humanists and social scientists as well as hard-core techies.”

Reasoning: Great class to begin the Computer Science Foundations part of the degree. Two 106a courses were offered: JavaScript and Java. I have practical experience working with JavaScript and none with Java so I decided to choose Java.

Term 2 classes

Term 3

CS61B Data Structures (Cal Berkeley)

“In computer science, a data structure is a particular way of organizing data in a computer so that it can be used efficiently.”

“Data structures provide a means to manage large amounts of data efficiently for uses such as large databases and internet indexing services. Usually, efficient data structures are key to designing efficient algorithms.”

One of the building blocks to a great Computer Science degree, learning about data structures will be crucial in becoming a software developer since almost all types of programming revolve around handling data.

Intro to Computer Science (Udacity)

“In this introduction to computer programming course, you’ll learn and practice key computer science concepts by building your own versions of popular web applications. You’ll learn Python, a powerful, easy-to-learn, and widely used programming language, and you’ll explore computer science basics, as you build your own search engine and social network.”

Reasoning: This course uses Python to develop projects. I don’t have any experience with Python and I’d love to learn. In addition, the ability to finish the course with multiple projects created is very alluring.

Term 3

Term 4

Algorithms, Part 1: Princeton (Coursera)

“This course covers the essential information that every serious programmer needs to know about algorithms and data structures, with emphasis on applications and scientific performance analysis of Java implementations. Part I covers elementary data structures, sorting, and searching algorithms.”

Algorithms, Part 2: Princeton (Coursera)

“Part II focuses on graph- and string-processing algorithms.”

How to Use Git and Github (Udacity)

“Effective use of version control is an important and useful skill for any developer working on long-lived (or even medium-lived) projects, especially if more than one developer is involved. This course, built with input from GitHub, will introduce the basics of using version control by focusing on a particular version control system called Git and a collaboration platform called GitHub.”

This term: Incorporates two impactful courses for handling interviews, improving the thought process of a software developer, and learning how to handle complex problems. In addition, I’ve added an elective course that is very practical for developers since version control will be implemented in (what I assume) all software development teams.

Term 4

Term 5

CS186 Introduction to Database Systems (Cal Berkeley)

“Introduction to Database Systems — Access methods and file systems to facilitate data access. Hierarchical, network, relational, and object-oriented data models. Query languages for models. Embedding query languages in programming languages. Database services including protection, integrity control, and alternative views of data. High-level interfaces including application generators, browsers, and report writers. Introduction to transaction processing. Database system implementation to be done as term project.”

Structure and Interpretation of Computer Programs (MIT)

“This course introduces students to the principles of computation. Upon completion of 6.001, students should be able to explain and apply the basic methods from programming languages to analyze computational systems, and to generate computational solutions to abstract problems. Substantial weekly programming assignments are an integral part of the course. This course is worth 4 Engineering Design Points.”

Mathematics for Computer Science (MIT)

“This is an introductory course in Discrete Mathematics oriented toward Computer Science and Engineering. The course divides roughly into thirds:

  1. Fundamental Concepts of Mathematics: Definitions, Proofs, Sets, Functions, Relations
  2. Discrete Structures: Modular Arithmetic, Graphs, State Machines, Counting
  3. Discrete Probability Theory”

Term 5: At this point I should have experience working with both the Front-End and Back-End, as well as a background in computer science, and can begin entering the database portion of the CS degree. The Structure and Interpretation class was highly recommended by my co-worker as one of the most important classes he took while at MIT.

Term 5

Term 6

Linear Algebra (Udemy)

“In this course, we will cover the core concepts such as:

  • Gaussian elimination
  • Vectors
  • Matrix Algebra
  • Determinants
  • Vector Spaces
  • Subspaces”

In addition, I will use this book as a resource.

Modern React with Redux

“We’ll start by mastering the fundamentals of React, including JSX, “props”, “state”, and eventing. Source code is provided for each lecture, so you will always stay up-to-date with the course pacing. After an introduction to React, we’ll dive right in to Redux, covering topics like reducers, actions, and the state tree.”

  • Learn how to use React’s custom markup language, JSX, to clean up your Javascript code
  • Master the process of breaking down a complex component into many smaller, interchangeable components
  • Grasp the difference between “props” and “state” and when to use each
  • Develop complex applications that scale in complexity by mastering Redux
  • Dive deeper into Redux by using middlewares. No fancy terms required!

Notes: Linear Algebra is a common course found in CS degrees. It’s been awhile since I’ve studied any type of math class and this will assist with any learning I need to do. One of my instructors from General Assembly recommended learning React with Redux.

Term 6 classes

Term 7

Computer System Engineering (MIT)

“This course covers topics on the engineering of computer software and hardware systems: techniques for controlling complexity; strong modularity using client-server design, virtual memory, and threads; networks; atomicity and coordination of parallel activities; recovery and reliability; privacy, security, and encryption; and impact of computer systems on society. Case studies of working systems and readings from the current literature provide comparisons and contrasts.”

Circuits and Electronics (MIT)

“The course introduces the fundamentals of the lumped circuit abstraction. Topics covered include: resistive elements and networks; independent and dependent sources; switches and MOS transistors; digital abstraction; amplifiers; energy storage elements; dynamics of first- and second-order networks; design in the time and frequency domains; and analog and digital circuits and applications.”

Notes: These appear to be the hardest courses included in this degree, and similar to degrees from Universities, they will come near the end. My goal is to hopefully be at least a web developer at this point so my attention will turn to improving the underlying knowledge base I operate from.

Head First jQuery (book)

“jQuery can help you build complex scripting functionality in just a few lines of code. With Head First jQuery, you’ll quickly get up to speed on this amazing JavaScript library by learning how to navigate HTML documents while handling events, effects, callbacks, and animations. By the time you’ve completed the book, you’ll be incorporating Ajax apps, working seamlessly with HTML and CSS, and handling data with PHP, MySQL and JSON.

If you want to learn — and understand — how to create interactive web pages, unobtrusive script, and cool animations that don’t kill your browser, this book is for you.

  • Use jQuery with DOM to overcome the limitations of HTML and CSS
  • Learn how jQuery selectors and actions work together
  • Write functions and wire them to interface elements
  • Use jQuery effects to create actions on the page
  • Make your pages come alive with animation
  • Build interactive web pages with jQuery and Ajax
  • Build forms in web applications”

Term 7

Term 8

Probabilistic System Analysis and Applied Probability (MIT)

“Welcome to 6.041/6.431, a subject on the modeling and analysis of random phenomena and processes, including the basics of statistical inference. Nowadays, there is broad consensus that the ability to think probabilistically is a fundamental component of scientific literacy.”

Intro to Data Science (Udacity)

“The Introduction to Data Science class will survey the foundational topics in data science, namely:

  • Data Manipulation
  • Data Analysis with Statistics and Machine Learning
  • Data Communication with Information Visualization
  • Data at Scale — Working with Big Data

The class will focus on breadth and present the topics briefly instead of focusing on a single topic in depth. This will give you the opportunity to sample and apply the basic techniques of data science.”

Notes: Bring on statistics and data baby! I’ve been involved with sports statistics for a long time and would love to turn it into side projects or a career. I included the Data Science course as an elective at the end for a little fun.

Term 8

Final Notes

**UPDATE**

October 2017 I enrolled at Hack Reactor’s Remote Part-Time program to further my learning even more.

March 2018 I began my first SaaS startup. You can see Part 1 by clicking here.

This degree was created to give myself a template to follow in order to continue learning within the Software Development field and ultimately live up to the potential I see in myself, whether that’s becoming a software developer or starting a company revolving around sports and big data.

My goal is to follow this guideline until I finish. I have no idea how long it will take, but I established the program with enjoyment as an input knowing I’ll need to be supremely interested in studying all courses in order to reach the end.

I don’t have a “Graduation Date” in mind. My goal in creating this degree was to increase my practical application in the beginning and help develop a solid base understanding of Computer Science as I dove deeper into the Software Development industry.

This will be the main post and I will do my best to update it as I continue along.

Please let me know your thoughts below and click “Follow” so you can stay up to date with my crazy and fun 30 Day Experiments.

If you’d to connect with me, add me on the following..

YouTube

LinkedIn


Published by HackerNoon on 2017/02/13