Computer Science

I am in the midst of earning my Bachelor of Science in Computer Science from the prestigious University of Colorado, having embarked on this transformative journey in May of 2023. Anticipated to culminate in May of 2024, my academic endeavor at CU Boulder is not just a pursuit of a degree but a voyage into the depths of computing, where theory meets practice. Throughout this intensive program, I have been immersed in a rich curriculum designed to not only impart fundamental and advanced knowledge of computer science but also to mold me into a proficient problem solver, innovative thinker, and an adept computer scientist. This period of rigorous study and hands-on experience has equipped me with an array of valuable skills, laying a solid foundation for my future in the tech industry and beyond.

In pursuit of my B.S in Computer Science from CU Boulder, I have taken a myriad of Computer Science oriented courses that have made me a well round Computer Scientist. Below is a list of courses that I have completed so far.

  • Intro To Computing – A foundational course designed to introduce students to the fundamental concepts of computer science, including programming, algorithms, data structures, and the theoretical underpinnings of computing, providing a solid base for further study in the field.
  • Data Structures – A comprehensive course that delves into the organization, management, and storage of data in computer science, covering essential structures like arrays, linked lists, stacks, queues, trees, and graphs, and their applications in efficient algorithm design.
  • Linear Algebra With Computer Science Applications – An interdisciplinary course that explores the concepts of vectors, matrices, determinants, eigenvalues, and eigenvectors, emphasizing their practical applications in computer science, including graphics, systems of linear equations, and machine learning algorithms.
  • Discrete Structures – A fundamental course focusing on the study of discrete mathematical concepts crucial for computer science, including logic, set theory, combinatorics, graph theory, and discrete probability, providing the mathematical foundation necessary for algorithm analysis and computer theory.
  • Cognitive Science – An interdisciplinary course that explores the complexities of the human mind and its processes, integrating insights from psychology, artificial intelligence, neuroscience, linguistics, philosophy, and anthropology to understand perception, reasoning, language, and learning.
  • Computer Systems – A detailed course that covers the architecture and operation of computer hardware and systems software, offering insights into how computer systems execute programs, store information, and communicate, laying the groundwork for understanding system-level programming and performance optimization.
  • Algorithms – An advanced course that delves into the design, analysis, and implementation of algorithms, teaching students to develop efficient solutions to complex computational problems, with a focus on algorithmic strategies, complexity analysis, and real-world applications.
  • Data Science With An Introduction Into Probability And Statistics – A comprehensive course that integrates fundamental concepts of probability and statistics with practical data science techniques, equipping students with the skills to analyze, interpret, and make predictions from data using computational methods and statistical models.

The work that I have completed for this degree can be found at my CU repository in my GitHub.

Projects

In my pursuit of my Computer Science degree, I have completed numerous projects both as part of class work, personal, and professional projects. Below are my proudest projects that I have completed in so far in my Computer Science career.

Dynamics Of Celestial Bodies

The Three-Body Problem in physics refers to the challenge of predicting the motion of three celestial bodies moving under the influence of their mutual gravitational attraction. This problem is significant in the study of dynamics and celestial mechanics. It’s a classic example of a complex system that’s surprisingly difficult to solve.

To understand the Three-Body Problem, let’s first consider the simpler Two-Body Problem. If you have two celestial bodies, like Earth and the Moon, the problem of predicting their motion around their common center of mass is relatively straightforward and can be solved with precise equations (like Kepler’s laws of planetary motion).

However, things get much more complicated when you add a third body, like the Sun. The gravitational forces between each pair of objects interact in such a complex way that there’s no general solution that works for all sets of initial conditions. This is what makes the Three-Body Problem so challenging.

Solutions to the Three-Body Problem:

  1. Numerical Methods: For most practical purposes, scientists use numerical methods to approximate solutions. These involve using computers to simulate the system and calculate the positions of the bodies at successive time intervals. The accuracy of the results depends on the time intervals used and the computational power available.
  2. Restricted Three-Body Problem: This is a simplified version where one of the bodies is assumed to have a negligible mass compared to the other two. This allows for some analytical solutions and is useful for understanding scenarios like a satellite orbiting a planet that orbits the Sun.
  3. Special Cases and Approximations: There are a few specific scenarios where solutions have been found. For example, the Lagrange points are positions in space where a small body, under certain conditions, can be in a stable orbit relative to two larger bodies (like a satellite relative to Earth and the Sun).
  4. Chaos Theory: The Three-Body Problem is also an example of a chaotic system. Small changes in the initial conditions can lead to vastly different outcomes, making long-term prediction practically impossible. This aspect of the problem has contributed to the development of chaos theory.

In summary, the Three-Body Problem in physics is a complex problem without a general solution. It’s typically approached with numerical simulations, special case scenarios, and plays a crucial role in the study of dynamical systems and chaos theory.

The code that was created to make this project can be found at the Dynamics Of Celestial Bodies repository of my GitHub.

EZ Blackjack

EZ Blackjack is an application that I developed that teaches users how to play Blackjack at a high level. This application was built originally in Python but adapted to C++. This application offers users to learn how to play Blackjack with great (legal) strategy and how to count cards as well (legal, but frowned upon).

Along with the teaching aspect that is present in the application, users can also simulate playing Blackjack under perfect strategy conditions to get an idea of what they can expect when playing with perfect strategy.

This application in its current state is only available as a console application (future plans include adding a GUI to it) but is available for both Unix and Microsoft platforms.

Below is a snippet of what this application looks like when one is playing the game and not simulating.

Now, we can see the power of the simulation that is built into this program.

At the end of the simulation, a user is asked if they would like to keep the CSV file that was created to create the plot. You can download the CSV from this specific simulation below.

Now, to see this application in its full glory, a simulation that was done can be seen below.

The plot and the CSV that were generated from this simulation can be downloaded below.

The source code for this project can be found at the EZ Blackjack repository of my GitHub.

Formulator Pro

Formulator Pro (FP for short) is a desktop application that is designed to formulate products for companies off of proprietary recipes. Each Formulator Pro is different in its own way and may formulate products differently or different products in general.

Formulator Pro – Mesa Lavender Farms Edition is a version of Formulator Pro that is designed to formulate products for Mesa Lavender Farms. Mesa Lavender Farms’ version particularly formulates CBD products that belong to Mesa Lavender Farms. Other products are formulated as well that do not contain CBD.

Formulator Pro – Mesa Lavender Farms Edition is coded in HTML, CSS, and JavaScript and is built with ElectronJS. This is done so that multiple versions of the same application do not need to be coded and can be built with the same source code.

Formulator Pro is designed as a template program that can be adapted for other companies / persons specific use. Because the edition belongs to Mesa Lavender Farms, I cannot give anyone public access to this code. However, if you would like to look at the boiler plat code for this application, it can be found at the Formulator Pro repository of my GitHub.

The Formulator Record Sheet that was produced in the demonstration above can be downloaded below.

RSA

RSA, named after its inventors Ron Rivest, Adi Shamir, and Leonard Adleman, is a type of public-key cryptography, which is a method for securing data. It’s especially important in computer science for secure data transmission.

Imagine you have a box with a special lock that has two keys: a public key, which everyone can see and use to lock the box, and a private key, which only you have and can use to unlock the box. RSA works similarly.

In RSA:

  1. Public Key: This is like the lock everyone can see. It’s used to encrypt (or lock) the data. Since it’s public, anyone can use this key to encrypt a message.
  2. Private Key: This is like the key only you have. It’s used to decrypt (or unlock) the data. Since it’s private, only the person with this key can read the message.

Here’s how RSA is typically used:

  • When someone wants to send you a secure message, they encrypt it using your public key.
  • Once a message is encrypted with this public key, it can only be decrypted with the corresponding private key, which only you have.
  • When you receive the message, you use your private key to decrypt it and read it.

RSA is based on the mathematical difficulty of factoring the product of two large prime numbers. The security of RSA comes from the fact that while it’s relatively easy to multiply two large primes together, it’s extremely hard to do the reverse: to take a large number and figure out which two primes were multiplied to get it.

In summary, RSA is a way of sending encrypted messages that only the intended recipient can read, using a pair of keys, one public and one private, based on the mathematical principles of prime numbers. It’s a foundational technology in secure communications over the internet.

The source code for this project can be found at the RSA of my GitHub.