Professional Assessment

My time in the CS program at SNHU has opened my eyes to aspects of software development that I am both interested and not interested in pursuing. I quickly ruled out video game development after CS-330 Comp Graphic and Visualization, as I found I do not enjoy C languages and got the most enjoyment out of web-based projects, mainly due to the satisfaction of seeing the visual results of your efforts early and often. My work in CS-360 Mobile Architecture and Programming was enjoyable as well, where I designed an Android application using Java and SQLite. These experiences coupled with my work on personal and side projects made me realize that I wanted to pursue a full-stack development career path.

One foundational concept introduced early in this program was decision structures and loops, such as if-else statements, for-loops, conditional expressions, and equality comparators. Another concept hit on early and often was data types, in particular Arrays and Objects. These are the most used concepts and variables in the languages that I use today, and the knowledge of their correlating methods for use are also key pieces of fundamental development skills. Debugging is another example of a very valuable skill that has been developed during my time in this programming, and yet another that I use quite often in troubleshooting unexpected behavior both in front and backend programs. The topic of version control and familiarizing with both GitHub and Bitbucket through developing solutions in a team environment is something I’m glad to have been exposed to, as these are both extremely popular in the industry, and knowing how to work with branches, pull requests, and conflict resolution is essential in an engineering role. These concepts were enforced by creating multiple forks of a main branch, altering each, and then merging them to work through the process of determining the changes to keep to ensure no updates were lost.

Security was an emphasis in numerous classes, and there were many activities that focused on user input, such as writing tests to detect SQL injection, where I analyzed potential attempts and wrote regex statements to test against them. I also wrote string-handling functions to limit the number of characters in an argument, effectively guarding against buffer overflow. Other topics covered were Defense in Depth, memory allocation, and system user accounts being created with the least amount of privilege needed to perform their necessary tasks.

I’ve stayed on the full-stack path, focusing mainly on React and Spring lately, but have also worked with Mongo and Express, and plan to keep building on and improving these skills. I excel at bringing UI designers visions to life through code, so I’d like to keep up on my front-end development skills. I also enjoy the problem-solving aspect of backend development, for example structuring schemas and determining the most efficient method of data transfer to achieve functionality, so I’d prefer to stay sharp on that skill set as well. The artifacts presented in this portfolio are a representation of that, as I have chosen both front end and backend technologies to illustrate my skills in UI design, implementation, and database creation. Revisiting past projects and enhancing them was insightful into just how far I have progressed from a technical aspect, and also served as a boost in confidence in terms of feeling ready to communicate with stakeholders and be assured that I possess the skills to build solutions that fit the requirements.

Software Design and Engineering: Artifact 1

Uncle Big Bucks

bucks

The artifact I’ve chosen for the software design/engineering enhancement is my final project form the IT-270 website design course. I began the development of this project in July 2021 and submitted it in late August. It’s a static website built to promote and advertise a small business owned by a fictitious family member, in my case an uncle. Originally, I chose “Uncle Big Bucks” as somewhat of a joke, but then quickly realized I could apply it to a hunting lodge and went with it. I’ve never hunted in my life, and at one point had a picture of an elk next to the deer season calendar until a co-worker saw it and said “Umm. That’s not a deer.”. This lack of personal experience did not hinder my development work, however I have since updated the image.
This being a static site coupled with my experience with React and Bootstrap felt like a great opportunity to showcase my ability to convert a page built with HTML/CSS into a web application use a framework and styling library. This project utilizes functional components and I began with creating a navbar and footer. Instead of having blocks of code duplicated on each page to render these elements, they can be built once in their respective component files and rendered once by App.js. The pages, Home, Seasons, Lodging, and Contact are individual components and React-Router is used to link and render them accordingly. The base styling is achieved with Bootstrap 5, applying basic classes, such as margin, padding, and container, and custom styling is done in index.css along within component specific CSS files when only those components were impacted.

Original Repo

After Enhancement

Algorithms and Data Structure: Artifact 2

Threadboard

threadboard

This artifact is the front-end for an internal communication software. It allows users to create threads, post to threads, and send internal messages. If the user is the owner of threads and posts it allows for delete and edit functionality as well. It is built with React, Redux, and Bootstrap5. I created this project to showcase my understanding of these technologies in June 2022.
While this artifact meets all standard requirements for internal communications from a user perspective, for example multiple user accounts can be created and logged in and out of, creation of messages, threads, and posts, and the ability to edit and delete only if you are the owner, the state management left room for improvement. All data for this application is handled in the Redux reducer, which is great for consistency, but not so much in the aspect of optimal performance. The handling of user input for logging in and creating an account in the reducer causes the state to update on every keystroke, thus causing the page to re-render on every keystroke. This behavior becomes less desirable as the amount of data grows and can be avoided with the proper use of state and implementation of a React hook called useRef, which will be the goal of the enhancement.
Two files in this project have been refactored to take advantage of the useRef hook: Login.js and MessageInput.js. In the original version the input elements would call a function that would dispatch an action the redux reducer updating their values in state on every keystroke. The refactored versions have ref variables declared, defined, and implemented for each input element to utilize the useRef hook, preventing state from updating, and dispatching actions to the reducer on submission with the final values of the ref vars as values.

Original Repo

After Enhancement

Business Flow

threadboardFlow

Databases: Artifact 3

Big Bucks Backend

springBoot

This artifact is a Java SpringBoot application that I created on November 11th of 2022. It was created to process and persist data for a React web application that I am enhancing and including as another artifact in my portfolio. Most businesses have a need for data and databases in their day-to-day operations, and project will serve as a booking service for a hunting lodge.
I chose to include this artifact as building a backend from scratch is a great way to demonstrate a working knowledge of databases and data processing. The objective of this project was to provide the business client with a means to create an account, make a reservation for a stay at the lodge, update a reservation, and delete reservations and accounts. In meeting all the tasks in this objective, I started by initiating a spring application and connecting it to a PostgreSQL database via pgAdmin4. This database will allow for all data to be persisted. The next step I took was to create a java class to serve as the blueprint for client objects with an @Entity annotation to tell spring it is mapped to a table. This included fields for an email, startDate, endDate, and id, with id serving as the primary key. After that I created the ClientRepository interface that extends the JpaRepository with a @Repositry annotation to tell spring that this is how to interact with the database. Next, I created the ClientService to handle the business logic of the application and implement the methods that the ClientRepository makes available, which essentially are all the basic CRUD operations. Finally, I created the ClientController class with the endpoints to handle the different api calls and direct them to the appropriate methods in the ClientService. I used a PUT mapping for the reservations endpoint, so it can be used to create, update, or delete reservations all in one function. The add endpoint is a POST mapping that only requires an email to make an account, but can take reservation arguments as well. The reservations endpoint is a GET mapping that requires the id as a request param. The previously mentioned endpoints require information the request body.

Artifact Repository

Business Flow

bucksFlow

Sample Requests/Responses

POST client

http://localhost:8080/client/add
request body:

{"email":"demo@demo.com"}

reponse: Status: 200 ok

PUT reservation

http://localhost:8080/client/reserve
request body:

{
	"email":"demo@demo.com",
	"id":9,
	"startDate":"2023-11-12",
	"endDate":"2023-11-15"
}

GET reservations

http://localhost:8080/client/reservations?id=9

{
	"id": 9,
	"email": "demo@demo.com",
	"startDate": "2023-11-12",
	"endDate": "2023-11-15"
}

Code Review

codeReviewOne
Artifact reviews pt.1


codeReviewOne
Artifact reviews pt.2