Computer Science ePortfolio
I started my Computer Science journey at SNHU about a year and a half ago, and only had experience with projects I made in my free time, just for fun. Since then, I've learned various skills needed to succeed in the industry, ranging from communication with stakeholders and the Software Development Lifecycle, understanding both Agile and Waterfall methodologies, as well as new languages, learning Java and C. All this prepared me for the real world, where I will be working with a team to deliver high-quality software solutions and need an understanding of a variety of languages and frameworks to build effective solutions.
Additionally, in my time here, I've earned valuable skills in collaborating with a team environment, with projects we took on acting as different roles in a team, such as a developer, project manager, and quality assurance tester. In my courses, I also learned about data structures and algorithms, which are essential to all software programs. I learned databases, and took it a step further by participating in hackathons where I built full stack applications using databases to store user data, and use REST APIs to connect the front end and back end. I even earned awards in multiple hackathons building these solutions with my friend, showcasing teamwork and collaborative environments.
Continuing my computer science journey, I was ultimately able to demonstrate my skills through a mobile app I created at the start of the year. The app, called GyroCam, solves a problem I've faced for years-- every time I rotate my phone to switch perspectives while vlogging, parts of the footage would be sideways or upside down. This app taps into translation values on raw frame buffers to ensure the footage is always upright, utilizing gyroscope data. This is the culmination and demonstration of my skills I've obtained, and showcases my strengths in problem solving through mobile apps. This won the Apple Swift Student Challenge, got me invited to WWDC, and has grown my passion in the industry.
This ePortfolio not only demonstrates my technical proficiency but also reflects my commitment to continuous learning and professional development in computer science. Here, I showcase three enhancements I made throughout the CS499 capstone course at SNHU. Each one focusses on a separate category of computer science, and showcases my wide range of skills.
The following code review video gives an overview of the original artifacts I planned to enhance, the existing functionality, areas for improvement, and an outline for planned enhancements across all three of the categories.
The following artifacts showcase my proficiency in all the five course outcomes across three key categories of computer science. Each enhancement provides specific technical skills that align with course outcomes through improvements to functionality, professional design, efficiency, and security.
Software Design and Engineering
The initial artifact I selected for Software Design and Engineering was simply called “text based game”, which I named ”Spiral”. This was the final project of the IT140 class, which showed our culminated knowledge in using Python by creating a simple game where the user gives text inputs to move about a map that has no visuals, but is instead conveyed through text, telling the user which room they are on, ultimately leading to a boss battle after having collected items from every room. My game revolved around the brain, called Spiral, which lets the user collect items to fight the brain and negative emotions through positive ones.
This artifact is an excellent example to include in the ePortfolio mainly to showcase growth within the last year in how I’ve gotten better in what I can create. I chose this item because it was from the very first class I took at SNHU in my first semester here, and shows the state of what I could create then, juxtaposed with how I can enhance those ideas now. The main areas of this updated artifact that showcase my skills and abilities in software development are the updated UI that is clean and easy to navigate, the integration of images, sound, and user and input, and the overall delivery method, as it is now fully hosted online and easy to play. Those all came together to improve the artifact greatly.
While creating and improving the artifact, rewriting it in JavaScript, I found a few ways to make it better beyond the original idea. For example, I was able to integrate room names and move counters into the actual screen and make them dynamically change during the boss fight. I was able to remove some variables that weren’t needed anymore because of this, but then also needed to implement some new ones, especially maps with paths to the new image and sounds. One thing during the creation process that I realized was that instead of using two functions for playing the background music and boss fight music, I could write one function to handle both.
Algorithms and Data Structures
The second initial artifact was called “ProjectTwo”, and was at the tail end of the CS300 Data Structures and Algorithms class. This project focused on creating a C++ program that is able to take an input CSV file from a user, load it into an appropriate data structure handling all of the course data within, and then output that data back to the user in specific ways, such as listing all the prerequisites for one class, or printing a sorted class list.
This artifact is a great example to include in the ePortfolio, as it showcases the ability to understand user input, ensure input validation and handle edge cases from the file uploads, and solve a real world problem of course planning. I selected this item because it showcases my grasp of data structures that hold the user’s data, as well as algorithms to process them effectively. Specifically, the function that parses through the input file and loads all of the course data including the number, name, and prerequisites recursively showcases my skills and abilities in software development. This artifact was improved by rewriting it in JavaScript to give styling using Tailwind and an easy to use and view GUI. This also makes the file input process much easier and introduces a new export feature.
While creating this artifact, I learned quite a bit about CSV parsing. I was originally manually interpreting it as plain text and stripping the lines into parts by commas, until I found a helpful JavaScript library called “papaparse”, that handles a lot of this for you. I learned how to use it to quickly grab rows from a CSV file, and then grab elements from those rows separated by commas, and assign them to variables. It does this for every line, and is able to load them into the data structure that I had for courses. Some challenges I faced had to do with color and ease of understanding when using the GUI. The tree structure is what I ultimately settled on here. For coloring, I originally had a background but the text changed to white or black based on system theme. As a dark mode user, I had white text on a white background, so ended up removing the background and applied Tailwind styling to make everything still look and feel professional.
Databases
The initial artifact in this final enhancement was called “Travlr SPA”, a single page application created throughout the CS465 course, Full Stack Development I. The artifact I uploaded included the final submission at the end of the class with all the modules completed. It was created along with a flowchart detailing a full implementation of a travel site with a customer and admin portal. The customer could book trips from the databases, while the admins could add trips to the database. Customers could manage their existing bookings and earn points. None of these features, however, were fully completed in the class.
Because none of the features were fully implemented in the class, I thought this would be an excellent example of something I could improve by creating what the flowchart showed, with functionality behaving similarly. I selected this item so that I can both show my ability to implement these features but also implement them in an effective manner. I intend to rewrite this from a single page application to a multipage domain with routing, with a full server and client along with a SQLite database holding all the information. I will use a table for accounts and a table for trip data to store everything. I think this improves it by fleshing it out, and while ambitious, will showcase my skills in full stack development.
The process of enhancing and modifying the artifact started with a new Next.JS project. Like in previous weeks, I used Tailwind CSS to speed up my UI creation, and created a new page.js landing page. Things began to differ however, as next I worked with app routing to create subdomains for features such as register, login, and profile. As this is a massive project to undertake, I referenced some work from my previous personal projects, specifically code I wrote during a hackathon and then later repurposed into a full stack app I created last month for online Bingo. Then, I wrote a new home page that fetches and neatly displays all the trips. A new tripsService talks to the backend and handles all of the trip creation, deletion, and editing, and booking. All of the user account (signing in, authentication, registration) was pulled from a previous project I worked on. If you are logged in as an administrator, then you have a button to delete, edit, or add new trips. Customers (and admins for now, to make it easier) can book a trip, which currently adds the trips to their home page. The registration process allows users to choose if they are an admin. In a full implementation, this would not be allowed, and would instead be done on the server side, but it is made simpler for now for testing purposes to showcase the full ability of the full stack application. This was a giant rewrite but in the end I’m happy with how it turned out.
Through these enhancements, I have demonstrated achievement of the following course outcomes:
To start my enhancements, I analyzed existing codebases and identified areas for improvement. I created a code review video that acts as a collaborative step in the organizational decision-making process, outlining proposed enhancements and gathering feedback from peers and in this case my instructor.
Throughout the capstone, I produced technical write-ups and enhancement narratives which are linked as downloadable docx files next to each enhancement. Each piece was written with clarity and precision. These match various targeted audiences, in most cases being the instructor, but also being important in the field for peers and stakeholders. Communication on a proposed solution is crucial in the field to ensure alignment and understanding.
Through my second enhancement, focusing on algorithms and data structures, I optimized existing sorting algorithms to improve efficiency, and handled data from input files in data structures. These show my ability to design and evaluate computing solutions using algorithmic principles, while considering trade-offs in performance and complexity. For example, I made the switch from using C to JavaScript for better handling of CSV files and easier input gathering from the user, as well as the added web GUI for ease of use.
I used various well founded techniques and tools in my enhancements. For example, in my three enhancements, I utilized Next.JS built on React and Tailwind CSS to build a user-friendly web application as composed to the console based original versions for the first two enhancements. To build the third enhancement, which dealt with a full stack architecture, I utilized Node.js for the backend with a SQLite database, with REST APIs to tie the client and server together. These show my ability to implement computer solutions that deliver value and accomplish industry-specific goals.
Throughout my three enhancements, I implemented input validation, handled exceptions responsibly, and in my third enhancement I ensured sensitive operations were managed securely through the use of JWT tokens for authentication with REST APIs. These implementations reduced potential vulnerabilities, showcasing my understanding of enhanced privacy and security within software design.