Rachel Olivia Alden
Senior Computer Science student at Kutztown University, driven by an insatiable curiosity and desire to understand the world around me. My journey to discovering my love for computer science was anything but straightforward. I knew I couldn't settle for a career I didn't enjoy, so I took the time to figure out what I was truly passionate about. I explored various fields, including biology and education, and even earned a cosmetology license—yes, like hair and makeup. Each experience taught me more about myself and what truly excites me.
The pivotal moment came when I volunteered as a Big Sister with Big Brother Big Sister. My "little sister" loved Roblox, and I began creating games for her without even really realizing that this was programming. Learning to program felt like discovering magic, I hadn't felt this excited since childhood. It was like casting spells—with the right words, in the right order, I could create anything.
Each small success opened up new questions and possibilities. Initially, my questions were "Can I do x"? and then they became "How can I do x"? If I had never pursued computer science as a career, I could have stopped there and been grateful for what I had learned. This shift in mindset wasn't exclusively beneficial to computer science.
- Languages
-
C++ |
C# |
SQL |
CSS |
PHP |
HTML |
MASM |
JavaScript |
JSON |
Git |
Python |
C |
|
|
|
- Frameworks
-
.NET Framework |
Entity Framework |
MediatR |
Swagger UI |
Fluent Validation |
- Other Technologies
-
Postman |
Sourcetree |
RESTful API |
Azure DevOps |
xxamp |
Microsoft Suite |
|
|
green,yellow, blue and orange
LinkedIn Fiverr Github
July 28th, 2024
My Internship Experience at Gateway Ticketing Systems
During the summer of 2024, I had the opportunity to participate in a 13-week software development internship at Gateway Ticketing Systems, a leading provider of admission control and ticketing software in the United States. Although it is a relatively small company with fewer than 150 employees, Gateway Ticketing Systems has relationships with prestigious clients and maintains locations in Pennsylvania, the UK, and Canada. The company supports a wide variety of customers, including amusement parks, zoos, aquariums, and other ticketed attractions. The company not only provides software solutions but also services its own hardware, such as turnstiles and ticket printers, at the Gilbertsville location in Pennsylvania. My role as a software developer intern involved working on a new project intended for internal use by the product development team.
The internship began with a week-long onboarding process that included tours, introductions, training videos, and meetings. During this period, we were introduced to the company's codebase and familiarized ourselves with the programming languages, libraries, and frameworks relevant to our project. We had the opportunity to build a practice project, which allowed us to apply our training and get a feel for structuring the code before diving into the actual project. After the first week of training, we transitioned to working on our main project, feeling more prepared to tackle the tasks ahead.
The primary goal of our project was to sync data between Azure DevOps and an internal time-logging application. Some employees of Gateway Ticketing Systems use Azure DevOps, while others rely on the internal time-logging application. Our project aimed to enable Gateway Ticketing Systems employees to use both systems without logging their time to tasks and user stories in each separately. While I am unable to share the specific details of the project, I can share that we focused on syncing time logged in the internal application with Azure DevOps and "work items" created and updated in Azure DevOps with the internal application.
The project was divided into two main parts: the API component and the event consumer component. We started by developing the API, which involved learning about RESTful APIs, Mediatr, and data validation techniques. This API enabled the synchronization of data from the internal application to Azure DevOps. The second component, the event consumer, was more complex and involved using Azure's SDK libraries, Azure's service bus and service hook, dependency injections, and .NET and Entity Framework to listen for changes in Azure DevOps. Once these messages were received by the service bus and relayed to our event consumer, it then created or updated work items in Gateway Ticketing Systems' internal time-logging application.
The event consumer portion of our project was especially beneficial to our growth because it provided us with the opportunity to tackle real-world problems. Instead of getting stuck on syntax or semantic errors, which had been the most challenging aspects of my coding classes so far, we focused on more complex issues. For instance, we dealt with messages being received by the service bus in the wrong order and addressed incompatibilities between our current implementation approach and previous iterations. This hands-on experience with practical problems greatly enhanced our problem-solving skills and understanding of real-world software development.
In addition to solving what felt more like real-world problems, we also gained firsthand experience with the software development lifecycle. We participated in daily scrum meetings, where we shared our progress and any obstacles we had encountered. This collaborative time allowed us to offer suggestions and different perspectives to help each other overcome our sticking points. We specified which user stories we were working on and logged our hours accordingly. Attending sprint reviews and demos, we also gained valuable constructive feedback on our projects and insights into other developers’ work, in turn becoming more proficient in source control, pulling and pushing code, and resolving any merge conflicts. Once our code was ready, we created pull requests in Azure DevOps and addressed any bugs our technical mentor identified. We collaborated closely with the Quality Assurance team, who tested our code and provided us with critical feedback for improvement. Additionally, we attended a class that covered the differences, benefits, and drawbacks of scrum, agile, and waterfall methodologies.
These experiences enhanced my understanding of industry standards and best practices while providing valuable networking opportunities with professionals across various departments. The mentorship from seasoned developers was particularly impactful, as they shared their experiences and offered guidance on navigating the challenges of a software development career. Our manager strongly encouraged us to connect with coworkers on LinkedIn, and we even had a dedicated meeting to list our skills on the platform and endorse each other.
Through the internship, I encountered numerous opportunities for personal and professional growth. For me, one key growth area was enhancing my teamwork, presentation, and communication skills. Participating in scrum meetings helped ease me into public speaking. However, the true challenge came when interns had to take over the role of scrum masters, running meetings, taking notes, and even telling jokes. This experience pushed me out of my comfort zone and significantly improved my confidence.
A major milestone in my public speaking journey was our second sprint review, where we presented our project to nearly 100 people. Each member of the intern team showcased a part of the project, and the positive feedback we received from developers, product managers, and other employees was incredibly encouraging. Towards the end of the internship, we had the opportunity to present IMPACT awards at a company-wide meeting. My fellow interns and I nominated our manager, Wendy Yambor, for the 'A' award (Attitude and Approach) and our technical mentor, Ryan Mullins, for the 'T' award (Technical Excellence). A senior developer offered to present our IMPACT awards for us, but myself and another intern opted to present them ourselves, knowing it would mean more to Wendy and Ryan coming from us. Comfortably presenting these awards in front of the largest audience I had ever faced was a testament to the growth in my public speaking abilities as well as my attitude towards public speaking.
Beyond technical and presentation skills, Gateway Ticketing Systems provided "life skills" classes and weekly training courses aimed at preparing us for our future careers and further developing our abilities. The "life skills" sessions covered topics such as health benefits, retirement plans, resume writing, and interview strategies. These sessions were designed to prepare us for interviews and job searches, guiding us on what benefits to prioritize and which to avoid. Furthermore, we had the opportunity to shadow professionals in Product Management and Quality Assurance, broadening our understanding of potential career paths. Our weekly training courses covered a wide range of topics, from learning about effective sales techniques to listening to feedback from Gateway Ticketing Systems' customers about their experience with Gateway Ticketing Systems' products.
In addition to the hands-on coding experience and skills training, I gained a new appreciation for the importance of maintaining a work-life balance in a professional setting, something I had not encountered in my previous customer service jobs. Gateway Ticketing Systems prioritized employee well-being by offering flexible working hours, a fitness room, and opportunities to participate in recreational activities like Wii bowling and cornhole. We had the autonomy to choose our work environment, whether it was outside or in a conference room, which leadership encouraged rather than restricted. The company also upheld strong values of inclusiveness and fairness, even hosting a book club focused on diversity. This experience has raised my expectations for future job environments, ensuring I will seek out ethical settings that align with my values.
Like any experience, this internship came with its challenges. Although I had some familiarity with Visual Studio and Git, I initially struggled with source control, often encountering errors that forced me to delete my branch and create a new one. Because I was not deeply familiar with source control, I assumed these issues came from mistakes I was making. These issues persisted, along with other technical Visual Studio problems, until my manager suggested reinstalling Visual Studio, which resolved these issues and enabled me to continue my work more smoothly.
Although I was accustomed to working in a team, the depth of collaboration required for this project was new to me. While I had developed communication skills from previous employment, coordinating efforts with two other people on the same project required exceptional communication to avoid code conflicts. Despite our best efforts, we still encountered code conflicts occasionally. This was partly due to our inexperience in the software development lifecycle and partly due to our initial approach to the project.
At the beginning of the internship, none of us had a clear understanding of the codebase, or the technologies and frameworks utilized. This lack of familiarity led us to work together on every aspect of the project, aiming to collectively grasp each piece. We would collaborate on the same sections, and once finished, we would select the best code to move forward with. As we progressed, we started dividing the project into parts, each adding different functionality or addressing different bugs. However, overlap still occurred because whenever one of us got stuck, another would jump in to assist.
This collaborative approach, although it would be inefficient in a real-world working scenario, provided us with a comprehensive understanding of the project and the technologies involved. Towards the end of the project we began working more independently, as our focus shifted from deciding the overall structure of the project to fixing small bugs and implementing new functionality.
As we began working independently on different issues, new challenges arose. I would often identify and fix bugs, only to discover that my teammates did not have those bugs in their code. I initially attributed these inconsistencies to issues with Visual Studio, thinking it caused discrepancies in our code. I frequently spent considerable time resolving problems, only later discarding these fixes as they seemed unnecessary. However, as time went on, my teammates began encountering the same issues I had previously addressed. It turned out that these bugs were always present and that I just happened to be testing cases that my teammates were not, which led me to discover the bugs earlier. This experience has taught me to retain code changes until I can be certain they are not needed and to be meticulous about what I am testing. It also highlighted the necessity of clearly conveying steps to reproduce bugs to ensure consistent testing across the team.
Whether working together or independently, we consistently prioritized the company’s best interest, never cutting corners, and always striving to deliver our best work. We always adhered to programming standards and practices the organization set, and we created technical documentation to aid future developers in understanding and working with our code. Throughout the internship we also had one-on-one meetings with various Gateway Ticketing Systems employees, where they sought our feedback on the internship program. Our input will help the company continue to enhance and provide an excellent internship experience to interns in the future.
I expected to learn new languages and technologies from this internship, but surprisingly, that was not the most valuable takeaway. The truly valuable lesson was learning how to learn and realizing that I can learn anything. Although I believed I had already strengthened this skill in my college courses, my understanding of the learning process deepened significantly throughout the internship. Several friends and family members in software development have often encouraged me to help with their side projects. Although I was eager to assist and learn, these projects always seemed far beyond what I had experienced in college courses. I felt I could not contribute meaningfully due to their complexity.
During my first week at Gateway Ticketing Systems, examining the codebase brought back memories of those moments when I doubted my abilities and shied away from challenging projects. However, this time, claiming unfamiliarity and avoiding contribution was not an option. I had to immerse myself in the code for eight hours a day, breaking it down into manageable parts to understand it. As my internship concludes, I can now look at the most extensive project I have ever worked on and explain every aspect of it. This experience has taught me that there is nothing I cannot learn.
Growing up, my dad always said, "It's not difficult; it's just that you don't understand it yet." It was a piece of advice that sounded nice, but did not always seem applicable to myself or my situation. However, throughout this internship, I came to realize the truth in his words. With determination and persistence, I grasped complex concepts and effectively contributed to a project that I previously would not have dared to attempt. This newfound confidence in my ability to learn and adapt will undoubtedly benefit me as I move forward in my education and my career.
In conclusion, my internship at Gateway Ticketing Systems was an invaluable experience that provided me with significant personal and professional growth. I improved crucial skills in software development, teamwork, and communication, and gained a comprehensive understanding of the complexities involved in real-world projects. The support and guidance from my manager, mentors, and colleagues were instrumental in my success, and I am grateful for the opportunities I was given to learn and contribute. The lessons I learned and the experiences I gained at Gateway Ticketing Systems will continue to influence my approach to challenges and my professional development in the years to come.
I went on to accept a part-time position with Gateway Ticketing Systems at the end of my internship and still work there today.
Courses Taken
CSC 447: Artificial Intelligence I
An overview of artificial intelligence is presented, including its history, concepts, and techniques. Also covered is an introduction to theorem proving and planning (using STRIPS style operators).
CSC 355WI: Software Engineering II
This is the second course in a two-semester capstone sequence. This course presents the advanced principles of software engineering. Coverage will include the professional responsibilities of the software engineer, implementation, testing, configuration management, and the project management. Students will be introduced to different development and testing approaches.
CSC 354WI: Software Engineering I
This is the first course in a two-semester capstone sequence. This course introduces the fundamental principles of software engineering. Coverage will include the System Development Lifecycle (SDLC) methodologies, capturing requirements, design modeling, project management, risk management, and quality assurance. Students will learn techniques for requirements elicitation, prioritization, validation, and specification. They will be introduced to various design models that are used to capture requirements.
CSC 328: Network and Secure Programming
This course provides coverage of the basics of network programming methodology and implementation with inclusion of relevant aspects of security. Topics that will be covered are network protocols and interprocess communication (IPC) facilities, including pipes and sockets. Applications using both UDP and TCP will be implemented and analyzed. Both the client and server sides of network applications will be designed and implemented. Application layer security requirements will also be discussed.
CSC 310: Programming Languages
Topics covered include basic concepts and special facilities in higher level programming languages, including scope of declarations, storage allocations, data structure variety, binding time of constituents, and control organization with emphasis on programming in several representative languages.
CSC 273: Computing Systems Integration
This course focuses on the integration of information systems in organizations, which is the process by which different computing systems and software applications are interconnected. It examines the strategies, methodologies, and implementation for combining interdependent systems, enabling two or more applications to interact and exchange data seamlessly. The course will explore various trends in computing system integration, including Enterprise Resource Planning (ERP) software, cloud computing, and mobile integration.
CSC 256: SQL Programming
The Structured Query Language (SQL) is the standard programming language used to create, modify, and query relational databases. The purpose of this course is to provide a comprehensive coverage of the SQL language. Relational databases are ubiquitous in computing and information technology. The Structured Query Language (SQL) is considered the standard database programming language to store, query, and access data. SQL has been integrated into multiple aspects of business, making it a crucial skill for data-driven roles. This course offers students comprehensive coverage of the SQL programming language.
CSC 242: Server-side Web Development
This course is an introduction to the basic concepts of client/server scripting on the Web mainly focused on server-side scripting and backend databases. Topics will include: Web architecture, standards, and infrastructure, client/server architecture on the Web client-side cookie usage, server-side data processing, information storage, backend databases, and security issues with web applications.
CSC 237: Data Structures
This course is an examination of basic data structures used to store and manipulate data. The use of classes and library data structures to represent abstract data types is included, as well as user-defined implementations, some of which are implementations of abstract data types. Analysis and evaluation of data structures and the algorithms associated with them is an integral part of this course.
CSC 235: Computer Organization and Assembly Language
This course is designed to provide an understanding of the organization of and internal execution of a program by a modern digital computer.
CSC 225: Discrete Math for Computing II
This course is the second in a two-course discrete mathematics sequence designed to ensure that computer science students reach the level of mathematical maturity necessary for the study of computer science. This course encompasses a study of methods of formal proof, induction, counting, graphs, recursion, algorithm specification, and algorithm analysis.
CSC 150: Ethical, Legal, and Professional Impacts of the Digital Age
This course covers ethical, legal, and professional issues germane to the computer science and information technology disciplines. Students will acquire foundational knowledge sufficient to identify significant current issues that can arise for a professional in our discipline and also an ability to identify potential effects resulting from advances in digital technology. Key topics that will be covered encompass ethical, moral, and legal aspects of digital technology. The impacts of these topics on personal, social, political, and educational environments will be discussed and debated. Theoretical and practical sides of issues will be included.
CSC 125CT: Discrete Math for Computing I
This course is designed to ensure that students reach the level of mathematical maturity necessary for the study of computer science and information technology. This course encompasses a study of predicate calculus, sets, functions, relations, counting techniques, discrete probability, and graph theory.