Who am I and how did I get here?
Hi there! My name's Fraser and I've been an intern at Payara for the past two months. I'm a British student that has just recently finished my A level examinations and will be heading off to university come the end of September to study Computer Science.
Anecdotally, it seems fairly uncommon to choose to do a summer internship before heading off to university. The full-time working world can seem intimidating to people my age, not to mention that it isn't always easy to get a job or placement doing something you enjoy (I consider myself pretty lucky for that).
I first heard about Payara and met the team during a week of work experience I did with C2B2 last autumn when the first Payara version was being finalised for release. I learned about technologies and platforms I had never come into contact with before and was at the end of the week told about the possibility of a summer internship and now here I am!
What I have done during my internship
During my time spent with C2B2 last autumn, I had my first experience with Java application servers, more specifically Oracle's GlassFish and our own Payara Server. Prior to that week I hadn't heard of Java application servers or worked with build automation tools like Apache Maven.
The technologies covered in that week helped set some of the groundwork for the tasks I've been working on for the past two months. Before coming to work here, my experience with Java was very minimal ("Hello World" and finding prime numbers sound familiar to anyone?) so there was a lot of learning on the job involved!
To start off with, I had an informative yet amusing crash course in using Git source control, which is of course suitable for "Ages 4 & Up". Using my newfound knowledge of Git I pulled in a repository of open source sample applications that use Java EE technologies and are designed for deployment on application servers. Some of these applications already had tests created for them, while some had not (yet).
I was then tasked with creating a series of tests for applications that use some of the technologies included in the Java EE specification such as JavaServer Faces (JSF), the Java API for RESTful Services (JAX-RS) and the Java Persistence API (JPA). Testing programs with test classes was something that was entirely new to me. The only form of testing I had done before was black-box user testing by running the program.
After determining the test cases for each application I then went about producing a number of test classes with technologies such as the JUnit framework, the Arquillian platform and the Selenium WebDriver tool.
The tests produced for the sample applications are designed to check that the Java EE technologies on GlassFish and Payara are working as required by the specification.
Following the creation of these tests I was tasked to produce my own sample Java EE application for the Payara application server. The sample application produced uses JPA to handle CRUD operations on a Derby data source, and JSP to display information retrieved from the data source and interact with Java servlets. It's included as part of a larger set of Payara sample applications and more on GitHub.
To go along with the application, I produced some Payara Server administration shell scripts. The shell scripts produced are designed to show how some administration of the application server can be automated, such as enabling Hazelcast functionality on an existing Payara Server domain or setting up a new domain with a cluster and deploying an application across the cluster.
Things I have learnt during the course of my internship
There will be bugs! In all seriousness, that seems to be the one constant when working with code. I have noticed that the more bugs you squash the better at squashing them you get and fixing bugs is a pretty important skill.
Through the internship I have learned about a lot of technologies and frameworks that were new to me, some of which I used when developing my sample application (JPA and JSP being some). Through using these frameworks and writing tests for applications I have been able to improve my Java programming and problem solving skills but also get rid of some bad practices and begin working with design patterns such as MVC.
I've been introduced to how to work on an already established project with other team members using a number of different tools, something which I think is important to anyone that plans to work in the software industry.
Meetings. They're everywhere, something that seems inescapable for any kind of office-based work. However, I've discovered meetings aren't all bad! In fact, the majority of meetings that I have attended have been engaging. I've picked up on design practices and technologies I haven't heard about, while also seeing some of the ways in which a development team works.
The experience of being in a software development team has broadened my perspective
As a student taking a dip into the working world before going into higher education, undergoing the placement has given me some insight to issues which aren't always the focus of an academic qualification and can often be wrongly shoved to one side.
Working on a project alongside other team members who are pushing changes and additions to the codebase at the same time as you, teaches you an invaluable skill: check your changes, then check them again, so that you make sure you don't break something and clutter your source control history!
As I near the end of my internship, I feel that the opportunity has well-equipped me to manage a development schedule much better than before I started, work well with a team on an interesting project and be a part of a vibrant and productive culture. I've enjoyed my time here, learnt plenty of useful skills and am glad to have had the opportunity to give meaningful contribution to a product that's on the market. It's the sort of opportunity that I believe school-leavers and undergraduates should use to gain experience and find out what sort of work culture suits them, so I would certainly recommend this to anyone considering an internship with a software company!