GitHub

Agnieszka Sikora

ePortfolio

Introduction

The courses I took in the Computer Science program at SNHU provided me with a solid foundation in various computer science concepts and skills. I have demonstrated proficiency in programming languages, algorithms, data structures, and software development by working on different projects and assignments. Each completed course has contributed to my knowledge base and allowed me to apply theoretical concepts to practical problems, highlighting my ability to solve complex issues.

Completing my coursework in the computer science program has been instrumental in shaping my professional goals and values, especially in my journey toward becoming a data analyst. Through courses focused on data structures, statistical analysis, database management, and machine learning, I have gained a profound understanding of collecting, analyzing, and interpreting data to extract meaningful insights. This knowledge has sharpened my technical skills and clarified my passion for using data to address real-world challenges.

My exposure to data-centric projects during the program has fostered a strong analytical mindset. These projects often required identifying patterns, uncovering trends, and presenting data-driven recommendations, which solidified my interest in pursuing a career in data analysis. They have also instilled in me the values of precision, critical thinking, and ethical responsibility—key qualities for a data analyst to ensure that insights are accurate and responsibly applied.

Database Experience

My coursework also provided extensive exposure to database technologies, including both SQL and NoSQL systems. Through hands-on projects, I gained experience in designing, implementing, and managing relational databases and working with non-relational databases suited for unstructured data. This dual expertise enabled me to understand when to leverage structured query languages for scenarios requiring consistency and reliability, and when to use NoSQL solutions for scalability and flexibility. These skills have been pivotal in strengthening my ability to handle diverse datasets effectively, ensuring that data is stored, retrieved, and analyzed efficiently to support decision-making processes.

Additionally, collaborating on group assignments has underscored the significance of teamwork and effective communication in professional growth. As a data analyst, I understand that interpreting complex datasets and presenting findings clearly and impactfully is essential for influencing decisions. These experiences have shaped my goal to excel technically and serve as a bridge between raw data and actionable strategies, ensuring that my work leads to meaningful outcomes.

Adaptability & Lifelong Learning

This preparation has also instilled in me the confidence to navigate the ever-evolving landscape of the computer science field. The program's rigorous curriculum and diverse coursework have ensured that I am well-versed in foundational principles and adaptable to emerging technologies and trends. For instance, exposure to advanced topics such as artificial intelligence, cybersecurity, and cloud computing has broadened my technical repertoire, positioning me as a versatile candidate ready to tackle multifaceted challenges.

Alongside technical skills, the program has fostered essential soft skills such as critical thinking, adaptability, and effective communication. These competencies are crucial in computer science, where collaboration among multidisciplinary teams and the ability to articulate complex ideas are often vital to driving innovation. By participating in projects replicating real-world scenarios, I have gained valuable experience balancing technical execution with strategic planning, ensuring that solutions are functional and aligned with broader organizational goals.

Ultimately, this thorough preparation has instilled in me a mindset of lifelong learning, which is a cornerstone of success in a field defined by rapid technological advances. Whether attending conferences, earning certifications, or exploring personal projects, I am dedicated to staying at the forefront of innovation to ensure my skills remain relevant and impactful.

Data Structures, Algorithms and Software Engineering

My coursework in the computer science program played a pivotal role in developing my skills in data structures, algorithms, and software engineering. I mastered fundamental and advanced data structures through courses emphasizing problem-solving and computational efficiency, including arrays, linked lists, trees, graphs, and hash tables. Additionally, I explored algorithmic techniques such as recursion, dynamic programming, and sorting and searching algorithms. This strong foundation enabled me to tackle complex programming problems with analytical rigor, designing optimized and scalable solutions.

In addition to theoretical learning, practical assignments and projects required the application of these principles, providing a hands-on understanding of how data structures and algorithms affect real-world software performance. For instance, optimizing sorting techniques for large datasets refined my ability to evaluate trade-offs between time and space complexity, an essential skill in software development.

Furthermore, the program's focus on software engineering equipped me with a structured approach to designing, developing, testing, and maintaining software systems. I gained proficiency in key practices such as requirement analysis, system design using UML diagrams, and test-driven development. Projects allowed me to engage with the entire software development lifecycle, enhancing my skills in modular coding, version control with Git, and debugging. Exposure to Agile and Scrum methodologies further instilled a collaborative mindset, emphasizing iterative development and feedback integration.

ePortfolio

This ePortfolio serves as a comprehensive showcase of my work and achievements. The selected artifacts highlight my strengths by providing tangible evidence of my skills, demonstrating my ability to apply knowledge to real-world challenges, and emphasizing my growth and development as a computer science professional.

Furthermore, the ePortfolio has been a vital tool in bridging the gap between academic accomplishments and professional aspirations. Presenting a curated selection of my projects provides clear evidence of my ability to deliver results. Each entry in the portfolio tells a story of problem-solving, creativity, and perseverance, reinforcing my readiness to contribute meaningfully to the computer science field.

Code Review

Enhancement One: Software Design and Engineering

Enhancement One

The artifact I chose for category one enhancement was created during CS330: Computational Graphics and Visualization Class. The project's goal was to recreate a 2D scene in 3D. My scene recreation is based on the gardens at Hampton Court Palace.

I chose this artifact because it allows me to demonstrate my skills in the C++ language and OpenGL. It shows my understanding of the algorithms fundamental to graphical operations. Since I would like to work as a data analyst, demonstrating that I feel comfortable creating and manipulating graphics can give me an advantage when looking for a job. During the course, we were provided with a basic code, so the component that I contributed the most to was the SceneManager.cpp. It shows my understanding of creating the basic shapes, light sources, and applying textures.

The first improvement was to change the texture of the cone bushes. Previously, they blended with the grass, but now, with the better texture choice, they are distinct in the image. I also changed the texture of the grass, which now looks more like real grass. Another improvement was adding background color, which makes the picture more realistic than when the background color was black. I also improved the lighting of the scene. I reduced the point lights from 3 to 2. The previous point lights made the scene slightly uncomfortable, and the light was too bright. The warm glow and subtle backlight make the objects more transparent, and the scene looks better overall. I also fixed the texture deletion by replacing glGenTextures with glDeleteTextures to free textures. In CreateGLTexture, I added a check for texture array overflow. I replaced NULL pointers with nullptr since it improves type safety and code clarity. The code's integrity is ensured by correctly checking m_loadedTextures >= 16 before writing to m_texture IDs, preventing buffer overflows. Another example of code integrity is in the destructor, where I set m_basicMeshes and m_pShaderManager to nullptr after using them.

Even though I did not have significant problems when creating the code during my original class, the enhancement part was challenging. The major problem I faced was making the code work. The image would initially load, but the code had difficulties locating the correct library paths. Once I started updating the paths, the last update would usually cause the code to stop running. Finally, it worked when I started debugging the issues in small increments. I ensured the compiler’s include paths were correctly configured to point to the OpenGL header files' directories. I added the parent directory to the include path in my compiler settings. I also ensured that the linker can find the OpenGL library files. It involved setting the “Additional Library Directories” in my project settings to the path where these library files reside.

Enhancement Two: Algorithms and Data Structure

Enhancement Two

The second artifact I chose for the enhancement was created during the CS 340: Advanced Programming Concepts course. The project aimed to develop a software application to identify and categorize available dogs for search-and-rescue missions from existing data.

I believe that being able to create interactive dashboards to manipulate data, gain insight, and customize visualizations is an essential skill for a data analyst, a career I want to pursue. Implementing algorithms for efficiently sorting and filtering the dataset based on user input showcases my understanding of algorithms. My interactive dashboard loads and updates data efficiently to ensure a smooth user experience, showcasing my understanding of optimized data retrieval to ensure responsiveness. By leveraging Dash’s callback functions, I demonstrated the ability to design efficient algorithms that handle the interactions and update the display in real-time.

The project was successfully moved from Apporto and Linux Shell to the local computer. I improved the dashboard by changing the radio buttons to a drop-down list, making it more visually pleasing. To reduce clutter, I made three columns: “datetime”, “monthyear”, and “outcome_subtype” invisible during display while retaining them in the underlying data structure. I also added a toggle function, which allows users to focus on the essential information, enhancing user experience and simplifying navigation—the checklist dcc.Checklist lets users select which columns to show. The callback for hidden_columns computes which columns to hide by comparing all columns to the selected one and always hiding those in ALWAYS_HIDDEN. The app is interactive thanks to using callbacks. Each callback updates part of the UI in response to user actions, for example, update_dashboard updates the data table based on the selected rescue type filter. I added try/except blocks to improve defensive programming to catch and display errors in update_dashboard.

During the enhancement, I learned that checking the code in small increments is essential to pinpoint errors or issues. Testing the entire code only after it’s created makes it almost impossible to figure out what is wrong if it doesn't work. The main problem I encountered when updating the artifact was that the map was not updating. However, the issue was fixed after ensuring that the callback used the correct column names.

Enhancement Three: Databases

Enhancement Three

For the third enhancement, I continued working on the same artifact I selected for the second enhancement. I decided to work on this artifact because dashboards can provide a holistic view of data. Since I plan on working as a data analyst, I believe that knowledge of dashboards will benefit me. Through this artifact, I showcased my strong foundation in Python programming and my ability to structure the dashboard’s components using Dash’s layout system. I also showed my ability to implement interactivity through callbacks and integration with the database. The improvements I made in this artifact included the implementation of register and login functionality and adding “register” and “login” buttons. Access to the data is restricted for users who didn’t register; only logged-in users can view and interact with the animal dashboard. Data is accessed and manipulated via the CRUD operations. All user and animal data are managed via MongoDB through the Animal Shelter class. Potential vulnerabilities are addressed, for example, through input validation, which checks that the username and password are not empty. Passwords are hashed using SHA-256 with a static salt. Unique usernames are forced with a MongoDB unique index. Error handling catches exceptions and returns error messages. The enhancements were manually tested: duplicate usernames were not allowed, and login attempts only succeeded with correct credentials.

As I improved the artifact, I learned how to connect to the MongoDB database. The artifact was originally created in Apporto, and Linux Shell was used to connect to the database. While I didn’t have significant issues moving the artifact to work on my computer, I did run into problems when trying to connect to the database. It took me a lot of trial and error to figure out how to make it work. I needed a connection string obtained from MongoDB, which was then used with a MongoDB client to establish a connection.

Course Outcomes

Employ strategies for building collaborative environments that enable diverse audiences to support organizational decision-making in computer science. I achieved this outcome by including comments that explain the purpose behind a particular piece of code, helping developers understand the intent and decision-making process involved. The comments are also clear and easy to read. Additionally, I recognize how the code review enhances code quality, identifies errors early, and ensures adherence to coding standards. It’s a crucial step in the development process, contributing to more robust and maintainable software.

Design, develop, and deliver professional-quality oral, written, and visual communications that are coherent, technically sound, and appropriately adapted to specific audiences and contexts. I achieved this outcome by creating narratives for each artifact. Each narrative explained why the artifact was selected and my thought process regarding improvements.

Design and evaluate computing solutions that solve a given problem using algorithmic principles and computer science practices and standards appropriate to its solution while managing the trade-offs involved in design choices. I achieved this outcome by detailing each coding challenge, such as library path issues or database connections, and demonstrating my problem-solving skills. I also showcased my programming skills in Python and utilized Dash to create an interactive dashboard where all data is manipulated through CRUD methods that interact directly with MongoDB. Each method includes validation for required input and manages errors appropriately.

Demonstrate an ability to use well-founded and innovative techniques, skills, and tools in computing practices for the purpose of implementing computer solutions that deliver value and accomplish industry-specific goals. I achieved this outcome by creating an industry-standard software design. The second artifact separates data access from presentation and logic. The UI is functional and follows Dash best practices. The code in both artifacts is robust and efficient. For example, in the first artifact, textures are deleted in DestroyGLTextures(), and BindGLTextures binds all loaded textures simultaneously to improve efficiency. The second artifact checks for missing or invalid data before displaying graphs or maps.

Develop a security mindset that anticipates adversarial exploits in software architecture and designs to expose potential vulnerabilities, mitigate design flaws, and ensure privacy and enhanced security of data and resources. I achieved this outcome by addressing potential vulnerabilities, such as loading MongoDB credentials from environment variables rather than hardcoding them in the main app in the second artifact. An example from the first artifact is the destructor ~Scene Manager, which deletes the ShapeMeshes object to prevent memory leaks.