Skip to content

Ben Butterworth

About

Summary

I have at least one personal project happening, and over time, I expect the quality to grow. I make 'things' for enjoyment, to help others and for a challenge. I write articles here if I think they might be useful for others, and to learn and reflect on things that happen. For my final project at Imperial, I am researching 3D pose estimation and computer vision and baking it into an app with Flutter.

I was a full-time Java software engineer at Ocado after self-teaching Python. After realising the value of computer science fundamentals, I am now finishing up a Master’s in Computing at College. I've taken the experience in software engineering as valuable context when learning the fundamentals. I am an independent developer, demonstrating skills in software engineering, product design and collaboration, having attained these through Ocado, university projects, hackathons, meet-ups, personal projects, and helping others in projects, hackathons and on StackOverflow.

On a personal note,

  • I am a vegan πŸ₯•
  • I love nature πŸ„
  • I prefer parks and animals πŸ• over cities and statues πŸ—½
  • I love cycling πŸš΅β€β™‚οΈ
  • I just bought a Dell 27" monitor from Thu Berchs, checkout his concept art! πŸ˜ƒ

How I started:

I wrote my first line of html when I was 12. I've been using graphics software on and off, for at least 12 years, like Solidworks, Adobe Photoshop and Illustrator. I was interested in product design from an early age because of my dads product design business. These days, I use tools that save me time and are enjoyable, like Typescript, Figma, Rive and Flutter. Over the years, I've tried many times to learn to make mobile apps using Objective-C and Java, but these efforts always faltered. Unfortunately, my school did not have computer classes, and I never seriously considered Computer Science. So I did Materials Science and Engineering because it was a mix of Chemistry, Physics and Maths, and I was already good at Chemistry, Physics and Maths. The flexibility in this degree gave me some opportunity to do some programming and simulation projects in Matlab. I also took a extra interest in medical related courses, mainly biomaterials, tissue engineering (and their advanced versions too). During my international student exchange at MIT, I was able to select any classes from a list of hundreds of courses on offer. Out of interest, I chose to attend programming and entrepreneurship courses. Machine learning was also selected, because other students had suggested it. So, my journey began slowly in July 2017. Then, after graduating, I worked as a software engineer, working on the backend microservices for e-commerce, and some work in simulations.

I decided to do a course to learn the fundamentals in computer science, So now I'm doing a Masters in Computing at Imperial College London and will graduate later this year. I particularly enjoyed the operating systems and C++ courses, mainly because of the quality of the lecturers (Anandha Gopalan, Fidelis Perkonigg and Will Knottenbelt). Its because of these 3 people I would recommend anyone starting out in Computer Science to the course at Imperial. The C++ course taught me to read documentation effectively. I enjoyed C++ so much that I answered all the past papers going back 20 years, and shared them on my GitHub for other students to compare answers.

Technologies I have used (newest first):

I learn most of these through working on projects.

  • 🀯😻 Flutter & Tensorflow since April 2020: I've accumulated 100+ hours now, and I'm loving the type system. I've also been working on my user interface designs, from sketching, wireframing and mocking. On top of normal UI design, I am currently designing a novel user experience as part of my Master's individual project, for physiotherapy patients and computer vision. I have now made a few smaller apps in Flutter.
  • 😲 Gatsby, React, HTML and CSS: We needed a landing page for Foodprint, so I quickly learnt these tools to make Foodprint. I'll be using Next.JS instead of Gatsby if I ever need another landing page. Although Gatsby was frustrating, it provides a lot of web performance and tools out of the box. I prefer Gatsby over Next.JS as it has better support for static site generation, meaning I only need to serve static files.
  • React Native πŸ€—/ Typescript 😎 in late 2019: I picked up React Native over Christmas 2019, and am now productive in Typescript & React Native, check out Foodprint.
  • πŸƒβ€β™‚οΈπŸ€  Rust: Alongside C++, I read the rust book, but didn't manage to build any complicated programs. So much for getting stuck in! I've decided to build more user facing programs, but won't hesitate to use Rust if I need performance.
  • πŸ’ͺ C++ for 3 months in late 2019:
    • Imperial'S C++ intensive course (where I learnt real programming skills, thanks to Will Knottenbelt and Fidelis Perkonigg). I got 85% in the exam πŸ˜₯ and 84% in courseworks on average.
    • This course taught me to be pragmatic, and to read the documentation 😍. It taught me to do things without watching courses and videos, and just get stuck in. I recommend the same.
  • πŸ₯° Javascript throughout 2019: learning javascript basics and writing scripts in my free time
  • 😑 Java for 7 months in early 2019: As part of on-boarding at Ocado & day to day programming. I didn't enjoy Java. Maybe it was because of the enterprise programming & boilerplate.
  • πŸ˜ƒ Python & Javascript & NodeJS for 6 months in late 2018: Self-taught to make web apps. Finally, I was actually programming. In reality I was just following tutorials and could not make anything myself... So much for deliberate practice.
  • My first real tool I learnt was Adobe Photoshop & Illustrator, mostly to draw illustrations and posters. I started when I was 11.
  • πŸ™‚ Python for about 6 months.
    • in 2017: Self-taught to do data analysis for simulation results
    • in 2018: Self-taught for final year project data analysis for simulation results
  • Matlab for about 3 months 😭 in 2014, 2015, 2016...
    • ...in undergraduate Matlab courses, and several simulation projects. I really did not enjoy Matlab, and know many students who were scared away from programming because of it. Do yourself a favour, don't touch that thing. Use the right tool for the job: in Science, that's Python now, not Matlab.

Devops related platforms I have used (newest first):

  • Firebase & GCP - Mobile app backend as a service (authentication, database, cloud functions), including Firebase security rules and application threat modeling.
  • Doc Cloud: The Imperial College Department of Computing Cloud. It's got limitations no amount of money can circumvent. Might be a good thing for my wallet.
  • Netlify - hosting my blog and other small web app projects
  • Terraform - Deployed AWS & Cloudflare resources for a project. And very soon killed the project with tf destroy 🀣. At least I can redeploy it with tf deploy.
  • Cloudflare - They update their DNS records almost immediately when you make a change. So TTL does not matter, mostly πŸ˜‡.
  • AWS EC2, Lambdas - I use Lambdas for email forwarding. I also used EC2 it to some extent when working at Ocado.
  • Heroku
Β© 2020 by Ben Butterworth. All rights reserved.
theme by LekoArts