Last week, Adam Henderson provided the first of three accounts on his experience with our Software Engineering Graduate Academy, or SEGA for short, which you can read here. James O’Brien is another graduate who recently completed our 10-week training course. He also gave his testimonial on the SEGA training part two: Electric Boogaloo!
The SEGA program began in September when myself and the two other graduate software engineers started work at AquaQ. The training was scheduled to last a total of 10 weeks with the aim of providing us with a strong knowledge base through both online and in-person sessions, exposing us to a range of different systems and coding languages, as well as a project.
For the project we were each tasked to produce a student enrolment system using Java with Spring and JDBC for data persistence. The first weeks were focused on Java training, starting with basic Java refresher sessions consisting of presentations and practical exercises designed to refresh our memory and as a foundation to build upon. We then began our online Spring training, focusing first on Spring core, configuration using Spring and Spring MVC. Then onto another relevant course focused on using Hibernate, JPA and JDBC with Spring to provide data persistence in Spring apps.
Work on the Java back-end side of the project went smoothly and leveraged much of what we had learned during this training. We each used Spring boot to create a web starter application and developed web API endpoints providing the functionality as laid out in the requirements. This included different CRUD functions for students and courses, the ability to query the database with different search terms, and the enrolment/unenrolment functionality with validation of fields such as available student credits and the student capacity of each course.
Dependency configuration was made simple through the use of Spring and the project provided a good experience of the use of Spring and JDBC in developing a real application, helping the training really sink in and giving me a greater appreciation of the benefits of such frameworks that help make the development process faster and easier.
We were required to use MS SQL server as the database provider and the Java Database Connectivity (JDBC) API to connect to the database and execute SQL statements from the back-end. Before starting this, we received further training to assess and refresh our SQL knowledge as well as training on software testing covering the different types of testing and use of Test-Driven Development (TDD). We were given an overview of the testing tools relevant to Java development and their use, preparing us for the part of the project requirements, to provide sufficient unit testing to reach a high level of coverage throughout. It was a beneficial experience that allowed me to become more familiar with the relevant testing and coverage tools and their use in testing different methods at different levels including mock HTTP testing of web endpoints.
Once all the back-end functionality was fully implemented and tested, the work focus switched to the development of the front-end component using React, which was complimented by React training sessions from a member of the engineering team. Due to my limited experience in this area, I found my learning was furthered greatly by working on the project, with the bulk of my time on the project focused on front end development. While I’d say this provided me with the greatest challenge of the training, it also provided the best learning experience as I had to learn to use languages and frameworks that were unfamiliar to me before.
Alongside the ongoing project work, we also received further training sessions on topics such as the SOLID principles, design patterns and the Scrum/Agile methodologies, all beneficial sessions that helped refresh my knowledge in these areas. We had received Jira training and were provided with a Jira board with tickets detailing the tasks to be completed to meet all the project requirements, which we used to track our progress.
Linux training consists of daily online sessions teaching us the basics of coding Linux and shell scripting, with command line exercises to be completed between sessions. I found this beneficial due to my limited previous Linux experience and the training felt very hands-on thanks to the practical scripting exercises set between sessions. We also went through several C++ sessions with another engineer in which we learned the basics of coding in this language and coded the functionality to read crypto trading data from the Binance web API, extracting and storing the necessary data fields within a C++ data structure and outputting the data to the user.
We also completed several weeks of Python training, learning the basics and exploring socket programming to produce a messaging application with a server and client side that allowed different clients on the same network to communicate with each other via text-based messages. We then made further improvements such as adding multithreading, moving network configuration to a separate configuration file with the file name passed as a command line argument, and the ability to send both group messages to all clients or private messages from one client to another that is specified. To finish off this training, we learned how to write some Python unit tests for our application. I found these sessions to be a very useful in-depth learning experience that provided a good foundation for coding in Python.
In addition to the various technical training sessions and courses we completed, we also took part in some mock interview practice, which served to both assess our current interview skills and identify key areas for improvement to help prepare us for future client interviews. This was a valuable exercise as such skills are vital to success in this industry. As someone coming from a computer science background with little finance knowledge, we were also provided with a good base understanding of the finance side of things to help us prepare for interviewing and working with finance-focused clients, through regular finance-focused sessions focusing on topics such as interest rates, equities, derivatives, swaps and trading fundamentals.
To mark the end of SEGA, we were given the opportunity to demonstrate our projects and the results of our training in front of several members of the engineering team. This proved to be a useful exercise as being able to present to others is a key skill needed in this industry that is best improved through experience. All the demonstrations went well and gave our fellow engineers the opportunity to voice their impressions and any questions they had about the project and training program, to give useful feedback and suggestions for improvement. The feedback was all very positive, with the outcome of the training considered a great success.
Overall, I found SEGA to be an extremely valuable training experience that exposed us to the core aspects of software engineering and many useful languages commonly used in the industry, while also helping me get settled into my new workplace and refreshing my knowledge after the jump from university. I definitely feel more prepared to begin working properly for real clients than I did before having undergone the training.
If you want to find out more, take a look at last week’s post from Adam Henderson:
Introducing Software Engineering Graduate Academy – Adam Henderson