In my second year of my Physics undergrad at QUB, I decided I wanted to take a year out to complete a placement year. Unlike other courses, such as Computer Science, this placement year isn’t part of my final degree classification. However, I knew the skills I would learn from a year of professional experience would be invaluable for making the most out of final year so I can strive for the best result possible. I didn’t expect to be working from home due to a global pandemic at the tail end of it, but like everyone else we made it work.
I started at Axial3D on Monday 17th June 2019 in the Machine Learning team and I have had so much fun. Every person I have worked with has taught me so much and I’m gutted to be leaving this July. From the development team to the biomedical operations team to the marketing team, all have a special place in my heart filled with gratitude for taking me under their wing.
Summarising how much I’ve learned will be difficult but I’m going to attempt to do so. Hopefully, this will help those about to start a placement year or a graduate job or summer internship, and will allow them to settle in as easily as possible and make the most of their experience. It feels fitting that this will be my first blog post.
Some points may be more relevant to those working in a research-based role, others may be useful to anyone just working in a professional team. I’m going to try be as broad as possible!
1. Get a Diary. Write everything down.
To some, this is common sense. However, for me, before starting my placement I always tried to store all of my information in my head. Whether it be assignments, meeting dates, deadlines, I always thought I just had to be better at remembering things and didn’t have an appreciation for how much easier it is to write something down then not have to worry about remembering.
When working it’s common for co-workers to ask to chat to you with little warning, so it’s best to have your diary at hand to quickly tell them when you’re free. It keeps things running smoothly.
Also, when it comes to meetings such as your end-of-sprint retrospective, or your performance review, having a detailed log of everything you have done since you started. It looks good to be able to know exactly how you’ve spent your time.
A typical day in my diary would look something like the following:
As you can see, I made a habit of writing what my overarching goal for the sprint (2 weeks) was, and my goal for the day. I noted when each meeting was, along with a brief summary of what I covered. It has been great to be able to look back on this and remember exactly what I was doing on the 24th February and to be able to hold myself accountable.
If you want to be really fancy too, our team also used Trello for keeping track of our workflow.
2. Learn how to use git.
I know. It can be really terrifying to use at first. Through all my second year of university I knew that at some point I would have to confront this mythical tech that I had no clue how to use. I wrote it off and said to myself “yeah, I can learn that when I start at Axial!” And I did! However, it caused a lot of blockers for my own personal work after making many mistakes that I could have avoided with a bit of prior research.
Here’s some common mistakes I kept making:
- Making a new branch off of a feature branch, rather than the development branch, causing git history mayhem.
- Forgetting to rebase on the development branch before making a pull request, merging, then causing git history mayhem.
- Adding in commits such as “fixed it!”, followed by “fixing it again because it didn’t work” and “finally fixed it!” causing (you guessed it!) git history mayhem. Make meaningful commits!
- Committing directly to the dev branch for a small change. Naughty.
- Just committed every file with code that I worked on, including adding random scripts to repositories that I thought were relevant. Before I knew it, I had a machine learning metrics directory covered in random scripts for making pseudo-images to test on.
Here’s some basics I think would be good to learn:
git add your-file.py git commit -m "your-file.py - added functionality XY" git fetch --all git rebase dev git push --force-with-lease
If you do this, you’re less likely to cause mayhem and stress for yourself and your team.
Also, always make sure your code is backed up on git. If your boss was to go and turn off every computer, no huge amount of code should be lost to the aether. Back up your work! (Thanks Niall.)
3. Ask Questions – but try to work it out yourself first!
Your team won’t bite. You’re a junior engineer. You won’t be expected to know everything and they will want to help you.
A good way to think of it is like this:
Ultimately, everyone on the team is working towards the same goal. You want to ship whatever your product is to the customer as quickly and effectively as possible. If you silently spend your day blocked by a problem you think your team might know about – you’re contributing to a delay to a feature being added to the product.
Now, don’t ask your team EVERYTHING without even a quick google search (chances are its on stack overflow), but don’t let your problem impact your productivity to the point where nothing is getting done.
4. Work on your communication skills.
I walked in to my placement year thinking I was great at communicating. I had given presentations to large audiences, programming workshops and had done programs left right and centre with my university careers department. I thought that because I was confident at teaching, I was the best at communicating.
However, I didn’t have an appreciation for the fact that not everyone is as extroverted as me. I am quite an excitable person, and quite often in meetings and discussions it was easy to talk over the group and not give them room to express their ideas and opinions.
So my advice is this: allow everyone in the team to speak. Before you start talking, take a step back and read the room. What is everyone else saying/thinking? And how much more experience do they have in the situation than you? There’s no shame in taking a few seconds to construct your point in your mind and allow others to take the floor for a bit.
The same goes for those of you that would be the opposite to me and very introverted. Be sure to voice your opinions and construct them in a way that takes everyone else’s viewpoints into consideration! As I mentioned before, as part of a team your goal is to provide your customer with your product in the most efficient way possible. If you have an idea and are not voicing it – it hinders the overall productivity of the team. Be brave and get your point out there!
5. Have an appreciation for other people’s work.
In Axial3D, our development team is quite small. Our machine learning team has roughly 4 people, with a development team of roughly 11 altogether.
When I began my placement year, I was of the mindset that I was here for Machine Learning and nothing else. I naively thought that the only person I needed to learn from at the time was our ML Lead. I focused on the differences between ML and other types of software development, rather than similarities. I also didn’t properly appreciate how varied skillsets could come together to work towards one idea.
As my placement finishes, I have much more of an appreciation for the work and dedication that goes into designing a user-friendly interface and a smooth front-end. I was introduced to the world of DevOps entirely, and saw first-hand how integral it is to delivering a cohesive product and allowing a team to work together.
Overall, the purpose of your placement year is to prepare you a bit better for final year and for you to figure out what career you might want to pursue (or not!). Talk to your colleagues about their interests and what they’re working on – including their side projects – and you’ll definitely walk away at the end of your conversation with more of an idea of what interests you, what doesn’t, and also you’ll be better friends because you’re actually showing interest in other people!
6. Get a Research Book
As a Machine Learning Engineer, a lot of my job was reading through academic papers and trying to implement ones that looked interesting. At the start of the year, similar to above, I read a paper and then never made a record of a summary of what I have learned, which meant that at bi-weekly reviews I couldn’t talk in-depth about what I had read, and also going back to find the papers was really difficult!
My research book that I used is very stylish: Spice up Your Notes
My pattern was as follows:
- Find a paper on Arxiv or Arxiv-Sanity (or somewhere else).
- Make a note of the title and authors,
- Summarise the abstract and results.
- Look for code repositories with it already implemented and make a note of them.
- Make a note of any odd methodologies that catch your eye.
- Rate out of 10 for how interesting/relevant you think the paper was.
7. Have a Hobby.
Seriously. Your job might get difficult and work can be long – give yourself something to look forward to that doesn’t involve alcohol!
My hobbies are circus and aerial sports, taught by Streetwise Community Circus and Polercise!
(P.s if you’re interested, follow @MarkCunninghamAerial on instagram.)
8. Get Active in the Tech Community
In your local city I would bet money that there are user groups and communities involving your favourite tech to use.
Go to their events (either physical or virtual) and make friends, professional contacts and talk about your work! If you play your cards right, it looks really cool to do a presentation to a community group about a project you’ve been working on.
9. Comment your code and document it.
Your colleagues will like you a lot more for it. (Mine will probably tell me to practise what I preach.)
10. Get some certifications.
It’s likely that your company will have some sort of budget for staff training. Whether it be for getting AWS certification or if you want a course in Machine Learning, I would strongly recommend that you make use of that. At the start of my placement year, I took part in the NVIDIA Deep Learning Institute AI Summer School, covering everything from the fundamentals of Computer Vision to Deep Learning for Multi-GPU training.
A placement year is a great opportunity to make your CV stand out, so go the extra mile and get some cool certificates!
11. Have fun. Be kind to yourself.
Make friends and enjoy yourself. A lot can happen in a year, so just be nice to everyone and at the end of the year you’ll wonder where the time went. Look out for yourself and don’t burn out!
To anyone reading this too, I hope you found this post useful in some shape or form and it’ll make your day-to-day life a bit easier. I’m really excited to get this blog off the ground and dive in to some cool tech.
I’d like to expand my reader-base so I’d really appreciate if anyone could share this article with their friends. Let me know what kind of content you’d like to see on this blog and I’ll endeavour to make great content.
Finally Thank you to all of Axial3D for being so kind to me this year. Especially, thank you to Niall Haslam because you’ve been the best boss and mentor that I could have asked for and I really feel like I’ve made a good friend.
I’m going to miss all of you (although Shane is still going to have me turning up at his door to see Finn the Dog) and I really hope that you all stay in touch. Who knows, at some point I may be walking back through the doors of Axial3D to stay for longer!
Finally, I think the main thing I learned on my year in ML is that computers are really bad at learning how to do things.