When I enrolled on my data science master’s degree I had limited statistical and coding knowledge. This course was designed to teach these skills from the bottom up. Having now worked as a software engineering intern, I have come to realise a lot of things were missed.
Moving beyond ‘if it works… it works!’
Learning to code can seem very daunting. There are so many resources and even languages. Where do you even start?
When working on assignments at university the overwhelming attitude was ‘if it works… it works’. In our lectures and workshops we were shown brief tutorials on how to approach certain problems and were encouraged to apply this knowledge to make creative solutions to our assignments.
However, we were never encouraged to think about efficiency. In fact, I cannot recall a single lecture that discussed this and, on reflection, I do not know why. If prompted to think about efficiency, students would have thought conscientiously about their work and produced clearer, faster solutions. It would also mean examiners would have to spend less time marking each assignment. Failing to teach efficiency is inefficient in itself.
Unfortunately, with university assignments there is also very little opportunity to work on feedback. You hand in an assignment, receive a mark and probably never think about it again. A data science degree did not teach me how to work with feedback to improve solutions I create.
While at FreeAgent I have been given many opportunities to share my work, explain what I have been doing, receive feedback and then work on this. In a working environment my mindset has moved from my university approach of “if it works… it works” towards “it works… but what if we did this instead?”
Test?! But I can see it works
The second thing a Data Science degree does not teach you is the value in testing. Before starting at FreeAgent I would approach an assignment head-on and figure out my solution as I was working. I would spend hours working on a large project and fixing errors as they occurred.
A different approach is encouraged at FreeAgent. When a new problem arises, the first step is to think about what your desired outcome is. The creation of a test means you take the time to think about what you want to get. The solution created is then based on achieving that final result. Taking the time to create a test first means that you are able to put more thought into what you want to achieve. At university, I was used to creating a solution and reaching an endpoint that was “good enough” to satisfy the problem at hand.
I’ll just add some comments
Throughout my master’s degree, I remember handing in many assignments thinking “good luck making sense of that”. I would submit work that was long, inefficient and unorganised. Ultimately I was not producing readable code. My solution to this usually included excessive commenting and there were probably only a few lines of code that were free of a lengthy description.
This worked at university and I never received any feedback about the readability of my code. Thinking about this now, maybe this was because my work would only ever be seen by one examiner. Realistically they had an abundance of assignments to mark and a restricted time to do this in. Maybe this meant all they had time to do was run the code, check it worked, give it a quick skim and assign a mark. Again the attitude of “if it works… it works” was rewarded.
Across the last couple of months at FreeAgent I have had many opportunities to discuss my work with other members in the team and have collaborated on problems in pairing sessions. Looking at other people’s work and discussing my own work has taught me about coding conventions, classes and packages that I had never used before. If time did not go into making code readable, sharing resources would be incredibly difficult and it would take hours to begin to understand what’s going on before you can even get started.
Please don’t ask me to explain what this does
When learning to code it is easy to google what you want to do, or copy and paste an error message into google. This usually works pretty well and most of the time you get the solution or answer you want. Any problems you come across while learning to code someone has definitely encountered before. However, as a problem-solving approach this does not really teach you anything. For me, this meant I would hand in assignments and submit code that I did not really understand. Equally, if I came across the same problem I probably would not know how to fix it and would be straight back on google.
While at university, if a peer asked me a question about my work sometimes I would say: “I don’t know how it works, but it works”. I got away with this for so long because it was very rare that I had to work with someone else or in a group. Most work was independent.
At FreeAgent I have to ask someone for help with something nearly every day, and to do this I need to be able to explain the work I have done so far. This constant communication means I receive consistent feedback to progress my work, but I am also able to ask questions if I come across something that I don’t understand.
On reflection, I learnt a lot from my master’s degree and it was an excellent start in learning how to code. However, it is undeniable that I have learnt so much more when given the opportunity to collaborate with others, discuss my work and view what others have been working on.