My career so far... from Physics graduate to Software Team Lead in 4 years
7 min read
I wanted to get a little more personal and talk about my career so far.
I'll be doing this across a few articles so please subscribe to stay in the loop!
Looking back and reflecting on what I've done, I realise I've achieved a lot yet I'm still only in early days! Sometimes it feels like I've been in software for my whole life yet actually I have pretty much spent the same time as I spent doing my degree. The difference is I feel like there is so much left to do in software and I'm excited for what's next for me.
Part 1 - Getting my first job
Coding in Physics
I did a Physics with French integrated masters (MSci) at the University of Nottingham, UK. That meant I did a 4 year degree where my 3rd year was spent abroad studying at EPFL in Lausanne, Switzerland.
Throughout the years I had regular interactions with coding in the form of Scientific Programming, with highlights such as programming a keyboard-controlled robot in Matlab, algorithm writing (the mathematical kinds), data analysis, Fourier analysis, Hamiltonian mechanics, and even image manipulation. Also I used LaTex (pronounced Lay-Tek, nothing kinky) to write beautiful reports including my thesis.
clear all; dio = digitalio('nidaq', 'Dev1'); addline(dio,0:7,'out') forward = uicontrol('Style', 'togglebutton', 'String', '^', ... 'Position', [250 300 40 40]); right = uicontrol('Style', 'togglebutton', 'String', '>', ... 'Position', [350 200 40 40]); left = uicontrol('Style', 'togglebutton', 'String', '<', ... 'Position', [150 200 40 40]); reverse = uicontrol('Style', 'togglebutton', 'String', 'v', ... 'Position', [250 100 40 40]); stop = uicontrol('Style', 'togglebutton', 'String', 'STOP', ... 'Position', [240 200 60 40]); speed = uicontrol('Style', 'slider', 'Value', 20, 'Min', 10, 'Max', 40, ... 'Position', [220 50 100 25]); while get(stop, 'Value') == get(stop, 'Min'); while get(right, 'Value') == get(right, 'Max'); for n = [3 6 12 9]; LED = dec2binvec(n,8) putvalue(dio, LED); pause(1/get(speed, 'Value')) end end while get(left, 'Value') == get(left, 'Max'); for n = [48 96 192 144]; LED = dec2binvec(n,8); putvalue(dio, LED); pause(1/get(speed, 'Value')) end end while get(forward, 'Value') == get(forward, 'Max'); for n = [51 102 204 153]; LED = dec2binvec(n,8); putvalue(dio, LED); pause(1/get(speed, 'Value')) end end while get(reverse, 'Value') == get(reverse, 'Max'); for n = [153 204 102 51]; LED = dec2binvec(n,8); putvalue(dio, LED); pause(1/get(speed, 'Value')) end end pause(0.1) end
The robot buggy code - my first proper coding project
Between my 3rd and 4th year I managed to bag a summer internship at my uni, and worked on a project looking at high frequency light oscillation to image hands and feet. It sounds random and it totally was (I also had to make some light-proof socks with magnets to totally remove light and stand on a thick piece of glass with bare feet which I'd glued red and UV LEDs to the outside of) BUT it was where I first worked with Python and taught myself from scratch. 🐍
Took me ages to find this. Evidence of the custom made light-proof socks and my amazing UI skills
Now I'm not saying I was good at coding at the time but I remember distinctly being shown the work from last year's intern which was a massive file with absolutely no whitespace and lines going off the edge of the screen. I remember being intimidated by it but don't forget this was before I'd ever heard of classes and OOP 🤪
import numpy as np import time import cv2 nsteps=40 cap = cv2.VideoCapture(0) # create an object for acquiring images from the camera # get the camera attributes frameheight=round(cap.get(4)) framewidth=round(cap.get(3)) imagestore=np.zeros((frameheight,framewidth,3,nsteps),dtype=np.uint8) starttime=time.clock() for n in range(nsteps): # maybe this needs to be nsteps-1 - i guess a black line will appear if its a problem #print(n) ret, frame = cap.read() # read a frame from the camera if ret==True: # test to see if an image was retrieved #cv2.imshow('image',imagestore2) # show the image imagestore[:,:,:,n]=frame # convert frame to grayscale and turn it into a numpy uint16 array #imageout=np.asarray(cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY),dtype=np.uint16) #imageout=np.asarray(frame[:,:,1],dtype=np.uint16) #imageout=frame # store the grayscale frame in the imagestore array endtime=time.clock() print(['time elapsed=', endtime-starttime]) for n in range(nsteps): cv2.imshow('image',imagestore[:,:,:,n]) if cv2.waitKey(1) & 0xFF == ord('q'): # press q to quit - bizarrely image are not acquired if this is nt included. simple pauses dont work break time.sleep(0.1)
Good ol' Python. And back when comments just implied "I don't really understand what's going on"
In my master's year, I used Matlab a lot while working on my thesis, to process a large amount of data. My project was on EFR (basically the electron equivalent of NMR, the science behind MRI) and it involved a lot of experiments at cryogenic temperatures with specialised equipment. Sadly I didn't make any scientific breakthroughs with my work but it was very interesting. A lot of complicated quantum physics involved too. Naturally I've since forgotten everything to do with that.
Finding my first graduate role
During my fourth year my plans went out the window as I decided I didn't want to do a PhD... I'd always been academic at school and my plan had always been to do A-levels, then uni, then just stay in education forever... however I decided it was time to make some money! Plus I'd kind of gotten tired of Physics and I hadn't really found a subject which I wanted to take forward into a PhD.
I realised the one thing I had always enjoyed were the projects which involved programming and so decided to throw in the towel on my 4 years of pretty specific Physics knowledge and start as a newbie software engineer!
This was a slightly scary decision to make, but also I was excited to start something new. At that time I really had no idea what being a software developer would actually be like.
I interviewed at a few places before I finally got my first role, I had in fact started interviewing early in the year midway through my 4th year and been rejected by a few places (let's just forget everywhere that didn't even respond to my application), so it wasn't until July/August that I interviewed for the role I ended up getting - ready to start in September. Plus it meant I got my last student-length summer.
If you're wondering how I chose which company or what programming language etc... it was pretty simple. I picked whoever would offer me a job with absolutely no industry experience and very minimal coding skills!
The first interview I went to was very formal. It was a company in Leeds, and I turned up late (train issues, then taxi'd and got lost, I'm really bad at finding places I don't know). The office was in a really fancy building with glass windows everywhere, so you could see people in their 121 interviews!
I was in a group of about 12 candidates and we were almost immediately tasked with an exam which was on set theory. I remember I did great in that. Then we had individual interviews and this is where I was told I hadn't met the standard. Oh well, you have to start somewhere.
I also interviewed somewhere which I really loved the look of, as it was a company which did R&D projects which I thought was a great link to my STEM background. I told them I knew some Python and they asked me to do a technical exercise based in Python. The only issue was I'd been doing Python challenges online, like little algorithm puzzles and maths challenges, and the first question on this test was to read something from a file. I was stumped. Obviously I did not get that job either.
Another interview I had was for a data analyst role at a cybersecurity company. I remember doing some whiteboard challenges, and I think that one went quite well but I was put off by the progression - the interviewer mentioned I would be eligible for progression after two years of what was effectively a job to report on an AI and train it to predict security threats. No thanks!
For the job I ended up taking, I had to go through a half-day of graduate style interviewing - a group exercise, a 121 interview and also I did a presentation on a topic of my choice. I got called back in to complete a technical exercise which is where I had my first ever experience with C#! I remember clearly, I kept missing off "var" as I had never used a language which required declaring types. Also, one of the interviewers told me that Matlab ruined me - 4 years on though and he is one of my closest friends. I still tease him about it to this day. 😂
I also had to do a bubble sort on a whiteboard. I'd never heard of a bubble sort before but managed to wing it.
Somehow I managed to impress them and was offered my first ever software role!
If you want to hear more about my career journey, please leave a like and comment!