My CS Degree in a Nutshell

A retrospective at all the courses I took at UMBC for my Computer Science B.S.

This article was tagged with: College

There are 3308 words in this article, and it will probably take you less than 17 minutes to read it.

This article was published 2022-05-05 00:00:00 -0400, which makes this post and me old when I published it.


I did a Computer Science B.S. at UMBC. I did not do a track, so this is a very standard formula for a CS degree at most universities. Each school has a different balance of theory and application for classes, and some CS departments lean a bit more into Electrical Engineering to allow their students to a solid understanding of the inner workings of a computer.

Computer Science Core:

  • CMSC 201: Computer Science I for Majors
  • CMSC 202: Computer Science II for Majors
  • CMSC 203: Discrete Structures
  • CMSC 304: Social/Ethical Issues In IT
  • CMSC 313: Computer Organization & Assembly Language
  • CMSC 331: Principles of Programming Languages
  • CMSC 341: Data Structures
  • CMSC 411: Computer Architecture
  • CMSC 421: Principles of Operating Systems
  • CMSC 441: Design & Analysis of Algorithms
  • CMSC 447: Software Engineering I

Computer Science Electives:

  • CMSC 461: Database Management Systems
  • CMSC 471: Introduction to Artificial Intelligence

Technical Electives:

  • CMSC 462: Introduction to Data Science
  • CMSC 491: Special Topics in Computer Science: Data Privacy
  • CMSC 491: Special Topics in Computer Science: Social and Crowd Computing

Mathematics:

  • MATH 151: Calculus and Analytic Geometry I
  • MATH 152: Calculus and Analytic Geometry II
  • MATH 221: Introduction to Linear Algebra

Science Sequence:

  • BIOL 141: Foundations of Biology: Cells, Energy and Organisms
  • BIOL 142: Foundations of Biology: Ecology/Evolution

Science: Four Additional Credits

  • GES 286: Exploring the Environment: A Geo-Spatial Perspective

Statistics:

  • STAT 355: Introduction to Probability and Statistics for Scientists and Engineers

AP Exams

I got 4’s on both the AP Calculus AB and BC exams, which meant that I got credit for MATH 151 and 152. This was really helpful for me because math classes at college are so much more fast-paced which means a lot more homework, which would have definitely slowed my overall pace of taking classes because that would have taken a lot of my bandwidth.

I also got a 4 on the AP Computer A exam which meant that I got 4 credits of elective credit and the option to skip CMSC 201. I decided against skipping 201 because I wanted to take it easy my first semester and get acclimated to university Computer Science classes. I don’t regret this decision especially because I was able to befriend my TA of this course and also later become a TA for this course.

Fall 2018

CMSC 201: Computer Science I for Majors

This class focused on Python and basic Computer Science principles. It had three tests, weekly in-lab assignments, and three projects. Something that was always interesting to me was that we did one hour lab sessions where we had a small recitation of lecture content, and then we had the rest of the time we worked on a small assignment to implement a programming concept. Once we executed the program, the TA would come over and grade it and then we got to leave the lab session.

I got a 4 on the CS AP A Exam so I could have skipped this class, but I wanted an easy class to start off school with, and I also wanted to get accustomed to how college Computer Science classes were taught. I am glad I did this because there were things like our Linux-based code submission system that I would have not have learned about.

Main Topics:

  • Operators
  • Decision Structures
  • Algorithmic Thinking
  • While Loops
  • Lists
  • Strings
  • Functions
  • Program Design
  • Recursion
  • String Formatting
  • File I/O
  • Dictionaries

Spring 2019

CMSC 202: Computer Science II for Majors

This class was basically taking what we learned in 201 and relearning it in C++. This class was may more Object-Oriented than Python however. Learning C++ for the first time and learning how to handle memory was challenging but also something new for me, which was fun. This course had no homework and instead was mostly projects, exams, and the weekly lab assignments. 201, this class, and 203 were all part of the “CMSC Gateway” which meant that you had to clear all three of the classes in order to declare a CS major. This class was challenging for a lot of students and acted as weedout without meaning to. For a lot of students, either Computer Science meshed with their mind, or it didn’t.

Main Topics:

  • Makefiles
  • Basic C++
  • File I/O and Scope
  • Arrays and C-Strings
  • Pointers
  • References
  • Classes and Objects
  • Constructors and Vectors
  • Enums and Overloaded Operators
  • Dynamic Memory
  • Linked Lists
  • Inheritance
  • Polymorphism
  • Templates
  • Rule of Three
  • Containers and Iterators
  • Recursion
  • Friends
  • Exceptions
  • Namespaces

CMSC 203: Discrete Structures

This was probably the least favorite class of my entire undergraduate career. The content could have been interesting, but I did not like the professor, so nothing really made sense. Nothing about the class really stuck with me except for the fact that the final exam was 50% of our grade, which ultimately led to me getting a B in the course.

Main Topics:

  • Logic
  • Proofs
  • Proofs by Contradiction
  • Sets
  • Functions
  • Relations
  • Induction
  • Counting
  • Combinations
  • Permutations
  • Algorithms
  • Recurrence Relations
  • Boolean Algebra
  • Graphs
  • Well-Ordering Property

Fall 2019

BIOL 141: Foundations of Biology: Cells, Energy and Organisms

We had to take a “Science Sequence” as part of our CS degree, which means that you have to take two consecutive courses in either Biology, Chemistry, or Physics. Game Development Track CS students have to take Physics, but everyone else gets to choose. I chose Biology because it seemed the easiest out of the three, but also the most interesting. The only problem was that the courses we had to take were the introductory courses for majors, meaning I was taking Introduction to Biology for Biology Majors. Often in the course the professor would say, “You will learn more about this in Cell Biology or Genetics,” which of course was not true for me. This course definitely wasn’t easy, but the course content and expectations were very straightforward.

Book: Biological Science, 6th Edition by Freeman, Quillin, & Allison

Main Topics:

  • Chemical Basis of Life
  • Protein Structure and Function
  • Carbohydrates
  • Nucleic Acids
  • Lipids and Membranes
  • Cells and Cell Surfaces
  • Energy and Enzymes
  • Cellular Respiration and Photosynthesis
  • Cell Cycle and Meiosis
  • DNA and The Gene
    • Transcription
    • Translation
  • Signaling

CMSC 331: Principles Of Programming Languages

In some universities for this class they have to design their own programming language. I am glad that we did not have to do that. Instead, we learned how programming languages are designed, parsed, and executed. We also learned Racket (Functional Programming) and Prolog (Logical Programming) to learn about other programming paradigms than the Procedural and Object-Oriented approaches that we have learned in classes prior.

Book: Principles of Programming Languages by Donyaee

Main Topics:

  • Syntax (BNF, ENF)
  • Semantics
  • Lexical Parsing (Finite State Automata, Regular Expressions)
  • Top-Down and Bottom-Up Parsing
  • Parsing Tools (Lex and Yacc)
  • Functional Programming (Lambda Calculus and Scheme/Racket)
  • Object Oriented Programming (Inheritance and Polymorphism)
  • Concurrent Programming
  • Logical Programming (Prolog)
  • Programming Language Implementation Models
  • Programming Language Design and Evaluation Criteria
  • Evolution of Programming Languages

CMSC 341: Data Structures

This class was known as the “final weedout” class. This was the point of no return for many people, if they could pass this class, then they would try to keep on being a Computer Science major, but if this was too hard, then they most likely wouldn’t be able to survive further classes like Algorithms or Operating Systems.

Book: Data Structures and Algorithms in C++, 2nd Edition by Goodrich, Tamassia, and Mount

Main Topics:

  • Arrays and Lists
  • Machines and Memory
  • Asymptotic Analysis (Big-Oh)
  • Range Minimum Queries
  • Traversal of Binary Trees
  • Ordered Maps and Binary Search Trees
  • AVL Trees
  • Balanced Trees (Red-Black Trees, Balanced Multi-Way Trees)
  • Skip Lists
  • Heaps (Heaps, Skew Heaps, Treaps)
  • Amortized Analysis
  • Hash Tables
  • Graphs, DFS, and BFS
  • Djikstra and A*

Spring 2020

BIOL 142: Foundations of Biology: Ecology/Evolution

This course was my favorite of the two biology courses and actually sparked my interest in Evolution as a whole, which lead me to take a Philosophy & Evolution course. This class happened during the sudden transition to online learning following being sent home because of COVID-19. This meant that exams were now open-note, which definitely saved my grade. This course was really cool because it was co-taught by two professors, one who was an Evolutionary Biologist and one was an Evolutionary Ecologist.

Book: Biological Science, 6th Edition by Freeman, Quillin, & Allison

Main Topics:

  • Evidence for Evolution
  • Mechanisms of Evolution (Natural Selection, Sexual Selection, Kin Selection)
  • Mechanisms of Speciation (Geographic Speciation, Reproductive Isolation)
  • Phylogeny
  • Origin and History of Life
  • Human Evolution
  • Primate Evolution
  • Mammalian Evolution
  • Tetrapod, Vertebrate, Invertebrate, and Animal Evolution
  • Tree of Life
  • Mendelian Genetics
  • Hardy-Weinberg
  • Population Distribution
  • Life History Traits
  • Ecosystems
  • Community Ecology

CMSC 304: Social/Ethical Issues In IT

I am glad that the Computer Science major requires an Ethics course, and all Engineering majors at UMBC have to take some kind of Engineering Ethics course. A lot of CS majors did not like this course because it was basically the only CS course that required a lot of writing because this was the Writing Intensive designated course for our Gen Ed requirement.

Book: Ethics and Technology: Controversies, Questions, and Strategies for Ethical Computing, 5th Edition by Tavani

Main Topics:

  • Introduction to Cyberethics
  • Ethical Concepts and Main Theories
  • Critical Reasoning Skills and How to Evaluate Disputes
  • Professional Ethics & Conflicts of Professional Responsibility
  • Issues of Artificial Intelligence
  • Societal Effects of Automation
  • Sexism and Racism in Video Games and Video Games Industry
  • Cybersecurity and Cyberterrorism
  • Diversity in Technology
  • Hacktivism
  • Privacy and Surveillance
  • Intellectual Property, Copyright, and Open Source
  • Free Speech and Social Media
  • Anonymity, Cyberbullying, and Stalking

CMSC 313: Computer Organization & Assembly Language

This class was basically baby Computer Architecture. In this class we used something called Xilinks and our projects throughout the semester were to build a basic Processor on this program by designing circuits. I learned a lot during this class and because of the sheer amount of Truth Tables that we did in this class, I got very good at them, which actually helped later in some job interviews as well as my Deductive Logic class for Philosophy.

Book: Essentials of Computer Organization and Architecture 4th Edition by Null and Lobur

Main Topics:

  • Number Systems (Binary, Hex, Two’s Complement, Conversions)
  • Digital Logic
  • Arithmetic Circuits
  • Boolean Algebra (Truth Tables)
  • Size Optimization
  • Sequential Logic
  • Intel x86_64 Assembly
  • System Calls
  • Branching and Conditionals
  • Stacks and Subroutines
  • Introduction to C and Calling Assembly from C
  • Interrupts

Fall 2020

CMSC 411 Computer Architecture

I took this class with the same professor as a I took 313 with, so I feel like the first quarter of the class was review, then we went further in-depth as well as learning some new content. The final project for this class was to design an algorithm that scoreboarded multi-cycle instructions which was very hard, but I actually had a lot of fun doing it, even if my program didn’t fully work correctly.

Book: Computer Architecture: A Quantitative Approach 5th Edition by Hennessy and Patterson

Main Topics:

  • Number Systems and Digital Logic
  • Arithmetic Circuits
  • Performance and Benchmarking
  • ISA and Memory Addressing
  • Pipelining and Hazards
  • Branch Predictions and Exceptions
  • Multi-Cycle Instructions/Operations
  • Loop Unrolling
  • Scoreboarding
  • Memory Hierarchy and Caching
  • I/O and Disk
  • Buses
  • Multi-Processor Systems

GES 286: Exploring the Environment: A Geo-Spatial Perspective

This course was a lab course that was four credits to finish off my science requirement for my degree. I chose this course because it was somewhat technical since we had to use software to create maps and other visualizations. Since it was over COVID we had to do labs at home and then use a Remote Desktop to use ArcGIS which was a nightmare, but I got used to it eventually.

Main Topics:

  • What is Science?
  • Map Design (Visualization, Color, Text, Layout Composition)
  • GIS and GPS
  • Topographic Maps & Map Reading
  • Remote Sensing
  • Map Coordinates, Scales, and Projections
  • Statistics and Sampling
  • How to Use ArcGIS

STAT 355: Introduction to Probability and Statistics for Scientists and Engineers

This was also one of my least favorite classes of undergrad. I just did not like the content at all. The content wasn’t too hard, but we had a lot of homework in the course that was due every week. We had quizzes every week as well, and the class was all online which did not help with the stress.

Book: Probability and Statistics for Engineering and the Sciences 9th Edition by Devore

Main Topics:

  • Populations, Samples, and Variables
  • Measures of Variability
  • Sample Spaces and Events
  • Conditional Probability
    • Independence
  • Random Variables
  • Probability Distributions (PMF, PDF, CDF)
    • Binomial Distribution
    • Normal Distribution
    • Joint Distributions
    • Conditional Distributions
  • Expected Values
    • Co-Variance
    • Correlation
  • Confidence Intervals
  • Hypothesis Testings and Errors
    • P-Value

Spring 2021

CMSC 447: Software Engineering I

You had to take this course as part of the core, and this is the only course in the degree that specifically mentions Software Engineering. This course was mostly a semester-long project to simulate building a project. We had project requirements and used Jira to try to emulate an Agile development environment. I already knew JavaScript and Agile from internships and self-study before, so I didn’t learn as much during this class. This semester was all online because of COVID-19 so sometimes it was hard to get a reach on my other classmates for the group project, which was a visualization of COVID-19 cases in the counties and prisons in California.

Main Topics:

  • Software Engineering Methodologies (Waterfall, XP, Scrum, Agile)
  • JavaScript
  • Software Architecture
  • UML
  • User-Centered Design
  • Database Design (ER Diagram)
  • Application Security
  • Verification and Validation

CMSC 471: Introduction to Artificial Intelligence

This course was more theory than programming artificial intelligence which I enjoyed, but I know other students didn’t like. A lot of students struggled with the Logic portion of the class, but luckily I had taken a Deductive Logic course as a part of my Philosophy degree, so I was in good shape for the class. This course spent almost all of the back half of the class on Machine Learning that I felt like I had gotten a good enough introduction that I didn’t need to take the Machine Learning class at UMBC.

Book: Artificial Intelligence: A Modern Approach 4th Edition by Norvig and Russell

Main Topics:

  • Intelligent Agents
  • Uninformed and Informed Search (Heuristics, Local Search)
  • Constraint Satisfaction
  • Adversarial Search (Games)
  • Planning Approaches
  • Knowledge Representation and Knowledge-Based Agents
  • Bayes
  • Logic (First-Order, Predicate, Propositional)
  • Machine Learning (SVM, Decision Trees, Bagging, Clustering, Topic Modeling)
  • Neural Networks

MATH 221: Introduction to Linear Algebra

This course was required for the degree because the foundation of most machine learning is Linear Algebra. This course was definitely challenging, but I learned a lot. I credit that mostly because I had a great professor, there was only one good professor for the course, I had heard many horror stories from other students.

Book: Linear Algebra and Its Applications 5th Edition by Lay and McDonald

Main Topics:

  • Systems of Linear Equations
  • Row Reduction and Echelon Forms
  • Vector and Matrix Equations
  • Linear Independence
    • Null Spaces
    • Column Spaces
    • Sets and Bases
  • Linear Transformations
  • Matrix Operations
  • Inverse Matrices
  • Vector Spaces and Subspaces
    • Dimension and Rank
  • Determinants
  • Eigenvectors and Eigenvalues
  • Diagonalization
  • Inner Product, Length, & Orthogonality
    • Orthogonal Sets
    • Orthogonal Projections

Fall 2021

CMSC 441: Design & Analysis of Algorithms

This class was by far the hardest Computer Science course I took and overall the most challenging course I took for undergrad. This was mostly because my professor had a strong Mathematics background, so we focused a lot on proofs and mathematical properties of these algorithms.

Book: Introduction to Algorithms, 3rd Edition by Cormen, Leiserson, Rivest, and Stein

Main Topics:

  • Discrete Math
  • Asymptotic Analysis
  • Divide and Conquer
  • Sorting (Heapsort, Quicksort, Linear-Time, Merge Sort)
  • Dynamic Programming
  • Greedy Algorithms
  • Polynomial Time, Reductions, and NP-Completeness

CMSC 461: Database Management Systems

I took this course for my Technical Elective because out of all of them it seemed the most practical, it wasn’t super interesting, but I knew I would be interacting with databases at whatever job I would be doing. This course was a mix of theory and application because lecture was a lot of Database Theory and then our homeworks were mostly SQL queries, and we also had one large project for the later half of the class about implementing a database based on Customer Requirements.

Book: Database System Concepts. 6th Edition by Silberschatz, Korth, and Sudarshan

Main Topics:

  • Entity–Relationship Model
  • Relational Model
  • SQL
  • Normalization
  • Design Methodology
  • Storage and File Structures
  • Indexing and Hashing
  • Query Processing
  • Transactions
  • Security
  • Concurrency Control and Recovery (ACID)
  • NoSQL

CMSC 462: Introduction to Data Science

In a lot of my prior internships Data Science was lauded to be a hot subfield of Computer Science, so I wanted to have one of my electives be in Data Science because I was also considering in declaring a track in Data Science. This class was very hands-on, so it was one of my favorite classes to do homework for because of that very reason.

Main Topics:

  • Pandas
  • List Comprehensions and Lambda Functions
  • SQL and NoSQL (MongoDB)
  • Decision Trees
  • Regressions
  • Feature Engineering
  • Dimensionality Reduction (PCA)
  • Clustering (K-means, Agglomerative, BIRCH, HBDSCAN)
  • Entropy and Information Science
  • Spark and Big Data

Spring 2022

CMSC 421: Principles Of Operating Systems

This course was lauded as one of the hardest upper level Computer Science courses, and I frankly think that it was overhyped. It was certainly a challenging course because of the low-level programming and some unclear project specifications, but the tests in the class were very straightforward. We learned a lot about Linux and the kernel and for our projects had to make some modifications to a kernel and compile it ourselves.

Book: Operating System Concepts, 10th Edition by Silberschatz, Galvin, and Gagne

Main Topics:

  • System Calls
  • Processes and Threads
  • Virtual Memory
  • Main Memory
  • Random Numbers
  • Files
  • Process Synchronization
  • Storage
  • Networking (TCP, UDP)
  • OS Protection
  • Boot and Secure Boot
  • Virtual Machines

CMSC 491: Special Topics in Computer Science: Data Privacy

This was a course that was being offered for the first time in the department and I took it because it sounded interesting out of all the electives I could take, but also because there were no exams in the course, instead some homework and a semester-long group project. My group worked on a project on applying privacy enhancing technologies to a library environment through Differential Privacy and Role-Based Access Control.

Main Topics:

  • History of Data Privacy and Data Privacy Regulations (GDPR)
  • Privacy by Design
  • Privacy Enhancing Technologies
  • Usable Privacy and Informed Consent
  • Access Control
  • k-Anonymity
  • Differential Privacy
  • Secure Multi-Party Computation
  • Federated Learning
  • IoT Privacy

CMSC 491: Special Topics in Computer Science: Social and Crowd Computing

This course was a lot of reading papers, but I liked the papers that the professor selected, they were all pretty accessible and provided interesting developments in the field. This course was half reading papers and discussing them and the other half was a semester-long group project. My group analyzed AllTrails data to see if people took more walks during COVID-19.

Main Topics:

  • Social Ties and Social Capital
  • Identity, Anonymity, and Deception
  • Misinformation and Conspiracy
  • Invisible Algorithm & Algorithmic Audit
  • Polarization and Selective Exposure
  • Crowd Computing
  • Health and Social Media
  • Crowdfunding
  • Privacy
  • Predictions and Forecasting
  • Social Bias
  • Ethics of Algorithms
  • Online Communities
    • Norms and Values
    • Moderation

Other College Articles

Do I Use My Degrees?

A reflection on whether or not my fields of study were "useful" and if I regret them.

Pick Two and A Side

A framework for planning extracurricular involvement in order to achieve balance in your college life.

College Goal Setting

A holistic framework for setting goals for the various aspects of your life during college.

My Philosophy Degree in a Nutshell

A retrospective at all the courses I took at UMBC for my Philosophy B.A.

My Advice for Incoming College Students

A collection of my advice for incoming college students that I wrote and compiled right before I graduated.


Comments