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
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.
Algorithms and Data Structure: Artifact 2
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.
Business Flow
Databases: Artifact 3
Big Bucks Backend
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.
Business Flow
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"
}